İçindekiler:
Video: Akıllı Tren Sistemi: 4 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:19
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
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
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
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
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:
Akıllı Masa LED Işık - Arduino ile Akıllı Aydınlatma - Neopiksel Çalışma Alanı: 10 Adım (Resimlerle)
Akıllı Masa LED Işık | Arduino ile Akıllı Aydınlatma | Neopixels Çalışma Alanı: Artık evde çok fazla zaman geçirdiğimiz, sanal olarak çalıştığımız ve çalıştığımız bir gün, öyleyse neden çalışma alanımızı özel ve akıllı bir aydınlatma sistemi Arduino ve Ws2812b LED'leri ile büyütmeyelim. Burada size Smart'ınızı nasıl oluşturacağınızı gösteriyorum. Masa LED Işık o
Kullanılmayan Akıllı Telefonu Akıllı Ekrana Dönüştürün: 6 Adım (Resimlerle)
Kullanılmayan bir Akıllı Telefonu Akıllı Ekrana Dönüştürün: Deze öğreticisi, Hollanda'da çok iyi. Kullanılmayan (eski) bir akıllı telefonunuz var mı? Bu kolay adım adım öğreticiyi izleyerek Google E-Tablolar ve biraz kağıt kalem kullanarak akıllı bir ekrana dönüştürün. Bitirdiğinizde
SONOFF Akıllı Anahtarlarla Akıllı Stor Perdeler Nasıl Kendin Yapılır?: 14 Adım
SONOFF Akıllı Anahtarlarla Akıllı Stor Perde Kendin Yap Nasıl Yapılır?: Sıradan stor perdelerinizi/panjurlarınızı akıllı hale getirmek için SONOFF akıllı anahtarlarında Kilitleme Modundan yararlanın Çoğunuz bunun sabahları storları/panjurları çekmenizin bir angarya olduğunu kabul edecek mi? ve akşam aşağı çekmek? Her neyse, ben
Bluetooth Akıllı Telefon Kontrollü Akıllı LED Lamba: 7 Adım
Bluetooth Akıllı Telefon Kontrollü Akıllı LED Lamba: Her zaman aydınlatma cihazlarımı kontrol etmeyi hayal ediyorum. Sonra biri inanılmaz renkli bir LED lamba yaptı. Geçenlerde Youtube'da Joseph Casha'nın bir LED Lambasına rastladım. Ondan ilham alarak, bağlantıyı korurken birkaç işlev eklemeye karar verdim
Donanım ve Yazılım Hack Akıllı Cihazlar, Tuya ve Broadlink LEDbulb, Sonoff, BSD33 Akıllı Fiş: 7 Adım
Donanım ve Yazılım Hack Akıllı Cihazlar, Tuya ve Broadlink LEDbulb, Sonoff, BSD33 Akıllı Fiş: Bu Derste size birkaç akıllı cihazı kendi yazılımımla nasıl flashladığımı gösteriyorum, böylece onları Openhab kurulumum aracılığıyla MQTT ile kontrol edebilirim. onları hacklediğimde yeni cihazlar.Tabii ki özel f