Turinys:

Išmanioji traukinių sistema: 4 žingsniai
Išmanioji traukinių sistema: 4 žingsniai

Video: Išmanioji traukinių sistema: 4 žingsniai

Video: Išmanioji traukinių sistema: 4 žingsniai
Video: КАК НАСТРОИТЬ L4D2 2024, Lapkritis
Anonim
Išmanioji traukinių sistema
Išmanioji traukinių sistema

Sukurta siekiant padidinti saugumą, užkirsti kelią nelaimingiems atsitikimams ir padidinti teigiamą ir produktyvų atsaką, jei įvyktų nelaimingų atsitikimų.

1 žingsnis: dalys ir medžiagos

Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos
Dalys ir medžiagos

Aukščiau pateiktos nuotraukos išdėstytos dalių sąrašo tvarka:

Dalių sąrašas

1) Vienas Raspberry PI 3 - B modelis

2) Viena duonos lenta

3) Kabeliai (iš viršaus į apačią) - vienas maitinimas, vienas eternetas, vienas adapteris

4) Vienas servo variklis

5) Vieni 3D spausdinti geležinkelio vartai

6) Du šviesos diodai (pageidautina raudona ir žalia)

7) Vienas mygtukas

8) Dešimt trumpiklių

9) Keturi rezistoriai

10) Nešiojamasis kompiuteris ar stalinis kompiuteris su MATLAB

2 žingsnis: konfigūravimas

Konfigūracija
Konfigūracija
Konfigūracija
Konfigūracija
Konfigūracija
Konfigūracija
Konfigūracija
Konfigūracija

Aukščiau yra konfigūravimo nuotraukos iš kelių kampų:

Smeigtukų vietos (mažosios raidės, po kurių eina eilutės numeris) yra išvardytos žemiau eilės tvarka pagal dabartinį srautą.

Laidai:

nuo j19 iki i47

nuo j8 iki b50

b5 iki „Servo“

c6 iki „Servo“

b7 iki servo

nuo a13 iki j7

a17 į LED

Šviesos diodas iki a37

nuo e40 iki j20

nuo j53 iki j18

j7 į LED

Šviesos diodas iki j6

Mygtukas:

nuo e54 iki h51

Rezistoriai:

nuo d40 iki b37

nuo c50 iki d54

nuo i51 iki j47

3 žingsnis: kodas ir logika

Kodas ir logika
Kodas ir logika

Mūsų traukinių sistemos tikslas yra padidinti saugumą ir sumažinti galimų mirtinų nelaimingų atsitikimų geležinkelio pervažose riziką. Kad tai pasiektume, mūsų sistemoje yra traukinių įspėjimo sistema vairuotojams, fizinė kliūtis, kuri yra nuleista, kad automobiliai negalėtų kirsti bėgių kelio, ir atsarginis avarinis mygtukas, kurį konduktoriui paspausti, jei išankstinio įspėjimo sistema sugenda.

GUI konduktoriaus operacinė sistema:

GUI, parodyta aukščiau, buvo sukurta naudoti konduktoriui, kai jis važiuoja traukiniu per bėgių vietas, kuriose yra automobilių eismo geležinkelio perėjos.

Viršutiniame dešiniajame kampe yra lemputė, kuri praneša laidininkui, jei artėjantys geležinkelio pervažos vartai yra uždaryti, ir leidžia dirigentui prireikus atidaryti arba uždaryti vartus. Žemiau rodomas traukinių pravažiuojamų kamerų kanalas. Apatiniame kairiajame kampe traukinio vieta nuolat pavaizduota grafike, o po grafiku nurodomas traukinio įveiktų ratų skaičius per dieną. Virš padėties grafiko yra avarinis mygtukas ir būsenos pranešimas. Tai leidžia konduktoriui pranešti apie avariją, jei kelyje yra automobilis arba saugos vartai neveikia tinkamai.

Kodas:

classdef micro <matlab.apps. AppBase % Ypatybės, atitinkančios programos komponentus

ypatybės (prieiga = vieša)

UIFigrafija matlab.ui. Paveikslas

„RailwaygatestatusLampLabelLabel matlab.ui.control. Label“

gateLamp matlab.ui.control. Lamp

„OpenGateButton“matlab.ui.control. Button

CloseGateButton matlab.ui.control. Button

UIAxes matlab.ui.control. UIAxes

EmergencyButtonStatusLampLabelLabel matlab.ui.control. Label

EmergencyButtonStatusLamp matlab.ui.control. Lamp

Neįprastos sąlygosLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Etiketė matlab.ui.control. Label

galas

ypatybės (prieiga = privatus)

skaitiklis int16

galas

metodai (prieiga = vieša)

funkcijos laikmatisCallback (programa, src, įvykis)

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

app.counter = app.counter + 1;

%iškviečia visus programos kintamuosius - - - - - - - - - - - - - -

pasaulinis rpi

pasaulinis s

pasaulinis atviras

globalus uždarymas

pasaulinė kamera

pasaulinis m

pasaulinės ems

pasaulinis t_count

%------------------------- Traukinio svirties skyrius --------------------- ---------

jei atviras == 0

writePosition (s, 50)

app.gateLamp. Color = 'žalia';

galas

jei arti == 0

writePosition (s, 120)

app.gateLamp. Color = 'raudona';

galas

%---------------------- Judesio aptikimas per fotoaparatą -----------------------

kol tiesa

img = momentinis vaizdas (kumštelis);

vaizdas (img);

app. UIAxes (ištrauktas)

galas

%---------------------- Rankos atidarymas/uždarymas ----------------------- --------------

jei readDigitalPin (rpi, 20)> 1 %skaito 17 kaištį (mygtukas) ir tikrina signalą

i = 40:.5: 150 %pakelia tiltą

writePosition (s, i)

galas

i = 1:10 %kilpos mirksi raudona šviesa x kartų

writeDigitalPin (rpi, 13, 1)

pauzė (.5)

writeDigitalPin (rpi, 13, 0)

pauzė (.5)

galas

writePosition (s, 50)%uždėjo vartus

galas

%-------------------- Mobiliųjų telefonų palaikymas/sklypas ------------------------ -

m. „AccelerationSensorEnabled“= 1

m. užsikimšimas = 1

duomenys = nuliai (200, 1); %intializuokite riedančio sklypo duomenis

pav. (ap. UIAxes2)

p = sklypas (duomenys)

ašis ([xbounda, ybounds])

pauzė (1)

tikas

o toc <30 %veikia 30 sekundžių

[a, ~] = accellog (m);

jei ilgis (a)> 200

duomenys = a (199 pabaiga: pabaiga, 3);

Kitas

duomenys (1: ilgis (a)) = a (: 3);

galas

%perbraižytas siužetas

p. YData = duomenys;

ištrauktas

galas

%------------------ Staigus pikselių pasikeitimas ---------------------------- ------

x1 = img; % nuskaito fotoaparatą nuo pi

red_mean = vidurkis (vidurkis (x1 (:,:, 1))); % nuskaito vidutinį raudonų pikselių kiekį

žalia_reikšmė = vidurkis (vidurkis (x1 (:,:, 2))); % nuskaito vidutinį žalių pikselių kiekį

blue_mean = vidurkis (vidurkis (x1 (:,:, 3))); % nuskaito vidutinį mėlynų pikselių kiekį

jei red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

galas

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Mygtuko EMS programavimas ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %kaip išvestį nustato LED kaištį 16 kaištį

configurePin (rpi, 16, 'DigitalInput'); %nustato įvestį mygtuko kaištį 24 kaištį

buttonPressed = readDigitalPin (rpi, 16); % Skaito mygtuko paspaudimo vertę 16 kaištyje

jei paspaudžiamas mygtukas == 1

kai mygtukas nuspaustas == 1

writeDigitalPin (rpi, 12, 1)

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

pabaiga % Baigiasi „mygtukas“Paspaudus == 1’kilpa

galas

writeDigitalPin (rpi, 16, 0) %Išjungia šviesos diodą, kai mygtukas nebespaudžiamas setpref ('Internetas', 'SMTP_Server', 'smtp.gmail.com'); setpref („Internetas“, „El. paštas“, „[email protected]“); % pašto paskyra, kurią reikia siųsti iš setpref ('Internetas', 'SMTP_Username', '[email protected]'); % siuntėjų vartotojo vardas setpref ('Internetas', 'SMTP_Password', 'efgroup6'); % Siuntėjų slaptažodis

rekvizitai = 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] ',' Avarinė būsena! ',' Dirigentas įjungė rankinio nepaisymo jungiklį, prašydamas nedelsiant reaguoti! ')

app. UndernormalconditionsLabel. Text = ems

galas

galas

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

metodai (prieiga = privatus)

% Kodas, kuris vykdomas sukūrus komponentą

funkcija startupFcn (programa)

%---------- Visi kintamieji, reikalingi šiai funkcijai --------------------

pasaulinis rpi %arduino

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

pasaulinis s %servo

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

pasaulinis atviras

atviras = 1;

pasaulinis uždarytas

uždaryta = 1;

pasaulinė kamera

kamera = kamerų lenta (rpi);

pasaulinis m

m = mobiledev;

pasaulinės ems

ems = 'Buvo pranešta apie ekstremalią situaciją, apie kurią pranešama EMS';

pasaulinis t_count

t_count = 0;

%slaptažodžio jungtis yra EFGroup6

Ciklo laikmačio funkcija --------------------------------

app.counter = 0;

t = laikmatis (…

„TimerFcn“, @app.timerCallback,…

„StartDelay“, 1,… „Periodas“, 1,…

„ExecutionMode“, „fiksuotas tarpas“,…

„TasksToExecute“, inf);

pradžia (t);

galas

% Atšaukimo funkcija

funkcija ManualOverrideSwitchValueChanged (programa, įvykis)

galas

% Mygtuko paspaudimo funkcija: „OpenGateButton“

funkcija OpenGateButtonPushed (programa, įvykis)

globalus uždarymas

uždaryti = 0;

galas

% Mygtuko paspaudimo funkcija: CloseGateButton

funkcija CloseGateButtonPushed (programa, įvykis)

pasaulinis atviras

atviras = 0;

galas

galas

% Programos inicijavimas ir kūrimas

metodai (prieiga = privatus)

% Sukurkite UIFigure ir komponentus

funkcija createComponents (programa)

% Sukurkite UIFigure

app. UIFigure = uifigure;

app. UIFigure. Position = [100 100 640 480];

app. UIFigure. Name = 'UI paveikslėlis';

% Sukurkite „RailwaygatestatusLampLabel“

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'teisinga'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Geležinkelio vartų būsena';

% Sukurti gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

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

% Sukurti „OpenGateButton“

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

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (programa, @OpenGateButtonPushed, tiesa); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Atidaryti vartai';

% Sukurti „CloseGateButton“

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

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

app. CloseGateButton. Text = 'Uždaryti vartus';

% Sukurkite UIAx

app. UIAxes = uiaxes (app. UIFigure);

pavadinimas (app. UIAxes, „Camera Feed“)

app. UIAxes. Position = [341 43 300 185];

% Sukurti „EmergencyButtonStatusLampLabel“

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'teisinga'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Avarinio mygtuko būsena';

% Sukurti „EmergencyButtonStatusLamp“

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

% Sukurti nepaprastas sąlygasLabelė

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Normaliomis sąlygomis';

% Sukurkite UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

pavadinimas (ap. UIAxes2, „Traukinio padėtis“)

„xlabel“(app. UIAxes2, „X Position“)

ylabel (app. UIAxes2, „Y Position“)

app. UIAxes2. Box = 'įjungta';

app. UIAxes2. XGrid = 'įjungta';

app. UIAxes2. YGrid = 'įjungta';

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

% Sukurkite EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'centras';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'paryškinta';

app. EF230Group6Label. Position = [-4 401 379 64];

app. EF230Group6Label. Text = 'EF 230 6 grupė';

% Sukurti IanAllishKellyBondIanDaffronLabel

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

% Sukurti LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Užbaigtos kilpos:';

% Sukurti etiketę

app. Label = uilabel (app. UIFigure);

app. Label. Position = [120 10 178 22];

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

galas

galas

metodai (prieiga = vieša)

% Konstruoti programą

funkcija app = micro

% Sukurkite ir sukonfigūruokite komponentus

createComponents (programa)

% Užregistruokite programą naudodami „App Designer“

registerApp (programa, programa. UIFigure)

% Vykdykite paleidimo funkciją

runStartupFcn (programa, @startupFcn)

jei nargoras == 0

išvalyti programą

galas

galas

% Kodas, vykdomas prieš ištrinant programą

ištrinti (programa)

% Ištrinti UIFigure, kai programa ištrinama

ištrinti (app. UIFigure)

galas

galas

galas

4 žingsnis: paskutinis žingsnis

Paskutinis žingsnis
Paskutinis žingsnis

Kai kodas bus parašytas ir „Raspberry Pi“prijungtas, pritvirtinkite servo variklį prie 3-D atspausdintų geležinkelio bėgių vartų, kaip parodyta paveikslėlyje aukščiau.

Dabar projektas baigtas. Prijunkite aviečių PI prie traukinio bėgių ir stebėkite naują sistemą, kuriančią saugesnes geležinkelio pervažas tiek automobilių vairuotojams, tiek konduktoriams. Žaiskite su sistema sąveikaudami su GUI, kad suaktyvintumėte neveikiančius seifus, kad išvengtumėte nelaimingų atsitikimų.

Tai pamokos pabaiga, mėgaukitės savo naująja „Smart Train System“!

Rekomenduojamas: