Obsah:
Video: Inteligentní vlakový systém: 4 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
Navrženo tak, aby zvýšilo bezpečnost, předcházelo nehodám a zvýšilo pozitivní a produktivní reakci na pomoc v případě, že k nehodám dojde.
Krok 1: Díly a materiály
Výše uvedené obrázky jsou seřazeny podle níže uvedeného seznamu dílů:
Seznam dílů
1) Jedna malina PI 3 - model B
2) Jeden prkénko
3) Kabely (shora dolů) - jedno napájení, jeden ethernet, jeden adaptér
4) Jeden servomotor
5) Jedna 3D vytištěná železniční brána
6) Dvě LED diody (nejlépe červená a zelená)
7) Jedno tlačítko
8) Deset propojovacích drátů
9) Čtyři odpory
10) Notebook nebo stolní počítač s MATLABem
Krok 2: Konfigurace
Nahoře jsou obrázky konfigurace z více úhlů:
Umístění pinů (malá písmena následovaná číslem řádku) jsou uvedena níže v pořadí podle aktuálního toku.
Dráty:
j19 až i47
j8 až b50
b5 na servo
c6 na servo
b7 na servo
a13 až j7
a17 na LED
LED na a37
e40 až j20
j53 až j18
j7 na LED
LED na j6
Knoflík:
e54 až h51
Rezistory:
d40 až b37
c50 až d54
i51 až j47
Krok 3: Kód a logika
Cílem našeho vlakového systému je zvýšit bezpečnost a snížit riziko potenciálně smrtelných nehod na železničních přejezdech. Aby toho bylo dosaženo, náš systém má systém varování vlaku pro strojvedoucí, fyzickou bariéru, která je spuštěna dolů, aby se zabránilo přejezdu aut po trati, a záložní nouzové tlačítko, které může průvodčí stisknout v případě selhání systému včasného varování.
Operační systém GUI vodiče:
GUI, jak je uvedeno výše, bylo vytvořeno pro použití vodiče, když řídí vlak přes oblasti trati, které mají železniční přejezdy automobilové dopravy.
V pravém horním rohu je světlo, které upozorní průvodčí, pokud je nadcházející železniční přejezdová brána zavřená, a umožní průvodčímu v případě potřeby bránu otevřít nebo zavřít. Pod tím je zobrazen zdroj z kamer, kterými vlak prochází. V levém dolním rohu je poloha vlaku průběžně zakreslena do grafu a pod grafem je uveden počet kol, která vlak za den absolvoval. Nad grafem polohy je nouzové tlačítko a prohlášení o stavu. To umožňuje vodičovi signalizovat nouzovou situaci, pokud je na trati auto nebo bezpečnostní brána nefunguje správně.
Kód:
classdef micro <matlab.apps. AppBase % Vlastnosti, které odpovídají komponentám aplikace
vlastnosti (přístup = veřejné)
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ální podmínky Štítek matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Štítek matlab.ui.control. Label
konec
vlastnosti (přístup = soukromé)
čítač int16
konec
metody (Přístup = veřejné)
funkce timerCallback (aplikace, src, událost)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%volání všech proměnných, které program potřebuje - - - - - - - - - - - - - -
globální rpi
globální s
globálně otevřený
globální zavření
globální kamera
globální m
globální ems
globální t_count
%------------------------- Sekce vlakového ramene --------------------- ---------
pokud je otevřeno == 0
writePosition (s, 50)
app.gateLamp. Color = 'zelená';
konec
pokud je blízko == 0
writePosition (s, 120)
app.gateLamp. Color = 'červená';
konec
%---------------------- Detekce pohybu pomocí kamery -----------------------
zatímco pravda
img = snapshot (kamera);
image (img);
app. UIAxes (drawnow)
konec
%---------------------- Otevření/zavření paže ----------------------- --------------
pokud readDigitalPin (rpi, 20)> 1 %čte pin 17 (tlačítko) a kontroluje signál
pro i = 40: 0,5: 150 %zvyšuje most
writePosition (s, i)
konec
pro i = 1:10 %smyčky blikají červeně xkrát
writeDigitalPin (rpi, 13, 1)
pauza (.5)
writeDigitalPin (rpi, 13, 0)
pauza (.5)
konec
writePosition (s, 50)%dát bránu dolů
konec
%-------------------- Podpora mobilního telefonu/Plot ------------------------ -
m. AccelerationSensorEnabled = 1
m.logging = 1
data = nuly (200, 1); %inicializace dat pro pohyblivý graf
obrázek (app. UIAxes2)
p = graf (data)
osa ([xbounda, ybounds])
pauza (1)
tic
zatímco toc <30 %běží 30 sekund
[a, ~] = accellog (m);
pokud délka (a)> 200
data = a (konec-199: konec, 3);
jiný
data (1: délka (a)) = a (:, 3);
konec
%překreslení zápletky
p. YData = data;
táhnout
konec
%------------------ Náhlá změna pixelu ---------------------------- ------
x1 = obrázek; % čte kameru mimo pí
red_mean = průměr (průměr (x1 (:,:, 1))); % přečte průměrné množství červených pixelů
green_mean = průměr (průměr (x1 (:,:, 2))); % přečte průměrné množství zelených pixelů
blue_mean = průměr (průměr (x1 (:,:, 3))); % přečte průměrné množství modrých pixelů
pokud red_mean> 150 && green_mean> 150 && blue_mean> 150
t_count = t_count + 1;
konec
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ Programování tlačítka EMS ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %nastaví jako výstup LED pin, pin 16
configurePin (rpi, 16, 'DigitalInput'); %nastaví pin kolíku 24 jako vstup
buttonPressed = readDigitalPin (rpi, 16); % Přečte hodnotu stisknutí tlačítka na kolíku 16
if buttonPressed == 1
při stisknutí tlačítka == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % Končí „zatímco buttonPressed == 1“smyčka
konec
writeDigitalPin (rpi, 16, 0) %Nastaví zhasnutí LED diody, pokud již není tlačítko stisknuto setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % poštovní účet k odeslání ze setpref ('Internet', 'SMTP_Username', '[email protected]'); % odesílatelů uživatelské jméno setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Heslo odesílatele
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] ',' Nouzový stav! ',' Dirigent aktivoval přepínač ručního ovládání a požaduje okamžitou odpověď! ')
app. UndernormalconditionsLabel. Text = ems
konec
konec
%app. Label_4. Text = num2str (proud_temp);
metody (Přístup = soukromé)
% Kód, který se spustí po vytvoření komponenty
funkce startupFcn (aplikace)
%---------- Všechny proměnné potřebné pro tuto funkci --------------------
globální rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'malina');
globální s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2,5e-3);
globálně otevřený
otevřeno = 1;
globálně zavřeno
zavřeno = 1;
globální kamera
cam = kamera (rpi);
globální m
m = mobiledev;
globální ems
ems = 'Byla nahlášena mimořádná událost s upozorněním EMS';
globální t_count
t_count = 0;
konektor na %hesla je EFGroup6
% Funkce časovače pro smyčku --------------------------------
app.counter = 0;
t = časovač (…
'TimerFcn', @app.timerCallback,…
„StartDelay“, 1,… „Období“, 1,…
„ExecutionMode“, „fixedSpacing“,…
'TasksToExecute', inf);
start (t);
konec
% Funkce zpětného volání
funkce ManualOverrideSwitchValueChanged (aplikace, událost)
konec
% Funkce stisknutí tlačítka: OpenGateButton
funkce OpenGateButtonPushed (aplikace, událost)
globální zavření
zavřít = 0;
konec
% Funkce stisknutí tlačítka: CloseGateButton
funkce CloseGateButtonPushed (aplikace, událost)
globálně otevřený
otevřeno = 0;
konec
konec
% Inicializace a konstrukce aplikace
metody (Přístup = soukromé)
% Vytvořte UIFigure a komponenty
funkce createComponents (aplikace)
% Vytvořit UIFigure
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'Obrázek uživatelského rozhraní';
% Vytvořit RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'vpravo'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Stav železniční brány';
% Vytvořte lampu brány
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0,9412 0,9412 0,9412];
% Vytvořit OpenGateButton
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Otevřená brána';
% Vytvořit CloseGateButton
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Zavřít bránu';
% Vytvořte UIAxes
app. UIAxes = uiaxes (app. UIFigure);
title (app. UIAxes, 'Camera Feed')
app. UIAxes. Position = [341 43 300 185];
% Vytvořit EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'vpravo'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Stav nouzového tlačítka';
% Vytvořte EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Create UndernormalconditionsLabel
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Za normálních podmínek';
% Vytvořit 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 = 'on';
app. UIAxes2. XGrid = 'on';
app. UIAxes2. YGrid = 'on';
app. UIAxes2. Position = [18 43 300 185];
% Vytvořit 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 Group 6';
% Vytvořit IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Vytvořit LoopsCompletedLabel
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Smyčky dokončeny:';
% Vytvořit štítek
app. Label = uilabel (app. UIFigure);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
konec
konec
metody (Přístup = veřejné)
% Konstrukce aplikace
funkce aplikace = mikro
% Vytvářejte a konfigurujte součásti
createComponents (aplikace)
% Zaregistrujte aplikaci u App Designer
registerApp (aplikace, aplikace. UIFigure)
% Proveďte spouštěcí funkci
runStartupFcn (aplikace, @startupFcn)
pokud nargout == 0
přehledná aplikace
konec
konec
% Kód, který se spustí před odstraněním aplikace
odstranit (aplikace)
% Odstranit UIFfigurovat při odstranění aplikace
odstranit (app. UIFigure)
konec
konec
konec
Krok 4: Poslední krok
Jakmile je kód zapsán a Raspberry Pi zapojen, připojte servomotor k 3-D tištěné bráně železniční trati, jak je připojena na obrázku výše.
Nyní je projekt dokončen. Připojte malinový PI k železniční trati a sledujte nový systém, který vytváří bezpečnější železniční přejezdy pro řidiče i průvodčí. Hrajte se systémem interakcí s grafickým uživatelským rozhraním a aktivujte bezpečnostní trezory nastavené na místě, abyste předešli nehodám.
Tím tutoriál končí, užijte si svůj nový inteligentní vlakový systém!
Doporučuje:
Inteligentní systém sledování (SIME): 4 kroky
Inteligentní systém sledování (SIME): Tema e Proposta: Foo dado o tema Servi ç os P ú blicos aos participantes do Hackathom Qualcomm Facens com no m á ximo 32 horas para planejamento e execu ç ã Placa Dragonboard 410c com um Kit Qual
Inteligentní závěsový systém: 4 kroky
Chytrý závěsový systém: Chtěli byste inteligentní záclonový systém, který se sám zavře, když je v místnosti příliš horko a jasno, a také jej lze ovládat na dálku na cestách? Zde vám ukážu, jak to udělat opravdu snadným ~
Inteligentní budík: inteligentní budík vyrobený z Raspberry Pi: 10 kroků (s obrázky)
Chytrý budík: Chytrý budík vyrobený z Raspberry Pi: Chtěli jste někdy chytré hodiny? Pokud ano, toto je řešení pro vás! Vytvořil jsem inteligentní budík, toto jsou hodiny, u kterých můžete podle času na webu změnit čas budíku. Když se spustí alarm, ozve se zvuk (bzučák) a 2 kontrolky
Inteligentní zahradničení založené na IoT a inteligentní zemědělství pomocí ESP32: 7 kroků
Inteligentní zahradničení založené na IoT a inteligentní zemědělství pomocí ESP32: Svět se mění v čase a také v zemědělství. V dnešní době lidé integrují elektroniku do všech oblastí a zemědělství pro to není výjimkou. Toto sloučení elektroniky v zemědělství pomáhá zemědělcům a lidem, kteří spravují zahrady
Inteligentní systém monitorování energie: 3 kroky
Inteligentní monitorovací systém energie: Poptávka po energii se každým dnem zvyšuje. V současné době je spotřeba elektrické energie od uživatelů v dané oblasti monitorována a vypočítávána častými návštěvami terénu prováděnými techniky z oddělení elektřiny pro výpočet energetického tarifu. Tento