Percobaan 2 Kondisi 5
1. Prosedur [Kembali]
1. Rangkai rangkaian di proteus sesuai dengan kondisi percobaan.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Tulis program untuk arduino di software Arduino IDE.
3. Compile program tadi, lalu upload ke dalam arduino.
4. Setelah program selesai di upload, jalankan simulasi rangkaian pada proteus.
2. Hardware dan Diagram Blok [Kembali]
3. Rangkaian Simulasi dan Prinsip Kerja [Kembali]
Buatlah program sesuai dengan kondisi yang dipilih yaitu "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 saat motor DC berhenti 4 detik dan 1 LED hidup setiap kali dilakukan interrupt". Kemudian program dimasukkan ke arduino. Pada percobaan ini menggunakan inputan dip switch yang terhubung ke kaki arduino sebagai input dan output dari percobaan ini adalah motor, LED, dan LCD. Setelah rangkaian pada proteus di run, maka dapat dilihat LCD nantinya akan menampilkan counting secara berurutan dari 0 sampai 50. Setelah counting mencapai 50, maka motor akan berputar ke kiri dahulu selama 3 detik kemudian berhenti 2 detik dan ke kanan 3 detik, lalu LED nantinya akan hidup.
Dan apabila dilakukan interrupt pada kondisi RISING, yaitu pada Dip Switch dari off ke on, maka LCD akan menampilkan counting dengan kelipatan 10, misal jika kita melakukan interrupt saat counting pada LCD menampilkan angka 10 maka setelah itu akan counting dengan kelipatan 10 yaitu 10,20 hingga 100 dan kemudian akan kembali ke 10. Selanjutnya selama beberapa detik, counting akan berhenti dan kemudian motor akan bergerak ke kanan 3 detik berhenti 2 detik lalu ke kiri 3 detik kemudian mati 4 detik, dan LED akan menyala/hidup.
Flowchart :
Listing Program:
#include <LiquidCrystal_I2C.h>
// Definisikan pinconst int motorPin1 = 5; // Motor pin 1const int motorPin2 = 6; // Motor pin 2const int ledPin = 13; // Pin LEDconst int switchPin = 2; // Pin untuk switchvolatile int count = 0; // Variabel untuk menghitung interruptbool 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, RISING);}
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(150); // Tunda 150 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(1500); // Berhenti 5 detik setelah setiap putaran digitalWrite(ledPin, HIGH); // Nyalakan LED delay(5000); 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}
Flowchart :
Listing Program:
#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, RISING);
}
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(150); // Tunda 150 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(1500);
// Berhenti 5 detik setelah setiap putaran
digitalWrite(ledPin, HIGH); // Nyalakan LED
delay(5000);
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
}
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 saat motor DC berhenti 4 detik dan 1 LED hidup setiap kali dilakukan interrupt"
7. Download File [Kembali]
Datasheet LED klik disini
Tidak ada komentar:
Posting Komentar