- Rangkai seluruh komponen alat dan bahan yang diperlukan sesuai dengan kondisi percobaan yang dipilih.
- Buat program arduino pada aplikasi Arduino IDE sesuai dengan kondisi percobaan. Pastikan aplikasi Arduino IDE sudah mendownload library yang dibutuhkan dan sudah memilih board arduino yang sesuai.
- Verifikasi atau upload program pada arduino.
- Jalankan atau uji coba rangkaian yang telah dibuat sesuai dengan kondisi.
- Perhatikan rangkaian dan output apakah sesuai dengan kondisi.
- Rangkaian telah selesai dibuat.
2. Hardware dan Diagram Blok
[Kembali]
3. Rangkaian Simulasi dan Prinsip kerja [Kembali]
a). Rangkaian Simulasi
b). Prinsip Kerja
Program ini adalah contoh program untuk Arduino yang menggunakan beberapa komponen seperti LCD, LED, dan motor DC. Program ini memiliki tujuan untuk menampilkan nilai count pada LCD, menyalakan LED secara berurutan setiap kali nilai count adalah kelipatan 10, serta menggerakkan motor DC ke kanan secara terus menerus.
Pertama, program melakukan inisialisasi pin untuk LED, motor, dan pin interrupt. Kemudian, program mengaktifkan interrupt pada pin yang telah ditentukan, sehingga fungsi interruptServiceRoutine() akan dipanggil ketika interrupt terjadi.
Selanjutnya, program masuk ke dalam loop utama. Di dalam loop, nilai count akan terus bertambah dan ditampilkan pada LCD. Program juga akan menyalakan LED sesuai dengan nilai count/10 (LED1 menyala saat count=10, LED2 saat count=20, dan seterusnya).
Selain itu, program juga akan menggerakkan motor DC ke kanan dengan delay 500ms, kemudian mematikan motor dan menunggu 500ms sebelum iterasi berikutnya. Proses ini akan terus berulang sampai nilai count mencapai 100.
Ketika nilai count mencapai 100, program akan berhenti dan tidak melakukan apa-apa (loop kosong). Fungsi interruptServiceRoutine() digunakan untuk mengatur ulang nilai count menjadi 0 dan mematikan semua LED saat interrupt terjadi.
4. Flowchart dan Listing Program [Kembali]
a). Flowchart
b). Listing Program
#include <LiquidCrystal_I2C.h>
#define LED1 13
#define LED2 12
#define LED3 11
#define LED4 10
#define motorPin1 9
#define motorPin2 8
#define interruptPin 2
volatile bool buttonPressed = false; // Flag untuk menandakan bahwa tombol telah ditekan, Kata kunci volatile digunakan agar variabel dapat diakses dan diubah nilai nya dalam fungsi interrupt.
int count = 0; // Variabel untuk menyimpan nilai count
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C, jumlah kolom, jumlah baris LCD
void setup() { //inisialisasi pin
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(interruptPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin), interruptServiceRoutine, FALLING);
lcd.init();
lcd.backlight();
}
void loop() { //operasi utama program yang berulang
count++; //menambah nilai variabel count setiap kali program masuk ke dalam loop.
// Menampilkan nilai count pada LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Count: ");
lcd.print(count);
// Memeriksa apakah count adalah kelipatan 10 dan menyalakan LED sesuai
if (count % 10 == 0) { //Memeriksa apakah count adalah kelipatan 10, jika ya, maka akan menyalakan LED sesuai dengan nilai count/10.
switch (count / 10) { //enggunakan switch-case untuk menyalakan LED sesuai dengan nilai count/10.
case 1:
digitalWrite(LED1, HIGH);
break;
case 2:
digitalWrite(LED2, HIGH);
break;
case 3:
digitalWrite(LED3, HIGH);
break;
case 4:
digitalWrite(LED4, HIGH);
break;
}
}
// Memutar motor ke kanan
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
delay(500);
// Mematikan motor
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
// Menunggu 500ms sebelum iterasi berikutnya
delay(500);
// Memeriksa apakah count sudah mencapai 100
if (count >= 100) { //Memeriksa apakah count sudah mencapai 100, jika ya, maka program akan berhenti dengan menjalankan loop kosong.
while (true) {
// Do nothing, program berhenti di sini
}
}
}
// Fungsi untuk menangani interrupt
void interruptServiceRoutine() { //Fungsi ini akan dipanggil saat interrupt terjadi dan mengatur ulang nilai count menjadi 0 serta mematikan semua LED.
count = 0; // Mengulang count menjadi 0
// Mematikan semua LED
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
digitalWrite(LED4, LOW);
}
5. Kondisi [Kembali]
Percobaan 2 Kondisi 1 :
Motor ke kanan,LCD menampilkan counting dari 0 sampai 100, setiap counting kelipatan 10 maka hidup 1 LED,ketika diberi interrupt maka counting diulang dari 0 dan 1 led mati
0 komentar:
Posting Komentar