Përmbajtje:

Sistemi Smart i Trenit: 4 Hapa
Sistemi Smart i Trenit: 4 Hapa

Video: Sistemi Smart i Trenit: 4 Hapa

Video: Sistemi Smart i Trenit: 4 Hapa
Video: Битва пылесосов. DYSON VS BISSELL. 2024, Nëntor
Anonim
Sistemi i Zgjuar i Trenit
Sistemi i Zgjuar i Trenit

Projektuar për të rritur sigurinë, për të parandaluar aksidentet dhe për të rritur reagimin pozitiv dhe produktiv për të ndihmuar nëse aksidentet ndodhin.

Hapi 1: Pjesët dhe materialet

Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet
Pjesët dhe materialet

Fotografitë e mësipërme vendosen sipas renditjes së Listës së Pjesëve më poshtë:

Lista e Pjesëve

1) Një mjedër PI 3 - Modeli B

2) Një tabelë me bukë

3) Kabllot (nga lart poshtë) - Një fuqi, një Ethernet, një përshtatës

4) Një Servo Motor

5) Një Portë Hekurudhore e Shtypur 3D

6) Dy LED (mundësisht e kuqe dhe jeshile)

7) Një buton me një shtytje

8) Dhjetë tela kërcyes

9) Katër Rezistorë

10) Laptop ose Desktop me MATLAB

Hapi 2: Konfigurimi

Konfigurimi
Konfigurimi
Konfigurimi
Konfigurimi
Konfigurimi
Konfigurimi
Konfigurimi
Konfigurimi

Më sipër janë fotografitë e konfigurimit nga kënde të shumta:

Vendndodhjet e kunjave (shkronja e vogël e ndjekur nga një numër rreshti) janë renditur më poshtë sipas renditjes pas rrjedhës aktuale.

Telat:

j19 deri në i47

j8 deri në b50

b5 në Servo

c6 në Servo

b7 në servo

a13 deri j7

a17 në LED

LED në a37

e40 deri në j20

j53 deri në j18

j7 në LED

LED në j6

Butoni:

e54 deri në h51

Rezistentët:

d40 në b37

c50 deri d54

i51 deri në j47

Hapi 3: Kodi dhe Logjika

Kodi dhe Logjika
Kodi dhe Logjika

Qëllimi i sistemit tonë të trenave është të rrisë sigurinë dhe të ulë rrezikun e aksidenteve potencialisht vdekjeprurëse në vendkalimet hekurudhore. Për ta arritur këtë, sistemi ynë ka një sistem paralajmërimi të trenit për shoferët, një barrierë fizike që ulet për të parandaluar kalimin e makinave nga pista, dhe një buton urgjence rezervë që përcjellësi të shtypë nëse sistemi i paralajmërimit të hershëm dështon.

Sistemi operativ i përcjellësit GUI:

GUI, e treguar më lart, u krijua për përdorimin e përcjellësit ndërsa ata po ngasin trenin nëpër zona të shinave që kanë vendkalime hekurudhore të trafikut të makinave.

Në këndin e sipërm të djathtë, ka një dritë që njofton përcjellësin nëse një portë e ardhshme e kalimit hekurudhor është e mbyllur dhe lejon që përcjellësi të hapë ose mbyllë portën nëse është e nevojshme. Nën atë, tregohet ushqimi nga kamerat që kalon treni. Në këndin e poshtëm të majtë, vendndodhja e trenit është vizatuar vazhdimisht në një grafik dhe poshtë grafikut, tregohet numri i xhirove që treni kishte përfunduar në një ditë. Mbi grafikun e pozicionit, Ka një buton emergjence dhe deklaratë statusi. Kjo i lejon përcjellësit të sinjalizojë për një urgjencë nëse ka një makinë në shirit ose porta e sigurisë nuk po funksionon siç duhet.

Kodi:

classdef micro <matlab.apps. AppBase % Karakteristikat që korrespondojnë me përbërësit e aplikacionit

pronat (Qasja = publike)

UIFigura matlab.ui. Figura

HekurudhagatestatusLampLabel matlab.ui.control. Label

gateLamp matlab.ui.control. Lamp

Butoni 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

Kushtet nën normaleLabel matlab.ui.control. Etiketë

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Etiketa matlab.ui.control. Etiketë

fund

pronat (Qasja = private)

sporteli int16

fund

metodat (Qasja = publike)

kohëmatësi i funksionitCallback (aplikacion, src, ngjarje)

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

app.counter = app.counter + 1;

%thërrasë të gjitha variablat për të cilat ka nevojë programi - - - - - - - - - - - - - -

rpi globale

globale s

globale e hapur

mbyllje globale

kamera globale

globale m

ems global

numër global t_

%------------------------- Seksioni i krahut të trenit --------------------- ---------

nëse është e hapur == 0

shkruajPozita (s, 50)

app.gateLamp. Color = 'jeshile';

fund

nëse mbyllet == 0

shkruajPozicioni (et, 120)

app.gateLamp. Color = 'e kuqe';

fund

%---------------------- Zbulimi i lëvizjes përmes kamerës -----------------------

ndërsa e vërtetë

img = fotografi (kamera);

imazh (img);

aplikacioni. UIAxes (tani)

fund

%---------------------- Krahu hapur/mbyllur ----------------------- --------------

nëse readDigitalPin (rpi, 20)> 1 %lexon pin 17 (butoni) dhe kontrollon për sinjalin

për i = 40:.5: 150 %ngre urë

shkruajPozicioni (at, i)

fund

për i = 1:10 %sythe që pulsojnë dritën e kuqe x shumë herë

shkruajDigitalPin (rpi, 13, 1)

pauzë (.5)

shkruajDigitalPin (rpi, 13, 0)

pauzë (.5)

fund

writePosition (s, 50)%vënë portën poshtë

fund

%-------------------- Mbështetje/Komplot për telefonin celular ------------------------ -

m. Përshpejtimi SensorE aktivizuar = 1

m. bllokim = 1

të dhëna = zero (200, 1); %intializoj të dhënat për komplotin e rrotulluar

figura (aplikacioni UIAxes2)

p = komplot (të dhëna)

boshti ([xbounda, ybounds])

pauzë (1)

tik

ndërsa toc <30 %vrapon për 30 sekonda

[a, ~] = shtojcë (m);

nëse gjatësia (a)> 200

të dhëna = a (fund-199: fund, 3);

tjeter

të dhëna (1: gjatësia (a)) = a (:, 3);

fund

%komplot i rishikuar

p. YData = të dhëna;

tërheqje

fund

%------------------ Ndryshimi i papritur i pixel ---------------------------- ------

x1 = img; % lexon kamerën jashtë pi

e kuqe_kuptim = mesatarja (mesatarja (x1 (:,,, 1)))); % lexon sasinë mesatare të pikselave të kuq

gjelbër_kuptimi = mesatarja (mesatarja (x1 (:,,, 2))); % lexon sasinë mesatare të pikselëve të gjelbër

blu_kuptimi = mesatarja (mesatarja (x1 (:,,, 3))); % lexon sasinë mesatare të pikselëve blu

nëse red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

fund

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Programimi i butonit EMS ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %vendos pinin led, pin 16, si dalje

configurePin (rpi, 16, 'DigitalInput'); %vendos pinin e butonit, kunja 24, si hyrje

buttonPressed = lexoDigitalPin (rpi, 16); % Lexon vlerën e shtypjes së butonit në kunjin 16

nëse butoniPresuar == 1

ndërsa butoniPresuar == 1

shkruajDigitalPin (rpi, 12, 1)

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

fund % Përfundon lakun 'while buttonPressed == 1'

fund

writeDigitalPin (rpi, 16, 0) %Vendos çaktivizimin e led kur butoni nuk shtypet më setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); % llogari postare për t'u dërguar nga setpref ('Internet', 'SMTP_Username', '[email protected]'); % e dërguesit të emrit të përdoruesit setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Fjalëkalimi i dërguesve

props = java.lang. System.getProposies;

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] ',' Statusi i Urgjencës! ',' Përçuesi ka aktivizuar ndërprerësin manual të anulimit, duke kërkuar përgjigje të menjëhershme! ')

app. UndernormalconditionsLabel. Text = ems

fund

fund

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

metodat (Qasja = private)

% Kodi që ekzekutohet pas krijimit të komponentit

fillimi i funksionitFcn (aplikacioni)

%---------- Të gjitha ndryshoret e nevojshme për këtë funksion --------------------

rpi globale %arduino

rpi = raspi ('169.254.0.2', 'pi', 'mjedër');

global s %servo

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

globale e hapur

hapur = 1;

globale e mbyllur

mbyllur = 1;

kamera globale

kamera = kamera (rpi);

globale m

m = mobiledev;

ems global

ems = 'emergencyshtë raportuar një emergjencë, duke njoftuar EMS';

numër global t_

t_ numër = 0;

lidhësi në %fjalëkalimin është EFGroup6

% Funksioni i kohëmatësit për lak --------------------------------

app.counter = 0;

t = kohëmatës (…

'TimerFcn', @app.timerCallback,…

'StartDelay', 1,… 'Periudha', 1,…

'Modeli i Ekzekutimit', 'fiksimi i hapësirës',…

'TasksToExecute', inf);

fillimi (t);

fund

% Funksioni i përgjigjes

funksioni ManualOverrideSwitchValueChanged (aplikacion, ngjarje)

fund

% Button funksioni i shtyrë: OpenGateButton

funksioni OpenGateButtonPushed (aplikacion, ngjarje)

mbyllje globale

mbyll = 0;

fund

Funksioni % Button i shtyrë: CloseGateButton

funksioni CloseGateButtonPushed (aplikacion, ngjarje)

globale e hapur

hapur = 0;

fund

fund

% Fillimi dhe ndërtimi i aplikacionit

metodat (Qasja = private)

% Krijo UIFigure dhe komponentë

funksioni i krijuar Komponentët (aplikacioni)

% Krijo UIFigure

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'Figura e UI';

% Krijo RailwaygatestatusLampLabel

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'djathtas'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Statusi i portës së hekurudhës';

% Krijo gateLamp

app.gateLamp = uilamp (app. UIFigure);

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

app.gateLamp. Ngjyra = [0.9412 0.9412 0.9412];

% Krijo butonin OpenGateButton

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

app. OpenGateButton. ButtonPushedFcn = krijoCallbackFcn (aplikacioni, @OpenGateButtonPushed, true); app. OpenGateButton. Pozicioni = [474 359 100 22];

app. OpenGateButton. Text = 'Hap Portën';

% Krijo CloseGateButton

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

app. CloseGateButton. ButtonPushedFcn = krijoCallbackFcn (aplikacioni, @CloseGateButtonPushed, true); app. CloseGateButton. Pozicioni = [474 285 100 22];

app. CloseGateButton. Text = 'Mbyll Portën';

% Krijo UIAxes

app. UIAxes = uiaxes (app. UIFigure);

titulli (aplikacioni. UIAxes, 'Camera Feed')

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

% Krijo EmergencyButtonStatusLampLabel

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'djathtas'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Statusi i Butonit të Urgjencës';

% Krijo EmergencyButtonStatusLamp

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

% Krijo Etiketë Undernormalconditions

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Në kushte normale';

% Krijo UIAxes2

app. UIAxes2 = uiaxes (app. UIFigure);

titulli (aplikacioni UIAxes2, 'Pozicioni i trenit')

xlabel (aplikacioni. UIAxes2, 'Pozicioni X')

ylabel (aplikacioni UIAxes2, 'Pozicioni Y')

app. UIAxes2. Box = 'aktiv';

app. UIAxes2. XGrid = 'aktiv';

app. UIAxes2. YGrid = 'aktiv';

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

% Krijo EF230Group6Label

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'qendra';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'bold';

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

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

% Krijo IanAllishKellyBondIanDaffronLabel

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

% Krijo LoopsCompletedLabel

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Loops Completed:';

% Krijo Etiketë

app. Label = uilabel (app. UIFigure);

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

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

fund

fund

metodat (Qasja = publike)

% Ndërto aplikacionin

aplikacioni i funksionit = mikro

% Krijo dhe konfiguro komponentët

krijo Komponentët (aplikacioni)

% Regjistroni aplikacionin me Projektuesin e Aplikacioneve

registerApp (aplikacioni, aplikacioni. UIFigura)

% Ekzekutoni funksionin e fillimit

runStartupFcn (aplikacioni, @startupFcn)

nëse nargout == 0

aplikacion i qartë

fund

fund

% Kodi që ekzekutohet para fshirjes së aplikacionit

fshi (aplikacionin)

% Fshi UIFigura kur fshihet aplikacioni

fshini (app. UIFigure)

fund

fund

fund

Hapi 4: Hapi i fundit

Hapi Final
Hapi Final

Pasi të jetë shkruar kodi dhe të jetë lidhur Raspberry Pi, bashkojeni servo motorin me portën hekurudhore të printuar 3-D siç është bashkangjitur në foton e mësipërme.

Tani, projekti ka përfunduar. Lidhni PI -në e mjedrës me shinën e trenit dhe vëzhgoni sistemin e ri që krijon vendkalime më të sigurta hekurudhore si për drejtuesit e makinave ashtu edhe për konduktorët. Luani me sistemin duke bashkëvepruar me GUI për të shkaktuar kasafortat e dështuara të vendosura për të parandaluar aksidentet.

Ky është fundi i mësimit, shijoni sistemin tuaj të ri Smart Train!

Recommended: