Sisukord:
Video: Nutikas rongisüsteem: 4 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Mõeldud ohutuse suurendamiseks, õnnetuste ärahoidmiseks ning positiivse ja produktiivse reageerimise suurendamiseks õnnetuste korral.
Samm: 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
Ü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
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
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:
Nutikas vöö: 18 sammu
Nutikas vöö: mõne vidina kandmine on väga keeruline. Ausalt, selles projektis sain ema käest õmblemiseks abi, sest ma ei oska ise õmmelda. Olge õmblusmasinaga õmblemisel ettevaatlik. Kui teil pole kunagi õmblusmasinaga õmblemist kogenud, on see ka
Nutikas kodu Raspberry Pi poolt: 5 sammu (piltidega)
Nutikas kodu Raspberry Pi poolt: Seal on juba mitu toodet, mis muudavad teie korteri nutikamaks, kuid enamik neist on patenteeritud lahendused. Aga miks on vaja nutitelefoniga valguse vahetamiseks Interneti -ühendust? See oli üks põhjus, miks ma oma Smar'i üles ehitasin
Nexus 7 nutikas ümbris koos Sugru ja magnetiga: 5 sammu
Nexus 7 nutikas ümbris W/ Sugru ja magnetiga: varsti pärast seda, kui inimesed said Nexus 7 -le esmakordselt käe külge, leidis keegi, et see reageeris teatud piirkonnas asetatud magnetile, sarnaselt iPadi nutikastele ümbristele. Ühelgi juhtumist, mida ma nägin, seda ei olnud ja ma ei suutnud leida ühtki, mis avanes üleval nagu
Nutikas äratuskell: nutikas äratuskell, mis on valmistatud Raspberry Pi -ga: 10 sammu (koos piltidega)
Nutikas äratuskell: nutikas äratuskell, mis on valmistatud Raspberry Pi -ga: kas olete kunagi tahtnud nutikat kella? Kui jah, siis see on teie jaoks lahendus! Ma tegin nutika äratuskella, see on kell, mille abil saate äratusaega vastavalt veebisaidile muuta. Kui äratus hakkab tööle, kostab heli (sumin) ja 2 tuld
IoT -põhine nutikas aiandus ja nutikas põllumajandus, kasutades ESP32: 7 sammu
IoT -põhine nutikas aiandus ja nutikas põllumajandus, kasutades ESP32: maailm muutub ajaga ja nii ka põllumajandus. Tänapäeval integreerivad inimesed elektroonikat igas valdkonnas ja põllumajandus pole sellest erand. See elektroonika ühendamine põllumajanduses aitab põllumehi ja aedu haldavaid inimesi. Selles