Përmbajtje:
Video: Sistemi Smart i Trenit: 4 Hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:20
Projektuar për të rritur sigurinë, për të parandaluar aksidentet dhe për të rritur reagimin pozitiv dhe produktiv për të ndihmuar nëse aksidentet ndodhin.
Hapi 1: Pjesët dhe materialet
Fotografitë e mësipërme vendosen sipas renditjes së Listës së Pjesëve më poshtë:
Lista e Pjesëve
1) Një mjedër PI 3 - Modeli B
2) Një tabelë me bukë
3) Kabllot (nga lart poshtë) - Një fuqi, një Ethernet, një përshtatës
4) Një Servo Motor
5) Një Portë Hekurudhore e Shtypur 3D
6) Dy LED (mundësisht e kuqe dhe jeshile)
7) Një buton me një shtytje
8) Dhjetë tela kërcyes
9) Katër Rezistorë
10) Laptop ose Desktop me MATLAB
Hapi 2: Konfigurimi
Më sipër janë fotografitë e konfigurimit nga kënde të shumta:
Vendndodhjet e kunjave (shkronja e vogël e ndjekur nga një numër rreshti) janë renditur më poshtë sipas renditjes pas rrjedhës aktuale.
Telat:
j19 deri në i47
j8 deri në b50
b5 në Servo
c6 në Servo
b7 në servo
a13 deri j7
a17 në LED
LED në a37
e40 deri në j20
j53 deri në j18
j7 në LED
LED në j6
Butoni:
e54 deri në h51
Rezistentët:
d40 në b37
c50 deri d54
i51 deri në j47
Hapi 3: Kodi dhe Logjika
Qëllimi i sistemit tonë të trenave është të rrisë sigurinë dhe të ulë rrezikun e aksidenteve potencialisht vdekjeprurëse në vendkalimet hekurudhore. Për ta arritur këtë, sistemi ynë ka një sistem paralajmërimi të trenit për shoferët, një barrierë fizike që ulet për të parandaluar kalimin e makinave nga pista, dhe një buton urgjence rezervë që përcjellësi të shtypë nëse sistemi i paralajmërimit të hershëm dështon.
Sistemi operativ i përcjellësit GUI:
GUI, e treguar më lart, u krijua për përdorimin e përcjellësit ndërsa ata po ngasin trenin nëpër zona të shinave që kanë vendkalime hekurudhore të trafikut të makinave.
Në këndin e sipërm të djathtë, ka një dritë që njofton përcjellësin nëse një portë e ardhshme e kalimit hekurudhor është e mbyllur dhe lejon që përcjellësi të hapë ose mbyllë portën nëse është e nevojshme. Nën atë, tregohet ushqimi nga kamerat që kalon treni. Në këndin e poshtëm të majtë, vendndodhja e trenit është vizatuar vazhdimisht në një grafik dhe poshtë grafikut, tregohet numri i xhirove që treni kishte përfunduar në një ditë. Mbi grafikun e pozicionit, Ka një buton emergjence dhe deklaratë statusi. Kjo i lejon përcjellësit të sinjalizojë për një urgjencë nëse ka një makinë në shirit ose porta e sigurisë nuk po funksionon siç duhet.
Kodi:
classdef micro <matlab.apps. AppBase % Karakteristikat që korrespondojnë me përbërësit e aplikacionit
pronat (Qasja = publike)
UIFigura matlab.ui. Figura
HekurudhagatestatusLampLabel matlab.ui.control. Label
gateLamp matlab.ui.control. Lamp
Butoni 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
Kushtet nën normaleLabel matlab.ui.control. Etiketë
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Etiketa matlab.ui.control. Etiketë
fund
pronat (Qasja = private)
sporteli int16
fund
metodat (Qasja = publike)
kohëmatësi i funksionitCallback (aplikacion, src, ngjarje)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%thërrasë të gjitha variablat për të cilat ka nevojë programi - - - - - - - - - - - - - -
rpi globale
globale s
globale e hapur
mbyllje globale
kamera globale
globale m
ems global
numër global t_
%------------------------- Seksioni i krahut të trenit --------------------- ---------
nëse është e hapur == 0
shkruajPozita (s, 50)
app.gateLamp. Color = 'jeshile';
fund
nëse mbyllet == 0
shkruajPozicioni (et, 120)
app.gateLamp. Color = 'e kuqe';
fund
%---------------------- Zbulimi i lëvizjes përmes kamerës -----------------------
ndërsa e vërtetë
img = fotografi (kamera);
imazh (img);
aplikacioni. UIAxes (tani)
fund
%---------------------- Krahu hapur/mbyllur ----------------------- --------------
nëse readDigitalPin (rpi, 20)> 1 %lexon pin 17 (butoni) dhe kontrollon për sinjalin
për i = 40:.5: 150 %ngre urë
shkruajPozicioni (at, i)
fund
për i = 1:10 %sythe që pulsojnë dritën e kuqe x shumë herë
shkruajDigitalPin (rpi, 13, 1)
pauzë (.5)
shkruajDigitalPin (rpi, 13, 0)
pauzë (.5)
fund
writePosition (s, 50)%vënë portën poshtë
fund
%-------------------- Mbështetje/Komplot për telefonin celular ------------------------ -
m. Përshpejtimi SensorE aktivizuar = 1
m. bllokim = 1
të dhëna = zero (200, 1); %intializoj të dhënat për komplotin e rrotulluar
figura (aplikacioni UIAxes2)
p = komplot (të dhëna)
boshti ([xbounda, ybounds])
pauzë (1)
tik
ndërsa toc <30 %vrapon për 30 sekonda
[a, ~] = shtojcë (m);
nëse gjatësia (a)> 200
të dhëna = a (fund-199: fund, 3);
tjeter
të dhëna (1: gjatësia (a)) = a (:, 3);
fund
%komplot i rishikuar
p. YData = të dhëna;
tërheqje
fund
%------------------ Ndryshimi i papritur i pixel ---------------------------- ------
x1 = img; % lexon kamerën jashtë pi
e kuqe_kuptim = mesatarja (mesatarja (x1 (:,,, 1)))); % lexon sasinë mesatare të pikselave të kuq
gjelbër_kuptimi = mesatarja (mesatarja (x1 (:,,, 2))); % lexon sasinë mesatare të pikselëve të gjelbër
blu_kuptimi = mesatarja (mesatarja (x1 (:,,, 3))); % lexon sasinë mesatare të pikselëve blu
nëse red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
fund
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Programimi i butonit EMS ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %vendos pinin led, pin 16, si dalje
configurePin (rpi, 16, 'DigitalInput'); %vendos pinin e butonit, kunja 24, si hyrje
buttonPressed = lexoDigitalPin (rpi, 16); % Lexon vlerën e shtypjes së butonit në kunjin 16
nëse butoniPresuar == 1
ndërsa butoniPresuar == 1
shkruajDigitalPin (rpi, 12, 1)
buttonunPressed = shkruajDigitalPin (rpi, 12, 0); %
fund % Përfundon lakun 'while buttonPressed == 1'
fund
writeDigitalPin (rpi, 16, 0) %Vendos çaktivizimin e led kur butoni nuk shtypet më setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % llogari postare për t'u dërguar nga setpref ('Internet', 'SMTP_Username', '[email protected]'); % e dërguesit të emrit të përdoruesit setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Fjalëkalimi i dërguesve
props = java.lang. System.getProposies;
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] ',' Statusi i Urgjencës! ',' Përçuesi ka aktivizuar ndërprerësin manual të anulimit, duke kërkuar përgjigje të menjëhershme! ')
app. UndernormalconditionsLabel. Text = ems
fund
fund
%app. Label_4. Text = num2str (curr_temp);
metodat (Qasja = private)
% Kodi që ekzekutohet pas krijimit të komponentit
fillimi i funksionitFcn (aplikacioni)
%---------- Të gjitha ndryshoret e nevojshme për këtë funksion --------------------
rpi globale %arduino
rpi = raspi ('169.254.0.2', 'pi', 'mjedër');
global s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
globale e hapur
hapur = 1;
globale e mbyllur
mbyllur = 1;
kamera globale
kamera = kamera (rpi);
globale m
m = mobiledev;
ems global
ems = 'emergencyshtë raportuar një emergjencë, duke njoftuar EMS';
numër global t_
t_ numër = 0;
lidhësi në %fjalëkalimin është EFGroup6
% Funksioni i kohëmatësit për lak --------------------------------
app.counter = 0;
t = kohëmatës (…
'TimerFcn', @app.timerCallback,…
'StartDelay', 1,… 'Periudha', 1,…
'Modeli i Ekzekutimit', 'fiksimi i hapësirës',…
'TasksToExecute', inf);
fillimi (t);
fund
% Funksioni i përgjigjes
funksioni ManualOverrideSwitchValueChanged (aplikacion, ngjarje)
fund
% Button funksioni i shtyrë: OpenGateButton
funksioni OpenGateButtonPushed (aplikacion, ngjarje)
mbyllje globale
mbyll = 0;
fund
Funksioni % Button i shtyrë: CloseGateButton
funksioni CloseGateButtonPushed (aplikacion, ngjarje)
globale e hapur
hapur = 0;
fund
fund
% Fillimi dhe ndërtimi i aplikacionit
metodat (Qasja = private)
% Krijo UIFigure dhe komponentë
funksioni i krijuar Komponentët (aplikacioni)
% Krijo UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'Figura e UI';
% Krijo RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'djathtas'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Statusi i portës së hekurudhës';
% Krijo gateLamp
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Pozicioni = [589 422 20 20];
app.gateLamp. Ngjyra = [0.9412 0.9412 0.9412];
% Krijo butonin OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'shtytje');
app. OpenGateButton. ButtonPushedFcn = krijoCallbackFcn (aplikacioni, @OpenGateButtonPushed, true); app. OpenGateButton. Pozicioni = [474 359 100 22];
app. OpenGateButton. Text = 'Hap Portën';
% Krijo CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'shtytje');
app. CloseGateButton. ButtonPushedFcn = krijoCallbackFcn (aplikacioni, @CloseGateButtonPushed, true); app. CloseGateButton. Pozicioni = [474 285 100 22];
app. CloseGateButton. Text = 'Mbyll Portën';
% Krijo UIAxes
app. UIAxes = uiaxes (app. UIFigure);
titulli (aplikacioni. UIAxes, 'Camera Feed')
app. UIAxes. Pozicioni = [341 43 300 185];
% Krijo EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'djathtas'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Statusi i Butonit të Urgjencës';
% Krijo EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Pozicioni = [254 323 20 20];
% Krijo Etiketë Undernormalconditions
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Në kushte normale';
% Krijo UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
titulli (aplikacioni UIAxes2, 'Pozicioni i trenit')
xlabel (aplikacioni. UIAxes2, 'Pozicioni X')
ylabel (aplikacioni UIAxes2, 'Pozicioni Y')
app. UIAxes2. Box = 'aktiv';
app. UIAxes2. XGrid = 'aktiv';
app. UIAxes2. YGrid = 'aktiv';
app. UIAxes2. Pozita = [18 43 300 185];
% Krijo EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'qendra';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'bold';
app. EF230Group6Label. Pozicioni = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 Grupi 6';
% Krijo IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Krijo LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Loops Completed:';
% Krijo Etiketë
app. Label = uilabel (app. UIFigure);
app. Label. Pozicioni = [120 10 178 22];
app. Label. Text = '####';
fund
fund
metodat (Qasja = publike)
% Ndërto aplikacionin
aplikacioni i funksionit = mikro
% Krijo dhe konfiguro komponentët
krijo Komponentët (aplikacioni)
% Regjistroni aplikacionin me Projektuesin e Aplikacioneve
registerApp (aplikacioni, aplikacioni. UIFigura)
% Ekzekutoni funksionin e fillimit
runStartupFcn (aplikacioni, @startupFcn)
nëse nargout == 0
aplikacion i qartë
fund
fund
% Kodi që ekzekutohet para fshirjes së aplikacionit
fshi (aplikacionin)
% Fshi UIFigura kur fshihet aplikacioni
fshini (app. UIFigure)
fund
fund
fund
Hapi 4: Hapi i fundit
Pasi të jetë shkruar kodi dhe të jetë lidhur Raspberry Pi, bashkojeni servo motorin me portën hekurudhore të printuar 3-D siç është bashkangjitur në foton e mësipërme.
Tani, projekti ka përfunduar. Lidhni PI -në e mjedrës me shinën e trenit dhe vëzhgoni sistemin e ri që krijon vendkalime më të sigurta hekurudhore si për drejtuesit e makinave ashtu edhe për konduktorët. Luani me sistemin duke bashkëvepruar me GUI për të shkaktuar kasafortat e dështuara të vendosura për të parandaluar aksidentet.
Ky është fundi i mësimit, shijoni sistemin tuaj të ri Smart Train!
Recommended:
Treguesi i sediljeve të trenit: 6 hapa
Treguesi i Vendeve të Trenit: A ju ndodh kjo? Në pjesën e përparme të trenit njerëzit duhet të qëndrojnë, ndërsa në pjesën e fundit të trenit ka shumë karrige të pa zëna. Po sikur në pjesën e jashtme të trenit të ketë një tabelë që ju tregon se sa vende janë falas
Modeli i Automatizuar i Trenit të Modës (Versioni 1.0): 12 hapa
Modeli i Automatizuar i Trenit të Modelit (Versioni 1.0): Trenat e modelit janë gjithmonë kënaqësi të kesh dhe të vraposh. Por kontrolli i tyre me dorë ndonjëherë duket të jetë pak i mërzitshëm. Pra, në këtë udhëzues, unë do t'ju tregoj se si mund të automatizoni modelin tuaj të modelit hekurudhor, në mënyrë që të mund të uleni dhe të relaksoheni ndërsa shikoni
Sistemi i monitorimit të kalimit të trenit: 5 hapa (me fotografi)
Sistemi i monitorimit të kalimit të trenit: Ky udhëzues do t'ju mësojë se si të përdorni MatLab për të koduar një Arduino për të kontrolluar një pjesë të sistemit hekurudhor
Sistemi i ulëseve të trenit: 4 hapa (me fotografi)
Sistemi i ulëseve të trenit: Sot kemi bërë një sistem që mund të zbatohet në vendet e trenit. Duhej të gjenim një bezdi dhe të bënim një zgjidhje për të. Ne vendosëm që ne do të bënim një sistem që do t'ju tregonte nëse një vend është i disponueshëm në karrocën e trenit ku jeni aktualisht. Asgjë nuk është e vërtetë
Sistemi i Informacionit për Disponueshmërinë e Vendeve të Trenit - FGC: 8 Hapa
Sistemi Informativ i Disponueshmërisë së Vendeve të Trenit - FGC: Ky projekt bazohet në zbatimin, në një shkallë, të një treni që u lejon njerëzve që janë në stacion të dinë se cilat vende janë falas. Për të kryer prototipin, programi Arduino UNO përdoret së bashku me Përpunimin për