Mundarija:

Aqlli poezd tizimi: 4 qadam
Aqlli poezd tizimi: 4 qadam

Video: Aqlli poezd tizimi: 4 qadam

Video: Aqlli poezd tizimi: 4 qadam
Video: KURSDOSHLAR CHUMILGANI KELISHDI, LEKIN ULARNING ASL MAQSADI BOSHQA / Uzbek tilida tarjima kinolar 2024, Iyul
Anonim
Aqlli poezd tizimi
Aqlli poezd tizimi

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

Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar
Materiallar va ehtiyot qismlar

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

Konfiguratsiya
Konfiguratsiya
Konfiguratsiya
Konfiguratsiya
Konfiguratsiya
Konfiguratsiya
Konfiguratsiya
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

Kod va mantiq
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

Yakuniy qadam
Yakuniy 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: