Turinys:
- 1 žingsnis: dalys ir medžiagos
- 2 žingsnis: konfigūravimas
- 3 žingsnis: kodas ir logika
- 4 žingsnis: paskutinis žingsnis
Video: Išmanioji traukinių sistema: 4 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Sukurta siekiant padidinti saugumą, užkirsti kelią nelaimingiems atsitikimams ir padidinti teigiamą ir produktyvų atsaką, jei įvyktų nelaimingų atsitikimų.
1 žingsnis: dalys ir medžiagos
Aukščiau pateiktos nuotraukos išdėstytos dalių sąrašo tvarka:
Dalių sąrašas
1) Vienas Raspberry PI 3 - B modelis
2) Viena duonos lenta
3) Kabeliai (iš viršaus į apačią) - vienas maitinimas, vienas eternetas, vienas adapteris
4) Vienas servo variklis
5) Vieni 3D spausdinti geležinkelio vartai
6) Du šviesos diodai (pageidautina raudona ir žalia)
7) Vienas mygtukas
8) Dešimt trumpiklių
9) Keturi rezistoriai
10) Nešiojamasis kompiuteris ar stalinis kompiuteris su MATLAB
2 žingsnis: konfigūravimas
Aukščiau yra konfigūravimo nuotraukos iš kelių kampų:
Smeigtukų vietos (mažosios raidės, po kurių eina eilutės numeris) yra išvardytos žemiau eilės tvarka pagal dabartinį srautą.
Laidai:
nuo j19 iki i47
nuo j8 iki b50
b5 iki „Servo“
c6 iki „Servo“
b7 iki servo
nuo a13 iki j7
a17 į LED
Šviesos diodas iki a37
nuo e40 iki j20
nuo j53 iki j18
j7 į LED
Šviesos diodas iki j6
Mygtukas:
nuo e54 iki h51
Rezistoriai:
nuo d40 iki b37
nuo c50 iki d54
nuo i51 iki j47
3 žingsnis: kodas ir logika
Mūsų traukinių sistemos tikslas yra padidinti saugumą ir sumažinti galimų mirtinų nelaimingų atsitikimų geležinkelio pervažose riziką. Kad tai pasiektume, mūsų sistemoje yra traukinių įspėjimo sistema vairuotojams, fizinė kliūtis, kuri yra nuleista, kad automobiliai negalėtų kirsti bėgių kelio, ir atsarginis avarinis mygtukas, kurį konduktoriui paspausti, jei išankstinio įspėjimo sistema sugenda.
GUI konduktoriaus operacinė sistema:
GUI, parodyta aukščiau, buvo sukurta naudoti konduktoriui, kai jis važiuoja traukiniu per bėgių vietas, kuriose yra automobilių eismo geležinkelio perėjos.
Viršutiniame dešiniajame kampe yra lemputė, kuri praneša laidininkui, jei artėjantys geležinkelio pervažos vartai yra uždaryti, ir leidžia dirigentui prireikus atidaryti arba uždaryti vartus. Žemiau rodomas traukinių pravažiuojamų kamerų kanalas. Apatiniame kairiajame kampe traukinio vieta nuolat pavaizduota grafike, o po grafiku nurodomas traukinio įveiktų ratų skaičius per dieną. Virš padėties grafiko yra avarinis mygtukas ir būsenos pranešimas. Tai leidžia konduktoriui pranešti apie avariją, jei kelyje yra automobilis arba saugos vartai neveikia tinkamai.
Kodas:
classdef micro <matlab.apps. AppBase % Ypatybės, atitinkančios programos komponentus
ypatybės (prieiga = vieša)
UIFigrafija matlab.ui. Paveikslas
„RailwaygatestatusLampLabelLabel matlab.ui.control. Label“
gateLamp matlab.ui.control. Lamp
„OpenGateButton“matlab.ui.control. Button
CloseGateButton matlab.ui.control. Button
UIAxes matlab.ui.control. UIAxes
EmergencyButtonStatusLampLabelLabel matlab.ui.control. Label
EmergencyButtonStatusLamp matlab.ui.control. Lamp
Neįprastos sąlygosLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Etiketė matlab.ui.control. Label
galas
ypatybės (prieiga = privatus)
skaitiklis int16
galas
metodai (prieiga = vieša)
funkcijos laikmatisCallback (programa, src, įvykis)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%iškviečia visus programos kintamuosius - - - - - - - - - - - - - -
pasaulinis rpi
pasaulinis s
pasaulinis atviras
globalus uždarymas
pasaulinė kamera
pasaulinis m
pasaulinės ems
pasaulinis t_count
%------------------------- Traukinio svirties skyrius --------------------- ---------
jei atviras == 0
writePosition (s, 50)
app.gateLamp. Color = 'žalia';
galas
jei arti == 0
writePosition (s, 120)
app.gateLamp. Color = 'raudona';
galas
%---------------------- Judesio aptikimas per fotoaparatą -----------------------
kol tiesa
img = momentinis vaizdas (kumštelis);
vaizdas (img);
app. UIAxes (ištrauktas)
galas
%---------------------- Rankos atidarymas/uždarymas ----------------------- --------------
jei readDigitalPin (rpi, 20)> 1 %skaito 17 kaištį (mygtukas) ir tikrina signalą
i = 40:.5: 150 %pakelia tiltą
writePosition (s, i)
galas
i = 1:10 %kilpos mirksi raudona šviesa x kartų
writeDigitalPin (rpi, 13, 1)
pauzė (.5)
writeDigitalPin (rpi, 13, 0)
pauzė (.5)
galas
writePosition (s, 50)%uždėjo vartus
galas
%-------------------- Mobiliųjų telefonų palaikymas/sklypas ------------------------ -
m. „AccelerationSensorEnabled“= 1
m. užsikimšimas = 1
duomenys = nuliai (200, 1); %intializuokite riedančio sklypo duomenis
pav. (ap. UIAxes2)
p = sklypas (duomenys)
ašis ([xbounda, ybounds])
pauzė (1)
tikas
o toc <30 %veikia 30 sekundžių
[a, ~] = accellog (m);
jei ilgis (a)> 200
duomenys = a (199 pabaiga: pabaiga, 3);
Kitas
duomenys (1: ilgis (a)) = a (: 3);
galas
%perbraižytas siužetas
p. YData = duomenys;
ištrauktas
galas
%------------------ Staigus pikselių pasikeitimas ---------------------------- ------
x1 = img; % nuskaito fotoaparatą nuo pi
red_mean = vidurkis (vidurkis (x1 (:,:, 1))); % nuskaito vidutinį raudonų pikselių kiekį
žalia_reikšmė = vidurkis (vidurkis (x1 (:,:, 2))); % nuskaito vidutinį žalių pikselių kiekį
blue_mean = vidurkis (vidurkis (x1 (:,:, 3))); % nuskaito vidutinį mėlynų pikselių kiekį
jei red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
galas
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Mygtuko EMS programavimas ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %kaip išvestį nustato LED kaištį 16 kaištį
configurePin (rpi, 16, 'DigitalInput'); %nustato įvestį mygtuko kaištį 24 kaištį
buttonPressed = readDigitalPin (rpi, 16); % Skaito mygtuko paspaudimo vertę 16 kaištyje
jei paspaudžiamas mygtukas == 1
kai mygtukas nuspaustas == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
pabaiga % Baigiasi „mygtukas“Paspaudus == 1’kilpa
galas
writeDigitalPin (rpi, 16, 0) %Išjungia šviesos diodą, kai mygtukas nebespaudžiamas setpref ('Internetas', 'SMTP_Server', 'smtp.gmail.com'); setpref („Internetas“, „El. paštas“, „[email protected]“); % pašto paskyra, kurią reikia siųsti iš setpref ('Internetas', 'SMTP_Username', '[email protected]'); % siuntėjų vartotojo vardas setpref ('Internetas', 'SMTP_Password', 'efgroup6'); % Siuntėjų slaptažodis
rekvizitai = 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] ',' Avarinė būsena! ',' Dirigentas įjungė rankinio nepaisymo jungiklį, prašydamas nedelsiant reaguoti! ')
app. UndernormalconditionsLabel. Text = ems
galas
galas
%app. Label_4. Text = num2str (curr_temp);
metodai (prieiga = privatus)
% Kodas, kuris vykdomas sukūrus komponentą
funkcija startupFcn (programa)
%---------- Visi kintamieji, reikalingi šiai funkcijai --------------------
pasaulinis rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'avietinis');
pasaulinis s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
pasaulinis atviras
atviras = 1;
pasaulinis uždarytas
uždaryta = 1;
pasaulinė kamera
kamera = kamerų lenta (rpi);
pasaulinis m
m = mobiledev;
pasaulinės ems
ems = 'Buvo pranešta apie ekstremalią situaciją, apie kurią pranešama EMS';
pasaulinis t_count
t_count = 0;
%slaptažodžio jungtis yra EFGroup6
Ciklo laikmačio funkcija --------------------------------
app.counter = 0;
t = laikmatis (…
„TimerFcn“, @app.timerCallback,…
„StartDelay“, 1,… „Periodas“, 1,…
„ExecutionMode“, „fiksuotas tarpas“,…
„TasksToExecute“, inf);
pradžia (t);
galas
% Atšaukimo funkcija
funkcija ManualOverrideSwitchValueChanged (programa, įvykis)
galas
% Mygtuko paspaudimo funkcija: „OpenGateButton“
funkcija OpenGateButtonPushed (programa, įvykis)
globalus uždarymas
uždaryti = 0;
galas
% Mygtuko paspaudimo funkcija: CloseGateButton
funkcija CloseGateButtonPushed (programa, įvykis)
pasaulinis atviras
atviras = 0;
galas
galas
% Programos inicijavimas ir kūrimas
metodai (prieiga = privatus)
% Sukurkite UIFigure ir komponentus
funkcija createComponents (programa)
% Sukurkite UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'UI paveikslėlis';
% Sukurkite „RailwaygatestatusLampLabel“
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'teisinga'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Geležinkelio vartų būsena';
% Sukurti gateLamp
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0,9412 0,9412 0,9412];
% Sukurti „OpenGateButton“
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (programa, @OpenGateButtonPushed, tiesa); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Atidaryti vartai';
% Sukurti „CloseGateButton“
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (programa, @CloseGateButtonPushed, tiesa); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Uždaryti vartus';
% Sukurkite UIAx
app. UIAxes = uiaxes (app. UIFigure);
pavadinimas (app. UIAxes, „Camera Feed“)
app. UIAxes. Position = [341 43 300 185];
% Sukurti „EmergencyButtonStatusLampLabel“
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'teisinga'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Avarinio mygtuko būsena';
% Sukurti „EmergencyButtonStatusLamp“
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Sukurti nepaprastas sąlygasLabelė
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Normaliomis sąlygomis';
% Sukurkite UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
pavadinimas (ap. UIAxes2, „Traukinio padėtis“)
„xlabel“(app. UIAxes2, „X Position“)
ylabel (app. UIAxes2, „Y Position“)
app. UIAxes2. Box = 'įjungta';
app. UIAxes2. XGrid = 'įjungta';
app. UIAxes2. YGrid = 'įjungta';
app. UIAxes2. Position = [18 43 300 185];
% Sukurkite EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'centras';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'paryškinta';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 6 grupė';
% Sukurti IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Sukurti LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Užbaigtos kilpos:';
% Sukurti etiketę
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
galas
galas
metodai (prieiga = vieša)
% Konstruoti programą
funkcija app = micro
% Sukurkite ir sukonfigūruokite komponentus
createComponents (programa)
% Užregistruokite programą naudodami „App Designer“
registerApp (programa, programa. UIFigure)
% Vykdykite paleidimo funkciją
runStartupFcn (programa, @startupFcn)
jei nargoras == 0
išvalyti programą
galas
galas
% Kodas, vykdomas prieš ištrinant programą
ištrinti (programa)
% Ištrinti UIFigure, kai programa ištrinama
ištrinti (app. UIFigure)
galas
galas
galas
4 žingsnis: paskutinis žingsnis
Kai kodas bus parašytas ir „Raspberry Pi“prijungtas, pritvirtinkite servo variklį prie 3-D atspausdintų geležinkelio bėgių vartų, kaip parodyta paveikslėlyje aukščiau.
Dabar projektas baigtas. Prijunkite aviečių PI prie traukinio bėgių ir stebėkite naują sistemą, kuriančią saugesnes geležinkelio pervažas tiek automobilių vairuotojams, tiek konduktoriams. Žaiskite su sistema sąveikaudami su GUI, kad suaktyvintumėte neveikiančius seifus, kad išvengtumėte nelaimingų atsitikimų.
Tai pamokos pabaiga, mėgaukitės savo naująja „Smart Train System“!
Rekomenduojamas:
„IoT“pagrįsta išmanioji parkavimo sistema naudojant „NodeMCU ESP8266“: 5 žingsniai
„IoT“pagrįsta išmanioji parkavimo sistema naudojant „NodeMCU ESP8266“: šiais laikais labai sunku rasti automobilių stovėjimo aikštelę judriose vietose ir nėra sistemos, leidžiančios gauti išsamią informaciją apie automobilių stovėjimo aikštelę internete. Įsivaizduokite, jei galite gauti informaciją apie automobilių stovėjimo aikštelės prieinamumą savo telefone ir neturite tarptinklinio ryšio, kad patikrintumėte
Išmanioji užuolaidų sistema: 4 žingsniai
Išmanioji užuolaidų sistema: Ar norėtumėte išmanios užuolaidų sistemos, kuri užsidaro, kai kambarys yra per karštas ir šviesus, ir taip pat gali ją valdyti nuotoliniu būdu kelyje? Čia aš jums parodysiu, kaip tai padaryti labai paprasta ~
JK traukinių ir orų ekranas: 5 žingsniai
Jungtinės Karalystės traukinių ir orų ekranas: ši instrukcija skirta akumuliatoriumi varomiems JK traukinių išvykimams ir orų rodymui. Ji naudojo „National Rail OpenLDBWS“duomenų bazę, kad gautų informaciją apie konkrečios vietinės geležinkelio stoties traukinio išvykimą realiuoju laiku ir ją parodytų. Jis naudoja atvirą orą
Traukinių programavimo patobulinimai MATLAB: 6 žingsniai
Traukinių programavimo patobulinimai MATLAB: Tikslas: Šios užprogramuotos sistemos tikslas yra pažvelgti į nedidelio masto „Arduino“ir pritaikyti kodavimą didesniu mastu, kad būtų galima patobulinti tam tikras „Amtrak Railroad“sistemų saugos funkcijas. Norėdami tai padaryti, pridėjome dirvožemio drėgmės
Saugesnis ir geresnis: traukinių stočių saugumas: 7 žingsniai
Saugesnis, geresnis: geležinkelio stočių saugesnis: Daugelis geležinkelio stočių šiandien yra nesaugios, nes trūksta saugumo, kliūčių ir įspėjimo apie įvažiuojantį traukinį. Matėme, kad reikia tai ištaisyti. Norėdami išspręsti šią problemą, sukūrėme saugesnį. Mes naudojome vibracijos jutiklius, judesio jutiklius ir