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: Jak odemknout fabii bez klíčů rukama za 2 vteřiny 2024, November
Anonim
Inteligentný vlakový systém
Inteligentný vlakový systém

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

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

Konfigurácia
Konfigurácia
Konfigurácia
Konfigurácia
Konfigurácia
Konfigurácia
Konfigurácia
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

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

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