Orodha ya maudhui:

Mfumo wa Treni mahiri: Hatua 4
Mfumo wa Treni mahiri: Hatua 4

Video: Mfumo wa Treni mahiri: Hatua 4

Video: Mfumo wa Treni mahiri: Hatua 4
Video: Автоматический календарь-планировщик смен в Excel 2024, Novemba
Anonim
Mfumo wa Treni mahiri
Mfumo wa Treni mahiri

Iliyoundwa ili kuongeza usalama, kuzuia ajali, na kuongeza majibu mazuri na yenye tija kusaidia ikiwa ajali zinatokea.

Hatua ya 1: Sehemu na Vifaa

Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa
Sehemu na Vifaa

Picha hapo juu zimewekwa kwa mpangilio wa Orodha ya Sehemu hapa chini:

Orodha ya Sehemu

1) Raspberry moja PI 3 - Mfano B

2) Bodi moja ya mkate

3) nyaya (kutoka Juu hadi chini) - Nguvu moja, Ethernet moja, Adapter moja

4) Moja Servo Motor

5) Lango moja la Reli la kuchapishwa la 3D

6) LED mbili (Ikiwezekana Nyekundu na Kijani)

7) Kitufe kimoja cha Bonyeza

8) waya kumi za jumper

9) Resistors nne

10) Laptop au Desktop na MATLAB

Hatua ya 2: Usanidi

Usanidi
Usanidi
Usanidi
Usanidi
Usanidi
Usanidi
Usanidi
Usanidi

Hapo juu kuna picha za usanidi kutoka kwa pembe nyingi:

Sehemu za pini (herufi ndogo ikifuatiwa na nambari ya safu) zimeorodheshwa hapa chini kwa kufuata mtiririko wa sasa.

Waya:

j19 hadi i47

j8 hadi b50

b5 kwa Servo

c6 kwa Servo

b7 kwa servo

a13 hadi j7

a17 hadi LED

LED hadi a37

e40 hadi j20

j53 hadi j18

j7 kwa LED

LED hadi j6

Kitufe:

e54 hadi h51

Kizuizi:

d40 hadi b37

c50 hadi d54

i51 hadi j47

Hatua ya 3: Kanuni na Mantiki

Kanuni na Mantiki
Kanuni na Mantiki

Lengo la mfumo wetu wa treni ni kuongeza usalama na kupunguza hatari za ajali zinazoweza kusababisha vifo kwenye njia za reli. Ili kufanikisha hili, mfumo wetu una mfumo wa onyo la treni kwa madereva, kizuizi cha mwili ambacho kinashushwa kuzuia magari kuvuka njia, na kitufe cha dharura cha dharura kwa kondakta kubonyeza ikiwa mfumo wa onyo la mapema unashindwa.

Mfumo wa Uendeshaji wa Kondakta wa GUI:

GUI, iliyoonyeshwa hapo juu, iliundwa kwa matumizi ya kondakta wanapokuwa wakiendesha gari moshi kupitia sehemu za njia ambazo zina vivuko vya reli ya trafiki ya gari.

Kona ya juu ya mkono wa kulia, kuna taa ambayo humjulisha kondakta ikiwa lango lijalo la njia ya reli limefungwa na kumruhusu kondakta kufungua au kufunga lango ikiwa inahitajika. Chini ya hayo, malisho kutoka kwa kamera ambazo kupita kwa gari moshi huonyeshwa. Kwenye kona ya chini kushoto, eneo la gari moshi linaendelea kupangwa kwenye grafu na chini ya grafu, idadi ya magurudumu ambayo treni ilikuwa imekamilisha kwa siku imeelezwa. Juu ya grafu ya msimamo, Kuna kitufe cha dharura na taarifa ya hali. Hii inaruhusu kondakta kuashiria dharura ikiwa kuna gari kwenye wimbo au lango la usalama halifanyi kazi vizuri.

Nambari:

classdef micro <matlab.apps. AppBase% Mali ambazo zinahusiana na vifaa vya programu

mali (Ufikiaji = umma)

UIFigure matlab.ui. Kielelezo

Huduma zote za mtandaoni

langoLamp matlab.ui.control. Lamp

OpenGateButton matlab.ui.control. Button

KaribuGateButton matlab.ui.control. Button

UIAxes matlab.ui.control. UIAxes

DharuraButtonStatusLampLabel matlab.ui.control. Label

DharuraButtonStatusLamp matlab.ui.control. Lamp

Hali isiyo ya kawaidaLabel matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

Vitanzi vimekamilikaLabel matlab.ui.control. Label

Lebo ya matlab.ui.control. Label

mwisho

mali (Ufikiaji = faragha)

kaunta int16

mwisho

mbinu (Ufikiaji = umma)

kipima muda cha kazi Call (programu, src, tukio)

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

programu.counter = app.counter + 1;

% piga vigezo vyote ambavyo programu inahitaji - - - - - - - - - - - - - -

rpi ya kimataifa

kimataifa s

kimataifa wazi

karibu duniani

cam ya kimataifa

kimataifa m

ems za ulimwengu

hesabu ya kimataifa

% ------------------------- Sehemu ya Jeshi la Treni -------------------- ---------

ikiwa wazi == 0

nafasi (s, 50)

app.gateLamp. Color = 'kijani';

mwisho

ikiwa karibu == 0

nafasi (s, 120)

app.gateLamp. Color = 'nyekundu';

mwisho

% ---------------------- Kugundua Mwendo kupitia Kamera -----------------------

wakati ni kweli

img = picha ndogo (cam);

picha (img);

programu. UIAxes (kisu)

mwisho

% ---------------------- Mkono wazi / funga ---------------------- --------------

ikiwa inasomaDigitalPin (rpi, 20)> 1% inasoma pini 17 (kifungo) na inakagua ishara

kwa i = 40:.5: 150% huinua daraja

andika Nafasi (s, i)

mwisho

kwa i = 1:10% vitanzi vinaangaza mwangaza mwekundu x kiasi cha nyakati

andikaDigitalPin (rpi, 13, 1)

pumzika (.5)

andikaDigitalPin (rpi, 13, 0)

pumzika (.5)

mwisho

writePosition (s, 50)% weka lango chini

mwisho

% -------------------- Usaidizi wa Simu ya Mkononi / Kiwanja -------- -

Kuongeza kasiSensorEnabled = 1

mlogging = 1

data = zero (200, 1); % intialize data kwa rolling njama

takwimu (programu. UIAxes2)

p = njama (data)

mhimili ([xbounda, ybounds])

pumzika (1)

tic

wakati toc <30% kukimbia kwa sekunde 30

[a, ~] = sifa (m);

ikiwa urefu (a)> 200

data = a (mwisho-199: mwisho, 3);

mwingine

data (1: urefu (a)) = a (:, 3);

mwisho

% kupanga tena njama

p. Yata = data;

onyesha

mwisho

% ------------------ Mabadiliko ya Pixel ya Ghafla ---------------------- ------

x1 = img; inasoma kamera mbali na pi

red_mean = maana (maana (x1 (:,:, 1))); % inasoma kiasi cha wastani cha saizi nyekundu

green_mean = maana (maana (x1 (:,:, 2))); % inasoma kiasi cha wastani cha saizi za kijani kibichi

blue_mean = maana (maana (x1 (:,:, 3))); % inasoma kiasi cha wastani cha saizi za bluu

ikiwa nyekundu_maana> 150 && green_mean> 150 && blue_mean> 150

hesabu = t_hesabu + 1;

mwisho

programu. LoopsCompletedLabel. Text = num2str (t_count)

% ------------------ Kifungo EMS programu ---------------------------- ---

sanidiPin (rpi, 12, 'DigitalOutput'); % huweka pini iliyoongozwa, pini 16, kama pato

sanidiPin (rpi, 16, 'DigitalInput'); % huweka pini ya kifungo, piga 24, kama pembejeo

kifungo kilichochapishwa = somaDigitalPin (rpi, 16); Inasoma kitufe cha waandishi wa habari juu ya pini 16

ikiwa kitufeBonyeza == 1

wakati kitufeBonyeza == 1

andikaDigitalPin (rpi, 12, 1)

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

end% Inaisha 'wakati kitufeBonyeza == 1' kitanzi

mwisho

writeDigitalPin (rpi, 16, 0)% Inaweka kuongozwa kuzima wakati kitufe kisichobanwa setpref ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Mtandao', 'E_mail', '[email protected]'); Akaunti ya barua ya kutuma kutoka setpref ('Mtandao', 'SMTP_Username', '[email protected]'); % sentpref ya watumaji ('Mtandao', 'SMTP_Password', 'efgroup6'); Nenosiri la watumaji

props = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'kweli'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); prop.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('[email protected] ',' Hali ya Dharura! ',' Kondakta amewasha swichi ya kupuuza mwongozo, akiuliza majibu mara moja! ')

programu. Hali isiyo ya kawaidaLabel. Text = ems

mwisho

mwisho

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

njia (Ufikiaji = faragha)

Nambari inayotekelezwa baada ya kuunda sehemu

kuanza kaziFcn (programu)

% ---------- Vigezo vyote vinahitajika kwa kazi hii --------------------

rpi ya kimataifa% arduino

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

servo ya kimataifa

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

kimataifa wazi

kufungua = 1;

Ulimwengu umefungwa

imefungwa = 1;

cam ya kimataifa

cam = cameraboard (rpi);

kimataifa m

m = mobilesev;

ems za ulimwengu

ems = 'Dharura imeripotiwa, ikiarifu EMS';

hesabu ya kimataifa

hesabu = 0;

kontakt kwenye nywila% ni EFGroup6

Kazi ya Timer kwa Kitanzi --------------------------------

programu.counter = 0;

t = kipima muda (…

'TimerFcn', @ app.timerCallback,…

'StartDelay', 1,… 'Kipindi', 1,…

'Njia ya Utekelezaji', 'fastaSpacing',…

'KaziToExecute', inf);

kuanza (t);

mwisho

Kazi ya kupiga simu tena

kazi MwongozoOverrideSwitchValueChanged (programu, tukio)

mwisho

Kitufe cha kushinikiza kazi: OpenGateButton

kazi OpenGateButtonPushed (programu, tukio)

karibu duniani

karibu = 0;

mwisho

Kitufe cha kushinikiza kazi: CloseGateButton

kazi CloseGateButtonPushed (programu, tukio)

kimataifa wazi

kufungua = 0;

mwisho

mwisho

Uanzishaji wa programu na ujenzi

njia (Ufikiaji = faragha)

Unda UIFigure na vifaa

kazi ya kuunda Vipengele (programu)

Unda UIFigure

programu. UIFigure = uifigure;

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

programu. UIFigure. Name = 'Kielelezo cha UI';

Kuunda RailwaygatestatusLampLabel

programuRailwaygatestatusLampLabel = uilabel (programu. UIFigure);

programu. RailwaygatestatusLampLabel. HorizontalAlignment = 'right'; programu. RailwaygatestatusLampLabel. Position = [464 422 110 22]; programu. RailwaygatestatusLampLabel. Text = 'Hali ya lango la Reli';

Unda Taa ya lango

app.gateLamp = uilamp (programu. UIFigure);

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

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

Unda Kitufe cha OpenGate

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

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (programu, @OpenGateButtonPush, kweli); programu. OpenGateButton. Position = [474 359 100 22];

programu. OpenGateButton. Text = 'Open Gate';

Unda Kifungo cha Karibu

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

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (programu, @CloseGateButtonPush, kweli); programu. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Funga Lango';

Kuunda UIAxes

programu. UIAxes = uiaxes (programu. UIFigure);

kichwa (programu. UIAxes, 'Kulisha Kamera')

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

Kuunda dharuraButtonStatusLampLabel

programu. EmergencyButtonStatusLampLabel = uilabel (programu. UIFigure); programuEmergencyButtonStatusLampLabel. HorizontalAlignment = 'kulia'; programu. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; programu. EmergencyButtonStatusLampLabel. Text = 'Hali ya Kitufe cha Dharura';

Unda Taa ya Dharura ya Kiwango cha Dharura

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

Unda hali isiyo ya kawaidaLabel

programu. Usio wa kawaidaLabel = uilabel

programu. Hali zisizo za kawaidaLabel. Position = [108 285 248 22];

programu. Usio wa kawaidaLabel. Text = 'Katika hali ya kawaida';

Unda UIAxes2

programu. UIAxes2 = uiaxes (programu. UIFigure);

kichwa (programu. UIAxes2, 'Nafasi ya Treni')

xlabel (programu. UIAxes2, 'X Position')

ylabel (programu. UIAxes2, 'Y Position')

programu. UIAxes2. Box = 'on';

programu. UIAxes2. XGrid = 'on';

programu. UIAxes2. YGrid = 'kwenye';

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

Kuunda EF230Group6Label

programu. EF230Group6Label = uilabel (programu. UIFigure);

programu. EF230Group6Label. HorizontalAlignment = 'center';

programu. EF230Group6Label. FontSize = 28;

programu. EF230Group6Label. FontWeight = 'ujasiri';

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

programu. EF230Group6Label. Text = 'EF 230 Kikundi 6';

Kuunda IanAllishKellyBondIanDaffronLabel

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

Unda Kitanzi kilichokamilishwaLabel

programu. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Vitanzi Vimekamilika:';

Unda Lebo

programu. Label = uilabel (programu. UIFigure);

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

programu. Label. Text = '####';

mwisho

mwisho

mbinu (Ufikiaji = umma)

Jenga programu

programu ya kazi = micro

Kuunda na kusanidi vifaa

tengeneza vifaa (programu)

Sajili programu na Mbuni wa App

rejistaApp (programu, programu. Usasishaji)

Fanya kazi ya kuanza

runStartupFcn (programu, @startupFcn)

ikiwa nargout == 0

programu wazi

mwisho

mwisho

Nambari inayotekelezwa kabla ya kufutwa kwa programu

kufuta (programu)

Futa UIFigure wakati programu inafutwa

kufuta (programu. UIFigure)

mwisho

mwisho

mwisho

Hatua ya 4: Hatua ya Mwisho

Hatua ya Mwisho
Hatua ya Mwisho

Mara tu nambari imeandikwa na Raspberry Pi imefungwa waya, ambatanisha injini ya servo kwenye lango la reli ya 3-D iliyochapishwa kama ilivyoambatanishwa kwenye picha hapo juu.

Sasa, mradi umekamilika. Unganisha Risiberi PI kwenye wimbo wa treni na utazame mfumo mpya unaounda njia salama za reli kwa madereva wa gari na makondakta. Cheza na mfumo kwa kuingiliana na GUI ili kuchochea salama zilizowekwa ili kuzuia ajali.

Hiyo ndio mwisho wa mafunzo, furahiya Mfumo wako mpya wa Treni Smart!

Ilipendekeza: