MODUL II
PWM, ADC, dan Interrupt
- Rangkailah seperti rangkaian berikut
- Buka Arduino IDE dan masukan listing program Upload program ke arduino
- Variasikan tombol yang ditekan dan amati keluarannya pada LCD
Rangkaian ini berfungsi sebagai berikut:
Pendefinisian Pin dan Variabel:
Mendefinisikan pin yang digunakan dengan nama konstan menggunakan #define.
Misalnya, A sebagai pin 8, B sebagai pin 9, dan seterusnya untuk mengidentifikasi pin secara lebih mudah.
Di dalam fungsi setup(), inisialisasi komunikasi serial dengan kecepatan 9600 baud.
Mengatur pin-pin sebagai input atau output sesuai kebutuhan, dengan beberapa pin menggunakan internal pull-up resistor.
Fungsi-fungsi Gerakan:
Terdapat beberapa fungsi yang mengatur pergerakan motor stepper berdasarkan urutan coil pada motor tersebut.
Fungsi Non-Pergerakan:
Fungsi nonpergerakan() digunakan untuk mematikan semua coil motor stepper sehingga motor tidak bergerak.
Loop Utama:
Di dalam fungsi loop(),
Juga, dilakukan pembacaan nilai sensor LDR (Light Dependent Resistor) untuk menentukan apakah motor harus bergerak pada mode normal atau terbalik, tergantung pada kondisi cahaya yang terdeteksi.
Logika Pengendalian:
Jika nilai LDR rendah (kurang dari 2.5), maka motor akan bergerak searah jarum jam
Jika nilai LDR tinggi (lebih dari atau sama dengan 10), maka motor akan bergerak terbalik.
Jika tidak ada tombol yang ditekan atau nilai LDR tidak memenuhi kondisi, motor tidak akan bergerak (nonpergerakan()).
Delay:
Terdapat delay sebesar 100 milidetik (delay(100)) di akhir loop untuk mengatur kecepatan perulangan dan memberikan waktu bagi motor untuk bergerak.
Listing Program
// Mendefinisikan konstanta untuk pin Arduino
#define A 8
#define B 9
#define C 10
#define D 11
#define LDR A0
void setup() {
Serial.begin(9600);
// Mulai komunikasi serial pada kecepatan 9600 baud
// Menetapkan mode pin sebagai OUTPUT atau INPUT_PULLUP
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(LDR, INPUT);
}
void pergerakan_1() {
digitalWrite(A, LOW);
digitalWrite(D, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
}
void pergerakan_2() {
digitalWrite(A, HIGH);
digitalWrite(D, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
void pergerakan_3() {
digitalWrite(A, HIGH);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
}
void pergerakan_4() {
digitalWrite(A, LOW);
digitalWrite(D, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
}
void nonpergerakan() {
digitalWrite(A, LOW);
digitalWrite(D, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
}
void loop() {
int ldrValue = analogRead(LDR);
float ldrVoltage = ldrValue * (5.0 / 1023.0); // Ubah nilai ADC ke tegangan (5V sebagai referensi)
// Menampilkan nilai tegangan LDR ke serial monitor
Serial.print("LDR Voltage: ");
Serial.println(ldrVoltage);
if (ldrVoltage < 2.5) {
pergerakan_1();
delay(100);
pergerakan_2();
delay(100);
pergerakan_3();
delay(100);
pergerakan_4();
delay(100);
} else {
pergerakan_4();
delay(100);
pergerakan_3();
delay(100);
pergerakan_2();
delay(100);
pergerakan_1();
delay(100);
}
}
Saat Praktikum
P6K5 (Sertakan dengan LDR
ketika bernilai <2.50 putaran motor searah jarum jam )
Tidak ada komentar:
Posting Komentar