Mundarija:
- 1 -qadam: ehtiyot qismlar va materiallar
- 2 -qadam: Konfiguratsiya
- 3 -qadam: Kod va mantiq
- 4 -qadam: Oxirgi qadam
Video: Aqlli poezd tizimi: 4 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Xavfsizlikni oshirish, baxtsiz hodisalarning oldini olish va baxtsiz hodisalar ro'y berganda yordam berish uchun ijobiy va mahsuldor javobni oshirish uchun mo'ljallangan.
1 -qadam: ehtiyot qismlar va materiallar
Yuqoridagi rasmlar quyidagi qismlar ro'yxati tartibida joylashtirilgan:
Qismlar ro'yxati
1) bitta Raspberry PI 3 - B modeli
2) bitta non paneli
3) Kabellar (yuqoridan pastgacha) - bitta quvvat, bitta chekilgan tarmoq, bitta adapter
4) bitta servo dvigatel
5) bitta 3D bosma temir yo'l darvozasi
6) ikkita LED (yaxshisi qizil va yashil)
7) bitta bosish tugmasi
8) O'nta o'tish simlari
9) To'rt rezistor
10) MATLAB bilan noutbuk yoki ish stoli
2 -qadam: Konfiguratsiya
Yuqorida konfiguratsiyaning turli burchaklardan rasmlari:
Pin joylari (kichik harf va qator raqami) quyida joriy oqimga muvofiq tartibda keltirilgan.
Simlar:
j19 dan i47 gacha
j8 dan b50 gacha
b5 Servo -ga
c6 Servo -ga
b7 servoga
a13 dan j7gacha
a17 dan LEDgacha
LED 37 ga qadar
e40 dan j20 gacha
j53 dan j18 gacha
j7 dan LEDgacha
LED uchun j6
Tugma:
e54 dan h51 gacha
Rezistorlar:
d40 dan b37 gacha
c50 dan d54 gacha
i51 dan j47 gacha
3 -qadam: Kod va mantiq
Bizning poezd tizimining maqsadi - xavfsizlikni oshirish va temir yo'l kesishmalarida o'limga olib kelishi mumkin bo'lgan baxtsiz hodisalar xavfini kamaytirish. Bunga erishish uchun bizning tizimda haydovchilar uchun poezdlarni ogohlantirish tizimi, avtomashinalarning yo'lni kesib o'tishiga yo'l qo'ymaslik uchun tushiriladigan jismoniy to'siq va agar erta ogohlantirish tizimi ishlamay qolsa, konduktor bosadigan favqulodda zaxira tugmasi mavjud.
GUI Supero'tkazuvchilar operatsion tizimi:
Yuqorida ko'rsatilgan GUI konduktordan foydalanish uchun yaratilgan, chunki ular poezdni temir yo'l kesishgan avtomobil yo'llari bo'ylab olib boradilar.
O'ng yuqori burchakda, yaqinlashib kelayotgan temir yo'l o'tish eshigi yopilgan bo'lsa, konduktorga xabar beradigan va agar kerak bo'lsa, konduktorga eshikni ochish yoki yopishga ruxsat beruvchi yorug'lik bor. Pastda, poezd o'tayotgan kameralar tasmasi ko'rsatilgan. Pastki chap burchakda poezdning joylashuvi doimiy ravishda grafika bo'yicha chiziladi va grafik ostida, poezdning bir kunda bajargan aylanishi soni ko'rsatilgan. Joylashuv grafigining tepasida favqulodda vaziyat tugmasi va holat bayonoti mavjud. Bu yo'lda mashina bo'lsa yoki xavfsizlik eshigi to'g'ri ishlamasa, konduktorga favqulodda vaziyat haqida signal berishga imkon beradi.
Kod:
classdef micro <matlab.apps. AppBase % dastur komponentlariga mos keladigan xususiyatlar
xususiyatlar (kirish = ommaviy)
UIFigure matlab.ui. Rasm
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
Favqulodda vaziyat tugmasi StatusLampLabel matlab.ui.control. Label
Favqulodda vaziyat tugmasiMatlab.ui.control. Lamp
Noma'lum shartlar 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 yorlig'i
oxiri
xususiyatlar (kirish = shaxsiy)
taymer int16
oxiri
usullar (kirish = ommaviy)
timerCallback funktsiyasi (ilova, src, hodisa)
app. Temp. Text = int2str (app.counter);
app.counter = app.counter + 1;
%dasturga kerak bo'lgan barcha o'zgaruvchilarni chaqiradi - - - - - - - - - - - - - -
global rpi
global s
global ochiq
global yaqinlik
global kamera
global m
global emlar
global t_count
%------------------------- Poyezdlar bo'limi --------------------- ---------
ochiq bo'lsa == 0
yozish pozitsiyasi (lar, 50)
app.gateLamp. Color = 'yashil';
oxiri
yaqin bo'lsa == 0
yozish pozitsiyasi (lar, 120)
app.gateLamp. Color = 'qizil';
oxiri
%---------------------- Kamera orqali harakatni aniqlash -----------------------
rost bo'lsa ham
img = oniy tasvir (kamera);
rasm (img);
app. UIAxes (chizilgan)
oxiri
%---------------------- Qo'lni ochish/yopish ----------------------- --------------
readDigitalPin (rpi, 20)> 1 %17 -pinni (tugma) o'qiydi va signalni tekshiradi
i = 40:.5: 150 %ko'prikni ko'taradi
yozish pozitsiyasi (lar, i)
oxiri
i = 1:10 %pastadir uchun qizil chiroq x marta yonadi
writeDigitalPin (rpi, 13, 1)
pauza (.5)
writeDigitalPin (rpi, 13, 0)
pauza (.5)
oxiri
writePosition (lar, 50)%eshikni pastga qo'yadi
oxiri
%-------------------- Mobil telefonni qo'llab-quvvatlash/Uchastka ------------------------ -
m. AkselerationSensorEnabled = 1
m.log = 1
ma'lumotlar = nol (200, 1); %uchastka uchun ma'lumotlarni intialize qilish
raqam (app. UIAxes2)
p = uchastka (ma'lumotlar)
o'q ([xbounda, ybounds])
pauza (1)
tik
tok <30 %30 soniya davomida ishlaydi
[a, ~] = yig'ilish (m);
agar uzunlik (a)> 200 bo'lsa
ma'lumotlar = a (oxiri-199: oxiri, 3);
boshqa
ma'lumotlar (1: uzunlik (a)) = a (:, 3);
oxiri
%qayta chizish
p. YData = ma'lumotlar;
chizilgan
oxiri
%------------------ To'satdan piksel o'zgarishi ---------------------------- ------
x1 = img; % kamerani pi tashqarisida o'qiydi
red_mean = o'rtacha (o'rtacha (x1 (:,,:, 1)))); % qizil piksellarning o'rtacha miqdorini o'qiydi
green_mean = o'rtacha (o'rtacha (x1 (:,,:, 2)))); % yashil piksellarning o'rtacha miqdorini o'qiydi
blue_mean = o'rtacha (o'rtacha (x1 (:,,: 3)))); % ko'k piksellarning o'rtacha miqdorini o'qiydi
agar red_mean> 150 && green_mean> 150 && blue_mean> 150 bo'lsa
t_count = t_count + 1;
oxiri
app. LoopsCompletedLabel. Text = num2str (t_count)
%------------------ EMS dasturlash tugmasi ---------------------------- ---
configurePin (rpi, 12, "DigitalOutput"); %, chiqish pinini, 16 -pinni o'rnatadi
configurePin (rpi, 16, 'DigitalInput'); %tugma pinini, 24 -pinni kirish sifatida o'rnatadi
buttonPressed = readDigitalPin (rpi, 16); % 16 -tugmachadagi tugma bosish qiymatini o'qiydi
agar tugma bosilsa == 1
tugma bosilganda == 1
writeDigitalPin (rpi, 12, 1)
buttonunPressed = writeDigitalPin (rpi, 12, 0); %
end % "whilePressPressed == 1" ko'chadan tugaydi
oxiri
writeDigitalPin (rpi, 16, 0) %setpref tugmasi bosilmasa, chiroqni o'chirishni o'rnatadi ('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('Internet', 'E_mail', '[email protected]'); setpref -dan yuboriladigan % pochta hisobi ('Internet', 'SMTP_Username', '[email protected]'); % yuboruvchilar foydalanuvchi nomi setpref ('Internet', 'SMTP_Password', 'efgroup6'); % Yuboruvchilar paroli
rekvizitlar = java.lang. System.getProperties;
props.setProperty ('mail.smtp.auth', 'rost'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');
sendmail ('[email protected] ',' Favqulodda holat! ',' Supero'tkazuvchi qo'lda o'chirish tugmachasini faollashtirdi, zudlik bilan javob berishni so'radi! ')
app. UndernormalconditionsLabel. Text = ems
oxiri
oxiri
%app. Label_4. Text = num2str (Curr_temp);
usullar (kirish = shaxsiy)
% Komponentlar yaratilgandan keyin bajariladigan kod
startupFcn funktsiyasi (ilova)
%---------- Bu funktsiya uchun zarur bo'lgan barcha o'zgaruvchilar --------------------
global rpi %arduino
rpi = raspi ('169.254.0.2', 'pi', 'malina');
global s %servo
s = servo (rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
global ochiq
ochiq = 1;
global yopiq
yopiq = 1;
global kamera
kam = kamera paneli (rpi);
global m
m = mobiledev;
global emlar
ems = 'Favqulodda vaziyat haqida xabar berildi, bu haqda EMS xabardor qilindi';
global t_count
t_count = 0;
%parolidagi ulagich - EFGroup6
Loop uchun % Taymer funktsiyasi --------------------------------
app.counter = 0;
t = taymer (…
"TimerFcn", @app.timerCallback,…
"StartDelay", 1,… "Davr", 1,…
"ExecutionMode", "fixedSpacing",…
'TasksToExecute', inf);
boshlash (t);
oxiri
% Qayta qo'ng'iroq qilish funktsiyasi
ManualOverrideSwitchValueChanged funktsiyasi (ilova, hodisa)
oxiri
% Tugma bosilgan funksiya: OpenGateButton
OpenGateButtonPushed funktsiyasi (ilova, hodisa)
global yaqinlik
yopish = 0;
oxiri
% Tugma bosilgan funksiya: CloseGateButton
CloseGateButtonPushed funktsiyasi (ilova, hodisa)
global ochiq
ochiq = 0;
oxiri
oxiri
% Ilovani ishga tushirish va qurish
usullar (kirish = shaxsiy)
% UIFigure va komponentlarini yarating
createComponents funksiyasi (ilova)
% UIFigure yaratish
app. UIFigure = uifigure;
app. UIFigure. Position = [100 100 640 480];
app. UIFigure. Name = 'UI rasm';
RailwaygatestatusLampLabel yaratish
app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'o'ng'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Temir yo'l darvozasi holati';
GateLamp yaratish
app.gateLamp = uilamp (app. UIFigure);
app.gateLamp. Pozitsiya = [589 422 20 20];
app.gateLamp. Color = [0.9412 0.9412 0.9412];
% OpenGateButton yarating
app. OpenGateButton = uibutton (app. UIFigure, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (ilova, @OpenGateButtonPushed, rost); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Darvozani ochish';
% CloseGateButton yarating
app. CloseGateButton = uibutton (app. UIFigure, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (app, @CloseGateButtonPushed, rost); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Darvozani yopish';
% UIAxes yarating
app. UIAxes = uiaxes (app. UIFigure);
sarlavha (app. UIAxes, "Kamera tasmasi")
app. UIAxes. Position = [341 43 300 185];
EmergencyButtonStatusLampLabel yaratish
app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'o'ng'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Favqulodda tugmalar holati';
EmergencyButtonStatusLamp -ni yarating
app. EmergencyButtonStatusLamp = uilamp (app. UIFigure); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Oddiy bo'lmagan shartlar yorlig'ini yarating
app. UndernormalconditionsLabel = uilabel (app. UIFigure);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Oddiy sharoitda';
% UIAxes2 yaratish
app. UIAxes2 = uiaxes (app. UIFigure);
sarlavha (app. UIAxes2, "Poyezdning joylashuvi")
xlabel (app. UIAxes2, 'X pozitsiyasi')
ylabel (app. UIAxes2, 'Y pozitsiyasi')
app. UIAxes2. Box = "yoqilgan";
app. UIAxes2. XGrid = "yoqilgan";
app. UIAxes2. YGrid = 'yoqilgan';
app. UIAxes2. Pozitsiya = [18 43 300 185];
% EF230Group6Label yaratish
app. EF230Group6Label = uilabel (app. UIFigure);
app. EF230Group6Label. HorizontalAlignment = 'markaz';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = "qalin";
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 6 -guruh';
IanAllishKellyBondIanDaffronLabel yaratish
app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Pozitsiya = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Yan Allish, Kelli Bond, Yan Daffron';
% LoopsCompletedLabel yaratish
app. LoopsCompletedLabel = uilabel (app. UIFigure);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Davrlar bajarildi:';
% Yorliq yaratish
app. Label = uilabel (app. UIFigure);
app. Label. Pozitsiya = [120 10 178 22];
app. Label. Text = '####';
oxiri
oxiri
usullar (kirish = ommaviy)
% Ilova tuzish
funktsiya ilovasi = mikro
% Komponentlarni yaratish va sozlash
createComponents (ilova)
% App Designer -da ilovani ro'yxatdan o'tkazing
RegisterApp (ilova, ilova. UIF rasm)
% Ishga tushirish funktsiyasini bajaring
runStartupFcn (ilova, @startupFcn)
agar nargout == 0 bo'lsa
aniq dastur
oxiri
oxiri
% Ilovani o'chirishdan oldin bajariladigan kod
o'chirish (dastur)
Ilova o'chirilganda % UIFigure -ni o'chirib tashlang
o'chirish (app. UIFigure)
oxiri
oxiri
oxiri
4 -qadam: Oxirgi qadam
Kod yozilgandan va Raspberry Pi simli ulangandan so'ng, servo dvigatelni yuqoridagi rasmda ko'rsatilgandek, 3 o'lchamli bosma temir yo'l eshigiga ulang.
Endi loyiha yakunlandi. Malinali PIni poezd yo'lakchasiga ulang va vagon haydovchilari va konduktorlari uchun xavfsizroq temir yo'l kesishmalarini yaratadigan yangi tizimni kuzating. Baxtsiz hodisalarni oldini olish uchun o'rnatilgan xavfsiz seyflarni ishga tushirish uchun GUI bilan ishlash orqali tizim bilan o'ynang.
O'quv qo'llanma shu bilan tugadi, yangi Smart Train System -dan bahramand bo'ling!
Tavsiya:
HACKED! Servo dvigatel model poezd haydovchisi sifatida!: 17 qadam
HACKED! Servo dvigatel namunali poezd haydovchisi sifatida!: Model temir yo'llarda ishlayapsizmi? Hamma qimmat poezd nazoratchilarini sotib olishga byudjetingiz yetmayaptimi? Xavotir olmang! Bu yo'riqnomada men sizga servo dvigatelni buzish orqali o'zingizning arzon byudjetli poezd boshqaruvchisini qanday yasashni ko'rsataman. Shunday qilib, keling
Salom poezd! ATtiny 1614: 8 qadam (rasmlar bilan)
Salom poezd! ATtiny 1614: Fab Academy sinfim uchun men mikrokontroldor, tugma va LEDli doska yaratishim kerak. Men uni yaratish uchun Eagle -dan foydalanaman
Buyuk Britaniyada poezd va ob -havo namoyishi: 5 qadam
Buyuk Britaniyada poezd va ob -havo ko'rsatkichi: Buyuk Britaniyadan akkumulyator bilan ishlaydigan poezdlarning ketishi va ob -havo ko'rsatkichlari uchun. Milliy Rail OpenLDBWS ma'lumotlar bazasidan ma'lum bir mahalliy temir yo'l stantsiyasi uchun real vaqtda poezdlarning jo'nab ketish ma'lumotlarini olish va ko'rsatish uchun foydalangan. U ochiq havodan foydalanadi
Arduino 2-in-1 model poezd boshqaruvchisi: 4 qadam
Arduino 2-in-1 model poezd boshqaruvchisi: Qirq yil oldin men bir nechta do'stlar uchun op-ampli poezdli gaz kelebeği dizaynini yaratganman, keyin taxminan to'rt yil oldin uni PIC mikrokontroler yordamida qayta yaratdim. Bu Arduino loyihasi PIC versiyasini qayta yaratadi, lekin undan foydalanish imkoniyatini ham qo'shadi
Klaviatura boshqariladigan model poezd V2.0 - PS/2 interfeysi: 13 qadam (rasmlar bilan)
Klaviatura boshqariladigan model poezd V2.0 | PS/2 interfeysi: Oldingi yo'riqnomamning birida men sizga klaviatura yordamida temir yo'lning namunaviy sxemasini qanday boshqarishni ko'rsatdim. Bu juda yaxshi edi, lekin kompyuterning ishlashini talab qiladigan kamchiliklari bor edi. Ushbu yo'riqnomada, klaviatura yordamida model poezdini qanday boshqarishni ko'rib chiqamiz