Job 11 - 20 Arduino IDE
Job 11 - 20 Arduino IDE
Tujuan Pembelajaran:
Teori Dasar: Motor DC adalah aktuator yang mengubah energi listrik menjadi gerak putar.
Untuk mengontrol motor DC dengan Arduino, kita memerlukan driver motor seperti L298N
karena Arduino tidak dapat menyediakan arus yang cukup. L298N adalah H-bridge driver yang
memungkinkan kontrol arah dan kecepatan motor.
Langkah Kerja:
1. Hubungkan pin GND L298N ke GND Arduino dan GND power supply eksternal
(common ground).
2. Hubungkan pin 5V L298N (jika ada, untuk logika internal) ke 5V Arduino.
3. Hubungkan pin 12V (atau VCC motor) L298N ke terminal positif power supply
eksternal.
4. Hubungkan terminal motor DC ke pin OUT1 dan OUT2 pada L298N.
5. Hubungkan pin kontrol L298N ke Arduino:
o IN1 ke pin digital 7 Arduino
o IN2 ke pin digital 6 Arduino
o ENA (Enable A) ke pin digital 9 Arduino (pin PWM untuk kecepatan)
6. Pastikan jumper pada ENA/ENB pada L298N terpasang jika tidak menggunakan kontrol
kecepatan (hanya arah). Jika ingin kontrol kecepatan, lepas jumper dan hubungkan ke pin
PWM.
7. Salin dan unggah kode program di bawah ini.
8. Amati pergerakan motor DC.
Kode Program:
C++
const int motorPin1 = 7; // IN1 pada L298N
const int motorPin2 = 6; // IN2 pada L298N
const int enablePin = 9; // ENA pada L298N (harus pin PWM)
void setup() {
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT); // Mengatur pin enable sebagai output
Serial.begin(9600);
}
void loop() {
// Putar motor searah jarum jam dengan kecepatan penuh
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 255); // Kecepatan penuh (0-255)
Serial.println("Motor Maju (Kecepatan Penuh)");
delay(3000);
// Berhenti
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0); // Kecepatan 0
Serial.println("Motor Berhenti");
delay(2000);
// Berhenti
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0);
Serial.println("Motor Berhenti");
delay(2000);
}
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
L298N(Driver Motor L298N)
MotorDC(Motor DC)
PowerSupply(Power Supply Eksternal)
Catatan: Tekankan pentingnya common ground dan penggunaan power supply eksternal untuk
motor.
Tugas/Evaluasi:
1. Jelaskan mengapa driver motor diperlukan untuk mengontrol motor DC dengan Arduino.
2. Modifikasi program agar kecepatan motor diatur oleh potensiometer.
3. Tambahkan dua push button: satu untuk memutar motor searah jarum jam, satu lagi untuk
berlawanan arah.
Jobsheet 12: Pembacaan Sensor PIR (Gerak) HC-SR501
Tujuan Pembelajaran:
Teori Dasar: Sensor PIR (Passive Infrared) mendeteksi perubahan radiasi inframerah di
lingkungannya, yang umumnya disebabkan oleh pergerakan objek hangat (seperti manusia atau
hewan). Sensor ini mengeluarkan sinyal HIGH ketika mendeteksi gerak dan LOW ketika tidak
ada gerak.
Langkah Kerja:
Kode Program:
C++
const int pirPin = 2; // Pin untuk sensor PIR
const int ledPin = 13; // Pin untuk LED
void setup() {
pinMode(pirPin, INPUT);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
val = digitalRead(pirPin); // Membaca status pin PIR
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
PIR(Sensor PIR HC-SR501)
LED(LED)
Resistor_LED[Resistor 220 Ohm]
Catatan: Jelaskan tentang potensiometer sensitivitas dan waktu tunda pada sensor PIR itu
sendiri.
Tugas/Evaluasi:
1. Jelaskan perbedaan antara sensor aktif dan pasif. Termasuk kategori mana sensor PIR?
2. Modifikasi program agar LED menyala selama 5 detik setelah deteksi gerak terakhir, lalu
mati.
3. Gabungkan dengan buzzer (Jobsheet 16) untuk membunyikan alarm saat gerak terdeteksi.
Jobsheet 13: Interaksi dengan Keypad Matriks 4x4
Tujuan Pembelajaran:
Teori Dasar: Keypad matriks adalah susunan tombol yang diatur dalam baris dan kolom.
Dengan memindai baris dan kolom, Arduino dapat mendeteksi tombol mana yang ditekan,
menghemat jumlah pin yang digunakan.
Langkah Kerja:
1. Hubungkan pin-pin keypad ke Arduino. Keypad 4x4 memiliki 8 pin (4 baris, 4 kolom).
o Pin Kolom (C1-C4) ke pin digital 9,8,7,6 Arduino.
o Pin Baris (R1-R4) ke pin digital 5,4,3,2 Arduino.
2. Pastikan library "Keypad" sudah terinstal di Arduino IDE (Tools > Manage Libraries...).
3. Salin dan unggah kode program di bawah ini.
4. Buka Serial Monitor dan tekan tombol-tombol pada keypad untuk melihat output.
Kode Program:
C++
#include <Keypad.h> // Memasukkan library Keypad
void setup() {
Serial.begin(9600);
Serial.println("Tekan tombol pada keypad...");
}
void loop() {
char customKey = customKeypad.getKey(); // Membaca tombol yang ditekan
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
Keypad(Keypad 4x4)
Catatan: Jelaskan konsep pemindaian matriks (scanning) dan bagaimana library Keypad
menyederhanakannya.
Tugas/Evaluasi:
Tujuan Pembelajaran:
Teori Dasar: LDR (Light Dependent Resistor) adalah jenis resistor yang nilai resistansinya
berubah tergantung pada intensitas cahaya yang mengenainya. Semakin terang cahaya, semakin
kecil resistansinya, dan sebaliknya. LDR biasanya digunakan dalam rangkaian pembagi tegangan
untuk menghasilkan output analog.
Langkah Kerja:
1. Pasang LDR dan resistor 10KΩ di breadboard untuk membentuk rangkaian pembagi
tegangan.
o Satu kaki LDR terhubung ke 5V Arduino.
o Kaki LDR yang lain terhubung ke satu kaki resistor 10KΩ.
o Kaki resistor 10KΩ yang lain terhubung ke GND Arduino.
o Titik tengah antara LDR dan resistor 10KΩ dihubungkan ke pin analog A0
Arduino.
2. Rangkai LED dengan resistor 220Ω ke pin digital 13 Arduino.
3. Salin dan unggah kode program di bawah ini.
4. Buka Serial Monitor dan amati nilai LDR. Coba tutupi LDR dengan tangan atau sorot
dengan senter untuk melihat perubahan nilai.
Kode Program:
C++
const int ldrPin = A0; // Pin analog untuk LDR
const int ledPin = 13; // Pin untuk LED
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
int ldrValue = analogRead(ldrPin); // Membaca nilai dari LDR (0-1023)
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
LDR(LDR)
Resistor_10K[Resistor 10K Ohm]
LED(LED)
Resistor_LED[Resistor 220 Ohm]
Catatan: Jelaskan konsep pembagi tegangan dan bagaimana perubahan resistansi LDR
memengaruhi tegangan di pin A0.
Tugas/Evaluasi:
1. Jelaskan bagaimana LDR bekerja dan mengapa ia digunakan dalam rangkaian pembagi
tegangan.
2. Modifikasi program agar kecerahan LED (menggunakan analogWrite pada pin PWM)
berbanding lurus dengan intensitas cahaya.
3. Buat program untuk "lampu jalan otomatis" yang menyala saat gelap dan mati saat
terang, dengan histeresis (misal, nyala di bawah 300, mati di atas 500).
Jobsheet 15: Komunikasi Serial Antar Arduino (atau dengan PC)
Tujuan Pembelajaran:
Teori Dasar: Komunikasi serial adalah metode pengiriman data bit demi bit secara berurutan
melalui satu jalur. Arduino menggunakan komunikasi serial untuk berkomunikasi dengan
komputer (melalui USB) atau dengan perangkat lain. Fungsi Serial.begin(),
Serial.print(), Serial.println(), Serial.read(), dan Serial.available() adalah
kunci.
Papan Arduino UNO R3 (1 atau 2 buah jika ingin komunikasi antar Arduino)
Kabel USB Type B
LED (1 buah)
Resistor 220Ω (1 buah)
Breadboard
Kabel Jumper Male-Male
Komputer dengan Arduino IDE terinstal
C++
const int ledPin = 13; // Pin untuk LED
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600); // Inisialisasi komunikasi serial pada baud rate 9600
Serial.println("Kirim 'H' untuk ON, 'L' untuk OFF");
}
void loop() {
if (Serial.available() > 0) { // Cek apakah ada data yang masuk di Serial
char incomingByte = Serial.read(); // Baca byte yang masuk
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
LED(LED)
Resistor_LED[Resistor 220 Ohm]
Catatan: Jelaskan pentingnya baud rate yang sama antara pengirim dan penerima.
Tugas/Evaluasi:
Tujuan Pembelajaran:
Teori Dasar: Buzzer piezoelektrik adalah komponen yang menghasilkan suara ketika diberi
sinyal listrik. Dengan Arduino, kita bisa menghasilkan nada-nada tertentu dengan fungsi tone()
yang menghasilkan gelombang kotak pada frekuensi tertentu.
Langkah Kerja:
Kode Program:
C++
const int buzzerPin = 8; // Pin untuk buzzer
const int buttonPin = 2; // Pin untuk button
void setup() {
pinMode(buzzerPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) { // Jika button ditekan
tone(buzzerPin, 1000); // Bunyikan nada 1000 Hz
Serial.println("Buzzer ON");
} else {
noTone(buzzerPin); // Matikan nada
Serial.println("Buzzer OFF");
}
delay(10); // Sedikit delay untuk stabilitas
}
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
Buzzer(Buzzer Piezo)
PushButton(Push Button)
Catatan: Jelaskan perbedaan buzzer aktif (memiliki osilator internal) dan pasif (membutuhkan
sinyal eksternal untuk nada).
Tugas/Evaluasi:
Tujuan Pembelajaran:
Teori Dasar: Sensor arus ACS712 menggunakan prinsip Hall Effect untuk mengukur arus DC
atau AC. Sensor ini menghasilkan tegangan output analog yang proporsional dengan arus yang
mengalir melaluinya. Ada beberapa varian (misal: 5A,20A,30A) dengan sensitivitas yang
berbeda.
Langkah Kerja:
Kode Program:
C++
const int currentSensorPin = A0; // Pin analog untuk sensor arus ACS712
const float voltagePerAmp = 0.185; // Sensitivitas ACS712-05B (185mV/A atau
0.185V/A)
// Sesuaikan dengan varian sensor Anda
(misal: 0.100V/A untuk 20A)
const int ACSoffset = 512; // Nilai ADC saat tidak ada arus (biasanya VCC/2,
atau 5V/2 = 2.5V -> 512 ADC)
void setup() {
Serial.begin(9600);
Serial.println("Pengukuran Arus ACS712");
// Kalibrasi offset (opsional, lebih akurat jika diukur langsung saat tidak
ada arus)
// int sum = 0;
// for(int i=0; i<1000; i++){
// sum += analogRead(currentSensorPin);
// delay(1);
// }
// ACSoffset = sum / 1000;
// Serial.print("Offset Kalibrasi: ");
// Serial.println(ACSoffset);
}
void loop() {
int rawValue = analogRead(currentSensorPin); // Membaca nilai analog dari
sensor
float voltage = (rawValue / 1024.0) * 5.0; // Konversi ADC ke tegangan (0-
5V)
// Hitung arus
// Arus = (Tegangan Output - Offset Tegangan) / Sensitivitas
// Offset Tegangan = 2.5V (untuk 5V supply)
float current = (voltage - (ACSoffset / 1024.0) * 5.0) / voltagePerAmp;
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
ACS712(Sensor Arus ACS712)
Beban(Beban DC)
PowerSupplyBeban(Power Supply Eksternal Beban)
Tugas/Evaluasi:
Tujuan Pembelajaran:
Teori Dasar: Modul RTC (Real-Time Clock) seperti DS3231 adalah chip yang menjaga waktu
dan tanggal secara akurat, bahkan ketika mikrokontroler dimatikan, berkat baterai cadangan.
Modul ini berkomunikasi dengan Arduino menggunakan protokol I2C.
Langkah Kerja:
Kode Program:
C++
#include <Wire.h> // Diperlukan untuk komunikasi I2C
#include "RTClib.h" // Library RTC dari Adafruit
void setup() {
Serial.begin(9600);
Wire.begin(); // Inisialisasi komunikasi I2C
if (!rtc.begin()) { // Cek apakah RTC terdeteksi
Serial.println("Modul RTC tidak ditemukan!");
Serial.flush();
abort(); // Hentikan program jika RTC tidak ada
}
void loop() {
DateTime now = rtc.now(); // Membaca waktu dan tanggal saat ini dari RTC
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
RTC_DS3231(Modul RTC DS3231)
Catatan: Jelaskan pentingnya baterai cadangan pada RTC dan bagaimana cara mengatur waktu
pertama kali. Ingatkan untuk mengomentari baris rtc.adjust() setelah waktu diatur.
Tugas/Evaluasi:
1. Jelaskan mengapa modul RTC diperlukan dalam beberapa aplikasi mikrokontroler.
2. Modifikasi program untuk menyalakan LED pada jam dan menit tertentu (misal: setiap
jam 10:00).
3. Gabungkan dengan LCD (Jobsheet 7) untuk menampilkan waktu dan tanggal pada LCD.
Jobsheet 19: Kontrol Multiple LED dengan Shift Register 74HC595
Tujuan Pembelajaran:
Teori Dasar: Shift register 74HC595 adalah IC yang memungkinkan kita mengontrol banyak
output digital (misal: 8 LED) hanya dengan menggunakan 3 pin Arduino. Ini sangat berguna
ketika proyek membutuhkan banyak output tetapi pin Arduino terbatas. Data dikirim secara
serial dan kemudian diubah menjadi paralel.
Langkah Kerja:
Kode Program:
C++
const int dataPin = 11; // DS (Data Serial) pada 74HC595
const int latchPin = 12; // ST_CP (Storage Register Clock) pada 74HC595
const int clockPin = 10; // SH_CP (Shift Register Clock) pada 74HC595
void setup() {
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// Contoh pola 1: LED menyala satu per satu
for (int i = 0; i < 8; i++) {
digitalWrite(latchPin, LOW); // Kunci register penyimpanan
shiftOut(dataPin, clockPin, MSBFIRST, 1 << i); // Kirim data (1 bit
bergeser)
digitalWrite(latchPin, HIGH); // Buka kunci dan tampilkan data
delay(100);
}
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, 0); // Semua LED OFF (0 = 00000000
biner)
digitalWrite(latchPin, HIGH);
delay(500);
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
IC74HC595(IC 74HC595)
LEDs(8x LED + 8x Resistor)
Catatan: Jelaskan fungsi setiap pin pada 74HC595 dan bagaimana shiftOut() bekerja.
Tugas/Evaluasi:
Tujuan Pembelajaran:
Siswa mampu mengintegrasikan beberapa sensor dan aktuator dalam satu proyek.
Siswa mampu merancang logika kontrol untuk sistem otomasi sederhana.
Siswa mampu menerapkan konsep-konsep yang telah dipelajari.
Teori Dasar: Proyek ini akan menggabungkan beberapa komponen yang telah dipelajari (sensor
gerak, sensor cahaya, LED, buzzer) untuk menciptakan sistem otomasi ruangan sederhana.
Logika yang akan diterapkan adalah: lampu menyala saat gelap dan ada gerakan, serta buzzer
berbunyi jika ada gerakan saat mode "alarm" aktif.
Langkah Kerja:
1. Rangkai sensor PIR (pin OUT ke digital 2), LDR (output ke analog A0 dengan pembagi
tegangan), LED (ke digital 13), Buzzer (ke digital 8), dan Push Button (ke digital 7,
INPUT_PULLUP).
2. Pastikan semua komponen terhubung dengan benar ke 5V dan GND Arduino.
3. Salin dan unggah kode program di bawah ini.
4. Amati perilaku sistem:
o Tutupi LDR (simulasi gelap) dan gerakkan tangan di depan PIR: LED harus
menyala.
o Tekan push button (aktifkan mode alarm), lalu gerakkan tangan di depan PIR saat
gelap: LED menyala dan buzzer berbunyi.
Kode Program:
C++
// --- Definisi Pin ---
const int pirPin = 2; // Sensor PIR
const int ldrPin = A0; // Sensor LDR
const int lampLedPin = 13; // LED sebagai lampu ruangan
const int buzzerPin = 8; // Buzzer
const int alarmButtonPin = 7; // Push Button untuk mengaktifkan/menonaktifkan
alarm
void setup() {
pinMode(pirPin, INPUT);
pinMode(lampLedPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(alarmButtonPin, INPUT_PULLUP); // Button dengan pull-up internal
Serial.begin(9600);
Serial.println("Sistem Otomasi Ruangan Sederhana Aktif!");
Serial.println("Mode Alarm: NONAKTIF");
}
void loop() {
// --- Baca Sensor ---
pirState = digitalRead(pirPin);
ldrValue = analogRead(ldrPin);
Gambar Rangkaian:
Cuplikan kode
graph TD
Arduino["Arduino UNO"]
PIR(Sensor PIR HC-SR501)
LDR_Sensor(LDR)
Resistor_10K[Resistor 10K Ohm]
LampLED(LED Lampu)
Resistor_Lamp[Resistor 220 Ohm]
Buzzer(Buzzer Piezo)
AlarmButton(Push Button Alarm)
% PIR Connections
Arduino -- "5V" --> PIR_VCC
Arduino -- "GND" --> PIR_GND
Arduino -- "Pin 2" --> PIR_OUT
% Buzzer Connections
Arduino -- "Pin 8" --> Buzzer_Pos
Buzzer_Neg -- "GND" --> Arduino
Tugas/Evaluasi: