Агуулгын хүснэгт:
Видео: Ухаалаг галт тэрэгний систем: 4 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:03
Аюулгүй байдлыг нэмэгдүүлэх, ослоос урьдчилан сэргийлэх, осол гарсан тохиолдолд туслах эерэг, үр бүтээлтэй хариу үйлдлийг нэмэгдүүлэх зорилготой.
Алхам 1: эд анги, материал
Дээрх зургуудыг доорх хэсгүүдийн жагсаалтын дарааллаар байрлуулна.
Эд ангиудын жагсаалт
1) Нэг Raspberry PI 3 - Б загвар
2) Нэг талхны самбар
3) Кабель (дээрээс доош) - Нэг хүч, нэг Ethernet, нэг адаптер
4) Нэг servvo мотор
5) Нэг 3D хэвлэмэл төмөр замын хаалга
6) Хоёр LED (улаан, ногоон байвал зохимжтой)
7) Нэг товчлуур
8) Арван холбогч утас
9) Дөрвөн эсэргүүцэл
10) MATLAB бүхий зөөврийн компьютер эсвэл ширээний компьютер
Алхам 2: Тохиргоо
Дээрх тохиргоог олон өнцгөөс харуулсан зургууд байна.
Зүү байршлыг (жижиг үсгээр, дараа нь мөрийн дугаараар) одоогийн урсгалыг дагаж дарааллаар жагсаав.
Утас:
j19 -ээс i47 хүртэл
j8 -аас b50 хүртэл
b5 Servo руу
c6 Servo руу
b7 servo руу
a13 -аас j7 хүртэл
a17 -аас LED хүртэл
A37 хүртэл LED
e40 -аас j20 хүртэл
j53 -аас j18 хүртэл
j7 -ийг LED болгоно
LED нь j6 хүртэл
Товч:
e54 -ээс h51 хүртэл
Эсэргүүцэл:
d40 -аас b37 хүртэл
c50 -аас d54 хүртэл
i51 -ээс j47 хүртэл
Алхам 3: Код ба логик
Манай галт тэрэгний системийн зорилго нь аюулгүй байдлыг дээшлүүлэх, төмөр замын гарам дээр хүний амь нас эрсдэж болзошгүй осол аваарыг бууруулах явдал юм. Үүнд хүрэхийн тулд манай системд жолооч нарт зориулсан галт тэрэгний анхааруулах систем, машиныг зам хөндлөн гарахаас урьдчилан сэргийлэхийн тулд буулгасан физик хаалт, эрт сэрэмжлүүлгийн систем ажиллахгүй бол кондукторыг дарах яаралтай тусламжийн товчлууртай.
GUI дамжуулагчийн үйлдлийн систем:
Дээр үзүүлсэн GUI нь галт тэргийг автомашины хөдөлгөөнтэй төмөр замын гарамтай газруудаар дамжуулж байх үед дамжуулагчийг ашиглах зорилгоор бүтээгдсэн болно.
Баруун дээд буланд удахгүй болох төмөр замын гармын хаалга хаагдсан бол дамжуулагчийг мэдэгдэх гэрэл байгаа бөгөөд шаардлагатай бол дамжуулагчийг хаалгыг онгойлгох, хаах боломжийг олгодог. Үүний доор галт тэрэг өнгөрөх камерын тэжээлийг харуулав. Зүүн доод буланд галт тэрэгний байршлыг график дээр тасралтгүй зурж, графикийн доор галт тэрэг нэг өдрийн дотор хийсэн тойргийн тоог зааж өгсөн болно. Байршлын графикийн дээр яаралтай тусламжийн товчлуур ба статусын мэдэгдэл байдаг. Энэ нь зам дээр машин байгаа эсвэл хамгаалалтын хаалга зөв ажиллахгүй байгаа тохиолдолд дамжуулагч нь яаралтай тусламжийн дохио өгөх боломжийг олгодог.
Код:
classdef micro <matlab.apps. AppBase % програмын бүрэлдэхүүн хэсгүүдэд тохирох % шинж чанарууд
шинж чанарууд (Хандалт = нийтийн)
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
Төгсгөл
шинж чанарууд (Хандалт = хувийн)
тоолуур int16
Төгсгөл
аргууд (Хандалт = нийтийн)
функц таймерCallback (апп, src, event)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%програмын шаардлагатай бүх хувьсагчийг дуудах - - - - - - - - - - - - - -
дэлхийн rpi
дэлхийн с
дэлхийн нээлттэй
дэлхийн ойрхон
дэлхийн камер
дэлхийн м
дэлхийн эм
дэлхийн t_count
%------------------------- Галт тэрэгний гар хэсэг --------------------- ---------
нээлттэй бол == 0
бичих байрлал (ууд, 50)
app.gateLamp. Color = 'ногоон';
Төгсгөл
ойр байвал == 0
бичих байрлал (ууд, 120)
app.gateLamp. Color = 'улаан';
Төгсгөл
%---------------------- Камераар дамжуулан хөдөлгөөн илрүүлэх -----------------------
үнэн байхад
img = хормын хувилбар (камер);
зураг (img);
app. UIAxes (зурсан)
Төгсгөл
%---------------------- Гар нээх/хаах ----------------------- --------------
readDigitalPin (rpi, 20)> 1 %нь 17 -р зүү (товчлуур) -ыг уншиж, дохиог шалгадаг
i = 40:.5: 150 %нь гүүрийг өргөдөг
бичих байрлал (s, i)
Төгсгөл
i = 1:10 %-ийн гогцоонуудын хувьд улаан гэрэл x удаа анивчдаг
бичихDigitalPin (rpi, 13, 1)
түр зогсоох (.5)
бичихDigitalPin (rpi, 13, 0)
түр зогсоох (.5)
Төгсгөл
writePosition (s, 50)%нь хаалгыг доош нь тавьдаг
Төгсгөл
%-------------------- Гар утасны дэмжлэг/Plot ------------------------ -
m. AccelerationSensorEnabled = 1
m.logging = 1
өгөгдөл = тэг (200, 1); %гулсмал талбайн өгөгдлийг intialize
зураг (app. UIAxes2)
p = талбай (өгөгдөл)
тэнхлэг ([xbounda, ybounds])
түр зогсоох (1)
tic
toc <30 %нь 30 секундын турш ажилладаг
[a, ~] = accellog (m);
хэрэв урт (a)> 200
өгөгдөл = a (төгсгөл-199: төгсгөл, 3);
өөр
өгөгдөл (1: урт (a)) = a (:, 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)
%------------------ Button EMS програмчлал ---------------------------- ---
configurePin (rpi, 12, 'DigitalOutput'); %нь хөтөч зүү, зүү 16 -ийг гаралт болгон тохируулдаг
configurePin (rpi, 16, 'DigitalInput'); %нь товчлуурын зүү, зүү 24 -ийг оролт болгон тохируулдаг
buttonPressed = readDigitalPin (rpi, 16); % 16 -р товчлуур дээр дарах утгыг уншина
хэрэв товчлуур дарагдсан бол == 1
товчлуур дарагдсан үед == 1
бичихDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % 'while buttonPressed == 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', 'үнэн'); 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);
аргууд (Хандалт = хувийн)
% Бүрэлдэхүүн хэсэг үүсгэсний дараа хэрэгждэг код
function 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);
дэлхийн м
м = хөдөлгөөнт төхөөрөмж;
дэлхийн эм
ems = 'БОМС -д мэдэгдсэн онцгой байдлын талаар мэдээлсэн';
дэлхийн t_count
t_count = 0;
%нууц үгийн холбогч нь EFGroup6 юм
Loop-ийн % таймер функц --------------------------------
app.counter = 0;
t = таймер (…
'TimerFcn', @app.timerCallback,…
'StartDelay', 1,… 'Хугацаа', 1,…
'ExecutionMode', 'fixedSpacing',…
'TasksToExecute', inf);
эхлэх (t);
Төгсгөл
% Дахин дуудлага хийх функц
ManualOverrideSwitchValueChanged функц (апп, үйл явдал)
Төгсгөл
% Button түлхсэн функц: OpenGateButton
OpenGateButtonPushed функц (апп, үйл явдал)
дэлхийн ойрхон
хаах = 0;
Төгсгөл
% Button дарагдсан функц: CloseGateButton
CloseGateButtonPushed функц (апп, үйл явдал)
дэлхийн нээлттэй
нээлттэй = 0;
Төгсгөл
Төгсгөл
% Апп эхлүүлэх ба бүтээх
аргууд (Хандалт = хувийн)
% 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. ErergencyButtonStatusLampLabel. 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. UndernormalconditionsLabel. 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 Position')
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 Group 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 = '####';
Төгсгөл
Төгсгөл
аргууд (Хандалт = нийтийн)
% Апп бүтээх
апп функц = микро
% Бүрэлдэхүүн хэсгүүдийг үүсгэх, тохируулах
createComponents (апп)
% Апп дизайнер дээр програмыг бүртгүүлнэ үү
registerApp (апп, апп. UIFigure)
% Эхлэх функцийг гүйцэтгэх
runStartupFcn (апп, @startupFcn)
хэрэв nargout == 0
цэвэр апп
Төгсгөл
Төгсгөл
% Апп устгахаас өмнө ажилладаг код
устгах (апп)
Апп устгагдах үед % UIFigure -ийг устгана уу
устгах (app. UIFigure)
Төгсгөл
Төгсгөл
Төгсгөл
Алхам 4: Эцсийн алхам
Кодыг бичээд Raspberry Pi утсыг холбосны дараа servo моторыг дээрх зураг дээр хавсаргасан шиг 3 хэмжээст хэвлэмэл төмөр замын төмөр замын хаалган дээр холбоно уу.
Одоо төсөл дууссан. Бөөрөлзгөнө PI -ийг галт тэрэгний замд холбож, автомашины жолооч, кондукторын хувьд аюулгүй төмөр замын гарам бий болгох шинэ системийг ажиглаарай. Осол гэмтлээс урьдчилан сэргийлэх үүднээс аюулгүй ажиллагааны сейфүүдийг ажиллуулахын тулд GUI -тэй хамтран ажиллаж, системээр тоглоорой.
Хичээл дууслаа, шинэ ухаалаг галт тэрэгний системээ сайхан өнгөрүүлээрэй!
Зөвлөмж болгож буй:
Тоглоомыг сольж дасан зохицох: уурын галт тэрэгний тоглоомыг хүртээмжтэй болгосон !: 7 алхам (зурагтай)
Тоглоомыг солих-дасан зохицох: уурын галт тэрэгний тоглоомыг хүртээмжтэй болгох !: Тоглоомын дасан зохицох чадвар нь моторын чадвар хязгаарлагдмал эсвэл хөгжлийн бэрхшээлтэй хүүхдүүдэд тоглоомтой бие даан харилцах боломжийг олгох шинэ арга зам, тусгай шийдлийг нээж өгдөг. Ихэнх тохиолдолд дасан зохицсон тоглоом авах шаардлагатай хүүхдүүд
Тоглоомыг тохируулаарай: WolVol галт тэрэгний унтраалга ашиглах боломжтой! 7 алхам
Тоглоомыг дасан зохицох: WolVol галт тэрэгний унтраалга ашиглах боломжтой! Тоглоомын дасан зохицох чадвар нь моторын чадвар хязгаарлагдмал эсвэл хөгжлийн бэрхшээлтэй хүүхдүүдэд тоглоомтой бие даан харилцах боломжийг олгох шинэ арга зам, тохируулсан шийдлийг нээж өгдөг. Ихэнх тохиолдолд дасан зохицсон тоглоом авах шаардлагатай хүүхдүүд
Галт тэрэгний гарцын хяналтын систем: 5 алхам (зурагтай)
Галт тэрэгний гарцыг хянах систем: Энэхүү зааварчилгаа нь төмөр замын системийн нэг хэсгийг хянахын тулд Arduino -г кодлохын тулд MatLab -ийг хэрхэн ашиглахыг зааж өгөх болно
Галт тэрэгний суудлын систем: 4 алхам (зурагтай)
Галт тэрэгний суудлын систем: Өнөөдөр бид галт тэрэгний суудалд хэрэгжүүлэх боломжтой системийг хийлээ. Бид бухимдлыг олж, түүний шийдлийг гаргах ёстой байв. Бид одоо байгаа галт тэрэгний тэргэн дээр суудал авах боломжтой эсэхийг танд хэлэх системийг бий болгохоор шийдсэн. Юу ч алга
Галт тэрэгний суудлын хүртээмжтэй байдлын мэдээллийн систем - УБХ: 8 алхам
Галт тэрэгний суудлын хүртээмжтэй байдлын мэдээллийн систем - ЗБХ: Энэхүү төсөл нь өртөөнд байгаа хүмүүст ямар суудал үнэгүй байдгийг мэдэх боломжийг олгодог галт тэрэгний масштабаар хийгдсэн төсөл юм. Прототипийг хэрэгжүүлэхийн тулд Arduino UNO програм хангамжийг боловсруулалтын хамт ашигладаг