Daftar Isi:
- Langkah 1: Bagian dan Bahan
- Langkah 2: Konfigurasi
- Langkah 3: Kode dan Logika
- Langkah 4: Langkah Terakhir
Video: Sistem Kereta Cerdas: 4 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
Dirancang untuk meningkatkan keselamatan, mencegah kecelakaan, dan meningkatkan respons positif dan produktif untuk membantu jika terjadi kecelakaan.
Langkah 1: Bagian dan Bahan
Gambar-gambar di atas ditempatkan dalam urutan Daftar Bagian di bawah ini:
Daftar Suku Cadang
1) Satu Raspberry PI 3 - Model B
2) Satu papan tempat memotong roti
3) Kabel (dari Atas ke Bawah) - Satu Daya, Satu Ethernet, Satu Adaptor
4) Satu Motor Servo
5) Satu Gerbang Kereta Api Cetak 3D
6) Dua LED (Sebaiknya Merah dan Hijau)
7) Satu Tombol Tekan
8) Sepuluh Kabel Jumper
9) Empat Resistor
10) Laptop atau Desktop dengan MATLAB
Langkah 2: Konfigurasi
Di atas adalah gambar konfigurasi dari berbagai sudut:
Lokasi pin (huruf kecil diikuti oleh nomor baris) tercantum di bawah ini secara berurutan mengikuti arus saat ini.
Kabel:
j19 ke i47
j8 ke b50
b5 ke Servo
c6 ke Servo
b7 ke servo
a13 ke j7
a17 ke LED
LED ke a37
e40 ke j20
j53 ke j18
j7 ke LED
LED ke j6
Tombol:
e54 ke h51
Resistor:
d40 ke b37
c50 hingga d54
i51 ke j47
Langkah 3: Kode dan Logika
Tujuan sistem kereta api kami adalah untuk meningkatkan keselamatan dan menurunkan risiko kecelakaan yang berpotensi mematikan di perlintasan kereta api. Untuk mencapai hal ini, sistem kami memiliki sistem peringatan kereta api untuk pengemudi, penghalang fisik yang diturunkan untuk mencegah mobil melintasi trek, dan tombol darurat cadangan untuk ditekan kondektur jika sistem peringatan dini gagal.
Sistem Operasi Konduktor GUI:
GUI, yang ditunjukkan di atas, dibuat untuk penggunaan konduktor saat mereka mengemudikan kereta api melalui area lintasan yang memiliki perlintasan kereta api lalu lintas mobil.
Di sudut kanan atas, ada lampu yang memberi tahu kondektur jika gerbang perlintasan kereta api yang akan datang ditutup dan memungkinkan kondektur untuk membuka atau menutup gerbang jika diperlukan. Di bawah itu, umpan dari kamera yang dilewati kereta ditampilkan. Di sudut kiri bawah, lokasi kereta diplot secara kontinu pada grafik dan di bawah grafik, dinyatakan jumlah putaran yang telah diselesaikan kereta dalam sehari. Di atas grafik posisi, Ada tombol darurat dan pernyataan status. Ini memungkinkan konduktor untuk memberi sinyal keadaan darurat jika ada mobil di trek atau gerbang pengaman tidak berfungsi dengan baik.
Kode:
classdef micro < matlab.apps. AppBase % Properti yang sesuai dengan komponen aplikasi
properti (Akses = publik)
UIGambar matlab.ui. Gambar
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
EmergencyButtonStatusLampLabel matlab.ui.control. Label
EmergencyButtonStatusLamp matlab.ui.control. Lamp
Di bawahkondisinormalLabel matlab.ui.control. Label
UIAxes2 matlab.ui.control. UIAxes
EF230Group6Label matlab.ui.control. Label
IanAllishKellyBondIanDaffronLabel matlab.ui.control. Label
LoopsCompletedLabel matlab.ui.control. Label
Label matlab.ui.control. Label
akhir
properti (Akses = pribadi)
kontra int16
akhir
metode (Akses = publik)
fungsi timerCallback (aplikasi, src, acara)
app. Temp. Text = int2str(app.counter);
app.counter = app.counter + 1;
%memanggil semua variabel yang dibutuhkan program - - - - - - - - - - - - -
rpi global
global s
terbuka global
tutup global
kamera global
m. global
em global
t_count global
%------------------------- Bagian Lengan Kereta --------------------- ---------
jika terbuka == 0
tulisPosisi(s, 50)
app.gateLamp. Color = 'hijau';
akhir
jika dekat == 0
tulisPosisi(s, 120)
app.gateLamp. Color = 'merah';
akhir
%---------------------- Deteksi Gerakan melalui Kamera -----------------------
sementara benar
img = foto(kamera);
gambar(img);
app. UIAxes (drawnow)
akhir
%---------------------- Lengan buka/tutup ----------------------- --------------
jika readDigitalPin(rpi, 20)>1 %membaca pin 17(tombol) dan memeriksa sinyal
untuk i=40:.5:150 %meningkatkan jembatan
tulisPosisi(s, i)
akhir
untuk i= 1:10 %loop berkedip lampu merah x jumlah kali
tulisDigitalPin(rpi, 13, 1)
jeda(.5)
tulisDigitalPin(rpi, 13, 0)
jeda(.5)
akhir
writePosition(s, 50)%turunkan gerbang
akhir
%-------------------- Dukungan/Plot Ponsel ------------------------ --
m. AccelerationSensorEnabled=1
m.logging=1
data=nol(200, 1); %menginisialisasi data untuk plot bergulir
gambar (app. UIAxes2)
p=plot(data)
sumbu ([xbounda, ybounds])
jeda(1)
tik
sementara toc <30 %berjalan selama 30 detik
[a, ~]=aksellog(m);
jika panjang(a) >200
data=a(akhir-199:akhir, 3);
lain
data(1:panjang(a))=a(:, 3);
akhir
%menggambar ulang plot
p. YData=data;
ditarik
akhir
%------------------ Perubahan Piksel Tiba-tiba ---------------------------- ------
x1=img; % membaca kamera dari pi
red_mean = mean(rata-rata(x1(:,:, 1))); % membaca jumlah rata-rata piksel merah
green_mean = mean(rata-rata(x1(:,:, 2))); % membaca jumlah rata-rata piksel hijau
blue_mean = mean(rata-rata(x1(:,:, 3))); % membaca jumlah rata-rata piksel biru
jika red_mean > 150 && green_mean > 150 && blue_mean > 150
t_hitung = t_hitung + 1;
akhir
app. LoopsCompletedLabel. Text = num2str(t_count)
%------------------ Pemrograman tombol EMS ---------------------------- ---
configurePin(rpi, 12, 'DigitalOutput'); % menyetel pin led, pin 16, sebagai output
configurePin(rpi, 16, 'Input Digital'); %mengatur pin tombol, pin 24, sebagai input
buttonPressed = readDigitalPin(rpi, 16); % Membaca nilai tekan tombol pada pin 16
jika tombol Ditekan == 1
saat tombol Ditekan == 1
tulisDigitalPin(rpi, 12, 1)
buttonunPressed = writeDigitalPin(rpi, 12, 0); %
end % Berakhir 'sementara tombolDitekan==1' loop
akhir
writeDigitalPin(rpi, 16, 0) %Menonaktifkan led saat tombol tidak lagi ditekan setpref('Internet', 'SMTP_Server', 'smtp.gmail.com'); setpref('Internet', 'E_mail', '[email protected]'); % akun email untuk dikirim dari setpref('Internet', 'SMTP_Username', '[email protected]'); % nama pengguna pengirim setpref('Internet', 'SMTP_Password', 'efgroup6'); % Sandi pengirim
props = java.lang. System.getProperties;
props.setProperty('mail.smtp.auth', 'benar'); props.setProperty('mail.smtp.socketFactory.class', 'javax.net.ssl. SSLSocketFactory'); props.setProperty('mail.smtp.socketFactory.port', '465');
sendmail('[email protected]', 'Status Darurat!', 'Kondektur telah mengaktifkan sakelar penggantian manual, meminta tanggapan segera!')
app. UndernormalconditionsLabel. Text = ems
akhir
akhir
%app. Label_4. Text = num2str(curr_temp);
metode (Akses = pribadi)
% Kode yang dijalankan setelah pembuatan komponen
fungsi startupFcn (aplikasi)
%----------Semua variabel yang dibutuhkan untuk fungsi ini--------------------
rpi global %arduino
rpi = raspi('169.254.0.2', 'pi', 'raspberry');
global s %servo
s = servo(rpi, 17, 'MinPulseDuration', 5e-4, 'MaxPulseDuration', 2.5e-3);
terbuka global
buka = 1;
global tertutup
tertutup = 1;
kamera global
cam = papan kamera (rpi);
m. global
m=pengembangan seluler;
em global
ems = 'Keadaan darurat telah dilaporkan, memberi tahu EMS';
t_count global
t_hitung = 0;
konektor pada %password adalah EFGroup6
% Fungsi Timer untuk Loop --------------------------------
app.counter = 0;
t = pengatur waktu(…
'TimerFcn', @app.timerCallback, …
'StartDelay', 1, … 'Periode', 1, …
'ExecutionMode', 'fixedSpacing', …
'TasksToExecute', inf);
mulai(t);
akhir
% Fungsi panggilan balik
fungsi ManualOverrideSwitchValueChanged (aplikasi, acara)
akhir
% Fungsi penekanan tombol: OpenGateButton
fungsi OpenGateButtonPushed (aplikasi, acara)
tutup global
tutup = 0;
akhir
% Fungsi penekanan tombol: CloseGateButton
fungsi CloseGateButtonPushed (aplikasi, acara)
terbuka global
buka = 0;
akhir
akhir
% Inisialisasi dan konstruksi aplikasi
metode (Akses = pribadi)
% Buat UIGambar dan komponen
fungsi createComponents (aplikasi)
% Buat Gambar UI
app. UIGambar = uifigure;
app. UIGambar. Posisi = [100 100 640 480];
app. UIGambar. Nama = 'Gambar UI';
% Buat RailwaygatestatusLampLabel
app. RailwaygatestatusLampLabel = uilabel(app. UIGambar);
app. RailwaygatestatusLampLabel. HorizontalAlignment = 'kanan'; app. RailwaygatestatusLampLabel. Position = [464 422 110 22]; app. RailwaygatestatusLampLabel. Text = 'Status gerbang kereta api';
% Buat gerbangLamp
app.gateLamp = uilamp(app. UIGambar);
app.gateLamp. Position = [589 422 20 20];
app.gateLamp. Color = [0.9412 0.9412 0.9412];
% Buat OpenGateButton
app. OpenGateButton = uibutton(app. UIGambar, 'push');
app. OpenGateButton. ButtonPushedFcn = createCallbackFcn(aplikasi, @OpenGateButtonPushed, benar); app. OpenGateButton. Position = [474 359 100 22];
app. OpenGateButton. Text = 'Buka Gerbang';
% Buat CloseGateButton
app. CloseGateButton = uibutton(app. UIGambar, 'push');
app. CloseGateButton. ButtonPushedFcn = createCallbackFcn(aplikasi, @CloseGateButtonPushed, benar); app. CloseGateButton. Position = [474 285 100 22];
app. CloseGateButton. Text = 'Tutup Gerbang';
% Buat UIAxes
app. UIAxes = uiaxes(app. UIGambar);
judul (app. UIAxes, 'Umpan Kamera')
app. UIAxes. Position = [341 43 300 185];
% Buat EmergencyButtonStatusLampLabel
app. EmergencyButtonStatusLampLabel = uilabel(app. UIGambar); app. EmergencyButtonStatusLampLabel. HorizontalAlignment = 'kanan'; app. EmergencyButtonStatusLampLabel. Position = [97 323 142 22]; app. EmergencyButtonStatusLampLabel. Text = 'Status Tombol Darurat';
% Buat EmergencyButtonStatusLamp
app. EmergencyButtonStatusLamp = uilamp(app. UIGambar); app. EmergencyButtonStatusLamp. Position = [254 323 20 20];
% Buat LabelKondisi Di Bawah Normal
app. UndernormalconditionsLabel = uilabel(app. UIGambar);
app. UndernormalconditionsLabel. Position = [108 285 248 22];
app. UndernormalconditionsLabel. Text = 'Dalam kondisi normal';
% Buat UIAxes2
app. UIAxes2 = uiaxes(app. UIGambar);
judul (app. UIAxes2, 'Posisi Kereta')
xlabel(app. UIAxes2, 'Posisi X')
ylabel(app. UIAxes2, 'Posisi Y')
app. UIAxes2. Box = 'on';
app. UIAxes2. XGrid = 'aktif';
app. UIAxes2. YGrid = 'aktif';
app. UIAxes2. Position = [18 43 300 185];
% Buat EF230Group6Label
app. EF230Group6Label = uilabel(app. UIGambar);
app. EF230Group6Label. HorizontalAlignment = 'tengah';
app. EF230Group6Label. FontSize = 28;
app. EF230Group6Label. FontWeight = 'tebal';
app. EF230Group6Label. Position = [-4 401 379 64];
app. EF230Group6Label. Text = 'EF 230 Grup 6';
% Buat IanAllishKellyBondIanDaffronLabel
app. IanAllishKellyBondIanDaffronLabel = uilabel(app. UIGambar); app. IanAllishKellyBondIanDaffronLabel. Position = [94 380 184 22]; app. IanAllishKellyBondIanDaffronLabel. Text = 'Ian Allish, Kelly Bond, Ian Daffron';
% Buat LoopsLengkapLabel
app. LoopsCompletedLabel = uilabel(app. UIGambar);
app. LoopsCompletedLabel. Position = [18 10 103 22];
app. LoopsCompletedLabel. Text = 'Pengulangan Selesai:';
% Buat Label
app. Label = uilabel(app. UIGambar);
app. Label. Position = [120 10 178 22];
app. Label. Text = '####';
akhir
akhir
metode (Akses = publik)
% Bangun aplikasi
aplikasi fungsi = mikro
% Buat dan konfigurasikan komponen
buat Komponen (aplikasi)
% Daftarkan aplikasi dengan Desainer Aplikasi
registerApp(app, app. UIGambar)
% Jalankan fungsi startup
jalankanStartupFcn(aplikasi, @startupFcn)
jika nargout == 0
aplikasi yang jelas
akhir
akhir
% Kode yang dijalankan sebelum penghapusan aplikasi
hapus (aplikasi)
% Hapus UIGambar saat aplikasi dihapus
hapus (app. UIGambar)
akhir
akhir
akhir
Langkah 4: Langkah Terakhir
Setelah kode ditulis dan Raspberry Pi telah disambungkan, pasang motor servo ke gerbang rel kereta api cetak 3D seperti yang terpasang pada gambar di atas.
Sekarang, proyek selesai. Hubungkan raspberry PI ke rel kereta api dan amati sistem baru yang menciptakan perlintasan kereta api yang lebih aman untuk pengemudi mobil dan kondektur. Mainkan sistem dengan berinteraksi dengan GUI untuk memicu brankas yang gagal dipasang untuk mencegah kecelakaan.
Itulah akhir dari tutorial, nikmati Sistem Kereta Cerdas baru Anda!
Direkomendasikan:
Lampu LED Meja Cerdas - Pencahayaan Cerdas Dengan Arduino - Ruang Kerja Neopiksel: 10 Langkah (dengan Gambar)
Lampu LED Meja Cerdas | Pencahayaan Cerdas Dengan Arduino | Ruang Kerja Neopiksel: Saat ini kita menghabiskan banyak waktu di rumah, belajar dan bekerja secara virtual, jadi mengapa tidak membuat ruang kerja kita lebih luas dengan sistem pencahayaan khusus dan cerdas berbasis Arduino dan LED Ws2812b. Di sini saya tunjukkan cara membangun Smart Anda Lampu LED Meja yang
Tata Letak Kereta Api Model Otomatis Menjalankan Dua Kereta (V2.0) - Berbasis Arduino: 15 Langkah (dengan Gambar)
Tata Letak Kereta Api Model Otomatis Menjalankan Dua Kereta (V2.0) | Berbasis Arduino: Mengotomatiskan tata letak kereta api model menggunakan mikrokontroler Arduino adalah cara yang bagus untuk menggabungkan mikrokontroler, pemrograman, dan model kereta api menjadi satu hobi. Ada banyak proyek yang tersedia untuk menjalankan kereta secara mandiri pada model perkeretaapian
Jam Alarm Cerdas: Jam Alarm Cerdas Dibuat Dengan Raspberry Pi: 10 Langkah (dengan Gambar)
Jam Alarm Cerdas: Jam Alarm Cerdas yang Dibuat Dengan Raspberry Pi: Pernahkah Anda menginginkan jam pintar? Jika iya, ini solusinya untuk Anda! Saya membuat Smart Alarm Clock, ini adalah jam yang bisa Anda ubah waktu alarmnya sesuai dengan website. Saat alarm berbunyi, akan ada suara (buzzer) dan 2 lampu akan
Berkebun Cerdas Berbasis IoT dan Pertanian Cerdas Menggunakan ESP32: 7 Langkah
Berkebun Cerdas dan Pertanian Cerdas Berbasis IoT Menggunakan ESP32: Dunia berubah seiring waktu dan pertanian. Saat ini, Orang mengintegrasikan elektronik di setiap bidang dan pertanian tidak terkecuali untuk ini. Penggabungan elektronik dalam pertanian ini membantu petani dan orang-orang yang mengelola kebun.Dalam hal ini
Tata Letak Kereta Api Model Otomatis Menjalankan Dua Kereta: 9 Langkah
Tata Letak Kereta Api Model Otomatis Menjalankan Dua Kereta: Saya membuat Tata Letak Kereta Model Otomatis dengan Melewati Berpihak beberapa waktu lalu. Atas permintaan dari sesama anggota, saya membuat Instruksi ini. Ini agak mirip dengan proyek yang disebutkan sebelumnya. Tata letak mengakomodasi dua kereta dan menjalankannya secara bergantian