فهرست مطالب:

سیستم قطار هوشمند: 4 مرحله
سیستم قطار هوشمند: 4 مرحله

تصویری: سیستم قطار هوشمند: 4 مرحله

تصویری: سیستم قطار هوشمند: 4 مرحله
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, جولای
Anonim
سیستم قطار هوشمند
سیستم قطار هوشمند

طراحی شده برای افزایش ایمنی ، جلوگیری از تصادفات و افزایش پاسخ مثبت و سازنده برای کمک در صورت وقوع حوادث.

مرحله 1: قطعات و مواد

قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد
قطعات و مواد

تصاویر بالا به ترتیب لیست قطعات زیر قرار داده شده است:

فهرست قطعات

1) One Raspberry PI 3 - مدل B

2) یک تخته نان

3) کابل (از بالا به پایین) - One Power ، One Ethernet ، One Adapter

4) یک موتور سروو

5) یک دروازه راه آهن چاپ سه بعدی

6) دو LED (ترجیحا قرمز و سبز)

7) یک دکمه فشاری

8) ده سیم جامپر

9) چهار مقاومت

10) لپ تاپ یا رومیزی با متلب

مرحله 2: پیکربندی

پیکربندی
پیکربندی
پیکربندی
پیکربندی
پیکربندی
پیکربندی
پیکربندی
پیکربندی

در بالا تصاویری از پیکربندی از زوایای مختلف آمده است:

مکان های پین (حروف کوچک و شماره ردیف) به ترتیب زیر جریان فعلی ذکر شده است.

سیم ها:

j19 تا i47

j8 تا b50

b5 به سروو

c6 به سروو

b7 به سروو

a13 تا j7

a17 تا LED

LED تا a37

e40 تا j20

j53 تا j18

j7 به LED

LED تا j6

دکمه:

e54 تا h51

مقاومت ها:

d40 تا b37

c50 تا d54

i51 تا j47

مرحله 3: کد و منطق

کد و منطق
کد و منطق

هدف سیستم قطار ما افزایش ایمنی و کاهش خطر تصادفات مرگبار در گذرگاه های راه آهن است. به منظور دستیابی به این هدف ، سیستم ما دارای سیستم هشدار قطار برای رانندگان ، یک مانع فیزیکی است که برای جلوگیری از عبور خودروها از مسیر پایین می آید و یک دکمه اضطراری پشتیبان برای هادی در صورت خرابی سیستم هشدار اولیه.

سیستم عامل هادی GUI:

رابط کاربری گرافیکی ، که در بالا نشان داده شد ، برای استفاده از هادی ایجاد شده است زیرا آنها در حال حرکت قطار در مناطقی از مسیر هستند که دارای گذرگاه های راه آهن تردد خودرو هستند.

در گوشه سمت راست بالا ، چراغی وجود دارد که در صورت بسته شدن دروازه عبور راه آهن آینده ، هادی را مطلع می کند و به هادی اجازه می دهد در صورت نیاز دروازه را باز یا بسته کند. در زیر آن ، تغذیه دوربین هایی که قطار از آن عبور می کند نشان داده شده است. در گوشه سمت چپ پایین ، موقعیت قطار به طور مداوم بر روی نمودار رسم می شود و در زیر نمودار ، تعداد دورهایی که قطار طی یک روز انجام داده بود ، ذکر شده است. در بالای نمودار موقعیت ، یک دکمه اضطراری و بیانیه وضعیت وجود دارد. این امر به هادی اجازه می دهد تا در صورت وجود اتومبیل در پیست یا کار نکردن دروازه ایمنی به صورت اضطراری سیگنال دهد.

کد:

classdef micro <matlab.apps. AppBase٪ ویژگی هایی که مربوط به اجزای برنامه است

خواص (دسترسی = عمومی)

UIFigure matlab.ui. Figure

RailwaygatestatusLampLabel matlab.ui.control. Label

gateLamp matlab.ui.control. Lamp

دکمه OpenGateButton matlab.ui.control. Button

CloseGateButton matlab.ui.control. Button

UIAxes matlab.ui.control. UIAxes

EmergencyButtonStatusLampLabel matlab.ui.control. Label

EmergencyButtonStatusLamp matlab.ui.control. Lamp

UndernormalconditionsLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

برچسب matlab.ui.control. Label

پایان

خواص (دسترسی = خصوصی)

شمارنده int16

پایان

روش ها (دسترسی = عمومی)

تایمر عملکرد تماس (برنامه ، src ، رویداد)

app. Temp. Text = int2str (app.counter) ؛

app.counter = app.counter + 1؛

٪ همه متغیرهای برنامه را نیاز دارد - - - - - - - - - - - - - -

rpi جهانی

جهانی s

جهانی باز

بسته شدن جهانی

بادامک جهانی

جهانی م

ems جهانی

t_count جهانی

٪ ------------------------- بخش بازوی قطار --------------------- ---------

در صورت باز بودن == 0

writePosition (s، 50)

app.gateLamp. Color = 'سبز' ؛

پایان

اگر نزدیک == 0

writePosition (s، 120)

app.gateLamp. Color = 'قرمز' ؛

پایان

٪ ---------------------- تشخیص حرکت از طریق دوربین -----------------------

در حالی که حقیقت دارد

img = عکس فوری (cam) ؛

تصویر (img) ؛

برنامه UIAxes (drawnow)

پایان

٪ ---------------------- بازو بسته/بسته ----------------------- --------------

اگر readDigitalPin (rpi ، 20)> 1٪ پین 17 (دکمه) را خوانده و سیگنال را بررسی می کند

برای i = 40:.5: 150٪ پل را افزایش می دهد

writePosition (s، i)

پایان

برای i = 1:10٪ حلقه ها چشمک قرمز چندین بار چشمک می زنند

writeDigitalPin (rpi ، 13 ، 1)

مکث (.5)

writeDigitalPin (rpi ، 13 ، 0)

مکث (.5)

پایان

writePosition (s، 50)٪ gate put down

پایان

٪ -------------------- پشتیبانی تلفن همراه/طرح ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

داده = صفر (200 ، 1) ؛ ٪ intialize داده ها برای طرح نورد

شکل (برنامه UIAxes2)

p = نمودار (داده)

محور ([xbounda ، ybounds])

مکث (1)

تیک

در حالی که toc <30٪ به مدت 30 ثانیه اجرا می شود

[a ، ~] = accellog (m) ؛

اگر طول (a)> 200 باشد

data = a (end-199: end، 3)؛

دیگری

داده (1: طول (a)) = a (:، 3) ؛

پایان

درصد طرح مجدد

p. YData = داده ؛

کشیدن

پایان

٪ ------------------ تغییر ناگهانی پیکسل ---------------------------- ------

x1 = img؛ ٪ دوربین را از pi خاموش می خواند

red_mean = میانگین (میانگین (x1 (،،: ، 1))) ؛ ٪ میانگین مقدار پیکسل های قرمز را می خواند

green_mean = میانگین (میانگین (x1 (:،: ، 2))) ؛ ٪ میانگین مقدار پیکسل سبز را می خواند

blue_mean = میانگین (میانگین (x1 (،،: ، 3))) ؛ ٪ میانگین مقدار پیکسل های آبی را می خواند

if red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1؛

پایان

app. LoopsCompletedLabel. Text = num2str (t_count)

٪ ------------------ برنامه نویسی EMS دکمه ---------------------------- ---

configurePin (rpi ، 12 ، 'DigitalOutput') ؛ ٪ پین led ، پین 16 را به عنوان خروجی تنظیم می کند

configurePin (rpi ، 16 ، 'DigitalInput') ؛ ٪ پین دکمه ، پین 24 را به عنوان ورودی تنظیم می کند

buttonPressed = readDigitalPin (rpi ، 16) ؛ ٪ مقدار دکمه را در پین 16 می خواند

if buttonPressed == 1

while buttonPressed == 1

writeDigitalPin (rpi ، 12 ، 1)

buttonunPressed = writeDigitalPin (rpi ، 12 ، 0) ؛ ٪

end٪ به حلقه ‘while buttonPressed == 1’ ختم می شود

پایان

writeDigitalPin (rpi ، 16 ، 0) the هنگامی که دکمه دیگر setpref فشار داده نمی شود ، led را خاموش می کند ("اینترنت" ، "SMTP_Server" ، "smtp.gmail.com") ؛ setpref ("اینترنت" ، "E_mail" ، "[email protected]") ؛ ٪ ایمیل برای ارسال از setpref ("اینترنت" ، "SMTP_Username" ، "[email protected]") ؛ ٪ فرستنده نام کاربری setpref ("اینترنت" ، "SMTP_Password" ، "efgroup6") ؛ ٪ رمز عبور فرستندگان

props = java.lang. System.getProperties؛

props.setProperty ('mail.smtp.auth' ، 'true') ؛ props.setProperty ('mail.smtp.socketFactory.class' ، 'javax.net.ssl. SSLSocketFactory') ؛ props.setProperty ('mail.smtp.socketFactory.port' ، '465') ؛

sendmail ('[email protected] '،' وضعیت اضطراری! '،' هادی سوئیچ لغو دستی را فعال کرده است ، درخواست پاسخ فوری! ')

app. UndernormalconditionsLabel. Text = ems

پایان

پایان

٪ app. Label_4. Text = num2str (curr_temp) ؛

روش ها (دسترسی = خصوصی)

٪ کد که پس از ایجاد جزء اجرا می شود

عملکرد startupFcn (برنامه)

٪ ---------- همه متغیرهای مورد نیاز برای این تابع --------------------

rpi جهانی آردوینو

rpi = raspi ('169.254.0.2' ، 'pi' ، 'تمشک') ؛

s جهانی سروو

s = سروو (rpi ، 17 ، "MinPulseDuration" ، 5e-4 ، "MaxPulseDuration" ، 2.5e-3) ؛

جهانی باز

باز = 1؛

جهانی بسته شد

بسته = 1 ؛

بادامک جهانی

cam = cameraboard (rpi)؛

جهانی م

m = mobiledev؛

ems جهانی

ems = 'یک وضعیت اضطراری گزارش شده است ، به EMS اطلاع می دهد'؛

t_count جهانی

t_count = 0؛

کانکتور٪ password EFGroup6 است

٪ عملکرد تایمر برای حلقه --------------------------------

app.counter = 0؛

t = تایمر (…

'TimerFcn'، @app.timerCallback ،…

'StartDelay'، 1،… 'Period'، 1،…

'ExecutionMode' ، 'fixedSpacing' ،…

'TasksToExecute' ، inf) ؛

شروع (t) ؛

پایان

٪ عملکرد تابع تماس

تابع ManualOverrideSwitchValueChanged (برنامه ، رویداد)

پایان

٪ عملکرد دکمه را فشار می دهد: OpenGateButton

عملکرد OpenGateButtonPushed (برنامه ، رویداد)

بسته شدن جهانی

بستن = 0؛

پایان

٪ عملکرد دکمه را فشار می دهد: CloseGateButton

عملکرد CloseGateButtonPushed (برنامه ، رویداد)

جهانی باز

باز = 0 ؛

پایان

پایان

initial راه اندازی و ساخت برنامه

روش ها (دسترسی = خصوصی)

٪ UIFigure و کامپوننت ها را ایجاد کنید

تابع createComponents (برنامه)

٪ ایجاد UIFigure

app. UIFigure = uifigure؛

app. UIFigure. Position = [100 100 640 480]؛

app. UIFigure. Name = 'UI Figure'؛

٪ ایجاد RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure) ؛

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'راست'؛ app. RailwaygatestatusLampLabel. Position = [464 422 110 22]؛ app. RailwaygatestatusLampLabel. Text = 'وضعیت دروازه راه آهن'؛

٪ ایجاد gateLamp

app.gateLamp = uilamp (app. UIFigure) ؛

app.gateLamp. Position = [589 422 20 20] ؛

app.gateLamp. Color = [0.9412 0.9412 0.9412]؛

٪ ایجاد دکمه OpenGateButton

app. OpenGateButton = uibutton (app. UIFigure ، 'push') ؛

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (برنامه ،OpenGateButtonPushed ، true) ؛ app. OpenGateButton. Position = [474 359 100 22]؛

app. OpenGateButton. Text = 'باز کردن دروازه'؛

٪ ایجاد دکمه CloseGateButton

app. CloseGateButton = uibutton (app. UIFigure ، 'push') ؛

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (برنامه ،CloseGateButtonPushed ، true) ؛ app. CloseGateButton. Position = [474 285 100 22]؛

app. CloseGateButton. Text = 'بستن دروازه'؛

٪ ایجاد UIAxes

app. UIAxes = uiaxes (app. UIFigure) ؛

عنوان (برنامه UIAxes ، 'خوراک دوربین')

app. UIAxes. Position = [341 43 300 185] ؛

٪ ایجاد EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure) ؛ app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'راست'؛ app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]؛ app. EmergencyButtonStatusLampLabel. Text = 'وضعیت دکمه اضطراری' ؛

٪ ایجاد EmergencyButtonStatusLamp

app. EmergencyButtonStatusLamp = uilamp (app. UIFigure) ؛ app. EmergencyButtonStatusLamp. Position = [254 323 20 20]؛

٪ ایجاد UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure) ؛

app. UndernormalconditionsLabel. Position = [108 285 248 22]؛

app. UndernormalconditionsLabel. Text = 'در شرایط عادی'؛

٪ UIAxes2 ایجاد کنید

app. UIAxes2 = uiaxes (app. UIFigure) ؛

عنوان (برنامه. UIAxes2 ، "موقعیت قطار")

xlabel (برنامه UIAxes2 ، 'X Position')

ylabel (برنامه UIAxes2 ، "موقعیت Y")

app. UIAxes2. Box = 'روشن' ؛

app. UIAxes2. XGrid = 'روشن' ؛

app. UIAxes2. YGrid = 'روشن' ؛

app. UIAxes2. Position = [18 43 300 185] ؛

٪ ایجاد EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure) ؛

app. EF230Group6Label. HorizontalAlignment = 'مرکز' ؛

app. EF230Group6Label. FontSize = 28 ؛

app. EF230Group6Label. FontWeight = 'bold'؛

app. EF230Group6Label. Position = [-4 401 379 64]؛

app. EF230Group6Label. Text = 'EF 230 گروه 6' ؛

٪ ایجاد IanAllishKellyBondIanDaffronLabel

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure) ؛ app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]؛ app. IanAllishKellyBondIanDaffronLabel. Text = 'یان آلیش ، کلی باند ، یان دافرون' ؛

٪ ایجاد LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure) ؛

app. LoopsCompletedLabel. Position = [18 10 103 22]؛

app. LoopsCompletedLabel. Text = 'حلقه ها تکمیل شده اند:'؛

٪ ایجاد برچسب

app. Label = uilabel (app. UIFigure) ؛

app. Label. Position = [120 10 178 22]؛

app. Label. Text = '####'؛

پایان

پایان

روش ها (دسترسی = عمومی)

٪ برنامه ساخت

عملکرد برنامه = میکرو

Create ایجاد و پیکربندی اجزاء

ایجاد کامپوننت ها (برنامه)

٪ برنامه را با طراح برنامه ثبت کنید

registerApp (برنامه ، برنامه. UIFigure)

٪ عملکرد راه اندازی را اجرا کنید

runStartupFcn (برنامه ،startupFcn)

اگر nargout == 0

برنامه روشن

پایان

پایان

٪ کد که قبل از حذف برنامه اجرا می شود

حذف (برنامه)

٪ حذف برنامه UIFigure هنگام حذف برنامه

حذف (app. UIFigure)

پایان

پایان

پایان

مرحله 4: مرحله نهایی

مرحله نهایی
مرحله نهایی

پس از نوشتن کد و اتصال سیم Raspberry Pi ، موتور سروو را همانطور که در تصویر بالا ضمیمه شده است به دروازه راه آهن چاپ سه بعدی وصل کنید.

اکنون ، پروژه به پایان رسیده است. PI تمشک را به ریل قطار وصل کنید و سیستم جدید را مشاهده کنید که گذرگاه های راه آهن امن تری را برای رانندگان ماشین و هادی ها ایجاد می کند. با تعامل با GUI با سیستم بازی کنید تا گاوصندوق های خراب ایجاد شده برای جلوگیری از حوادث ایجاد شود.

این پایان آموزش است ، از سیستم جدید قطار هوشمند خود لذت ببرید!

توصیه شده: