Obsah:

Inteligentní vlakový systém: 4 kroky
Inteligentní vlakový systém: 4 kroky

Video: Inteligentní vlakový systém: 4 kroky

Video: Inteligentní vlakový systém: 4 kroky
Video: Radomír Němeček, 4 kroky ke svobodě 2024, Listopad
Anonim
Inteligentní vlakový systém
Inteligentní vlakový systém

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

Díly a materiály
Díly a materiály
Díly a materiály
Díly a materiály
Díly a materiály
Díly a materiály
Díly a materiály
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

Konfigurace
Konfigurace
Konfigurace
Konfigurace
Konfigurace
Konfigurace
Konfigurace
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

Kód a logika
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

Poslední krok
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: