Mündəricat:

Ağıllı Qatar Sistemi: 4 addım
Ağıllı Qatar Sistemi: 4 addım

Video: Ağıllı Qatar Sistemi: 4 addım

Video: Ağıllı Qatar Sistemi: 4 addım
Video: Heydər Əliyev və Həyat yoldaşını Birdə belə görün #azerbaijan #president #prezident #xeberler #xeber 2024, Noyabr
Anonim
Ağıllı Qatar Sistemi
Ağıllı Qatar Sistemi

Təhlükəsizliyi artırmaq, qəzaların qarşısını almaq və qəza baş verərsə kömək etmək üçün müsbət və məhsuldar reaksiyanı artırmaq üçün hazırlanmışdır.

Addım 1: hissələr və materiallar

Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar
Parçalar və materiallar

Yuxarıdakı şəkillər aşağıdakı hissələr siyahısı sırasına görə yerləşdirilmişdir:

Parça siyahısı

1) Bir Moruq PI 3 - Model B

2) Bir çörək taxtası

3) Kabellər (yuxarıdan aşağıya) - Bir Güc, Bir Ethernet, Bir Adapter

4) Bir Servo Motor

5) Bir 3D Çaplı Dəmiryol Qapısı

6) İki LED (tercihen qırmızı və yaşıl)

7) Bir düymə

8) On Atlama Teli

9) Dörd rezistor

10) Laptop və ya MATLAB ilə Masaüstü

Addım 2: Konfiqurasiya

Konfiqurasiya
Konfiqurasiya
Konfiqurasiya
Konfiqurasiya
Konfiqurasiya
Konfiqurasiya
Konfiqurasiya
Konfiqurasiya

Yuxarıda konfiqurasiyanın müxtəlif açılardan şəkilləri var:

Pin yerləri (kiçik hərf və bir sıra nömrəsi) cari axını izləmək üçün aşağıda verilmişdir.

Tellər:

j19 - i47

j8 - b50

b5 Servo -ya

c6 Servo -ya

b7 servoya

a13 - j7

a17 LED

LED 37

e40 - j20

j53 - j18

j7 LED

LED j6

Düymə:

e54 - h51

Rezistorlar:

d40 ilə b37 arasında

c50 - d54

i51 - j47

Addım 3: Kod və Məntiq

Kod və Məntiq
Kod və Məntiq

Qatar sistemimizin məqsədi təhlükəsizliyi artırmaq və dəmir yolu keçidlərində ölümcül qəza riskini azaltmaqdır. Buna nail olmaq üçün sistemimizdə sürücülər üçün bir qatar xəbərdarlıq sistemi, avtomobillərin yolu keçməməsi üçün aşağı salınan fiziki bir maneə və erkən xəbərdarlıq sistemi uğursuz olarsa konduktorun basması üçün ehtiyat təcili düyməsinə malikdir.

GUI İletken İşletim Sistemi:

Yuxarıda göstərilən GUI, qatarı avtomobil trafikinin dəmir yolu kəsişmələri olan yollardan keçirərkən konduktorun istifadəsi üçün yaradılmışdır.

Sağ üst küncdə, yaxınlaşan bir dəmir yolu keçid qapısının bağlanması halında konduktora xəbər verən və lazım olduqda dirijorun qapını açmasına və ya bağlamasına imkan verən bir işıq var. Bunun altında, qatarın keçdiyi kameralardan alınan yem göstərilir. Sol alt küncdə, qatarın yeri davamlı olaraq bir qrafik üzərində təsvir olunur və qrafikin altında qatarın bir gündə tamamladığı dövrələrin sayı göstərilir. Vəziyyət qrafikinin üstündə təcili düymə və vəziyyət ifadəsi var. Bu, yolda bir avtomobil varsa və ya təhlükəsizlik qapısı düzgün işləmirsə, konduktorun təcili vəziyyətdə siqnal verməsinə imkan verir.

Kod:

classdef mikro <matlab.apps. AppBase % Tətbiq komponentlərinə uyğun xüsusiyyətlər

xüsusiyyətlər (Giriş = ictimai)

UIFigure matlab.ui. Şəkil

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

Fövqəladə Düymə DurumuLampLabel matlab.ui.control. Label

EmergencyButtonStatusLamp matlab.ui.control. Lamp

Normal olmayan şərtlərLabel 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 etiketi

bitmək

xüsusiyyətlər (Giriş = özəl)

sayğac int16

bitmək

metodlar (Access = public)

funksiyası timerCallback (app, src, hadisə)

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

app.counter = app.counter + 1;

%proqramın ehtiyac duyduğu bütün dəyişənləri çağırır - - - - - - - - - - - - - -

qlobal rpi

qlobal s

qlobal açıq

qlobal yaxınlıq

qlobal kamera

qlobal m

qlobal ems

qlobal t_count

%------------------------- Qol Qol Bölməsi --------------------- ---------

açıqdırsa == 0

yazı mövqeyi (lər, 50)

app.gateLamp. Color = 'yaşıl';

bitmək

yaxın olarsa == 0

yazma mövqeyi (lər, 120)

app.gateLamp. Color = 'qırmızı';

bitmək

%---------------------- Kamera ilə Hərəkət Algılama -----------------------

doğru olarkən

img = anlıq görüntü (cam);

şəkil (img);

app. UIAxes (çəkilmiş)

bitmək

%---------------------- Qol aç/bağla ----------------------- --------------

readDigitalPin (rpi, 20)> 1 %-i pin 17 -ni (düyməni) oxuyur və siqnal yoxlayır

i = 40:.5: 150 %körpünü qaldırır

Yazı mövqeyi (lər, i)

bitmək

i = 1:10 %döngələr üçün qırmızı işıq x dəfə yanıb -sönür

writeDigitalPin (rpi, 13, 1)

fasilə (.5)

writeDigitalPin (rpi, 13, 0)

fasilə (.5)

bitmək

writePosition (s, 50)%qapını aşağı salır

bitmək

%-------------------- Cib Telefonu Dəstəyi/Sahəsi ------------------------ -

m. AccelerationSensorEnabled = 1

m.qeydiyyat = 1

data = sıfır (200, 1); süjet yayma üçün məlumat intialize

rəqəm (app. UIAxes2)

p = süjet (məlumat)

ox ([xbounda, ybounds])

fasilə (1)

tik

toc <30 %30 saniyə ərzində işləyir

[a, ~] = yığım (m);

uzunluq (a)> 200 olarsa

data = a (son-199: son, 3);

başqa

data (1: uzunluq (a)) = a (: 3);

bitmək

süjeti yenidən çəkin

p. YData = məlumatlar;

çəkilmiş

bitmək

%------------------ Ani piksel dəyişikliyi ---------------------------- ------

x1 = img; kamera pi -dən kənarda oxuyur

red_mean = orta (ortalama (x1 (:,,: 1))); % qırmızı piksellərin orta miqdarını oxuyur

green_mean = ortalama (ortalama (x1 (:,,: 2))); % yaşıl piksellərin orta miqdarını oxuyur

blue_mean = orta (ortalama (x1 (:,,: 3))); % mavi piksellərin orta miqdarını oxuyur

red_mean> 150 && green_mean> 150 && blue_mean> 150

t_count = t_count + 1;

bitmək

app. LoopsCompletedLabel. Text = num2str (t_count)

%------------------ Button EMS proqramlaşdırması ---------------------------- ---

configurePin (rpi, 12, 'DigitalOutput'); %, pin pinini, pin 16 -ı bir çıxış olaraq təyin edir

configurePin (rpi, 16, 'DigitalInput'); %düymə pinini, pin 24 -ü giriş olaraq təyin edir

buttonPressed = readDigitalPin (rpi, 16); Pin 16 -da düyməni basma dəyərini oxuyur

düyməyə basılırsa == 1

düymə basılarkən == 1

writeDigitalPin (rpi, 12, 1)

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

end % 'buttonPressed == 1' döngəsini bitir

bitmək

writeDigitalPin (rpi, 16, 0) %Setpref düyməsinə artıq basılmadığı zaman LED -i söndürür ('İnternet', 'SMTP_Server', 'smtp.gmail.com'); setpref ('İnternet', 'E_mail', '[email protected]'); setpref -dən göndəriləcək % poçt hesabı ('İnternet', 'SMTP_Username', '[email protected]'); % göndərən istifadəçi adı setpref ('İnternet', 'SMTP_Password', 'efgroup6'); % Göndərənlərin şifrəsi

rekvizit = java.lang. System.getProperties;

props.setProperty ('mail.smtp.auth', 'doğru'); props.setProperty ('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty ('mail.smtp.socketFactory.port', '465');

sendmail ('[email protected] ',' Fövqəladə Vəziyyət! ',' Dirijor əl ilə dəyişdirmə açarını aktivləşdirdi və dərhal cavab istədi! ')

app. UndernormalconditionsLabel. Text = ems

bitmək

bitmək

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

metodlar (Access = özəl)

Komponent yaradıldıqdan sonra icra olunan kod

startupFcn funksiyası (tətbiq)

%---------- Bu funksiya üçün lazım olan bütün dəyişənlər --------------------

qlobal arduino

rpi = raspi ('169.254.0.2', 'pi', 'moruq');

qlobal s %servo

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

qlobal açıq

açıq = 1;

qlobal bağlandı

qapalı = 1;

qlobal kamera

cam = kamera lövhəsi (rpi);

qlobal m

m = mobiledev;

qlobal ems

ems = 'Təcili yardım göstərilib, EMS -ə xəbər verilir';

qlobal t_count

t_count = 0;

%parolun birləşdiricisi EFGroup6 -dır

Loop üçün % Timer Function --------------------------------

app.counter = 0;

t = taymer (…

'TimerFcn', @app.timerCallback,…

'StartDelay', 1,… 'Dövr', 1,…

'ExecutionMode', 'fixedSpacing',…

'TasksToExecute', inf);

başlamaq (t);

bitmək

% Geri çağırma funksiyası

ManualOverrideSwitchValueChanged funksiyası (tətbiq, hadisə)

bitmək

Button funksiyası itələdi: OpenGateButton

OpenGateButtonPushed funksiyası (tətbiq, hadisə)

qlobal yaxınlıq

yaxın = 0;

bitmək

Button funksiyası itələdi: CloseGateButton

CloseGateButtonPushed funksiyası (tətbiq, hadisə)

qlobal açıq

açıq = 0;

bitmək

bitmək

App başlatma və tikinti

metodlar (Access = özəl)

UIFigure və komponentləri yaradın

createComponents funksiyası (tətbiq)

UIFigure yaradın

app. UIFigure = uifigure;

app. UIFigure. Mövqe = [100 100 640 480];

app. UIFigure. Name = 'UI Şəkil';

RailwaygatestatusLampLabel yaradın

app. RailwaygatestatusLampLabel = uilabel (app. UIFigure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'sağ'; app. RailwaygatestatusLampLabel. Mövqe = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Dəmiryolu qapısı statusu';

GateLamp yaradın

app.gateLamp = uilamp (app. UIFigure);

app.gateLamp. Mövqe = [589 422 20 20];

app.gateLamp. Color = [0.9412 0.9412 0.9412];

OpenGateButton yaradın

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

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn (tətbiq, @OpenGateButtonPushed, doğru); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Qapını Aç';

CloseGateButton yaradın

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

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn (tətbiq, @CloseGateButtonPushed, doğru); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Qapını Bağla';

UIAxes yaradın

app. UIAxes = uiaxes (app. UIFigure);

başlıq (app. UIAxes, 'Kamera Feed')

app. UIAxes. Mövqe = [341 43 300 185];

EmergencyButtonStatusLampLabel yaradın

app. EmergencyButtonStatusLampLabel = uilabel (app. UIFigure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'sağ'; app. EmergencyButtonStatusLampLabel. Mövqe = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Fövqəladə Düymə Vəziyyəti';

EmergencyButtonStatusLamp yaradın

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

UndernormalconditionsLabel yaradın

app. UndernormalconditionsLabel = uilabel (app. UIFigure);

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

app. UndernormalconditionsLabel. Text = 'Normal şəraitdə';

UIAxes2 yaradın

app. UIAxes2 = uiaxes (app. UIFigure);

başlıq (app. UIAxes2, 'Qatarın mövqeyi')

xlabel (app. UIAxes2, 'X Mövqe')

ylabel (app. UIAxes2, 'Y Mövqeyi')

app. UIAxes2. Box = 'aktiv';

app. UIAxes2. XGrid = 'aktiv';

app. UIAxes2. YGrid = 'aktiv';

app. UIAxes2. Mövqe = [18 43 300 185];

EF230Group6Label yaradın

app. EF230Group6Label = uilabel (app. UIFigure);

app. EF230Group6Label. HorizontalAlignment = 'mərkəzi';

app. EF230Group6Label. FontSize = 28;

app. EF230Group6Label. FontWeight = 'qalın';

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

app. EF230Group6Label. Text = 'EF 230 Group 6';

IanAllishKellyBondIanDaffronLabel yaradın

app. IanAllishKellyBondIanDaffronLabel = uilabel (app. UIFigure); app. IanAllishKellyBondIanDaffronLabel. Mövqe = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

LoopsCompletedLabel yaradın

app. LoopsCompletedLabel = uilabel (app. UIFigure);

app. LoopsCompletedLabel. Mövqe = [18 10 103 22];

app. LoopsCompletedLabel. Text = 'Döngələr Tamamlandı:';

Etiket yaradın

app. Label = uilabel (app. UIFigure);

app. Label. Mövqe = [120 10 178 22];

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

bitmək

bitmək

metodlar (Access = public)

Tətbiq qurun

app funksiyası = mikro

Komponentləri yaradın və konfiqurasiya edin

createComponents (tətbiq)

App Designer ilə app Qeydiyyat

registerApp (app, app. UIFigure)

Başlanğıc funksiyasını icra edin

runStartupFcn (tətbiq, @startupFcn)

nargout varsa == 0

aydın tətbiq

bitmək

bitmək

Tətbiq silmədən əvvəl icra olunan kod

sil (tətbiq)

Tətbiq silindikdə UIFigure silin

silin (app. UIFigure)

bitmək

bitmək

bitmək

Addım 4: Son addım

Son addım
Son addım

Kod yazıldıqdan və Raspberry Pi tel bağlandıqdan sonra, servo motoru yuxarıdakı şəkildəki kimi 3-D çaplı dəmir yolu iz qapısına bağlayın.

İndi layihə tamamlandı. Moruq PI -ni qatar yoluna qoşun və həm avtomobil sürücüləri, həm də konduktorlar üçün daha təhlükəsiz dəmir yolu keçidləri yaradan yeni sistemi müşahidə edin. Qəzaların qarşısını almaq üçün quraşdırılmış uğursuz seyfləri işə salmaq üçün GUI ilə əlaqə quraraq sistemlə oynayın.

Dərsliyin sonu budur, yeni Smart Train Sistemindən zövq alın!

Tövsiyə: