Мазмұны:
- 1 -қадам: Бөлшектер мен материалдар
- 2 -қадам: конфигурация
- 3 -қадам: код және логика
- 4 -қадам: соңғы қадам
Бейне: Ақылды пойыз жүйесі: 4 қадам
2024 Автор: John Day | [email protected]. Соңғы өзгертілген: 2024-01-30 10:25
Қауіпсіздікті күшейтуге, жазатайым оқиғалардың алдын алуға және апат болған жағдайда көмектесу үшін оң және өнімді әрекетті арттыруға арналған.
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 -мен өзара әрекеттесу арқылы жүйемен ойнаңыз.
Оқулық осымен аяқталды, жаңа ақылды пойыз жүйесін пайдаланыңыз!
Ұсынылған:
NodeMCU ESP8266 қолданатын IoT негізделген ақылды тұрақ жүйесі: 5 қадам
NodeMCU ESP8266 қолданатын IoT негізіндегі ақылды тұрақ жүйесі: Қазіргі уақытта адамдар көп жүретін жерлерде автотұрақ табу өте қиын, ал желіде автотұрақтардың бар -жоғын білетін жүйе жоқ. Телефоныңызда автотұрақ бар екендігі туралы ақпаратты ала алатындығыңызды елестетіп көріңіз, ал сізде роуминг жоқ па?
Ақылды жаяу жарықтандыру жүйесі- Сейлор Мун тобы: 12 қадам
Ақылды жүру жолын жарықтандыру жүйесі- Сейлор Мун тобы: Сәлеметсіз бе! Бұл Грейс Ри, Срижеш Конаканчи және Хуан Ланди, және біз бірге Сейлор Мун тобымыз! Бүгін біз сізге өзіңіздің жеке үйіңізде жүзеге асыруға болатын екі бөліктен тұратын DIY жобасын ұсынамыз. Біздің ақылды жаяу жүргіншілер жолының соңғы жарықтандыру жүйесі ул
Ақылды перделер жүйесі: 4 қадам
Ақылды перделер жүйесі: Сіз бөлме тым ыстық және жарық болған кезде жабылатын, сонымен қатар оны қашықтан басқара алатын ақылды перде жүйесін алғыңыз келе ме? Міне, мен сізге оны қалай оңай жасау керектігін көрсетемін ~
Күнмен жұмыс істейтін «ақылды» WiFi басқарылатын суару жүйесі: 6 қадам (суреттермен)
Күн энергиясымен жұмыс істейтін «ақылды» WiFi басқарылатын суару жүйесі: Бұл жоба ebay -дің стандартты DIY күн сәулесі мен 12v бөлшектерін, сонымен қатар Shelly IoT құрылғыларымен және үйдегі, толық күн сәулесімен жұмыс істейтін, ақылды бақтың электр желісі мен суаруды жасау үшін openHAB -тегі негізгі бағдарламалауды қолданады. Орнату. Жүйенің ерекшеліктері: Қосымша
SmartBox - сіздің үйге арналған ақылды үй жүйесі: 6 қадам
SmartBox - Сіздің бөлмеңізге арналған ақылды үй жүйесі: Барлығына сәлем! Бұл нұсқаулықта мен сізге ақылды бөлме жүйесін қалай жасау керектігін түсіндіремін. Бұл жүйе екі құрылғыдан тұрады: ылғалдылық сенсоры мен температура сенсоры бар жалпы құрылғы. Сіз