Բովանդակություն:

Smart Train System: 4 քայլ
Smart Train System: 4 քայլ

Video: Smart Train System: 4 քայլ

Video: Smart Train System: 4 քայլ
Video: «Ֆասթ Կրեդիտ»-ն իր հերթական քայլն է կատարում բանկ վերափոխվելու ճանապարհին 2024, Հուլիսի
Anonim
Smart Train System
Smart Train System

Նախատեսված է անվտանգության բարձրացման, վթարների կանխարգելման և դժբախտ պատահարների դեպքում օգնելու դրական և արդյունավետ արձագանքի բարձրացման համար:

Քայլ 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- ը:

Խորհուրդ ենք տալիս: