Sisällysluettelo:

Älykäs junajärjestelmä: 4 vaihetta
Älykäs junajärjestelmä: 4 vaihetta

Video: Älykäs junajärjestelmä: 4 vaihetta

Video: Älykäs junajärjestelmä: 4 vaihetta
Video: Robottiruohontorjunta. Katsaus rikkakasvien torjunta-ainevapaiden maatalouskoneiden uutisiin. 2024, Heinäkuu
Anonim
Älykäs junajärjestelmä
Älykäs junajärjestelmä

Suunniteltu lisäämään turvallisuutta, estämään onnettomuuksia ja lisäämään positiivista ja tuottavaa vastausta onnettomuuksien sattuessa.

Vaihe 1: Osat ja materiaalit

Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit
Osat ja materiaalit

Yllä olevat kuvat on sijoitettu alla olevaan varaosaluetteloon:

Osaluettelo

1) Yksi Vadelma PI 3 - Malli B

2) Yksi leipälauta

3) Kaapelit (ylhäältä alas) - yksi virta, yksi Ethernet, yksi sovitin

4) Yksi servomoottori

5) Yksi 3D -tulostettu rautatieportti

6) Kaksi LEDiä (mieluiten punainen ja vihreä)

7) Yksi painike

8) Kymmenen hyppyjohtoa

9) Neljä vastusta

10) Kannettava tai pöytäkone, jossa on MATLAB

Vaihe 2: Määritykset

Asetukset
Asetukset
Asetukset
Asetukset
Asetukset
Asetukset
Asetukset
Asetukset

Yllä on kuvia konfiguroinnista useista kulmista:

Nastat (pienet kirjaimet ja rivinumerot) on lueteltu alla nykyisen kulun mukaisessa järjestyksessä.

Johdot:

j19 - i47

j8 - b50

b5 Servoon

c6 Servoon

b7 servoon

a13 - j7

a17 - LED

LED -merkkivalo a37

e40 - j20

j53 - j18

j7 - LED

LED j6: een

Painike:

e54 - h51

Vastukset:

d40 - b37

c50 - d54

i51 - j47

Vaihe 3: Koodi ja logiikka

Koodi ja logiikka
Koodi ja logiikka

Junojärjestelmämme tavoitteena on lisätä turvallisuutta ja pienentää mahdollisesti kuolemaan johtavien onnettomuuksien riskiä rautateiden risteyksissä. Tämän saavuttamiseksi järjestelmässämme on junan varoitusjärjestelmä kuljettajille, fyysinen este, joka on laskettu estämään autoja ylittämästä rataa, ja varahätäpainike, jota kapellimestari painaa, jos varhaisvaroitusjärjestelmä epäonnistuu.

GUI Conductor -käyttöjärjestelmä:

Yllä oleva graafinen käyttöliittymä luotiin kapellimestarin käyttöön, kun he ajavat junaa raitealueiden läpi, joilla on autoliikenteen rautatien ylityksiä.

Oikeassa yläkulmassa on valo, joka ilmoittaa kapellimestarille, jos tuleva rautatien ylitysportti on suljettu, ja sallii johtimen avata tai sulkea portin tarvittaessa. Sen alla näkyy syöte kameroista, joita juna kulkee. Vasemmassa alakulmassa junan sijainti esitetään jatkuvasti kaaviossa ja kaavion alapuolella ilmoitetaan, kuinka monta kierrosta juna oli suorittanut päivässä. Sijaintikaavion yläpuolella on hätäpainike ja tilailmoitus. Näin kapellimestari voi ilmoittaa hätätilanteesta, jos radalla on auto tai turvaportti ei toimi kunnolla.

Koodi:

classdef micro <matlab.apps. AppBase % Ominaisuudet, jotka vastaavat sovelluksen osia

ominaisuudet (Pääsy = julkinen)

UIFiguuri matlab.ui. Kuva

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

Merkki matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Merkitse matlab.ui.control. Label

loppuun

ominaisuudet (Access = yksityinen)

laskuri int16

loppuun

menetelmät (Access = public)

toimintoajastinCallback (sovellus, src, tapahtuma)

app. Temp. Text = int2str (app.counter);

app.counter = app.counter + 1;

%kutsuu kaikki ohjelman tarvitsemat muuttujat - - - - - - - - - - - - - -

globaali rpi

maailmanlaajuinen s

maailmanlaajuisesti auki

maailmanlaajuinen lähellä

maailmanlaajuinen nokka

maailmanlaajuinen m

globaalit emit

globaali t_count

%------------------------- Juna-varsiosa --------------------- ---------

jos auki == 0

writePosition (s, 50)

app.gateLamp. Color = 'vihreä';

loppuun

jos lähellä == 0

writePosition (s, 120)

app.gateLamp. Color = 'punainen';

loppuun

%---------------------- Liiketunnistus kameran kautta -----------------------

vaikka totta

img = tilannekuva (nokka);

kuva (img);

app. UIAxes (vedetty)

loppuun

%---------------------- Varsi auki/kiinni ----------------------- --------------

jos readDigitalPin (rpi, 20)> 1 %lukee nastan 17 (painike) ja tarkistaa signaalin

i = 40:.5: 150 %nostaa siltaa

writePosition (s, i)

loppuun

i = 1:10 %silmukat vilkkuvat punaista valoa x monta kertaa

writeDigitalPin (rpi, 13, 1)

tauko (.5)

writeDigitalPin (rpi, 13, 0)

tauko (.5)

loppuun

writePosition (s, 50)%laski portin alas

loppuun

%-------------------- Matkapuhelintuki/juoni ------------------------ -

m. AccelerationSensorEnabled = 1

m.logging = 1

data = nollia (200, 1); %intialisoi tietoja liikkuvalle kuvaajalle

kuva (n. UIAxes2)

p = juoni (data)

akseli ([xbounda, ybounds])

tauko (1)

tic

kun toc <30 %juoksee 30 sekuntia

[a, ~] = accellog (m);

jos pituus (a)> 200

data = a (vuoden 199 loppu: loppu, 3);

muu

tiedot (1: pituus (a)) = a (: 3);

loppuun

%piirtää uudelleen

p. YData = data;

vedetty

loppuun

%------------------ Äkillinen pikselimuutos ---------------------------- ------

x1 = img; % lukee kameran pois pi

red_mean = keskiarvo (keskiarvo (x1 (:,:, 1))); % lukee punaisten pikselien keskimääräisen määrän

green_mean = keskiarvo (keskiarvo (x1 (:,:, 2))); % lukee vihreiden pikselien keskimääräisen määrän

blue_mean = keskiarvo (keskiarvo (x1 (:,:, 3))); % lukee sinisten pikselien keskimääräisen määrän

jos red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

loppuun

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Painike EMS-ohjelmointi ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %asettaa LED -nastan, nastan 16, lähtöksi

configurePin (rpi, 16, 'DigitalInput'); %asettaa painikkeen nastan, nastan 24 tuloksi

buttonPressed = readDigitalPin (rpi, 16); % Lukee nastan 16 painikkeen painalluksen arvon

jos painiketta painetaan == 1

painikkeen ollessa painettuna == 1

writeDigitalPin (rpi, 12, 1)

buttonunPressed = writeDigitalPin (rpi, 12, 0); %

end % Päättyy 'painikkeen ollessa painettuna == 1' -silmukan

loppuun

writeDigitalPin (rpi, 16, 0) %Asettaa ledin pois päältä, kun painiketta ei enää paineta setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'Sähköposti', '[email protected]'); % sähköpostitili lähetettäväksi setprefistä ('Internet', 'SMTP_Username', '[email protected]'); % lähettäjien käyttäjätunnus setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Lähettäjien salasana

rekvisiitta = 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] ',' Hätätila! ',' Kapellimestari on aktivoinut manuaalisen ohituskytkimen ja pyytää välitöntä vastausta! ')

app. UndernormalconditionsLabel. Text = ems

loppuun

loppuun

%app. Label_4. Text = num2str (curr_temp);

menetelmät (Access = yksityinen)

% Koodi, joka suoritetaan komponentin luomisen jälkeen

toiminto startupFcn (sovellus)

%---------- Kaikki tähän toimintoon tarvittavat muuttujat --------------------

globaali rpi %arduino

rpi = raspi ('169.254.0.2', 'pi', 'vadelma');

globaali s %servo

s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);

globaali avoin

avoin = 1;

globaali suljettu

suljettu = 1;

maailmanlaajuinen nokka

nokka = kamerapaneeli (rpi);

maailmanlaajuinen m

m = mobiledev;

globaalit emit

ems = 'On ilmoitettu hätätilanteesta, joka ilmoittaa EMS: lle';

globaali t_count

t_luku = 0;

%salasanan liitin on EFGroup6

% Ajastintoiminto silmukalle --------------------------------

app.counter = 0;

t = ajastin (…

'TimerFcn', @app.timerCallback,…

'StartDelay', 1, … 'Jakso', 1,…

'ExecutionMode', 'fixSpacing',…

'TasksToExecute', inf);

alku (t);

loppuun

% Soittotoiminto

toiminto ManualOverrideSwitchValueChanged (sovellus, tapahtuma)

loppuun

% Painiketoiminto: OpenGateButton

toiminto OpenGateButtonPushed (sovellus, tapahtuma)

maailmanlaajuinen lähellä

lähellä = 0;

loppuun

% Painike painettu: CloseGateButton

toiminto CloseGateButtonPushed (sovellus, tapahtuma)

globaali avoin

avoin = 0;

loppuun

loppuun

% Sovelluksen alustus ja rakentaminen

menetelmät (Access = yksityinen)

% Luo UIFigure ja komponentit

function createComponents (sovellus)

% Luo UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100100640480];

app. UIFigure. Name = 'Käyttöliittymän kuva';

% Luo RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'oikea'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Rautatieportin tila';

% Luo gateLamp

app.gateLamp = uilamp (app. UIFigure);

app.gateLamp. Position = [589 422 20 20];

app.gateLamp. Color = [0,9412 0,9412 0,9412];

% Luo OpenGateButton

app. OpenGateButton = uibutton (app. UIFigure, 'push');

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (sovellus, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474359100 22];

app. OpenGateButton. Text = 'Avaa portti';

% Luo CloseGateButton

app. CloseGateButton = uibutton (app. UIFigure, 'push');

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (sovellus, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Sulje portti';

% Luo UIAxeja

app. UIAxes = uiaxes (app. UIFigure);

otsikko (app. UIAxes, 'Camera Feed')

app. UIAxes. Position = [341 43300185];

% Luo EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'oikea'; app. EmergencyButtonStatusLampLabel. Position = [97323142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Hätäpainikkeen tila';

% Luo EmergencyButtonStatusLamp

app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254323 20 20];

% Luo UndernormalconditionsLabel

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

app. UndernormalconditionsLabel. Position = [108 285 248 22];

app. UndernormalconditionsLabel. Text = 'Normaaleissa olosuhteissa';

% Luo UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

otsikko (n. UIAxes2, 'Juna -asema')

xlabel (app. UIAxes2, 'X Position')

ylabel (app. UIAxes2, 'Y Position')

app. UIAxes2. Box = 'päällä';

app. UIAxes2. XGrid = 'päällä';

app. UIAxes2. YGrid = 'päällä';

app. UIAxes2. Position = [18 43 300 185];

% Luo EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'keskusta';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'lihavoitu';

app. EF230Group6Label. Position = [-4 401379 64];

app. EF230Group6Label. Text = 'EF 230 Group 6';

% Luo IanAllishKellyBondIanDaffronLabel

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94380184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

% Luo LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

app. LoopsCompletedLabel. Position = [18 10 103 22];

app. LoopsCompletedLabel. Text = 'Silmukat suoritettu:';

% Luo tunniste

app. Label = uilabel (app. UIFigure);

app. Label. Position = [120 10178 22];

app. Label. Text = '####';

loppuun

loppuun

menetelmät (Access = public)

% Rakenna sovellus

toiminto sovellus = mikro

% Luo ja määritä komponentteja

createComponents (sovellus)

% Rekisteröi sovellus App Designerilla

registerApp (sovellus, sovellus. UIFigure)

% Suorita käynnistystoiminto

runStartupFcn (sovellus, @startupFcn)

jos nargout == 0

selkeä sovellus

loppuun

loppuun

% Koodi, joka suoritetaan ennen sovelluksen poistamista

poista (sovellus)

% Poista UIFigure, kun sovellus poistetaan

poista (app. UIFigure)

loppuun

loppuun

loppuun

Vaihe 4: Viimeinen vaihe

Viimeinen vaihe
Viimeinen vaihe

Kun koodi on kirjoitettu ja Raspberry Pi on kytketty, kiinnitä servomoottori 3-D-painettuun rautatieporttiin, kuten yllä olevassa kuvassa.

Nyt projekti on valmis. Kytke vadelma -PI junan radalle ja tarkkaile uutta järjestelmää, joka luo turvallisemmat risteykset sekä auton kuljettajille että johtimille. Pelaa järjestelmän kanssa vuorovaikutuksessa graafisen käyttöliittymän kanssa ja käynnistä onnettomuuksien estämiseksi asetetut vikasuojat.

Tämä on opetusohjelman loppu, nauti uudesta Smart Train -järjestelmästäsi!

Suositeltava: