Բովանդակություն:
Video: Smart Train System: 4 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Նախատեսված է անվտանգության բարձրացման, վթարների կանխարգելման և դժբախտ պատահարների դեպքում օգնելու դրական և արդյունավետ արձագանքի բարձրացման համար:
Քայլ 1: Մասեր և նյութեր
Վերոնշյալ նկարները տեղադրված են ստորև բերված Մասերի ցուցակի կարգով.
Մասերի ցուցակ
1) Մեկ ազնվամորի PI 3 - մոդել B
2) Մեկ տախտակ
3) մալուխներ (վերևից ներքև) `մեկ ուժ, մեկ Ethernet, մեկ ադապտեր
4) Մեկ սերվո շարժիչ
5) Մեկ եռաչափ տպված երկաթուղային դարպաս
6) Երկու LED (նախընտրելի է կարմիր և կանաչ)
7) Մեկ սեղմման կոճակ
8) Տասը Jumper լարերը
9) Չորս դիմադրություն
10) Նոթբուք կամ աշխատասեղան MATLAB- ով
Քայլ 2: Կազմաձևում
Վերևում կան բազմաթիվ անկյուններից կազմաձևման պատկերներ.
Պին տեղադրությունները (փոքրատառ, որին հաջորդում է տողի համարը) ստորև թվարկված են ընթացիկ հոսքին հաջորդող հաջորդականությամբ:
Լարերը:
j19- ից i47
j8- ից մինչև b50
b5 դեպի Սերվո
c6 դեպի Սերվո
b7 դեպի servo
a13- ից j7
a17 դեպի LED
LED- ից a37
e40 -ից j20
j53 -ից j18
j7 դեպի LED
LED- ից մինչև j6
Կոճակ:
e54- ից h51
Ռեզիստորներ.
d40- ից մինչև b37
c50- ից d54
i51- ից j47
Քայլ 3: Կոդ և տրամաբանություն
Մեր գնացքների համակարգի նպատակն է բարձրացնել անվտանգությունը և նվազեցնել պոտենցիալ մահացու վթարների վտանգը երկաթուղային անցումներում: Դրան հասնելու համար մեր համակարգն ունի վարորդների համար գնացքների նախազգուշացման համակարգ, ֆիզիկական պատնեշ, որը իջեցվում է ՝ մեքենաները չանցնելու համար ուղի, և պահեստային վթարային կոճակ, որը պետք է սեղմի դիրիժորը, եթե նախազգուշացման համակարգը խափանվի:
GUI դիրիժոր օպերացիոն համակարգ.
GUI- ն, որը ցույց է տրված վերևում, ստեղծվել է դիրիժորի օգտագործման համար, քանի որ նրանք գնացքը վարում են գծերի այն հատվածներով, որոնք ունեն մեքենաների երթևեկության երկաթուղային անցումներ:
Վերին աջ անկյունում կա մի լույս, որը հաղորդում է դիրիժորին, եթե երկաթուղու անցման դարպասը փակ է և թույլ է տալիս հաղորդիչին անհրաժեշտության դեպքում բացել կամ փակել դարպասը: Դրանից ներքև ցուցադրված է այն տեսախցիկներից, որոնցով անցնում է գնացքը: Ներքևի ձախ անկյունում գնացքի գտնվելու վայրը անընդհատ գծված է գրաֆիկի վրա, իսկ գրաֆիկի ներքևում նշվում է գնացքի մեկ օրվա ընթացքում կատարած պտույտների քանակը: Դիրքի գրաֆիկի վերևում կա արտակարգ իրավիճակների կոճակ և կարգավիճակի հայտարարություն: Սա թույլ է տալիս հաղորդիչին ազդանշան տալ արտակարգ իրավիճակի մասին, եթե ուղու վրա մեքենա կա, կամ անվտանգության դարպասը ճիշտ չի աշխատում:
Կոդ:
classdef micro <matlab.apps. AppBase % Հատկություններ, որոնք համապատասխանում են հավելվածի բաղադրիչներին
հատկություններ (մուտք = հանրային)
UIFigure matlab.ui. Նկար
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
գլոբալ ս
գլոբալ բաց
գլոբալ փակումը
գլոբալ տեսախցիկ
գլոբալ մ
գլոբալ ems
գլոբալ t_հաշիվ
%------------------------- գնացքի թևի բաժին --------------------- ---------
եթե բաց է == 0
writePosition (ներ, 50)
app.gateLamp. Color = 'կանաչ';
վերջ
եթե փակվի == 0
writePosition (ներ, 120)
app.gateLamp. Color = 'կարմիր';
վերջ
%---------------------- Շարժման հայտնաբերում տեսախցիկի միջոցով -----------------------
մինչդեռ ճշմարիտ է
img = լուսանկար (տեսախցիկ);
պատկեր (img);
հավելված. UIAxes (drawnownow)
վերջ
%---------------------- թևը բաց/փակ ----------------------- --------------
եթե readDigitalPin (rpi, 20)> 1 %-ը կարդում է pin 17 (կոճակը) և ստուգում է ազդանշանը
i = 40:.5: 150 %-ը բարձրացնում է կամուրջը
writePosition (ներ, i)
վերջ
i = 1:10 %հանգույցների համար կարմիր լույսը թարթում է x անգամ
writeDigitalPin (rpi, 13, 1)
դադար (.5)
writeDigitalPin (rpi, 13, 0)
դադար (.5)
վերջ
writePosition (ներ, 50)%դրեց դարպասը ներքև
վերջ
%-------------------- Բջջային հեռախոսի աջակցություն/սյուժե ------------------------ -
մ. Արագացման սենսոր Միացված = 1
մ. խցանում = 1
տվյալներ = զրոներ (200, 1); %intialize տվյալները շարժակազմի համար
գործիչ (հավելված. UIAxes2)
p = գծապատկեր (տվյալներ)
առանցք ([xbounda, ybounds])
դադար (1)
տիկ
մինչդեռ <30 %-ը աշխատում է 30 վայրկյան
[a, ~] = հավաքել (մ);
եթե երկարությունը (ա)> 200
տվյալներ = ա (վերջ-199: վերջ, 3);
ուրիշ
տվյալներ (1: երկարություն (ա)) = ա (:, 3);
վերջ
%վերագծել սյուժեն
p. Տվյալներ = տվյալներ;
ոչ -ոքի
վերջ
%------------------ Pixel- ի հանկարծակի փոփոխություն ---------------------------- ------
x1 = img; % -ը կարդում է pi- ի տեսախցիկը
red_mean = միջին (միջին (միջին (x1 (:,:, 1))); % -ը կարդում է կարմիր պիքսելների միջին քանակը
green_mean = միջին (միջին (միջին (x1 (:,:, 2))); % -ը կարդում է կանաչ պիքսելների միջին քանակը
blue_mean = միջին (միջին (միջին (x1 (:,:, 3))); % -ը կարդում է կապույտ պիքսելների միջին քանակը
եթե 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 = կարդալDigitalPin (rpi, 16); % Կարդում է կոճակը սեղմելու արժեքը 16 -րդ կապում
եթե buttonPressed == 1
while buttonPressed == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = գրելDigitalPin (rpi, 12, 0); %
վերջ % Ավարտվում է 'while buttonPressed == 1' հանգույցով
վերջ
writeDigitalPin (rpi, 16, 0) %Կարգավորումն անջատում է, երբ կոճակն այլևս չի սեղմվում setpref («Ինտերնետ», «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 %arduino
rpi = raspi ('169.254.0.2', 'pi', 'ազնվամորի');
գլոբալ s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
գլոբալ բաց
բաց = 1;
գլոբալ փակված
փակ = 1;
գլոբալ տեսախցիկ
տեսախցիկ = խցիկ (rpi);
գլոբալ մ
m = mobiledev;
գլոբալ ems
ems = 'Արտակարգ իրավիճակ է գրանցվել `EMS- ին ծանուցելով';
գլոբալ t_հաշիվ
t_հաշիվ = 0;
%գաղտնաբառի միակցիչը EFGroup6 է
% Erամաչափի գործառույթ հանգույցի համար ------------------------------------
app.counter = 0;
t = ժամաչափ (…
'TimerFcn', @app.timerCallback,…
«StartDelay», 1,… «Period», 1,…
«Կատարման ռեժիմ», «ամրագրված տարածություն»,…
'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 նկար';
% Ստեղծել 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, «հրում»);
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (հավելված, @OpenGateButtonPushed, ճշմարիտ); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Բաց դարպաս';
% Ստեղծել CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, «հրում»);
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (հավելված, @CloseGateButtonPushed, ճշմարիտ); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Փակել դարպասը';
% Ստեղծել UIAxes
app. UIAxes = uiaxes (app. UIFigure);
վերնագիր (հավելված. UIAxes, «Camera Feed»)
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 դիրք»)
ylabel (հավելված. UIAxes2, «Y Position»)
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 = 'համարձակ';
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 = 'Loops Completed:';
% Ստեղծել պիտակ
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
վերջ
վերջ
մեթոդներ (Մուտք = հանրային)
% Կառուցել հավելվածը
գործառական ծրագիր = միկրո
% Ստեղծեք և կազմաձևեք բաղադրիչներ
ստեղծել բաղադրիչներ (ծրագիր)
Գրանցեք ծրագիրը App Designer- ի հետ
registerApp (ծրագիր, ծրագիր. UIFigure)
% Կատարել գործարկման գործառույթը
runStartupFcn (ծրագիր, @startupFcn)
եթե nargout == 0
հստակ ծրագիր
վերջ
վերջ
% Կոդ, որը գործում է մինչև ծրագրի ջնջումը
ջնջել (հավելված)
% Leteնջել UIFigure- ը, երբ ծրագիրը ջնջվի
ջնջել (app. UIFigure)
վերջ
վերջ
վերջ
Քայլ 4: Վերջնական քայլ
Երբ ծածկագիրը գրված է և Raspberry Pi- ն միացված է, միացրեք սերվո շարժիչը եռաչափ տպված երկաթգծի դարպասին, ինչպես կցված է վերևի նկարում:
Այժմ նախագիծը ավարտված է: Միացրեք ազնվամորու PI- ն գնացքի գծին և դիտեք նոր համակարգը, որն ավելի անվտանգ երկաթուղային անցումներ է ստեղծում ինչպես մեքենաների վարորդների, այնպես էլ հաղորդիչների համար: Խաղացեք համակարգի հետ ՝ փոխազդելով GUI- ի հետ ՝ վթարները կանխելու համար ստեղծված չհրկիզվող պահարաններ հրահրելու համար:
Սա ուսումնական ձեռնարկի ավարտն է: Վայելեք ձեր նոր Smart Train System- ը:
Խորհուրդ ենք տալիս:
Switch-Adapt Toys: Steam Train Toy Made Accessible: 7 քայլ (նկարներով)
Switch-Adapt Toys: Steam Train Toy Made Accessible! Շատ դեպքերում այն երեխաները, ովքեր պահանջում են հարմարեցված խաղալիքներ, չեն կարողանում մտնել
Switch Adapt a Toy: WolVol Train Made Switch Accessible !: 7 քայլ
Switch Adapt a Toy: WolVol Train Made Switch Accessible !: Խաղալիքների ադապտացիան բացում է նոր ուղիներ և հարմարեցված լուծումներ, որոնք թույլ են տալիս սահմանափակ շարժունակությամբ կամ զարգացման արատներով երեխաներին ինքնուրույն շփվել խաղալիքների հետ: Շատ դեպքերում այն երեխաները, ովքեր պահանջում են հարմարեցված խաղալիքներ, չեն կարողանում մտնել
Smart Walkway Lighting System- Team Sailor Moon: 12 քայլ
Smart Walkway Lighting System- Team Sailor Moon: Hi! Սա Գրեյս Ռին, Սրիյեշ Կոնականչին և Խուան Լանդին են, և մենք միասին Team Sailor Moon- ն ենք: Այսօր մենք ձեզ կներկայացնենք երկու մասից բաղկացած DIY նախագիծ, որը կարող եք իրականացնել հենց ձեր տանը: Մեր վերջնական խելացի ճանապարհների լուսավորման համակարգը ներառում է մի փոքր
2019 FRC Writing a Simple Drive Train (Java) ՝ 5 քայլ
2019 FRC Writing a Simple Drive Train (Java). ԱՅՍ Խրատը դուրս է ամսաթվից: Խնդրում ենք ուշադրություն դարձրեք ընթացիկ 2019 -ի ծրագրավորման իմ հաջորդ հրահանգին: Չնայած այն ժամանակավրեպ է, դեռ կան բաներ, որոնց մասին կարող եք սովորել, օրինակ ՝ ինչպես իրականում դասեր պատրաստել և ծածկագիր գրել
Garden Train - Arduino Wireless NMRA DCC: 4 քայլ (նկարներով)
Այգու գնացք - Arduino Wireless NMRA DCC. Մահացած երկաթուղային համակարգի վերաբերյալ DCC- ի հետ նախորդ ուսուցումից հետո ես հետագա գաղափարը զարգացրել եմ ձեռքի DCC հրամանատարական կայանի միջոցով `ստեղնաշարով և LCD էկրանով: Հրամանատարական կայանը պարունակում է NMRA DCC հրահանգների համար անհրաժեշտ բոլոր ծածկագրերը, սակայն