Sisukord:

Nutikas rongisüsteem: 4 sammu
Nutikas rongisüsteem: 4 sammu

Video: Nutikas rongisüsteem: 4 sammu

Video: Nutikas rongisüsteem: 4 sammu
Video: Основные ошибки при возведении перегородок из газобетона #5 2024, November
Anonim
Nutikas rongisüsteem
Nutikas rongisüsteem

Mõeldud ohutuse suurendamiseks, õnnetuste ärahoidmiseks ning positiivse ja produktiivse reageerimise suurendamiseks õnnetuste korral.

Samm: osad ja materjalid

Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid
Osad ja materjalid

Ülaltoodud pildid on paigutatud alltoodud osade loendi järjekorda:

Osade nimekiri

1) Üks Vaarika PI 3 - mudel B

2) Üks leivalaud

3) Kaablid (ülevalt alla) - üks toide, üks Ethernet, üks adapter

4) Üks servomootor

5) Üks 3D -trükitud raudteevärav

6) Kaks LED -i (soovitavalt punane ja roheline)

7) Üks nupp

8) Kümme hüppajajuhet

9) Neli takistit

10) Sülearvuti või töölaud koos MATLAB -iga

2. samm: seadistamine

Seadistamine
Seadistamine
Seadistamine
Seadistamine
Seadistamine
Seadistamine
Seadistamine
Seadistamine

Ülal on pildid konfigureerimisest mitme nurga alt:

Nööpnõelte asukohad (väiketäht, millele järgneb rea number) on praeguses voos järgnevas järjekorras loetletud allpool.

Juhtmed:

j19 kuni i47

j8 kuni b50

b5 servole

c6 servole

b7 servole

a13 kuni j7

a17 kuni LED

LED kuni a37

e40 kuni j20

j53 kuni j18

j7 kuni LED

LED kuni j6

Nupp:

e54 kuni h51

Takistid:

d40 kuni b37

c50 kuni d54

i51 kuni j47

Samm: kood ja loogika

Kood ja loogika
Kood ja loogika

Meie rongisüsteemi eesmärk on suurendada ohutust ja vähendada potentsiaalselt surmavate õnnetuste ohtu raudteeülesõitudel. Selle saavutamiseks on meie süsteemis olemas juhtidele mõeldud rongi hoiatussüsteem, füüsiline tõke, mis on langetatud, et vältida autode rööbastee ületamist, ja varajase hoiatussüsteemi rikke korral juhile vajutatav hädaabinupp.

GUI dirigendi operatsioonisüsteem:

Ülaltoodud graafiline kasutajaliides on loodud konduktori kasutamiseks, kui nad sõidavad rongiga läbi rööbastee, kus on autoliiklusega raudteeülesõidud.

Parempoolses ülanurgas on tuli, mis teavitab konduktorit, kui eesolev raudteeületusvärav on suletud, ja võimaldab juhil vajadusel värava avada või sulgeda. Allpool on näidatud rongist mööduvate kaamerate voog. Vasakus allnurgas joonistatakse rongi asukoht pidevalt graafikule ja graafiku all on märgitud rongide päeva jooksul läbitud ringide arv. Asukohagraafiku kohal on hädaabinupp ja olekuavaldus. See võimaldab konduktoril hädaolukorrast märku anda, kui rajal on auto või turvavärav ei tööta korralikult.

Kood:

classdef micro <matlab.apps. AppBase % Atribuudid, mis vastavad rakenduse komponentidele

atribuudid (juurdepääs = avalik)

UIFigure matlab.ui. Joonis

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

Ebatavalised tingimusedLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Silt matlab.ui.control. Label

lõpp

atribuudid (juurdepääs = privaatne)

loendur int16

lõpp

meetodid (juurdepääs = avalik)

funktsiooni taimerCallback (rakendus, src, sündmus)

app. Temp. Text = int2str (rakendus.loendur);

rakendus.loendur = rakendus.loendur + 1;

%kutsub kõiki muutujaid, mida programm vajab - - - - - - - - - - - - - -

globaalne rpi

globaalne s

globaalne avatud

globaalne lähedus

globaalne nukk

globaalne m

globaalsed emid

globaalne t_count

%------------------------- Rongi käeosa --------------------- ---------

kui avatud == 0

writePosition (s, 50)

app.gateLamp. Color = 'roheline';

lõpp

kui lähedal == 0

writePosition (s, 120)

app.gateLamp. Color = 'punane';

lõpp

%---------------------- Liikumise tuvastamine kaamera kaudu -----------------------

kuigi tõsi

img = hetktõmmis (nukk);

pilt (img);

app. UIAxes (tõmmatud)

lõpp

%---------------------- Käsi lahti/kinni ----------------------- --------------

kui readDigitalPin (rpi, 20)> 1 %loeb tihvti 17 (nupp) ja kontrollib signaali

i = 40:.5: 150 %tõstab silda

writePosition (s, i)

lõpp

i = 1:10 %silmused vilguvad punase tulega x korda

writeDigitalPin (rpi, 13, 1)

paus (.5)

writeDigitalPin (rpi, 13, 0)

paus (.5)

lõpp

writePosition (s, 50)%pani värava alla

lõpp

%-------------------- Mobiiltelefonide tugi/maatükk ------------------------ -

m. AccelerationSensorEnabled = 1

m. logimine = 1

andmed = nullid (200, 1); %intialiseeri jooksva graafiku andmed

joonis (umbes. UIAxes2)

p = graafik (andmed)

telg ([xbounda, ybounds])

paus (1)

tic

samal ajal kui toc <30 %töötab 30 sekundit

[a, ~] = accellog (m);

kui pikkus (a)> 200

andmed = a (199-lõpp: lõpp, 3);

muidu

andmed (1: pikkus (a)) = a (: 3);

lõpp

%uuesti joonistada

p. YData = andmed;

tõmmatud

lõpp

%------------------ Äkiline pikslivahetus ---------------------------- ------

x1 = img; % loeb kaamera pi välja

red_mean = keskmine (keskmine (x1 (:,:, 1))); % loeb punaste pikslite keskmist kogust

roheline_mean = keskmine (keskmine (x1 (:,:, 2))); % loeb roheliste pikslite keskmist kogust

blue_mean = keskmine (keskmine (x1 (:,:, 3))); % loeb siniste pikslite keskmist kogust

kui red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

lõpp

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Nupp EMS programmeerimine ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %määrab väljundiks LED -tihvti, tihvti 16

configurePin (rpi, 16, 'DigitalInput'); %määrab sisendiks nööpnõela, tihvti 24

buttonPressed = readDigitalPin (rpi, 16); % Loeb nupu 16 vajutamise väärtust

kui nuppu vajutatakse == 1

nupu all olles == 1

writeDigitalPin (rpi, 12, 1)

buttonunPressed = writeDigitalPin (rpi, 12, 0); %

end % Lõpeb nupu vajutamise ajal == 1 'silmus

lõpp

writeDigitalPin (rpi, 16, 0) %Lülitab LED välja, kui nuppu enam ei vajutata setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % meilikonto saatmiseks aadressilt setpref ('Internet', 'SMTP_Username', '[email protected]'); % saatjate kasutajanimi setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Saatjate parool

rekvisiidid = 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] ',' Emergency Status! ',' Dirigent on aktiveerinud käsitsi alistamise lüliti, paludes kohest reageerimist! ')

app. UndernormalconditionsLabel. Text = ems

lõpp

lõpp

%app. Label_4. Text = num2str (curr_temp);

meetodid (juurdepääs = privaatne)

% Kood, mis käivitatakse pärast komponentide loomist

funktsioon startupFcn (rakendus)

%---------- Kõik selle funktsiooni jaoks vajalikud muutujad --------------------

globaalne rpi %arduino

rpi = raspi ('169.254.0.2', 'pi', 'vaarikas');

globaalne s %servo

s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);

globaalne avatud

avatud = 1;

globaalne suletud

suletud = 1;

globaalne nukk

nukk = kaameralaud (rpi);

globaalne m

m = mobiledev;

globaalsed emid

ems = 'On teatatud hädaolukorrast, millest teavitatakse EMS -i';

globaalne t_count

t_count = 0;

%parooli pistik on EFGroup6

Loopi taimeri funktsioon --------------------------------

rakendus.loendur = 0;

t = taimer (…

'TimerFcn', @app.timerCallback,…

„StartDelay”, 1,… „Periood”, 1,…

'ExecutionMode', 'fixSpacing',…

'TasksToExecute', inf);

algus (t);

lõpp

% Tagasihelistamise funktsioon

funktsioon ManualOverrideSwitchValueChanged (rakendus, sündmus)

lõpp

% Nupu vajutamise funktsioon: OpenGateButton

funktsioon OpenGateButtonPushed (rakendus, sündmus)

globaalne lähedus

sule = 0;

lõpp

% Nupu vajutamise funktsioon: CloseGateButton

funktsioon CloseGateButtonPushed (rakendus, sündmus)

globaalne avatud

avatud = 0;

lõpp

lõpp

% Rakenduse initsialiseerimine ja ehitamine

meetodid (juurdepääs = privaatne)

% UIFigure'i ja komponentide loomine

function createComponents (rakendus)

% Loo UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'Kasutajaliidese joonis';

% Loo RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'õige'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Raudteevärava olek';

% Loo gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

app.gateLamp. Color = [0,9412 0,9412 0,9412];

% Loo OpenGateButton

app. OpenGateButton = uibutton (app. UIFigure, 'push');

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (rakendus, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Avatud värav';

% Loo CloseGateButton

app. CloseGateButton = uibutton (app. UIFigure, 'push');

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (rakendus, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Sulge värav';

% UIAxide loomine

app. UIAxes = uiaxes (app. UIFigure);

pealkiri (app. UIAxes, 'Camera Feed')

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

% Loo EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'õige'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Hädaabinupu olek';

% Loo EmergencyButtonStatusLamp

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

% Loo UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Normaaltingimustes';

% Loo UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

pealkiri (u. UIAxes2, rongi asukoht)

xlabel (umbes. UIAxes2, 'X Position')

ylabel (app. UIAxes2, 'Y Position')

app. UIAxes2. Box = 'sees';

app. UIAxes2. XGrid = 'sees';

app. UIAxes2. YGrid = 'sees';

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

% Loo EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'keskus';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'paks';

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

app. EF230Group6Label. Text = 'EF 230 Group 6';

% Loo IanAllishKellyBondIanDaffronLabel

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

% Loo LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Loops Completed:';

% Loo silt

app. Label = uilabel (app. UIFigure);

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

app. Label. Text = '####';

lõpp

lõpp

meetodid (juurdepääs = avalik)

Rakenda rakendus %

funktsiooni rakendus = mikro

% Komponentide loomine ja konfigureerimine

createComponents (rakendus)

% Registreerige rakendus App Designeris

registerApp (rakendus, rakendus. UIFigure)

% Käivitage käivitusfunktsioon

runStartupFcn (rakendus, @startupFcn)

kui nargout == 0

selge rakendus

lõpp

lõpp

% Kood, mis käivitatakse enne rakenduse kustutamist

kustuta (rakendus)

% Kustuta UIFigure, kui rakendus kustutatakse

kustuta (app. UIFigure)

lõpp

lõpp

lõpp

4. samm: viimane etapp

Viimane samm
Viimane samm

Kui kood on kirjutatud ja Raspberry Pi on ühendatud, kinnitage servomootor 3-D trükitud raudtee rööbastee värava külge, nagu see on ülaltoodud pildil.

Nüüd on projekt lõpule viidud. Ühendage vaarika PI rongirajaga ja jälgige uut süsteemi, mis loob turvalisemad raudteeületuskohad nii autojuhtidele kui ka konduktoritele. Mängige süsteemiga, suheldes GUI -ga, et käivitada õnnetuste vältimiseks seatud tõrkeseifid.

Sellega on õpetus lõppenud, nautige oma uut nutikat rongisüsteemi!

Soovitan: