Daftar Isi:

Sistem Kereta Cerdas: 4 Langkah
Sistem Kereta Cerdas: 4 Langkah

Video: Sistem Kereta Cerdas: 4 Langkah

Video: Sistem Kereta Cerdas: 4 Langkah
Video: cara kerja mesin 4 langkah 2024, Juli
Anonim
Sistem Kereta Pintar
Sistem Kereta Pintar

Dirancang untuk meningkatkan keselamatan, mencegah kecelakaan, dan meningkatkan respons positif dan produktif untuk membantu jika terjadi kecelakaan.

Langkah 1: Bagian dan Bahan

Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
Bagian dan Bahan
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

Konfigurasi
Konfigurasi
Konfigurasi
Konfigurasi
Konfigurasi
Konfigurasi
Konfigurasi
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

Kode dan Logika
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

Langkah terakhir
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: