Мазмұны:

Ақылды пойыз жүйесі: 4 қадам
Ақылды пойыз жүйесі: 4 қадам

Бейне: Ақылды пойыз жүйесі: 4 қадам

Бейне: Ақылды пойыз жүйесі: 4 қадам
Бейне: Өлді деп жерлемек болған еді. Бірақ Алланың қалауымен тірілген Бала 2024, Шілде
Anonim
Ақылды пойыз жүйесі
Ақылды пойыз жүйесі

Қауіпсіздікті күшейтуге, жазатайым оқиғалардың алдын алуға және апат болған жағдайда көмектесу үшін оң және өнімді әрекетті арттыруға арналған.

1 -қадам: Бөлшектер мен материалдар

Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар
Бөлшектер мен материалдар

Жоғарыдағы суреттер төмендегі бөліктер тізімінің ретімен орналастырылған:

Бөлшектер тізімі

1) Бір таңқурай PI 3 - В үлгісі

2) Бір нан тақтасы

3) Кабельдер (жоғарыдан төменге қарай) - Бір қуат, бір Ethernet, бір адаптер

4) бір серво моторы

5) 3D басып шығарылған бір теміржол қақпасы

6) екі светодиод (жақсырақ қызыл және жасыл)

7) Бір басу түймесі

8) Он секіргіш сым

9) Төрт резистор

10) MATLAB қосылған ноутбук немесе жұмыс үстелі

2 -қадам: конфигурация

Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация
Конфигурация

Жоғарыда конфигурацияның бірнеше қырынан суреттері берілген:

Істеуші орындар (кіші әріптен кейін жол нөмірі) ағымдағы ағымға сәйкес ретімен төменде келтірілген.

Сымдар:

j19 - i47

j8 -ден b50 -ге дейін

b5 Сервоға

c6 сервиске

b7 сервоға

a13 - j7

a17 светодиодқа

A37 жарықдиодты

e40 - j20

j53 - j18

j7 жарық диодына

Жарықдиодты j6

Түйме:

e54 - h51

Резисторлар:

d40 - b37

c50 - d54

i51 - j47

3 -қадам: код және логика

Логика мен код
Логика мен код

Біздің пойыз жүйесінің мақсаты - қауіпсіздікті арттыру және теміржол өткелдерінде адам өліміне әкелетін апаттардың қаупін азайту. Бұған жету үшін біздің жүйеде жүргізушілерге арналған пойыздарды ескерту жүйесі, вагондардың жолдан өтуіне жол бермеу үшін төмендетілген физикалық тосқауыл, ал егер ертерек ескерту жүйесі істен шыққан жағдайда кондуктордың басу үшін резервтік авариялық түймесі бар.

GUI өткізгіш операциялық жүйесі:

Жоғарыда көрсетілген GUI кондукторды пайдалану үшін құрылған, себебі олар пойызды вагондық теміржол өткелдері бар жол учаскелері арқылы жүргізеді.

Оң жақ жоғарғы бұрышта алдағы теміржол өткелінің қақпасы жабылған жағдайда өткізгішке хабар беретін және қажет болған жағдайда кондукторға қақпаны ашуға немесе жабуға мүмкіндік беретін шам бар. Төменде поезд өтетін камералардан көрсетілген. Төменгі сол жақ бұрышта пойыздың орналасқан жері графикке үздіксіз сызылады және графиктің астында пойыздың бір күнде қанша рет өткені көрсетілген. Позиция графигінің үстінде төтенше жағдай түймесі мен күй туралы мәлімдеме бар. Бұл жолда автокөлік болса немесе қауіпсіздік қақпасы дұрыс жұмыс істемесе, өткізгішке төтенше жағдай туралы сигнал беруге мүмкіндік береді.

Код:

classdef micro <matlab.apps. AppBase % бағдарлама компоненттеріне сәйкес келетін қасиеттер

қасиеттер (Access = жалпыға қолжетімді)

UIFigure matlab.ui.сурет

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

Қалыпты емес шарттар Label matlab.ui.control. Label

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Label matlab.ui.control. Label

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

LoopsCompletedLabel matlab.ui.control. Label

Matlab.ui.control. Label белгісі

Соңы

қасиеттер (Access = жеке)

есептегіш int16

Соңы

әдістер (Access = public)

timerCallback функциясы (қолданба, src, оқиға)

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

app.counter = app.counter + 1;

%бағдарлама қажет барлық айнымалыларды шақырады - - - - - - - - - - - - - -

жаһандық rpi

жаһандық с

жаһандық ашық

жаһандық жабу

жаһандық камера

жаһандық м

жаһандық эмс

жаһандық t_count

%------------------------- Пойыз қару-жарақ бөлімі --------------------- ---------

егер ашық болса == 0

writePosition (лар, 50)

app.gateLamp. Color = 'жасыл';

Соңы

жақын болса == 0

writePosition (лар, 120)

app.gateLamp. Color = 'қызыл';

Соңы

%---------------------- Камера арқылы қозғалысты анықтау -----------------------

рас болса

img = суретке түсіру (камера);

сурет (img);

app. UIAxes (сызылған)

Соңы

%---------------------- Қолды ашу/жабу ----------------------- --------------

егер readDigitalPin (rpi, 20)> 1 %17 түйреуішті (түймені) оқиды және сигналды тексереді

i = 40:.5: 150 %көпірді көтереді

WritePosition (s, i)

Соңы

i = 1:10 %ілмектер үшін қызыл шам x рет жыпылықтайды

writeDigitalPin (rpi, 13, 1)

кідірту (.5)

writeDigitalPin (rpi, 13, 0)

кідірту (.5)

Соңы

writePosition (лар, 50)%қақпаны қояды

Соңы

%-------------------- Ұялы телефонды қолдау/сюжет ------------------------ -

m. AccelerationSensorEnabled = 1

м.логинг = 1

деректер = нөлдер (200, 1); %сюжетті жылжыту үшін деректерді енгізеді

сурет (app. UIAxes2)

p = сюжет (деректер)

ось ([xbounda, ybounds])

кідірту (1)

тик

toc <30 %30 секунд жұмыс істейді

[a, ~] = accellog (m);

егер ұзындығы (а)> 200 болса

деректер = а (соңы-199: соңы, 3);

басқа

деректер (1: ұзындық (а)) = а (:, 3);

Соңы

%сызбасын қайта сызу

p. YData = деректер;

сызылған

Соңы

%------------------ Пикселдің кенеттен өзгеруі ---------------------------- ------

x1 = img; % камераны pi -ден тыс оқиды

red_mean = орташа (орташа (x1 (:,,: 1)))); % қызыл пикселдердің орташа мөлшерін оқиды

green_mean = орташа (орташа (x1 (:,,: 2)))); % жасыл пикселдердің орташа мөлшерін оқиды

blue_mean = орташа (орташа (x1 (:,,: 3)))); % көк пикселдердің орташа мөлшерін оқиды

егер red_mean> 150 && green_mean> 150 && blue_mean> 150 болса

t_count = t_count + 1;

Соңы

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ EMS бағдарламалау батырмасы ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %шығыс ретінде істікшені, штырьді 16 орнатады

configurePin (rpi, 16, 'DigitalInput'); %түйме түйреуішін, 24 түйреуішті кіріс ретінде орнатады

buttonPressed = readDigitalPin (rpi, 16); % 16 түйреуішіндегі түймені басу мәнін оқиды

егер түймешік басылса == 1

түймесін басқанда == 1

writeDigitalPin (rpi, 12, 1)

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

end % «whilePressPressed == 1» циклін аяқтайды

Соңы

writeDigitalPin (rpi, 16, 0) %setpref ('Интернет', 'SMTP_Server', 'smtp.gmail.com') түймесі бұдан былай басылмаған кезде жарық диодты өшіреді; setpref ('Интернет', 'E_mail', '[email protected]'); setpref жіберілетін % пошта тіркелгісі ('Интернет', 'SMTP_Username', '[email protected]'); % жіберушілердің пайдаланушы аты setpref ('Интернет', 'SMTP_Password', 'efgroup6'); % Жіберушілер құпия сөзі

реквизиттер = 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] ',' Төтенше жағдай! ',' Дирижер тез арада жауап беруді талап ететін қолмен ауыстыру қосқышын іске қосты! ')

app. UndernormalconditionsLabel. Text = ems

Соңы

Соңы

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

әдістер (Access = жеке)

% Компоненттер жасалғаннан кейін орындалатын код

startupFcn функциясы (қолданба)

%---------- Бұл функция үшін қажет барлық айнымалылар --------------------

жаһандық rpi %arduino

rpi = raspi ('169.254.0.2', 'pi', 'таңқурай');

жаһандық s %servo

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

жаһандық ашық

ашық = 1;

жаһандық жабық

жабық = 1;

жаһандық камера

камера = камералық тақта (rpi);

жаһандық м

m = ұялы телефон;

жаһандық эмс

ems = 'ТЖ туралы хабарланған төтенше жағдай туралы хабарланды';

жаһандық t_count

t_count = 0;

%құпия сөзіндегі қосқыш - EFGroup6

Цикл үшін % таймер функциясы --------------------------------

app.counter = 0;

t = таймер (…

'TimerFcn', @app.timerCallback,…

'StartDelay', 1,… 'Period', 1,…

'ExecutionMode', 'fixedSpacing',…

'TasksToExecute', inf);

бастау (t);

Соңы

% Қайта қоңырау шалу функциясы

ManualOverrideSwitchValueChanged функциясы (қолданба, оқиға)

Соңы

% Батырманы басатын функция: OpenGateButton

OpenGateButtonPushed функциясы (қолданба, оқиға)

жаһандық жабу

жабу = 0;

Соңы

% Батырмасы басылатын функция: CloseGateButton

CloseGateButtonPushed функциясы (қолданба, оқиға)

жаһандық ашық

ашық = 0;

Соңы

Соңы

% Қолданбаның инициализациясы мен құрылысы

әдістер (Access = жеке)

% UIFigure мен компоненттерді жасаңыз

createComponents (қолданба) функциясы

% UIFigure жасаңыз

app. UIFigure = uifigure;

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

app. UIFigure. Name = 'UI суреті';

RailwaygatestatusLampLabel жасау

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'оңға'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Теміржол қақпасының күйі';

GateLamp жасау

app.gateLamp = uilamp (app. UIFigure);

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

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

% OpenGateButton жасаңыз

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

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (қолданба, @OpenGateButtonPushed, шын); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Есікті ашу';

% CloseGateButton жасаңыз

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

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (қолданба, @CloseGateButtonPushed, шын); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Есікті жабу';

% UIAxes құрыңыз

app. UIAxes = uiaxes (app. UIFigure);

тақырып (app. UIAxes, 'Camera Feed')

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

EmergencyButtonStatusLampLabel жасау

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'оңға'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Төтенше жағдай түймелерінің күйі';

EmergencyButtonStatusLamp жасау

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

% Қалыпты емес шарттар белгісін жасаңыз

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Қалыпты жағдайда';

% UIAxes2 жасаңыз

app. UIAxes2 = uiaxes (app. UIFigure);

атауы (app. UIAxes2, «Пойыздың орны»)

xlabel (app. UIAxes2, 'X Position')

ylabel (app. UIAxes2, 'Y позициясы')

app. UIAxes2. Box = 'қосулы';

app. UIAxes2. XGrid = 'қосулы';

app. UIAxes2. YGrid = 'қосулы';

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

% EF230Group6Label жасаңыз

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'орталық';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'қалың';

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

app. EF230Group6Label. Text = 'EF 230 6 -топ';

% IanAllishKellyBondIanDaffronLabel жасаңыз

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ян Аллиш, Келли Бонд, Ян Даффрон';

% LoopsCompletedLabel жасау

app. LoopsCompletedLabel = uilabel (app. UIFigure);

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

app. LoopsCompletedLabel. Text = 'Циклдар аяқталды:';

% Белгі жасау

app. Label = uilabel (app. UIFigure);

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

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

Соңы

Соңы

әдістер (Access = public)

% Қолданба құру

app = micro функциясы

% Компоненттерді жасаңыз және теңшеңіз

createComponents (қолданба)

% Бағдарламаны App Designer -ге тіркеңіз

registerApp (app, app. UIFigure)

% Іске қосу функциясын орындаңыз

runStartupFcn (қолданба, @startupFcn)

егер наргут == 0

таза қолданба

Соңы

Соңы

% Қолданба жойылғанға дейін орындалатын код

жою (қолданба)

% Қолданба жойылған кезде UIFigure жойыңыз

жою (app. UIFigure)

Соңы

Соңы

Соңы

4 -қадам: соңғы қадам

Соңғы қадам
Соңғы қадам

Код жазылып, Raspberry Pi сымы қосылғаннан кейін, жоғарыдағы суретте бекітілгендей, 3-D баспа теміржол қақпасына сервоприводты бекітіңіз.

Енді, жоба аяқталды. Таңқурай PI пойыз жолына қосыңыз және вагон жүргізушілері мен кондукторлар үшін қауіпсіз теміржол өткелдерін құратын жаңа жүйені қараңыз. Апаттардың алдын алу үшін орнатылған сәтсіз сейфтерді іске қосу үшін GUI -мен өзара әрекеттесу арқылы жүйемен ойнаңыз.

Оқулық осымен аяқталды, жаңа ақылды пойыз жүйесін пайдаланыңыз!

Ұсынылған: