Tartalomjegyzék:

Intelligens vonatrendszer: 4 lépés
Intelligens vonatrendszer: 4 lépés

Videó: Intelligens vonatrendszer: 4 lépés

Videó: Intelligens vonatrendszer: 4 lépés
Videó: Джилл Тертер приглашает присоединиться к поиску внеземных цивилизаций (обладательница приза TED!) 2024, Július
Anonim
Intelligens vonatrendszer
Intelligens vonatrendszer

Ú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

Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
Alkatrészek és anyagok
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ó

Konfiguráció
Konfiguráció
Konfiguráció
Konfiguráció
Konfiguráció
Konfiguráció
Konfiguráció
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

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

Utolsó 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: