Sisällysluettelo:
- Vaihe 1: Osat ja materiaalit
- Vaihe 2: Määritykset
- Vaihe 3: Koodi ja logiikka
- Vaihe 4: Viimeinen vaihe
Video: Älykäs junajärjestelmä: 4 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:02
Suunniteltu lisäämään turvallisuutta, estämään onnettomuuksia ja lisäämään positiivista ja tuottavaa vastausta onnettomuuksien sattuessa.
Vaihe 1: 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
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
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
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:
Älykäs vyö: 18 vaihetta
Smart Belt: Jonkin gadgetin käyttäminen on erittäin haastavaa. Rehellisesti, tässä projektissa sain äidiltäni apua ompelemaan kotelo minulle, koska en voi ommella itse. Ole varovainen, kun ompelet ompelukoneella. Jos et koskaan kokene ompelua ompelukoneella, se on myös
Älykäs moottoripyörän HUD-prototyyppi (vaiheittainen navigointi ja paljon muuta): 9 vaihetta
Älykäs moottoripyörän HUD-prototyyppi (vaiheittainen navigointi ja paljon muuta): Hei! Tämä Instructables on tarina siitä, miten suunnittelin ja rakensin HUD (Heads-Up Display) -alustan, joka on suunniteltu asennettavaksi moottoripyöräkypäriin. Se on kirjoitettu "kartat" -kilpailun yhteydessä. Valitettavasti en pystynyt lopettamaan kokonaan
Smart Desk LED -valo - Älykäs valaistus W/ Arduino - Neopikselit -työtila: 10 vaihetta (kuvilla)
Smart Desk LED -valo | Älykäs valaistus W/ Arduino | Neopixels -työtila: Nykyään vietämme paljon aikaa kotona, opiskelemme ja työskentelemme virtuaalisesti, joten miksi et tekisi työtilastamme suurempaa mukautetulla ja älykkäällä Arduino- ja Ws2812b -LED -valaistusjärjestelmällä. Työpöydän LED -valo, joka
Älykäs herätyskello: Älykäs herätyskello, joka on valmistettu Raspberry Pi: llä: 10 vaihetta (kuvilla)
Älykäs herätyskello: älykäs herätyskello, joka on valmistettu Raspberry Pi: llä: Oletko koskaan halunnut älykkään kellon? Jos näin on, tämä on ratkaisu sinulle! Tein Smart Alarm Clockin, tämä on kello, jolla voit muuttaa herätysaikaa verkkosivuston mukaan. Kun hälytys soi, kuuluu ääni (summeri) ja 2 valoa
IoT -pohjainen älykäs puutarhanhoito ja älykäs maatalous ESP32: 7 askeleen avulla
IoT -pohjainen älykäs puutarhanhoito ja älykäs maatalous ESP32: n avulla: Maailma muuttuu ajan ja maatalouden tavoin. Nykyään ihmiset integroivat elektroniikkaa kaikilla aloilla, eikä maatalous ole poikkeus tähän. Tämä elektroniikan yhdistäminen maataloudessa auttaa viljelijöitä ja puutarhoja hoitavia ihmisiä