Modul 2 PWM, ADC, dan Interrupt
1. Rangkai semua komponen sesuai kondisi yang dipilih
2. buat program di aplikasi arduino IDE
3. setelah selesai masukkan program ke arduino di proteus
4. jalankan program pada simulasi dan cobakan sesuai dengan modul dan kondisi
5. Selesai
2. Hardware dan diagram blok
[Kembali]
1. Arduino Uno
2. motor
3. LED
4. Resistor
Diagram Blok :
3. Rangkaian Simulasi dan Prinsip kerja
[Kembali]
→ Gambar Rangkaian Sebelum Disimulasikan
→ Gambar Rangkaian Setelah Disimulasikan
PRINSIP KERJA
saat program dijalankan dan masuk ke komponen arduino. Selanjutnya, program terus berjalan dalam loop utama, pada saat awal jalannya rangkaian maka akan terjadi proses counting pada LCD yang menampilkan counting dari 0 sampai dengan 50. saat proses counting mencapai nilai maksimal maka motor akan berputar, dimana arah putarannya itu ke kana selama 3 detik lalu berhenti selama 2 detik dan selanjutnya akan berputar ke kiri selama 3 detik dan berhenti selama 2 detik.
apabila dilakukan interrupt (falling dimana switch dari high ke low) maka proses pada loop utama yang sedang berjalan akan langsung dipindahkan ke void interrupt dimana pada bagian ini proses yang terjadi misal counting yang sedang berjalan akan kembali ke 0, motor yang sedang berputar akan berhenti dan LED yang tadinya mati akan hidup selama 4 detik. Saat proses interrupt selesai maka akan kembali ke loop awal
4. FlowChart [Kembali]
#include <LiquidCrystal_I2C.h>
// Definisikan pin
const int motorPin1 = 5; // Motor pin 1
const int motorPin2 = 6; // Motor pin 2
const int ledPin = 13; // Pin LED
const int switchPin = 2; // Pin untuk switch
volatile int count = 0; // Variabel untuk menghitung interrupt
bool lastStateWasLoop = true; // Variabel penanda kondisi terakhir
LiquidCrystal_I2C lcd(0x27, 20, 4); // Inisialisasi LCD
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT_PULLUP); // Mengatur switchPin sebagai input dengan pull-up resistor
// Inisialisasi LCD
lcd.init();
lcd.backlight();
// Attach interrupt
attachInterrupt(digitalPinToInterrupt(switchPin), interruptHandler, FALLING);
}
void loop() {
// Loop utama
if (lastStateWasLoop) {
for (int i = 0; i <= 50; i++) {
lcd.setCursor(0, 0);
lcd.print("Count: ");
lcd.print(count);
count += 1; // Menambahkan integer count dengan angka 1
delay(200); // Tunda 200 ms
if (count > 50) {
count = 0;
}
}
// Putar motor ke kanan selama 3 detik
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
delay(3000);
// Berhenti selama 2 detik
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
delay(2000);
// Putar motor ke kiri selama 3 detik
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, HIGH);
delay(3000);
// Berhenti selama 2 detik
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Count: ");
lcd.print(count);
delay(2000);
// Berhenti 4 detik setelah setiap putaran
digitalWrite(ledPin, HIGH); // Nyalakan LED
delay(4000);
digitalWrite(ledPin, LOW); // Matikan LED
}
}
void interruptHandler() {
count = 0; // Reset count ke 0
digitalWrite(motorPin1, LOW); // Mematikan motor
digitalWrite(motorPin2, LOW); // Mematikan motor
delay(4000); // Motor berhenti selama 4 detik
digitalWrite(ledPin, HIGH); // Menghidupkan LED
delay(100); // Tunda 0.1 detik
digitalWrite(ledPin, LOW); // Mematikan LED
lastStateWasLoop = true; // Mengatur variabel penanda
}
b. Flowchart
5. Kondisi [Kembali]Kondisi : Percobaan 2 Kondisi 5
Motor ke kanan selama 3 detik lalu mati 2 detik ke kiri 3 detik dan mati 2 detik ,LCD menampilkan counting dari 0 sampai 50, interrupt counting diulang dari 0 dan motor DC berhenti 4 detik dan 1 led hidup setiap kali dilakukan interrupt
6. Video Simulasi [Kembali]
7. Download File
[Kembali]
Download Simulasi Rangkaian Klik disini
Download HTML Klik disini
Download Video Simulasi Klik disini
Download Datasheet ARDUINO UNO klik disini
Tidak ada komentar:
Posting Komentar