Orodha ya maudhui:
- Hatua ya 1: Sehemu na Vifaa
- Hatua ya 2: Usanidi
- Hatua ya 3: Kanuni na Mantiki
- Hatua ya 4: Hatua ya Mwisho
Video: Mfumo wa Treni mahiri: Hatua 4
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:52
Iliyoundwa ili kuongeza usalama, kuzuia ajali, na kuongeza majibu mazuri na yenye tija kusaidia ikiwa ajali zinatokea.
Hatua ya 1: Sehemu na Vifaa
Picha hapo juu zimewekwa kwa mpangilio wa Orodha ya Sehemu hapa chini:
Orodha ya Sehemu
1) Raspberry moja PI 3 - Mfano B
2) Bodi moja ya mkate
3) nyaya (kutoka Juu hadi chini) - Nguvu moja, Ethernet moja, Adapter moja
4) Moja Servo Motor
5) Lango moja la Reli la kuchapishwa la 3D
6) LED mbili (Ikiwezekana Nyekundu na Kijani)
7) Kitufe kimoja cha Bonyeza
8) waya kumi za jumper
9) Resistors nne
10) Laptop au Desktop na MATLAB
Hatua ya 2: Usanidi
Hapo juu kuna picha za usanidi kutoka kwa pembe nyingi:
Sehemu za pini (herufi ndogo ikifuatiwa na nambari ya safu) zimeorodheshwa hapa chini kwa kufuata mtiririko wa sasa.
Waya:
j19 hadi i47
j8 hadi b50
b5 kwa Servo
c6 kwa Servo
b7 kwa servo
a13 hadi j7
a17 hadi LED
LED hadi a37
e40 hadi j20
j53 hadi j18
j7 kwa LED
LED hadi j6
Kitufe:
e54 hadi h51
Kizuizi:
d40 hadi b37
c50 hadi d54
i51 hadi j47
Hatua ya 3: Kanuni na Mantiki
Lengo la mfumo wetu wa treni ni kuongeza usalama na kupunguza hatari za ajali zinazoweza kusababisha vifo kwenye njia za reli. Ili kufanikisha hili, mfumo wetu una mfumo wa onyo la treni kwa madereva, kizuizi cha mwili ambacho kinashushwa kuzuia magari kuvuka njia, na kitufe cha dharura cha dharura kwa kondakta kubonyeza ikiwa mfumo wa onyo la mapema unashindwa.
Mfumo wa Uendeshaji wa Kondakta wa GUI:
GUI, iliyoonyeshwa hapo juu, iliundwa kwa matumizi ya kondakta wanapokuwa wakiendesha gari moshi kupitia sehemu za njia ambazo zina vivuko vya reli ya trafiki ya gari.
Kona ya juu ya mkono wa kulia, kuna taa ambayo humjulisha kondakta ikiwa lango lijalo la njia ya reli limefungwa na kumruhusu kondakta kufungua au kufunga lango ikiwa inahitajika. Chini ya hayo, malisho kutoka kwa kamera ambazo kupita kwa gari moshi huonyeshwa. Kwenye kona ya chini kushoto, eneo la gari moshi linaendelea kupangwa kwenye grafu na chini ya grafu, idadi ya magurudumu ambayo treni ilikuwa imekamilisha kwa siku imeelezwa. Juu ya grafu ya msimamo, Kuna kitufe cha dharura na taarifa ya hali. Hii inaruhusu kondakta kuashiria dharura ikiwa kuna gari kwenye wimbo au lango la usalama halifanyi kazi vizuri.
Nambari:
classdef micro <matlab.apps. AppBase% Mali ambazo zinahusiana na vifaa vya programu
mali (Ufikiaji = umma)
UIFigure matlab.ui. Kielelezo
Huduma zote za mtandaoni
langoLamp matlab.ui.control. Lamp
OpenGateButton matlab.ui.control. Button
KaribuGateButton matlab.ui.control. Button
UIAxes matlab.ui.control. UIAxes
DharuraButtonStatusLampLabel matlab.ui.control. Label
DharuraButtonStatusLamp matlab.ui.control. Lamp
Hali isiyo ya kawaidaLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
Vitanzi vimekamilikaLabel matlab.ui.control. Label
Lebo ya matlab.ui.control. Label
mwisho
mali (Ufikiaji = faragha)
kaunta int16
mwisho
mbinu (Ufikiaji = umma)
kipima muda cha kazi Call (programu, src, tukio)
programu. Temp. Text = int2str (programu.counter);
programu.counter = app.counter + 1;
% piga vigezo vyote ambavyo programu inahitaji - - - - - - - - - - - - - -
rpi ya kimataifa
kimataifa s
kimataifa wazi
karibu duniani
cam ya kimataifa
kimataifa m
ems za ulimwengu
hesabu ya kimataifa
% ------------------------- Sehemu ya Jeshi la Treni -------------------- ---------
ikiwa wazi == 0
nafasi (s, 50)
app.gateLamp. Color = 'kijani';
mwisho
ikiwa karibu == 0
nafasi (s, 120)
app.gateLamp. Color = 'nyekundu';
mwisho
% ---------------------- Kugundua Mwendo kupitia Kamera -----------------------
wakati ni kweli
img = picha ndogo (cam);
picha (img);
programu. UIAxes (kisu)
mwisho
% ---------------------- Mkono wazi / funga ---------------------- --------------
ikiwa inasomaDigitalPin (rpi, 20)> 1% inasoma pini 17 (kifungo) na inakagua ishara
kwa i = 40:.5: 150% huinua daraja
andika Nafasi (s, i)
mwisho
kwa i = 1:10% vitanzi vinaangaza mwangaza mwekundu x kiasi cha nyakati
andikaDigitalPin (rpi, 13, 1)
pumzika (.5)
andikaDigitalPin (rpi, 13, 0)
pumzika (.5)
mwisho
writePosition (s, 50)% weka lango chini
mwisho
% -------------------- Usaidizi wa Simu ya Mkononi / Kiwanja -------- -
Kuongeza kasiSensorEnabled = 1
mlogging = 1
data = zero (200, 1); % intialize data kwa rolling njama
takwimu (programu. UIAxes2)
p = njama (data)
mhimili ([xbounda, ybounds])
pumzika (1)
tic
wakati toc <30% kukimbia kwa sekunde 30
[a, ~] = sifa (m);
ikiwa urefu (a)> 200
data = a (mwisho-199: mwisho, 3);
mwingine
data (1: urefu (a)) = a (:, 3);
mwisho
% kupanga tena njama
p. Yata = data;
onyesha
mwisho
% ------------------ Mabadiliko ya Pixel ya Ghafla ---------------------- ------
x1 = img; inasoma kamera mbali na pi
red_mean = maana (maana (x1 (:,:, 1))); % inasoma kiasi cha wastani cha saizi nyekundu
green_mean = maana (maana (x1 (:,:, 2))); % inasoma kiasi cha wastani cha saizi za kijani kibichi
blue_mean = maana (maana (x1 (:,:, 3))); % inasoma kiasi cha wastani cha saizi za bluu
ikiwa nyekundu_maana> 150 && green_mean> 150 && blue_mean> 150
hesabu = t_hesabu + 1;
mwisho
programu. LoopsCompletedLabel. Text = num2str (t_count)
% ------------------ Kifungo EMS programu ---------------------------- ---
sanidiPin (rpi, 12, 'DigitalOutput'); % huweka pini iliyoongozwa, pini 16, kama pato
sanidiPin (rpi, 16, 'DigitalInput'); % huweka pini ya kifungo, piga 24, kama pembejeo
kifungo kilichochapishwa = somaDigitalPin (rpi, 16); Inasoma kitufe cha waandishi wa habari juu ya pini 16
ikiwa kitufeBonyeza == 1
wakati kitufeBonyeza == 1
andikaDigitalPin (rpi, 12, 1)
buttonunPressed = kuandikaDigitalPin (rpi, 12, 0); %
end% Inaisha 'wakati kitufeBonyeza == 1' kitanzi
mwisho
writeDigitalPin (rpi, 16, 0)% Inaweka kuongozwa kuzima wakati kitufe kisichobanwa setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Mtandao', 'E_mail', '[email protected]'); Akaunti ya barua ya kutuma kutoka setpref ('Mtandao', 'SMTP_Username', '[email protected]'); % sentpref ya watumaji ('Mtandao', 'SMTP_Password', 'efgroup6'); Nenosiri la watumaji
props = java.lang. System.getProperties;
props.setProperty ('mail.smtp.auth', 'kweli'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); prop.setProperty ('mail.smtp.socketFactory.port', '465');
sendmail ('[email protected] ',' Hali ya Dharura! ',' Kondakta amewasha swichi ya kupuuza mwongozo, akiuliza majibu mara moja! ')
programu. Hali isiyo ya kawaidaLabel. Text = ems
mwisho
mwisho
% programu. Label_4. Text = num2str (curr_temp);
njia (Ufikiaji = faragha)
Nambari inayotekelezwa baada ya kuunda sehemu
kuanza kaziFcn (programu)
% ---------- Vigezo vyote vinahitajika kwa kazi hii --------------------
rpi ya kimataifa% arduino
rpi = raspi ('169.254.0.2', 'pi', 'rasipiberi');
servo ya kimataifa
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
kimataifa wazi
kufungua = 1;
Ulimwengu umefungwa
imefungwa = 1;
cam ya kimataifa
cam = cameraboard (rpi);
kimataifa m
m = mobilesev;
ems za ulimwengu
ems = 'Dharura imeripotiwa, ikiarifu EMS';
hesabu ya kimataifa
hesabu = 0;
kontakt kwenye nywila% ni EFGroup6
Kazi ya Timer kwa Kitanzi --------------------------------
programu.counter = 0;
t = kipima muda (…
'TimerFcn', @ app.timerCallback,…
'StartDelay', 1,… 'Kipindi', 1,…
'Njia ya Utekelezaji', 'fastaSpacing',…
'KaziToExecute', inf);
kuanza (t);
mwisho
Kazi ya kupiga simu tena
kazi MwongozoOverrideSwitchValueChanged (programu, tukio)
mwisho
Kitufe cha kushinikiza kazi: OpenGateButton
kazi OpenGateButtonPushed (programu, tukio)
karibu duniani
karibu = 0;
mwisho
Kitufe cha kushinikiza kazi: CloseGateButton
kazi CloseGateButtonPushed (programu, tukio)
kimataifa wazi
kufungua = 0;
mwisho
mwisho
Uanzishaji wa programu na ujenzi
njia (Ufikiaji = faragha)
Unda UIFigure na vifaa
kazi ya kuunda Vipengele (programu)
Unda UIFigure
programu. UIFigure = uifigure;
programu. UIFigure. Position = [100 100 640 480];
programu. UIFigure. Name = 'Kielelezo cha UI';
Kuunda RailwaygatestatusLampLabel
programuRailwaygatestatusLampLabel = uilabel (programu. UIFigure);
programu. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; programu. RailwaygatestatusLampLabel. Position = [464 422 110 22]; programu. RailwaygatestatusLampLabel. Text = 'Hali ya lango la Reli';
Unda Taa ya lango
app.gateLamp = uilamp (programu. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0.9412 0.9412 0.9412];
Unda Kitufe cha OpenGate
programu. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (programu, @OpenGateButtonPush, kweli); programu. OpenGateButton. Position = [474 359 100 22];
programu. OpenGateButton. Text = 'Open Gate';
Unda Kifungo cha Karibu
programu. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (programu, @CloseGateButtonPush, kweli); programu. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Funga Lango';
Kuunda UIAxes
programu. UIAxes = uiaxes (programu. UIFigure);
kichwa (programu. UIAxes, 'Kulisha Kamera')
programu. UIAxes. Position = [341 43 300 185];
Kuunda dharuraButtonStatusLampLabel
programu. EmergencyButtonStatusLampLabel = uilabel (programu. UIFigure); programuEmergencyButtonStatusLampLabel. HorizontalAlignment = 'kulia'; programu. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; programu. EmergencyButtonStatusLampLabel. Text = 'Hali ya Kitufe cha Dharura';
Unda Taa ya Dharura ya Kiwango cha Dharura
programu. EmergencyButtonStatusLamp = uilamp (programu. UIFigure); programu. EmergencyButtonStatusLamp. Position = [254 323 20 20];
Unda hali isiyo ya kawaidaLabel
programu. Usio wa kawaidaLabel = uilabel
programu. Hali zisizo za kawaidaLabel. Position = [108 285 248 22];
programu. Usio wa kawaidaLabel. Text = 'Katika hali ya kawaida';
Unda UIAxes2
programu. UIAxes2 = uiaxes (programu. UIFigure);
kichwa (programu. UIAxes2, 'Nafasi ya Treni')
xlabel (programu. UIAxes2, 'X Position')
ylabel (programu. UIAxes2, 'Y Position')
programu. UIAxes2. Box = 'on';
programu. UIAxes2. XGrid = 'on';
programu. UIAxes2. YGrid = 'kwenye';
programu. UIAxes2. Position = [18 43 300 185];
Kuunda EF230Group6Label
programu. EF230Group6Label = uilabel (programu. UIFigure);
programu. EF230Group6Label. HorizontalAlignment = 'center';
programu. EF230Group6Label. FontSize = 28;
programu. EF230Group6Label. FontWeight = 'ujasiri';
programu. EF230Group6Label. Position = [-4 401 379 64];
programu. EF230Group6Label. Text = 'EF 230 Kikundi 6';
Kuunda IanAllishKellyBondIanDaffronLabel
programu. IanAllishKellyBondIanDaffronLabel = uilabel (programu. UIFigure); programu. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; programu. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
Unda Kitanzi kilichokamilishwaLabel
programu. LoopsCompletedLabel = uilabel (app. UIFigure);
programu. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Vitanzi Vimekamilika:';
Unda Lebo
programu. Label = uilabel (programu. UIFigure);
programu. Label. Position = [120 10 178 22];
programu. Label. Text = '####';
mwisho
mwisho
mbinu (Ufikiaji = umma)
Jenga programu
programu ya kazi = micro
Kuunda na kusanidi vifaa
tengeneza vifaa (programu)
Sajili programu na Mbuni wa App
rejistaApp (programu, programu. Usasishaji)
Fanya kazi ya kuanza
runStartupFcn (programu, @startupFcn)
ikiwa nargout == 0
programu wazi
mwisho
mwisho
Nambari inayotekelezwa kabla ya kufutwa kwa programu
kufuta (programu)
Futa UIFigure wakati programu inafutwa
kufuta (programu. UIFigure)
mwisho
mwisho
mwisho
Hatua ya 4: Hatua ya Mwisho
Mara tu nambari imeandikwa na Raspberry Pi imefungwa waya, ambatanisha injini ya servo kwenye lango la reli ya 3-D iliyochapishwa kama ilivyoambatanishwa kwenye picha hapo juu.
Sasa, mradi umekamilika. Unganisha Risiberi PI kwenye wimbo wa treni na utazame mfumo mpya unaounda njia salama za reli kwa madereva wa gari na makondakta. Cheza na mfumo kwa kuingiliana na GUI ili kuchochea salama zilizowekwa ili kuzuia ajali.
Hiyo ndio mwisho wa mafunzo, furahiya Mfumo wako mpya wa Treni Smart!
Ilipendekeza:
Fanya Mfumo wa Kudhibiti Nyumba Mahiri kwenye Disp HMI Disp: Hatua 23
Tengeneza Mfumo wa Udhibiti wa Nyumba Mkondoni kwenye Disp HONE Disp: Utangulizi wa mradi
Mfumo wa Pazia mahiri: Hatua 4
Mfumo wa Pazia mahiri: Je! Ungependa mfumo mzuri wa pazia ambao hujifunga wakati chumba ni cha moto sana na mkali na pia inaweza kuidhibiti kwa mbali unapoenda? Hapa nitakuonyesha jinsi ya kufanya moja rahisi sana ~
Jinsi ya Kufanya Mfumo wa Alarm ya Kugundua Mafuriko Mahiri Kutumia Raspberry Pi na Argon Chembe: 6 Hatua
Jinsi ya Kufanya Mfumo wa Alarm ya Kugundua Mafuriko Mahiri Kutumia Raspberry Pi na Argon ya Particle: Kuwa na sensorer za kiwango cha mafuriko ni nzuri kuzuia uharibifu mkubwa kwa nyumba yako au mahali pa kazi. Lakini inafanya kuwa ngumu ikiwa hauko nyumbani kuhudhuria kengele. unaweza kununua hizo smart Mfumo huu wa kengele ya mafuriko hugundua kioevu chochote na husababisha
Mfumo wa Ufuatiliaji wa Treni: Hatua 5 (na Picha)
Mfumo wa Ufuatiliaji wa Treni: Mafundisho haya yatakufundisha jinsi ya kutumia MatLab kuweka nambari Arduino kudhibiti sehemu ya mfumo wa reli
Mfumo wa Kiti cha Treni: Hatua 4 (na Picha)
Mfumo wa Kiti cha Treni: Leo tumeunda mfumo ambao unaweza kutekelezwa katika viti vya gari moshi. Tulilazimika kupata kero na kuifanyia suluhisho. Tuliamua kuwa tutatengeneza mfumo unaokuambia ikiwa kiti kinapatikana katika gari la gari moshi uliko sasa. Hakuna kitu mo