Mündəricat:
Video: Ağıllı Qatar Sistemi: 4 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:46
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
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
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
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
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ə:
SONOFF Ağıllı Açarları ilə Ağıllı Pərdələri necə DIY etmək olar ?: 14 addım
SONOFF Smart Açarları ilə Ağıllı Panjurları Necə DIY etmək olar?: SONOFF ağıllı açarlarda kilidləmə rejimindən istifadə edərək adi pərdələrinizi/pərdələrinizi ağıllı hala gətirin Çoxlarınız bunun səhərlər pərdələri/pərdələri çəkdiyiniz bir iş olduğunu qəbul edəcəksinizmi? və axşam aşağı çəkin? Hər halda, mən
Ağıllı Zəngli Saat: Raspberry Pi ilə Ağıllı Zəngli Saat: 10 addım (şəkillərlə)
Ağıllı Zəngli Saat: Raspberry Pi ilə Ağıllı Zəngli Saat: Heç ağıllı bir saat istəmisinizmi? Əgər belədirsə, bu sizin üçün bir həlldir! Ağıllı Zəngli Saat hazırladım, bu veb saytına görə zəngli saatını dəyişə biləcəyiniz bir saatdır. Siqnal çalınanda bir səs (zil) olacaq və 2 işıq yanacaq
Ağıllı evinizi ağıllı şəkildə qoruyun: 14 addım
Ağıllı Evinizi Smartly Secure: Təhlükəsiz və etibarlı bir yarışma üçün yarışıram. Təlimatçılığımı bəyənirsinizsə, zəhmət olmasa ona səs verin! Mən sizə evinizi və ətrafınızı necə asanlıqla və ucuz bir şəkildə necə təmin edəcəyinizi göstərəcəyəm. Konfiqurasiya edin
Qatar Oturacaq Sistemi: 4 Addım (Şəkillərlə)
Qatar Oturacaq Sistemi: Bu gün qatar oturacaqlarında tətbiq oluna biləcək bir sistem hazırladıq. Bir narahatlıq tapmalı və bunun həllini tapmalıyıq. Hal -hazırda olduğunuz qatar arabasında oturacağın olub olmadığını söyləyən bir sistem quracağımıza qərar verdik
Qatar Oturacaq Mövcudluğu Məlumat Sistemi - FGC: 8 Addım
Train Seat Availability Information System - FGC: Bu layihə, stansiyada olan insanların hansı oturacaqların pulsuz olduğunu bilməsinə imkan verən bir qatarın miqyasına görə həyata keçirilməsinə əsaslanır. Prototipi həyata keçirmək üçün Arduino UNO proqramı, Processing ilə birlikdə istifadə olunur