Otomatisasi Palang Pintu Kereta Api
- Meningkatkan keamanan dan efisiensi pada perlintasan kereta api dengan sistem otomatis yang andal dan responsif.
- Mengaplikasikan STM32F103C8T6 dan Raspberry Pi Pico dengan komunikasi UART yang telah dipelajari selama praktikum.
a. PWM (Pulse Width Modulation)
PWM atau kepanjangan Pulse Width Modulation, dalam bahasa Indonesia biasa disebut Modulasi Lebar Pulsa. Pada prinsipnya, PWM adalah salah satu teknik modulasi yang mengubah lebar pulsa (pulse width) dengan nilai frekuensi dan amplitudo (tinggi pulsa) yang tetap. PWM Signal ini digunakan menghasilkan sinyal analog dari perangkat Digital yang salah satu contohnya adalah dari Mikrokontroler.
Pembagian Pin PWM:
Setiap Board Arduino memiliki pin PWM dan nilai frekuensi yang berbeda-beda. Karena pada percobaan nanti kita akan menggunakan board arduino nano, maka gunakan salah satu dari pin berikut 3, 5, 6, 9, 10, 11.
PWM pada arduino bekerja pada frekuensi 500 Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita bisa memberi nilai dari 0 hingga 255. Ketika kita memberikan angka 0, berarti pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0 volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita anggap setengahu
dari 0 hingga 255, atau 50% dari 255), maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 * 255 atau 64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan terjadi 500 kali dalam 1 detik.
b. ADC (Analog to Digital Converter)
ADC atau Analog to Digital Converter merupakan salah satu perangkat elektronika yang digunakan sebagai penghubung dalam pemrosesan sinyal analog oleh sistem digital. Fungsi utama dari fitur ini adalah mengubah sinyal masukan yang masih dalam bentuk sinyal analog menjadi sinyal digital dengan bentuk kode-kode digital. Ada 2 faktor yang perlu diperhatikan pada proses kerja ADC yaitu kecepatan sampling dan resolusi. Kecepatan sampling menyatakan seberapa sering perangkat mampu mengkonversi sinyal analog ke dalam bentuk sinyal digital dalam selang waktu yang tertentu. Biasa dinyatakan dalam sample per second (SPS). Sementara Resolusi menyatakan tingkat ketelitian yang dimilliki. Pada Arduino, resolusi yang dimiliki adalah 10 bit atau rentang nilai digital antara 0 - 1023. Dan pada Arduino tegangan referensi yang digunakan adalah 5 volt, hal ini berarti ADC pada Arduino mampu menangani sinyal analog dengan tegangan 0 - 5 volt. Pada Arduino, menggunakan pin analog input yang diawali dengan kode A( A0- A5 padaArduino Uno). Fungsi untuk mengambil data sinyal input analog menggunakan analogRead(pin);
d. Mikrokontroler
Mikrokontroler adalah suatu chip berupa IC (Integrated Circuit) yang dapat menerima sinyal input, mengolahnya dan memberikan sinyal output sesuai dengan program yang diisikan ke dalamnya. Sinyal input mikrokontroler berasal dari sensor yang merupakan informasi dari lingkungan sedangkan sinyal output ditujukan kepada aktuator yang dapat memberikan efek ke lingkungan. Jadi secara sederhana mikrokontroler dapat diibaratkan sebagai otak dari suatu perangkat/produk yang mempu berinteraksi dengan lingkungan sekitarnya. Mikrokontroler pada dasarnya adalah komputer dalam satu chip, yang di dalamnya terdapat mikroprosesor, memori, jalur Input/Output (I/O) dan perangkat pelengkap lainnya. Kecepatan pengolahan data pada mikrokontroler lebih rendah jika dibandingkan dengan PC. Pada PC kecepatan mikroprosesor yang digunakan saat ini telah mencapai orde GHz, sedangkan kecepatan operasi mikrokontroler pada umumnya berkisar antara 1 – 16 MHz. Begitu juga kapasitas RAM dan ROM pada PC yang bisa mencapai orde Gbyte, dibandingkan dengan mikrokontroler yang hanya berkisar pada orde byte/Kbyte.
Meskipun kecepatan pengolahan data dan kapasitas memori pada mikrokontroler jauh lebih kecil jika dibandingkan dengan komputer personal, namun kemampuan mikrokontroler sudah cukup untuk dapat digunakan pada banyak aplikasi terutama karena ukurannya yang kompak. Mikrokontroler sering digunakan pada sistem yang tidak terlalu kompleks dan tidak memerlukan kemampuan komputasi yang tinggi.
e. Komunikasi
Kegunaan dasar dari sistem komunikasi adalah menjalankan pertukaran data antara dua pihak. Pada gambar dibawah ini merupakan suatu model komunikasi yang sederhana yaitu komunikasi dua arah. Pada mikrokontroler ada beberapa komunikasi yaitu:
• UART (Universal Asynchronous Receiver-Transmitter) adalah bagian perangkat keras komputer yang menerjemahkan antara bit-bit paralel data dan bit-bit serial. UART biasanya berupa sirkuit terintegrasi yang digunakan untuk komunikasi serial pada komputer atau port serial perangkat peripheral.
Cara kerja komunikasi UART:
Data dikirimkan secara paralel dari data bus ke UART1. Pada UART1 ditambahkan start bit, parity bit, dan stop bit kemudian dimuat dalam satu paket data. Paket data ditransmisikan secara serial dari Tx UART1 ke Rx UART2. UART2 mengkonversikan data dan menghapus bit tambahan, kemudia di transfer secara parallel ke data bus penerima.
f. Penggunaan Sensor
- Sensor Ultrasonik
Cara Kerja:
Pemancar mengirimkan gelombang ultrasonik ke arah objek target dengan frekuensi tertentu, umumnya 40 kHz.
Gelombang ini akan merambat di udara dengan kecepatan sekitar 340 m/s.
Ketika gelombang mengenai permukaan objek, gelombang tersebut akan dipantulkan kembali ke arah sensor.
Penerima kemudian menangkap gelombang pantul tersebut.
Sensor menghitung selisih waktu antara pengiriman dan penerimaan gelombang untuk menentukan jarak objek dari sensor menggunakan rumus:
Jarak=2Kecepatan Gelombang×Waktu TempuhPembagian dua dilakukan karena gelombang menempuh jarak pergi-pulang (dari sensor ke objek dan kembali ke sensor).
Piezoelektrik: Mengubah energi listrik menjadi gelombang ultrasonik dan sebaliknya.
Transmitter: Menghasilkan dan memancarkan gelombang ultrasonik.
Receiver: Menerima gelombang ultrasonik yang dipantulkan objek.
- Sensor PIR
Sensor PIR terdiri dari dua komponen utama, yaitu sensor piroelektrik dan lensa Fresnel.
Sensor piroelektrik mendeteksi perubahan jumlah radiasi inframerah yang diterimanya. Ketika tidak ada gerakan, radiasi yang diterima kedua elemen sensor adalah sama.
Saat ada objek hangat (misal: manusia) bergerak di area deteksi, jumlah radiasi yang diterima berubah, sehingga terjadi perubahan muatan listrik pada sensor piroelektrik.
Perubahan ini diubah menjadi sinyal listrik yang kemudian diproses oleh sirkuit sensor. Jika perubahan cukup signifikan, sensor akan mengirimkan sinyal digital (biasanya logika 1) ke mikrokontroler atau sistem kontrol lainnya.
Output sensor PIR biasanya berupa sinyal digital (0 atau 1), sehingga mudah diintegrasikan dalam sistem otomatisasi.
Hanya mendeteksi perubahan radiasi inframerah, sehingga efektif untuk mendeteksi gerakan, bukan keberadaan objek diam.
Memiliki jangkauan deteksi efektif hingga sekitar 5 meter, tergantung tipe dan pengaturan sensitivitasnya.
Tidak terpengaruh oleh cahaya tampak, sehingga tetap berfungsi baik di kondisi terang maupun gelap.
Konsumsi daya rendah dan desainnya kompak, cocok untuk aplikasi otomatisasi dan keamanan.
- Potensiometer
g. Komponen lainnya
• LCD
Liquid Crystal Display (LCD) adalah sebuah peralatan elektronik yang berfungsi untuk menampilkan output sebuah sistem dengan cara membentuk suatu citra atau gambaran pada sebuah layar. Secara garis besar komponen penyusun LCD terdiri dari kristal cair (liquid crystal) yang diapit oleh 2 buah elektroda transparan dan 2 buah filter polarisasi (polarizing filter). Struktur LCD dapat dilihat pada gambar berikut:
-Film dengan polarizing filter vertical untuk memolarisasi cahaya yang masuk.
-Glass substrate yang berisi kolom-kolom elektroda Indium tin oxide (ITO).
-Twisted nematic liquid crystal (kristal cair dengan susunan terpilin).
-Glass substrate yang berisi baris-baris elektroda Indium tin oxide (ITO).
-Film dengan polarizing filter horizontal untuk memolarisasi cahaya yang masuk.
-Reflektor cahaya untuk memantulkan cahaya yang masuk LCD kembali ke mata pengamat.
Sebuah citra dibentuk dengan mengombinasikan kondisi nyala dan mati dari pixel-pixel yang menyusun layar sebuah LCD. Pada umumnya LCD yang dijual di pasaran sudah memiliki integrated circuit tersendiri sehingga para pemakai dapat mengontrol tampilan LCD dengan mudah dengan menggunakan mikrokontroler untuk mengirimkan data melalui pin-pin input yang sudah tersedia
• Motor Servo
Potensiometer bekerja dengan cara memvariasikan posisi wiper pada jalur elemen resistif yang seragam. Saat wiper digeser atau diputar, resistansi antara terminal output (wiper) dan terminal input atau ground berubah, sehingga menimbulkan penurunan tegangan yang berbeda pada output. Tegangan output ini merupakan pembagi tegangan yang bergantung pada posisi wiper. Dengan demikian, potensiometer dapat mengatur besar kecilnya resistansi, tegangan, atau arus listrik dalam suatu rangkaian.
Cara Kerja:
Motor servo dikendalikan dengan sinyal Pulse Width Modulation (PWM), yaitu sinyal pulsa dengan lebar tertentu yang menentukan posisi sudut poros motor. Contohnya, pulsa dengan lebar sekitar 1,5 ms akan mengarahkan poros ke posisi tengah (90°), pulsa lebih pendek menggerakkan poros ke posisi 0°, dan pulsa lebih panjang menggerakkan ke posisi 180° (atau sesuai tipe servo).
Sistem kontrol akan terus mengirimkan sinyal PWM secara berkala (biasanya setiap 20 ms) untuk mempertahankan posisi poros. Jika ada gangguan yang mencoba mengubah posisi poros, motor servo akan melawan dengan torsi yang dimilikinya untuk menjaga posisi tersebut.
Komponen Utama:
1. Motor DC, motor utama yang menghasilkan putaran
2. Gearbox, mengurangi kecepatan putaran rotor dan meningkatkan torsi
3. Rangkaian Kontrol, mengolah sinyal umpan balik dan mengatur arus listrik ke motor
sesuai perintah.
- Siapkan mikrokontroler STM32F103C8T6 dan Raspberry Pi Pico.
- Siapkan sensor ultrasonic, sensor PIR, potensiometer.
- Siapkan motor servo, LCD, dan buzzer.
- Siapkan kabel jumper, breadboard, dan power supply.
- Hubungkan pin UART STM32F103C8T6 (TX dan RX) ke pin UART Raspberry Pi Pico (RX dan TX) secara silang, serta sambungkan ground (GND) kedua mikrokontroler agar referensi tegangan sama.
- Inisialisasi UART dengan baud rate 9600 bps.
- Konfigurasikan pin TX dan RX UART pada STM32F103C8T6.
- Buat program untuk membaca data dari sensor ultrasonic, PIR, dan potensiometer.
- Program STM32 untuk mengirimkan data atau perintah ke Raspberry Pi Pico melalui UART berdasarkan kondisi sensor (misal: perintah "1" untuk tutup palang, "0" untuk buka palang).
- Inisialisasi UART pada Raspberry Pi Pico dengan baud rate yang sama (9600 bps).
- Konfigurasikan pin TX dan RX UART pada Raspberry Pi Pico (misal TX pada GPIO 0 dan RX pada GPIO 1).
- Buat program MicroPython untuk menerima data dari STM32F103C8T6 melalui UART.
- Program Raspberry Pi Pico untuk mengontrol motor servo, LCD, LED, dan buzzer berdasarkan perintah yang diterima melalui UART.
- Uji sensor ultrasonic untuk memastikan dapat mendeteksi jarak dengan benar.
- Uji sensor PIR untuk mendeteksi gerakan di area perlintasan.
- Uji potensiometer sebagai input variabel untuk kalibrasi atau pengaturan.
- Pastikan data sensor terbaca dengan benar oleh STM32F103C8T6.
- Kirim data percobaan dari STM32F103C8T6 ke Raspberry Pi Pico melalui UART.
- Pastikan Raspberry Pi Pico menerima data dengan benar dan menampilkan status di LCD.
- Lakukan debugging jika terjadi kesalahan komunikasi.
- Setelah menerima perintah dari STM32, Raspberry Pi Pico menggerakkan motor servo untuk menurunkan atau menaikkan palang pintu.
- Nyalakan LED dan buzzer sebagai indikator status palang pintu.
- Tampilkan status sistem pada LCD (misal: "Palang Ditutup", "Palang Dibuka").
- Integrasikan seluruh komponen dan program.
- Simulasikan kondisi kedatangan kereta dengan sensor ultrasonic.
- Amati respon sistem otomatisasi palang pintu, mulai dari deteksi, pengiriman perintah UART, hingga pengendalian aktuator.
- Catat hasil pengujian dan evaluasi kinerja sistem.
- Sensor ultrasonik ditempatkan di jalur rel untuk mendeteksi keberadaan kereta api yang mendekat dengan mengukur jarak antara sensor dan objek di depannya.
- Sensor PIR digunakan untuk mendeteksi adanya gerakan kendaraan atau manusia di area perlintasan, memastikan tidak ada objek yang tertinggal saat palang akan ditutup.
- Potensiometer dapat digunakan untuk mengatur sensitivitas atau kalibrasi sistem secara manual, seperti menentukan batas jarak deteksi sensor ultrasonik atau posisi minimum/ maksimum motor servo.
- Data dari sensor ultrasonik, PIR, dan potensiometer dikumpulkan dan diproses oleh STM32F103C8T6.
- STM32F103C8T6 menganalisis apakah ada kereta api yang mendekat dan apakah area perlintasan aman untuk menutup palang.
- Jika kondisi terpenuhi (kereta terdeteksi dan perlintasan aman), STM32F103C8T6 mengirimkan perintah ke Raspberry Pi Pico sebagai melalui komunikasi serial atau protokol lain yang digunakan.
- Raspberry Pi Pico menerima perintah dari STM32F103C8T6 untuk mengaktifkan aktuator output.
- Motor servo digerakkan untuk menurunkan palang pintu secara otomatis.
- Buzzer berbunyi sebagai peringatan suara kepada pengguna jalan ketika ada pengguna jalan yang menerobos palang pintu kereta api.
- LCD menampilkan informasi status sistem, seperti "Palang Ditutup", "Kereta Melintas", atau "Palang Dibuka".
- Setelah kereta api melintas dan sensor ultrasonik tidak lagi mendeteksi objek pada jarak tertentu, serta sensor PIR memastikan tidak ada gerakan di perlintasan, STM32F103C8T6 mengirimkan perintah pembukaan palang ke Raspberry Pi Pico.
- Motor servo mengangkat palang, LED indikator berubah warna, buzzer berhenti berbunyi, dan LCD memperbarui informasi status.
- Mode default untuk mengontrol motor servo adalah menggunakan sensor ultrasonik.
- Pushbutton digunakan sebagai interrupt. Saat button ditekan, maka motor servo akan dikontrol oleh potensiometer. Jika button ditekan sekali lagi, maka motor servo akan dikontrol oleh sensor ultrasonik (default).
A. STM32F103C8T6
#define TRIG_PIN PA1
#define ECHO_PIN PA2
#define PIR_PIN PA0
#define POT_PIN PA6
#define BTN_PIN PB0
bool modePotensio = false;
unsigned long lastPress = 0;
void setup() {
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
pinMode(POT_PIN, INPUT);
pinMode(BTN_PIN, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// Cek tombol (interrupt manual via polling)
if (digitalRead(BTN_PIN) == LOW) {
if (millis() - lastPress > 300) {
modePotensio = !modePotensio;
Serial.println(modePotensio ? "MOD:PT" : "MOD:US");
lastPress = millis();
}
}
if (modePotensio) {
int potVal = analogRead(POT_PIN); // 0–4095
int sudut = map(potVal, 0, 4095, 0, 90);
Serial.print("ACT:");
Serial.println(sudut);
} else {
// Ultrasonik
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
long durasi = pulseIn(ECHO_PIN, HIGH, 30000);
float jarak = durasi * 0.0343 / 2;
if (durasi == 0) jarak = 999;
if (jarak < 50) {
Serial.println("ACT:90");
} else {
Serial.println("ACT:0");
}
}
// PIR
if (digitalRead(PIR_PIN)) {
Serial.println("PIR:1");
} else {
Serial.println("PIR:0");
}
delay(200);
}
B. Raspberry Pi Pico
Download datasheet PIR sensor [download]
Download datasheet Potensiometer [download]
Download datasheet LCD [download]
Download datasheet Motor Servo [download]
Tidak ada komentar:
Posting Komentar