Modul 7 Arduino
Tujuan Pembelajaran
Selamat datang di Modul 7: Arduino! Pada pembelajaran mandiri ini, kita akan masuk ke dalam konsep pemrograman *microcontroller* tingkat menengah yang sangat penting di dunia nyata.
- Memahami perbedaan dan keunggulan penggunaan fungsi
millis()dibandingkandelay()pada Arduino. - Menggunakan konsep Sub Program (Fungsi/Void tambahan) untuk membuat script yang lebih rapi, terstruktur, dan mudah dibaca.
- Merangkai dan memprogram simulasi Lampu Lalu Lintas menggunakan Tinkercad berdasarkan logika non-blocking.
- Berkolaborasi dalam kelompok untuk merangkai Lampu Lalu Lintas secara fisik menggunakan perangkat Arduino Uno asli.
Pertanyaan Pemantik
Sebelum kita mulai membuat kode dan merangkai kabel, mari sejenak kita berpikir tentang apa yang terjadi di dunia nyata.
Pikirkan Hal Ini:
- Bayangkan jika otak manusia menggunakan sistem perintah
delay(). Ketika Anda diperintahkan "Tunggu lampu merah selama 30 detik", maka selama 30 detik itu Anda tidak bisa bernapas, tidak bisa mendengar, dan tidak bisa melihat hal lain. Tentu berbahaya, bukan? - Di modul sebelumnya, kita menggunakan
delay(). Masalahnya,delay()menghentikan total kerja Arduino. Arduino tidak bisa membaca sensor atau tombol selama `delay` berlangsung (Blocking). - Pertanyaannya: Bagaimana cara kita menyuruh Arduino "menunggu" 3 detik untuk lampu hijau, namun dalam 3 detik tersebut Arduino tetap bisa melakukan pekerjaan lain secara bersamaan (Multitasking)?
Jawabannya ada di pemanfaatan fitur Stopwatch Internal yang disebut millis(), dikombinasikan dengan kerapian Sub Program!
Memahami Konsep Inti
1. Apa itu millis()?
Fungsi millis() mengembalikan jumlah milidetik (1 detik = 1000 milidetik) sejak board Arduino mulai menjalankan program. Ini seperti stopwatch yang terus berjalan. Berbeda dengan delay() yang menghentikan program, millis() hanya mengecek waktu, sehingga Arduino bisa mengeksekusi baris kode lain secara terus-menerus.
2. Konsep Sub Program (Custom Void)
Agar kode di dalam void loop() tidak terlalu panjang dan membingungkan, kita memecah tugas-tugas kecil ke dalam "blok fungsi" atau Sub Program. Misalnya, kita membuat instruksi khusus nyalaMerah() yang berisi perintah menyalakan pin merah dan mematikan pin lainnya.
3. Skema Rangkaian
Untuk praktikum Lampu Lalu Lintas, berikut adalah rancangan pin yang akan kita gunakan pada Arduino Uno:
- LED Merah terhubung ke Pin 13
- LED Kuning terhubung ke Pin 12
- LED Hijau terhubung ke Pin 11
- Semua kaki negatif LED (Katoda) disambungkan ke GND (Ground) melalui Resistor 220Ω.
4. Script Program Lampu Lalu Lintas (millis & Sub Program)
Pelajari dengan teliti struktur kode di bawah ini. Perhatikan bagaimana void loop() menjadi sangat pendek, dan kerja berat dipindahkan ke sub-program.
// --- DEKLARASI VARIABEL ---
int pinMerah = 13;
int pinKuning = 12;
int pinHijau = 11;
// Variabel untuk millis()
unsigned long waktuSebelumnya = 0;
long jeda = 0; // Waktu tunggu dinamis
int statusLampu = 1; // 1:Merah, 2:Kuning, 3:Hijau
void setup() {
pinMode(pinMerah, OUTPUT);
pinMode(pinKuning, OUTPUT);
pinMode(pinHijau, OUTPUT);
}
void loop() {
// Membaca 'stopwatch' saat ini
unsigned long waktuSekarang = millis();
// Jika selisih waktu sudah melewati 'jeda' yang ditentukan
if (waktuSekarang - waktuSebelumnya >= jeda) {
waktuSebelumnya = waktuSekarang; // Reset stopwatch
// Panggil Sub Program pengatur siklus
aturSiklusLampu();
}
}
// --- SUB PROGRAM: Mengatur Urutan ---
void aturSiklusLampu() {
if (statusLampu == 1) {
nyalaMerah(); // Panggil sub program nyala merah
jeda = 3000; // Set jeda 3 detik
statusLampu = 2; // Lanjut ke state kuning
}
else if (statusLampu == 2) {
nyalaKuning();
jeda = 1000; // Set jeda 1 detik
statusLampu = 3; // Lanjut ke state hijau
}
else if (statusLampu == 3) {
nyalaHijau();
jeda = 3000; // Set jeda 3 detik
statusLampu = 1; // Kembali ke state merah
}
}
// --- SUB PROGRAM: Kontrol Hardware ---
void nyalaMerah() {
digitalWrite(pinMerah, HIGH);
digitalWrite(pinKuning, LOW);
digitalWrite(pinHijau, LOW);
}
void nyalaKuning() {
digitalWrite(pinMerah, LOW);
digitalWrite(pinKuning, HIGH);
digitalWrite(pinHijau, LOW);
}
void nyalaHijau() {
digitalWrite(pinMerah, LOW);
digitalWrite(pinKuning, LOW);
digitalWrite(pinHijau, HIGH);
}
Mengaplikasi: Penugasan
Misi 1: Simulasi di Tinkercad (Mandiri)
Berdasarkan "Modul 4" yang pernah kalian pelajari sebelumnya tentang dasar Tinkercad:
- Buka platform Tinkercad Circuits.
- Buat rangkaian 3 buah LED (Merah, Kuning, Hijau) beserta resistor.
- Salin dan masukkan *script program* menggunakan konsep
millis()yang ada di menu "Memahami" ke dalam editor teks Tinkercad. - Jalankan simulasi (Start Simulation) dan pastikan urutan lampu menyala dengan benar.
Misi 2: Praktikum Hardware Berkelompok
Tugas utama kalian adalah mewujudkan simulasi tadi ke dalam bentuk perangkat keras (hardware) yang nyata!
- Alat & Bahan: 1 buah Arduino Uno, 1 buah Breadboard, 3 buah LED (Merah, Kuning, Hijau), 3 buah Resistor 220 Ohm, Kabel Jumper secukupnya, Kabel USB Arduino, Laptop/PC dengan Arduino IDE.
- Tugas:
- Bagilah peran: Ada yang merangkai komponen, ada yang mengetik script di Arduino IDE, dan ada yang mengecek keamanan rangkaian sebelum dihubungkan ke listrik.
- Rangkai komponen di breadboard persis seperti skema di simulasi.
- Ketikkan script
millis()dan sub program. Modifikasi tantangan: Ubah durasi lampu hijau menjadi 5 detik dan lampu kuning menjadi 2 detik! - Upload kode ke board Arduino Uno.
- Presentasikan hasil kerja kelompok kalian di depan guru.
Merefleksi
Luar biasa! Kalian telah menyelesaikan tantangan beralih dari program statis (delay) ke program dinamis dan multitasking (millis).
Silakan jawab pertanyaan-pertanyaan berikut di buku catatan jurnal praktikum kalian untuk merekam jejak belajar hari ini:
- Apa kendala terbesar yang kelompok kalian hadapi saat menyusun logika waktu menggunakan
millis()dibandingkan saat masih memakaidelay()? - Menurut kalian, apa manfaat memisahkan perintah menghidupkan LED ke dalam Sub Program seperti
nyalaMerah()? Apakah membuat perbaikan error (debugging) menjadi lebih mudah? - Coba pikirkan 1 buah alat di kehidupan sehari-hari (selain lampu lalu lintas) yang *wajib* menggunakan sistem
millis()agar tidak "hang" saat menunggu proses selesai. Sebutkan dan jelaskan alasannya!

0 Komentar:
Posting Komentar
Berlangganan Posting Komentar [Atom]
<< Beranda