Tartalomjegyzék:
- 1. lépés: Alkatrészek és anyagok
- 2. lépés: Konfiguráció
- 3. lépés: Kód és logika
- 4. lépés: Utolsó lépés
Videó: Intelligens vonatrendszer: 4 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:42
Úgy tervezték, hogy növelje a biztonságot, megelőzze a baleseteket, és növelje a pozitív és produktív válaszadást, ha baleset történik.
1. lépés: Alkatrészek és anyagok
A fenti képek az alábbi alkatrészlistában találhatók:
Alkatrész lista
1) Egy málna PI 3 - B modell
2) Egy kenyeretábla
3) Kábelek (fentről lefelé) - egy tápellátás, egy Ethernet, egy adapter
4) Egy szervomotor
5) Egy 3D nyomtatott vasúti kapu
6) Két LED (lehetőleg piros és zöld)
7) Egy nyomógomb
8) Tíz jumper vezeték
9) Négy ellenállás
10) Laptop vagy asztali számítógép MATLAB segítségével
2. lépés: Konfiguráció
A fenti képek a konfigurálásról több szögből:
A csapok helyei (kisbetű, majd sorszám) az alábbiakban kerülnek felsorolásra az aktuális folyamatot követő sorrendben.
Vezetékek:
j19 -től i47 -ig
j8 -b50
b5 a szervóhoz
c6 a szervóhoz
b7 a szervóhoz
a13 -tól j7 -ig
a17 -től LED -ig
LED a37 -ig
e40 -j20
j53 -tól j18 -ig
j7 -ről LED -re
LED j6 -ig
Gomb:
e54 - h51
Ellenállások:
d40 -b37
c50 - d54
i51 - j47
3. lépés: Kód és logika
Vonatrendszerünk célja a biztonság növelése és a potenciálisan halálos balesetek kockázatának csökkentése a vasúti átjárókban. Ennek elérése érdekében rendszerünk vonat -figyelmeztető rendszerrel rendelkezik a járművezetők számára, egy fizikai akadályt, amelyet leeresztenek, hogy megakadályozzák az autók áthaladását a vágányon, és egy tartalék vészgombot, amelyet a karmesternek meg kell nyomnia, ha a korai figyelmeztető rendszer meghibásodik.
GUI Conductor operációs rendszer:
A fent bemutatott grafikus felhasználói felületet a konduktor használatára hozták létre, amikor a vonatot a pálya olyan területein vezetik, ahol személygépkocsi -forgalmi vasúti átjárók vannak.
A jobb felső sarokban van egy lámpa, amely értesíti a vezetőt, ha egy közelgő vasúti átjárókapu zárva van, és lehetővé teszi, hogy a vezető kinyitja vagy bezárja a kaput, ha szükséges. Ez alatt a vonat által elhaladó kamerák feedje látható. A bal alsó sarokban a vonat helyét folyamatosan ábrázoljuk egy grafikonon, a grafikon alatt pedig a vonat egy nap alatt megtett köreinek számát. A helyzetdiagram fölött vészhelyzeti gomb és állapotjelentés található. Ez lehetővé teszi, hogy a vezető jelezze a vészhelyzetet, ha autó van a pályán, vagy a biztonsági kapu nem működik megfelelően.
Kód:
classdef micro <matlab.apps. AppBase % Az alkalmazás összetevőinek megfelelő tulajdonságok
tulajdonságok (Hozzáférés = nyilvános)
UIFigure matlab.ui. Ábra
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
Nem normális feltételekLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Címke matlab.ui.control. Label
vége
tulajdonságok (Hozzáférés = privát)
számláló int16
vége
módszerek (Hozzáférés = nyilvános)
funkció időzítő Visszahívás (alkalmazás, src, esemény)
app. Temp. Text = int2str (app.counter);
kb.számláló = kb.számláló + 1;
%hívja meg a programnak szükséges összes változót - - - - - - - - - - - - - -
globális rpi
globális s
globális nyílt
globális zárás
globális kamera
globális m
globális ems
globális t_count
%------------------------- Vonókar szakasz --------------------- ---------
ha nyitott == 0
writePosition (s, 50)
app.gateLamp. Color = 'zöld';
vége
ha közel == 0
writePosition (s, 120)
app.gateLamp. Color = 'piros';
vége
%---------------------- Mozgásérzékelés kamerán keresztül -----------------------
míg igaz
img = pillanatkép (bütyök);
kép (img);
kb. UIAxes (húzott)
vége
%---------------------- Kar nyitva/zárva ----------------------- --------------
ha readDigitalPin (rpi, 20)> 1 %beolvassa a 17. tűt (gomb) és ellenőrzi a jelet
mert i = 40:.5: 150 %hidat emel
writePosition (s, i)
vége
mert i = 1:10 %hurok villogó piros fény x alkalommal
writeDigitalPin (rpi, 13, 1)
szünet (.5)
writeDigitalPin (rpi, 13, 0)
szünet (.5)
vége
writePosition (s, 50)%letette a kaput
vége
%-------------------- Mobiltelefon-támogatás/Telek ------------------------ -
m. AccelerationSensorEnabled = 1
m.logging = 1
adatok = nullák (200, 1); %intializálja az adatokat a gördülő ábrához
ábra (kb. UIAxes2)
p = diagram (adatok)
tengely ([xbounda, ybounds])
szünet (1)
tic
míg toc <30 %fut 30 másodpercig
[a, ~] = accellog (m);
ha hossza (a)> 200
adatok = a (199 vége: vége, 3);
más
adatok (1: hossz (a)) = a (:, 3);
vége
%újrarajzolás
p. YData = adatok;
vontatott
vége
%------------------ Hirtelen képpontváltás ---------------------------- ------
x1 = img; % leolvassa a kamerát a pi -ből
red_mean = átlag (átlag (x1 (:,:, 1))); % olvassa a piros pixelek átlagos mennyiségét
zöld_érték = átlag (átlag (x1 (:,:, 2))); % leolvassa a zöld pixelek átlagos mennyiségét
blue_mean = átlag (átlag (x1 (:,:, 3))); % leolvassa a kék képpontok átlagos mennyiségét
ha red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
vége
app. LoopsCompletedLabel. Text = szám2str (t_count)
%------------------ Gombos EMS programozás ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); A %kimenetként állítja be a 16 -os LED -es tűt
configurePin (rpi, 16, 'DigitalInput'); %a bemenetre állítja a 24 -es gomb gombját
buttonPressed = readDigitalPin (rpi, 16); % Olvassa el a gombnyomás értékét a 16 -os érintkezőn
ha gomb megnyomva == 1
gomb megnyomása közben == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % A gomb lenyomása közben ér véget == 1 'ciklus
vége
writeDigitalPin (rpi, 16, 0) %Kikapcsolja a ledet, ha a gombot már nem nyomja meg setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % mail fiók küldése a setpref -ből ('Internet', 'SMTP_Username', '[email protected]'); % senders uspre setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Küldők jelszava
kellékek = 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] ',' Sürgősségi állapot! ',' A karmester aktiválta a manuális felülbíráló kapcsolót, azonnali választ kér! ')
app. UndernormalconditionsLabel. Text = ems
vége
vége
%app. Label_4. Text = szám2str (curr_temp);
metódusok (Hozzáférés = privát)
% Kód, amely az összetevő létrehozása után fut
függvény startupFcn (alkalmazás)
%---------- A funkcióhoz szükséges összes változó --------------------
globális rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'málna');
globális s %szervó
s = szervo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
globális nyílt
nyitott = 1;
globális zárt
zárt = 1;
globális kamera
bütyök = kameralap (rpi);
globális m
m = mobildev;
globális ems
ems = 'Vészhelyzetet jelentettek, amely értesíti az EMS -t';
globális t_count
t_szám = 0;
%jelszó csatlakozója EFGroup6
% Időzítő funkció hurokhoz --------------------------------
kb. számláló = 0;
t = időzítő (…
'TimerFcn', @app.timerCallback,…
„StartDelay”, 1,… „Period”, 1,…
'ExecutionMode', 'fixSpacing',…
'TasksToExecute', inf);
start (t);
vége
% Visszahívási funkció
függvény ManualOverrideSwitchValueChanged (alkalmazás, esemény)
vége
% Gombnyomott funkció: OpenGateButton
függvény OpenGateButtonPushed (alkalmazás, esemény)
globális zárás
bezár = 0;
vége
% Gombnyomott funkció: CloseGateButton
függvény CloseGateButtonPushed (alkalmazás, esemény)
globális nyílt
nyitott = 0;
vége
vége
% App inicializálása és felépítése
metódusok (Hozzáférés = privát)
% UIFigure és összetevők létrehozása
function createComponents (alkalmazás)
% UIFigure létrehozása
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'UI ábra';
% RailwaygatestatusLampLabel létrehozása
app. RailwaygatestatusLampLabel = uilabel (kb. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'jobb'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Vasúti kapu állapota';
% GateLamp létrehozása
app.gateLamp = uilamp (kb. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0,9412 0,9412 0,9412];
% OpenGateButton létrehozása
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Nyitott kapu';
% CloseGateButton létrehozása
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Kapu bezárása';
% UIAx -ek létrehozása
app. UIAxes = uiaxes (kb. UIFigure);
cím (kb. UIAxes, 'Camera Feed')
app. UIAxes. Position = [341 43 300 185];
% Create EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'jobb'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Sürgősségi gomb állapota';
% EmergencyButtonStatusLamp létrehozása
app. EmergencyButtonStatusLamp = uilamp (kb. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% UndernormalconditionsLabel létrehozása
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Normál körülmények között';
% UIAxes2 létrehozása
app. UIAxes2 = uiaxes (kb. UIFigure);
cím (kb. UIAxes2, 'A vonat helyzete')
xlabel (kb. UIAxes2, 'X Position')
ylabel (kb. UIAxes2, 'Y Position')
app. UIAxes2. Box = 'be';
app. UIAxes2. XGrid = 'be';
app. UIAxes2. YGrid = 'be';
app. UIAxes2. Position = [18 43 300 185];
% EF230Group6Label létrehozása
app. EF230Group6Label = uilabel (kb. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'központ';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'félkövér';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 Group 6';
% Létrehozása IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (kb. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% LoopsCompletedLabel létrehozása
app. LoopsCompletedLabel = uilabel (kb. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Loops Completed:';
% Címke létrehozása
app. Label = uilabel (kb. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
vége
vége
módszerek (Hozzáférés = nyilvános)
% Alkalmazás létrehozása
függvény app = micro
% Alkotóelemek létrehozása és konfigurálása
createComponents (alkalmazás)
% Regisztrálja az alkalmazást az App Designer alkalmazásban
registerApp (app, app. UIFigure)
% Indítsa el az indítási funkciót
runStartupFcn (app, @startupFcn)
ha nargout == 0
tiszta alkalmazás
vége
vége
% Kód, amely az alkalmazás törlése előtt fut
törlés (alkalmazás)
% UIFigure törlése az alkalmazás törlésekor
törlés (kb. UIFigure)
vége
vége
vége
4. lépés: Utolsó lépés
Miután megírta a kódot és bekötötte a Raspberry Pi-t, csatlakoztassa a szervo motort a 3-D nyomtatott vasúti sínkapuhoz, ahogy az a fenti képen látható.
Most a projekt befejeződött. Csatlakoztassa a málna PI -t a vasúti pályához, és figyelje meg az új rendszert, amely biztonságosabb vasúti átjárókat hoz létre mind a gépkocsivezetők, mind a vezetők számára. Játsszon a rendszerrel úgy, hogy a GUI -val kölcsönhatásba lépve elindítja a balesetek megelőzésére beállított hibaszéfeket.
Ez az oktatóanyag vége, élvezze az új intelligens vonatrendszert!
Ajánlott:
Intelligens öv: 18 lépés
Intelligens öv: Néhány eszköz viselése nagyon nehéz. Őszintén szólva, ebben a projektben segítséget kaptam anyámtól, hogy varrja nekem a tokot, mert nem tudok egyedül varrni. Legyen óvatos, ha varrógéppel varr. Ha még soha nem tapasztalt varrást varrógéppel, akkor ez is
Hogyan barkácsoljunk intelligens redőnyöket SONOFF intelligens kapcsolókkal?: 14 lépés
Hogyan barkácsoljunk intelligens redőnyöket a SONOFF intelligens kapcsolókkal?: Használja a reteszelés módot a SONOFF intelligens kapcsolókban, hogy a szokásos redőnyöket/redőnyöket intelligensekké tegye és este lehúzni? Egyébként én
Intelligens ébresztőóra: Raspberry Pi -vel készült intelligens ébresztőóra: 10 lépés (képekkel)
Intelligens ébresztőóra: Raspberry Pi -vel készült intelligens ébresztőóra: Szeretett volna valaha okos órát? Ha igen, akkor ez a megoldás az Ön számára! Készítettem intelligens ébresztőórát, ez egy óra, amellyel megváltoztathatja az ébresztési időt a webhely szerint. Amikor a riasztó megszólal, hangjelzés (csipogó) és 2 lámpa hallatszik
IoT alapú intelligens kertészet és intelligens mezőgazdaság ESP32 használatával: 7 lépés
IoT alapú intelligens kertészet és intelligens mezőgazdaság ESP32 használatával: A világ idővel változik, és így a mezőgazdaság is. Manapság az emberek minden területen integrálják az elektronikát, és ez alól a mezőgazdaság sem kivétel. Az elektronika egyesülése a mezőgazdaságban segíti a gazdákat és a kerteket kezelő embereket. Ebben
Intelligens tárcsázás - automatikus javító intelligens hagyományos telefon: 8 lépés
Intelligens tárcsázás-automatikus javító intelligens hagyományos telefon: Az intelligens tárcsázás egy intelligens, automatikus korrekciós telefon, amelyet speciális igényű idősek számára fejlesztettek ki, és lehetővé teszi az idősek számára, hogy közvetlenül a megszokott hagyományos telefonokról tárcsázzanak. Csak a helyi idősek gondozási központjában végzett önkéntes munkával tudtam