Obsah:
Video: Inteligentný vlakový systém: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
Navrhnuté na zvýšenie bezpečnosti, predchádzanie nehodám a zvýšenie pozitívnej a produktívnej reakcie na pomoc v prípade nehôd.
Krok 1: Diely a materiály
Vyššie uvedené obrázky sú zoradené v poradí uvedenom nižšie v zozname náhradných dielov:
Zoznam položiek
1) Jedna malina PI 3 - model B
2) Jeden Breadboard
3) Káble (zhora nadol) - jeden napájací, jeden ethernetový a jeden adaptér
4) Jeden servomotor
5) Jedna 3D tlačená železničná brána
6) Dve diódy LED (najlepšie červená a zelená)
7) Jedno tlačidlo
8) Desať prepojovacích drôtov
9) Štyri odpory
10) Notebook alebo stolný počítač s MATLAB
Krok 2: Konfigurácia
Hore sú obrázky konfigurácie z viacerých uhlov:
Umiestnenia pinov (malé písmeno nasledované číslom riadka) sú uvedené nižšie v poradí podľa aktuálneho toku.
Drôty:
j19 až i47
j8 až b50
b5 na servo
c6 na servo
b7 na servo
a13 až j7
a17 až LED
LED až a37
e40 až j20
j53 až j18
j7 na LED
LED na j6
Tlačidlo:
e54 až h51
Rezistory:
d40 až b37
c50 až d54
i51 až j47
Krok 3: Kód a logika
Cieľom nášho vlakového systému je zvýšiť bezpečnosť a znížiť riziko potenciálne smrteľných nehôd na železničných priecestiach. Aby sme to dosiahli, náš systém má systém varovania vlakov pre rušňovodičov, fyzickú závoru, ktorá je spustená nadol, aby sa zabránilo prechodu automobilov cez trať, a záložné núdzové tlačidlo, ktoré môže sprievodca stlačiť v prípade zlyhania systému včasného varovania.
Operačný systém dirigenta GUI:
GUI, uvedené vyššie, bolo vytvorené na použitie vodiča, keď vedú vlak cez oblasti koľají, ktoré majú železničné priecestia pre automobilovú dopravu.
V pravom hornom rohu je svetlo, ktoré upozorní vodiča, ak je nadchádzajúca brána pre železničné priecestie zatvorená, a umožní vodičovi bránu v prípade potreby otvoriť alebo zatvoriť. Pod tým je zobrazený zdroj z kamier, ktorými vlak prechádza. V ľavom dolnom rohu je poloha vlaku priebežne zakreslená do grafu a pod grafom je uvedený počet kôl, ktoré vlak absolvoval za deň. Nad grafom polohy sa nachádza núdzové tlačidlo a vyhlásenie o stave. To umožňuje vodičovi signalizovať núdzovú situáciu, ak je na trati auto alebo bezpečnostná brána nefunguje správne.
Kód:
classdef micro <matlab.apps. AppBase % Vlastnosti, ktoré zodpovedajú komponentom aplikácie
vlastnosti (prístup = verejné)
UIFigure matlab.ui. Figure
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
Podnormálne podmienkyŠtítok matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
Štítek EF230Group6 matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Štítok matlab.ui.control. Label
koniec
vlastnosti (prístup = súkromné)
počítadlo int16
koniec
metódy (Prístup = verejné)
funkcia timerCallback (aplikácia, src, udalosť)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%zavolajte všetky premenné, ktoré program potrebuje - - - - - - - - - - - - - -
globálna rpi
globálna s
globálne otvorené
globálne zatvorenie
globálna kamera
globálne m
globálne ems
globálny t_count
%------------------------- Sekcia ramena vlaku --------------------- ---------
ak je otvorený == 0
writePosition (s, 50)
app.gateLamp. Color = 'zelená';
koniec
ak je blízko == 0
writePosition (s, 120)
app.gateLamp. Color = 'červená';
koniec
%---------------------- Detekcia pohybu pomocou kamery -----------------------
kým je to pravda
img = snapshot (kamera);
obrázok (img);
app. UIAxes (drawnow)
koniec
%---------------------- Rameno otvorené/zatvorené ----------------------- --------------
ak readDigitalPin (rpi, 20)> 1 %číta pin 17 (tlačidlo) a kontroluje signál
pre i = 40:.5: 150 %zvyšuje most
writePosition (s, i)
koniec
pre i = 1:10 %slučky blikajúce červené svetlo x -krát
writeDigitalPin (rpi, 13, 1)
pauza (.5)
writeDigitalPin (rpi, 13, 0)
pauza (.5)
koniec
writePosition (s, 50)%dať bránu dole
koniec
%-------------------- Podpora/sprisahanie mobilného telefónu ------------------------ -
m. AccelerationSensorEnabled = 1
m.logovanie = 1
údaje = nuly (200, 1); %inicializácia údajov pre pohyblivý graf
figúrka (app. UIAxes2)
p = graf (údaje)
os ([xbounda, ybounds])
pauza (1)
tic
pričom toc <30 %beží 30 sekúnd
[a, ~] = accellog (m);
ak dĺžka (a)> 200
údaje = a (koniec-199: koniec, 3);
inak
údaje (1: dĺžka (a)) = a (:, 3);
koniec
%prekresliť zápletku
p. YData = údaje;
sťahovať
koniec
%------------------ Náhla zmena pixelov ---------------------------- ------
x1 = obr. % číta kameru mimo pí
red_mean = priemer (priemer (x1 (:,:, 1))); % znamená priemerné množstvo červených pixelov
green_mean = priemer (priemer (x1 (:,:, 2))); % znamená priemerné množstvo zelených pixelov
blue_mean = priemer (priemer (x1 (:,:, 3))); % znamená priemerné množstvo modrých pixelov
ak red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
koniec
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Programovanie tlačidiel EMS ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %nastaví ako výstup pin LED, pin 16
configurePin (rpi, 16, 'DigitalInput'); %nastaví pin kolíka 24 ako vstup
buttonPressed = readDigitalPin (rpi, 16); % Načíta hodnotu stlačenia tlačidla na kolíku 16
ak tlačidlo stlačené == 1
kým je tlačidlo stlačené == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % Končí „počas stlačenia tlačidla == 1“slučky
koniec
writeDigitalPin (rpi, 16, 0) %Nastaví vypnutie diódy, keď už tlačidlo nie je stlačené setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % poštový účet na odoslanie zo setpref ('Internet', 'SMTP_Username', '[email protected]'); % odosielateľov užívateľské meno setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Heslo odosielateľa
props = 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] ',' Núdzový stav! ',' Vodič aktivoval spínač ručného prepínania a požaduje okamžitú odpoveď! ')
app. UndernormalconditionsLabel. Text = ems
koniec
koniec
%app. Label_4. Text = num2str (proud_temp);
metódy (Prístup = súkromné)
% Kód, ktorý sa spustí po vytvorení komponentu
funkcia startupFcn (aplikácia)
%---------- Všetky premenné potrebné pre túto funkciu --------------------
globálne rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'malina');
globálne servo s %
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2,5e-3);
globálne otvorené
otvorené = 1;
globálne zatvorené
zatvorené = 1;
globálna kamera
cam = kamera (rpi);
globálne m
m = mobiledev;
globálne ems
ems = 'Bola hlásená núdzová situácia s upozornením EMS';
globálny t_count
t_count = 0;
konektor na %heslo je EFGroup6
% Časová funkcia pre slučku --------------------------------
app.counter = 0;
t = časovač (…
„TimerFcn“, @app.timerCallback,…
„StartDelay“, 1, … „Obdobie“, 1,…
„ExecutionMode“, „fixedSpacing“,…
'TasksToExecute', inf);
štart (t);
koniec
% Funkcia spätného volania
funkcia ManualOverrideSwitchValueChanged (aplikácia, udalosť)
koniec
% Funkcia stlačenia tlačidla: OpenGateButton
funkcia OpenGateButtonPushed (aplikácia, udalosť)
globálne zatvorenie
zavrieť = 0;
koniec
% Funkcia stlačenia tlačidla: CloseGateButton
funkcia CloseGateButtonPushed (aplikácia, udalosť)
globálne otvorené
otvorené = 0;
koniec
koniec
% Inicializácia a konštrukcia aplikácie
metódy (Prístup = súkromné)
% Vytvorte obrázok UIF a komponenty
function createComponents (aplikácia)
% Vytvoriť UIFfiguráciu
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'Obrázok používateľského rozhrania';
% Vytvoriť RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'vpravo'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Stav železničnej brány';
% Vytvorte lampu brány
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0,9412 0,9412 0,9412];
% Vytvorte OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Otvorená brána';
% Vytvoriť CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Zatvoriť bránu';
% Vytvorte UIAxes
app. UIAxes = uiaxes (app. UIFigure);
title (app. UIAxes, 'Camera Feed')
app. UIAxes. Position = [341 43 300 185];
% Vytvorte EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'vpravo'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Stav núdzového tlačidla';
% Vytvorte EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Vytvorte podnormálne podmienkyLabel
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Za normálnych podmienok';
% Vytvoriť UIAxes2
app. UIAxes2 = uiaxes (app. UIFigure);
title (app. UIAxes2, 'Position of Train')
xlabel (app. UIAxes2, 'X Position')
ylabel (app. UIAxes2, 'Y Position')
app. UIAxes2. Box = 'zapnuté';
app. UIAxes2. XGrid = 'zapnuté';
app. UIAxes2. YGrid = 'zapnuté';
app. UIAxes2. Position = [18 43 300 185];
% Vytvorte štítok EF230Group6Label
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'center';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'tučné';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 skupina 6';
% Vytvoriť IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Create LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Slučky dokončené:';
% Vytvoriť štítok
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
koniec
koniec
metódy (Prístup = verejné)
% Construct app
funkcia app = mikro
% Vytvorte a nakonfigurujte komponenty
createComponents (aplikácia)
% Zaregistrujte aplikáciu v App Designer
registerApp (app, app. UIFigure)
% Spustite funkciu spustenia
runStartupFcn (aplikácia, @startupFcn)
ak sa nargout == 0
prehľadná aplikácia
koniec
koniec
% Kód, ktorý sa spustí pred odstránením aplikácie
odstrániť (aplikácia)
% Delete UIFigure when app is deleted
odstrániť (app. UIFigure)
koniec
koniec
koniec
Krok 4: Posledný krok
Akonáhle je kód zapísaný a Raspberry Pi je zapojený, pripojte servomotor k 3-D tlačenej bráne železničnej trate, ako je to pripevnené na obrázku vyššie.
Teraz je projekt dokončený. Pripojte malinový PI k železničnej trati a sledujte nový systém, ktorý vytvára bezpečnejšie železničné priecestie pre vodičov automobilov a sprievodcov. Hrajte so systémom interakciou s grafickým rozhraním, aby ste spustili zaistené trezory, ktoré zabránia nehodám.
Toto je koniec tutoriálu, užite si svoj nový inteligentný vlakový systém!
Odporúča:
Inteligentný inteligentný monitor: 5 krokov
Inteligentný monitor s inteligentným monitorovaním: Väčšina projektov, ktoré obsahujú, sú vyvážené a inteligentné s mnohými inteligentnými monitormi, ktoré monitorujú všetky druhy zvierat a upozorňujú na ne. Vykonajte platný počet pesničiek, ktoré by ste mali vziať do úvahy, uskutočniť
Inteligentný systém monitorovania (SIME): 4 kroky
Inteligentné systémy monitorovania (SIME): Tema a Proposta: Väčšina vašich služieb a účastníkov Hackathom Qualcomm Facens com no m á ximo 32 horas para planejamento e execu &cementil; ã základná sada Dragonboard 410c Qual
Inteligentný budík: inteligentný budík vyrobený z Raspberry Pi: 10 krokov (s obrázkami)
Inteligentný budík: Inteligentný budík vyrobený z Raspberry Pi: Už ste niekedy chceli inteligentné hodiny? Ak je to tak, toto je riešenie pre vás! Vyrobil som inteligentný budík, toto sú hodiny, v ktorých môžete zmeniť čas budíka podľa webových stránok. Keď sa spustí alarm, zaznie zvuk (bzučiak) a 2 svetlá
Inteligentný inteligentný alarm: 7 krokov
Inteligentné inteligentné alarmy: Možné sú rôzne druhy konštrukcií, ktoré môžu mať za následok rôzne programy, ako napríklad profesionálne výhody. Ademas, si sospesamos la gran potencia de calculo de la Raspberrry Pi, junto sus grandes posibil
Automatický systém na analýzu objemu inteligentný systém: 4 kroky
Inteligentný systém automatickej analýzy objemu: Cieľom je vytvoriť prototyp, ktorý dokáže analyzovať a identifikovať dva rôzne tvary a zobraziť jeho objem. Tu sme sa rozhodli ísť s kockou a valcom ako s dvoma rôznymi tvarmi. Dokáže sám detegovať tvary, analyzovať a vypočítať objem. Práca