İçindekiler:

Akıllı Tren Sistemi: 4 Adım
Akıllı Tren Sistemi: 4 Adım

Video: Akıllı Tren Sistemi: 4 Adım

Video: Akıllı Tren Sistemi: 4 Adım
Video: Akıllı adamın hali başka❗️#kaza #crash 2024, Temmuz
Anonim
Akıllı Tren Sistemi
Akıllı Tren Sistemi

Güvenliği artırmak, kazaları önlemek ve kaza meydana geldiğinde yardımcı olmak için olumlu ve üretken yanıtı artırmak için tasarlanmıştır.

Adım 1: Parçalar ve Malzemeler

Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler

Yukarıdaki resimler aşağıdaki Parça Listesi sırasına göre yerleştirilmiştir:

Parça listesi

1) Bir Raspberry PI 3 - Model B

2) Bir Breadboard

3) Kablolar (Yukarıdan Aşağıya) - Bir Güç, Bir Ethernet, Bir Adaptör

4) Bir Servo Motor

5) Bir adet 3D Baskılı Demiryolu Kapısı

6) İki LED (Tercihen Kırmızı ve Yeşil)

7) Tek Basmalı Düğme

8) On Jumper Tel

9) Dört Direnç

10) MATLAB ile Dizüstü veya Masaüstü

2. Adım: Yapılandırma

Yapılandırma
Yapılandırma
Yapılandırma
Yapılandırma
Yapılandırma
Yapılandırma
Yapılandırma
Yapılandırma

Yukarıda çoklu açılardan yapılandırma resimleri verilmiştir:

Pin konumları (küçük harf ve bir satır numarası) mevcut akışa göre aşağıda listelenmiştir.

teller:

j19'dan i47'ye

j8'den b50'ye

b5 için Servo

c6'dan Servo'ya

b7 için servo

a13 ila j7

a17'den LED'e

a37'ye LED

e40 ila j20

j53'ten j18'e

j7'den LED'e

LED'den j6'ya

Buton:

e54 ila h51

Dirençler:

d40 ila b37

c50 ila d54

i51'den j47'ye

Adım 3: Kod ve Mantık

Kod ve Mantık
Kod ve Mantık

Tren sistemimizin amacı, güvenliği artırmak ve demiryolu geçişlerinde potansiyel olarak ölümcül kaza riskini azaltmaktır. Bunu sağlamak için sistemimizde sürücüler için tren uyarı sistemi, araçların raydan geçmesini önlemek için indirilen fiziksel bariyer ve erken uyarı sisteminin arızalanması durumunda kondüktörün basması için yedek acil durum butonu bulunmaktadır.

GUI İletken İşletim Sistemi:

Yukarıda gösterilen GUI, treni araba trafiği demiryolu geçişleri olan ray alanlarından geçirirken kondüktörün kullanımı için yaratılmıştır.

Sağ üst köşede, yaklaşan bir demiryolu geçiş kapısı kapandığında iletkeni bilgilendiren ve gerekirse iletkenin kapıyı açıp kapatmasını sağlayan bir ışık vardır. Bunun altında trenin geçtiği kameralardan gelen görüntü gösteriliyor. Sol alt köşede trenin konumu sürekli olarak bir grafik üzerinde çizilir ve grafiğin altında trenin bir günde tamamladığı tur sayısı belirtilir. Konum grafiğinin üzerinde acil durum butonu ve durum bildirimi bulunmaktadır. Bu, pistte bir araba varsa veya güvenlik kapısı düzgün çalışmıyorsa, kondüktörün acil durum sinyali vermesine olanak tanır.

Kod:

classdef micro < matlab.apps. AppBase % Uygulama bileşenlerine karşılık gelen özellikler

özellikler (Erişim = genel)

UIŞekil matlab.ui. Şekil

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

Acil DurumDüğmesiStatusLampLabel matlab.ui.control. Label

Acil DurumDüğmesiStatusLamp matlab.ui.control. Lamp

Normal koşullar altındaEtiket matlab.ui.control. Etiket

UIAxes2 matlab.ui.control. UIAxes

EF230Group6Etiket matlab.ui.control. Etiket

IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label

DöngülerCompletedLabel matlab.ui.control. Label

Etiket matlab.ui.control. Etiket

son

özellikler (Erişim = özel)

sayaç int16

son

yöntemler (Erişim = genel)

işlev timerCallback(uygulama, kaynak, olay)

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

app.counter = app.counter + 1;

Programın ihtiyaç duyduğu tüm değişkenleri %call - - - - - - - - - - - -

küresel rpi

küresel s

küresel açık

küresel kapanış

küresel kamera

küresel m

küresel ems

küresel t_count

% ------------------------- Tren Kolu Bölümü --------------------- ---------

açıksa == 0

writePosition(lar, 50)

app.gateLamp. Color = 'yeşil';

son

yakınsa == 0

writePosition(lar, 120)

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

son

%---------------------- Kamera ile Hareket Algılama --------------------------

doğru iken

img = anlık görüntü(kamera);

resim(img);

app. UIAxes(drawnow)

son

%---------------------- Kol açık/kapalı -------------------------- --------------

readDigitalPin(rpi, 20)>%1 ise pin 17(düğme) okur ve sinyali kontrol eder

i=40:.5:150 için köprüyü yükseltir

writePosition(s, i)

son

i= için 1:10 %döngü yanıp sönüyor kırmızı ışık x defa

writeDigitalPin(rpi, 13, 1)

duraklat(.5)

writeDigitalPin(rpi, 13, 0)

duraklat(.5)

son

writePosition(s, 50)% geçidi kapat

son

%-------------------- Cep Telefonu Desteği/Arsa ------------------------ --

m. AccelerationSensorEnabled=1

m.logging=1

veri=sıfır(200, 1); % yuvarlanan arsa için verileri başlat

şekil(app. UIAxes2)

p=grafik(veri)

eksen([xbounda, ybounds])

duraklatma(1)

tik

toc <%30 iken 30 saniye boyunca çalışır

[a, ~]=accelllog(m);

uzunluk(a) >200 ise

veri=a(bitiş-199:bitiş, 3);

Başka

data(1:uzunluk(a))=a(:, 3);

son

% planı yeniden çiz

p. YData=veri;

çizilmiş

son

%-------------------- Ani Piksel Değişimi ---------------------------- ------

x1=img; % kamerayı pi'den okur

red_mean = ortalama(mean(x1(:,:, 1))); % ortalama kırmızı piksel miktarını okur

green_mean = ortalama(ortalama(x1(:,:, 2))); % ortalama yeşil piksel miktarını okur

blue_mean = ortalama(ortalama(x1(:,:, 3))); % ortalama mavi piksel miktarını okur

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

t_count = t_count + 1;

son

app. LoopsCompletedLabel. Text = num2str(t_count)

%-------------------- Düğme EMS programlama ---------------------------- ---

configurePin(rpi, 12, 'DijitalÇıktı'); % led pini pin 16'yı çıkış olarak ayarlar

configurePin(rpi, 16, 'DijitalGiriş'); % giriş olarak düğme pimi, pim 24'ü ayarlar

buttonPressed = readDigitalPin(rpi, 16); % Pin 16'daki düğmeye basma değerini okur

butona basıldığında == 1

butona basılıyken == 1

writeDigitalPin(rpi, 12, 1)

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

end % 'while buttonPressed==1' döngüsünü bitirir

son

writeDigitalPin(rpi, 16, 0) %Düğmeye artık basılmadığında led'i kapatır setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('İnternet', 'E_mail', '[email protected]'); setpref('Internet', 'SMTP_Username', '[email protected]'); % gönderici kullanıcı adı setpref('Internet', 'SMTP_Password', 'efgroup6'); % Gönderici şifresi

sahne = java.lang. System.getProperties;

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

sendmail('[email protected]', 'Acil Durum!', 'Kondüktör manuel geçersiz kılma anahtarını etkinleştirdi, hemen yanıt istiyor!')

app. UndernormalconditionsLabel. Text = ems

son

son

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

yöntemler (Erişim = özel)

% Bileşen oluşturulduktan sonra yürütülen kod

işlev başlatmaFcn(app)

%----------Bu işlev için gereken tüm değişkenler--------------------

küresel rpi %arduino

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

küresel s %servo

s = servo(rpi, 17, 'MinPulseSüresi', 5e-4, 'MaxPulseSüresi', 2.5e-3);

küresel açık

açık = 1;

küresel kapalı

kapalı = 1;

küresel kamera

kamera = kamera tahtası(rpi);

küresel m

m=mobil dev;

küresel ems

ems = 'EMS'ye bildiren bir acil durum bildirildi';

küresel t_count

t_count = 0;

%password üzerindeki bağlayıcı EFGroup6'dır

Döngü için % Zamanlayıcı İşlevi --------------------------------

uygulama.sayaç = 0;

t = zamanlayıcı(…

'TimerFcn', @app.timerCallback, …

'Başlangıç Gecikmesi', 1, … 'Dönem', 1, …

'ExecutionMode', 'fixedSpacing', …

'Yürütülecek Görevler', inf);

başlat(t);

son

% Geri arama işlevi

function ManualOverrideSwitchValueChanged(uygulama, olay)

son

% Düğmeye basma işlevi: OpenGateButton

fonksiyon OpenGateButtonPushed(uygulama, olay)

küresel kapanış

kapat = 0;

son

% Düğmeye basma işlevi: CloseGateButton

işlev CloseGateButtonPushed(uygulama, olay)

küresel açık

açık = 0;

son

son

% Uygulama başlatma ve oluşturma

yöntemler (Erişim = özel)

% UI Figure ve bileşenleri oluştur

function createComponents(app)

% UI Figürü Oluştur

app. UIŞekil = uifigure;

app. UI Figure. Position = [100 100 640 480];

app. UI Figure. Name = 'UI Figürü';

% RailwaygatestatusLampLabel oluştur

app. RailwaygatestatusLampLabel = uilabel(app. UI Figure);

app. RailwaygatestatusLampLabel. HorizontalAlignment = 'sağ'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Demiryolu kapısı durumu';

% Geçit Lambası oluştur

app.gateLamp = uilamp(app. UIŞekil);

app.gateLamp. Position = [589 422 20 20];

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

% OpenGateButton Oluştur

app. OpenGateButton = uibutton(app. UI Figure, 'push');

app. OpenGateButton. ButtonPushedFcn = createCallbackFcn(app, @OpenGateButtonPushed, true); app. OpenGateButton. Position = [474 359 100 22];

app. OpenGateButton. Text = 'Kapıyı Aç';

% CloseGateButton Oluştur

app. CloseGateButton = uibutton(app. UI Figure, 'push');

app. CloseGateButton. ButtonPushedFcn = createCallbackFcn(app, @CloseGateButtonPushed, true); app. CloseGateButton. Position = [474 285 100 22];

app. CloseGateButton. Text = 'Kapıyı Kapat';

% UIAx Oluşturma

app. UIAxes = uiaxes(app. UI Figure);

başlık(app. UIAxes, 'Kamera Akışı')

app. UIAxes. Position = [341 43 300 185];

% Acil Durum DüğmesiStatusLampLabel Oluştur

app. EmergencyButtonStatusLampLabel = uilabel(app. UI Figure); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'sağ'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Acil Durum Düğmesi Durumu';

% Acil DurumButtonStatusLamp Oluştur

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

% UndernormalconditionsEtiketi Oluştur

app. UndernormalconditionsLabel = uilabel(app. UI Figure);

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

app. UndernormalconditionsLabel. Text = 'Normal koşullar altında';

% UIAxes2 Oluştur

app. UIAxes2 = uiaxes(app. UI Figure);

başlık(app. UIAxes2, 'Trenin Konumu')

xlabel(app. UIAxes2, 'X Konumu')

ylabel(app. UIAxes2, 'Y Konumu')

app. UIAxes2. Box = 'açık';

app. UIAxes2. XGrid = 'açık';

app. UIAxes2. YGrid = 'açık';

app. UIAxes2. Position = [18 43 300 185];

% EF230Group6Etiketi Oluştur

app. EF230Group6Label = uilabel(app. UIŞekil);

app. EF230Group6Label. HorizontalAlignment = 'merkez';

app. EF230Group6Label. FontSize = 28;

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

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

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

% IanAllishKellyBondIanDaffronLabel Oluştur

app. IanAllishKellyBondIanDaffronLabel = uilabel(app. UI Figure); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';

% Döngü OluşturTamamlandıEtiket

app. LoopsCompletedLabel = uilabel(app. UI Figure);

app. LoopsCompletedLabel. Position = [18 10 103 22];

app. LoopsCompletedLabel. Text = 'Tamamlanan Döngüler:';

% Etiket Oluştur

app. Label = uilabel(app. UIŞekil);

app. Label. Position = [120 10 178 22];

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

son

son

yöntemler (Erişim = genel)

% Uygulama oluştur

işlev uygulaması = mikro

% Bileşen oluştur ve yapılandır

createComponents(uygulama)

% Uygulamayı App Designer'a kaydedin

registerApp(app, app. UI Figure)

% Başlatma işlevini yürütün

runStartupFcn(app, @startupFcn)

eğer nargout == 0

uygulamayı temizle

son

son

% Uygulama silinmeden önce yürütülen kod

sil(uygulama)

% Uygulama silindiğinde UI Figure'yi sil

sil(app. UIŞekil)

son

son

son

4. Adım: Son Adım

Son adım
Son adım

Kod yazıldıktan ve Raspberry Pi kablolandıktan sonra, servo motoru yukarıdaki resimde gösterildiği gibi 3-D baskılı demiryolu ray kapısına takın.

Şimdi, proje tamamlandı. Raspberry PI'yi tren yoluna bağlayın ve hem araba sürücüleri hem de kondüktörler için daha güvenli demiryolu geçişleri yaratan yeni sistemi gözlemleyin. Kazaları önlemek için yerleştirilmiş arıza kasalarını tetiklemek için GUI ile etkileşime girerek sistemle oynayın.

Bu eğitimin sonu, yeni Akıllı Tren Sisteminizin keyfini çıkarın!

Önerilen: