Logo Arduino

Belajar Arduino 6
Sensor Analog dan Serial Monitor

oleh: Suryo Adhy Chandra, ST

Tombol hanya punya dua keadaan. Tetapi banyak hal di dunia nyata tidak sesederhana itu: terang cahaya, suhu ruangan, atau posisi putaran potensiometer punya nilai bertingkat. Untuk membacanya, Arduino menyediakan pin analog. Bab ini juga memperkenalkan Serial Monitor, alat yang akan terus kamu pakai untuk melihat apa yang sebenarnya dibaca Arduino.

1. Perbedaan pin digital dan pin analog

Pin digital yang ditandai angka biasa hanya membaca dua keadaan. Pin analog yang ditandai awalan A, yaitu A0 sampai A5 pada Arduino Uno, membaca tegangan bertingkat dan mengubahnya menjadi angka antara 0 sampai 1023.

int nilai = analogRead(A0); // hasilnya 0 sampai 1023
Angka 1023 berasal dari pengubah analog ke digital 10 bit, yang membagi rentang tegangan menjadi 1024 tingkat mulai dari 0. Jadi 0 berarti 0 volt dan 1023 berarti 5 volt, dengan setiap satu tingkat setara sekitar 4,9 milivolt.

2. Serial Monitor: melihat isi kepala Arduino

Tanpa layar, kita tidak tahu apa yang sedang dibaca Arduino. Serial Monitor memecahkan masalah itu dengan mengirim teks dari Arduino ke komputer lewat kabel USB yang sama.

void setup() { Serial.begin(9600); // membuka jalur komunikasi } void loop() { int nilai = analogRead(A0); Serial.print("Nilai sensor: "); Serial.println(nilai); // println menambah baris baru delay(500); }

Buka Serial Monitor lewat menu Tools, atau tekan Ctrl+Shift+M. Pastikan angka baud di pojok kanan bawah jendela Serial Monitor sama dengan angka pada Serial.begin.

Kalau Serial Monitor hanya menampilkan huruf dan lambang acak, hampir selalu penyebabnya satu: angka baud di jendela Serial Monitor berbeda dengan yang tertulis di program. Samakan keduanya, biasanya 9600.

3. Rangkaian potensiometer

Potensiometer kaki kiri -> 5V Arduino Potensiometer kaki tengah -> A0 Arduino Potensiometer kaki kanan -> GND Arduino

Putar potensiometer perlahan sambil memperhatikan Serial Monitor. Angkanya akan bergerak dari 0 sampai 1023. Inilah cara paling cepat memastikan rangkaianmu benar sebelum menulis program yang lebih rumit.

4. Mengubah rentang nilai dengan map

Nilai 0 sampai 1023 jarang langsung berguna. Kalau kita ingin memakainya untuk mengatur terang LED, rentang yang dibutuhkan adalah 0 sampai 255. Perintah map mengubah rentang tanpa perlu menghitung sendiri.

int nilai = analogRead(A0); // 0 - 1023 int terang = map(nilai, 0, 1023, 0, 255); // diubah menjadi 0 - 255 analogWrite(9, terang); // pin 9 mendukung PWM
Tidak semua pin bisa dipakai untuk analogWrite. Pada Arduino Uno, hanya pin bertanda gelombang, yaitu 3, 5, 6, 9, 10, dan 11. Memakai pin lain hanya akan menghasilkan nyala penuh atau mati.

5. Contoh utuh: lampu otomatis dengan sensor cahaya

Contoh ini memakai LDR, yaitu sensor yang hambatannya berubah menurut terang cahaya. Lampu akan menyala sendiri saat ruangan gelap.

LDR kaki pertama -> 5V Arduino LDR kaki kedua -> A0 Arduino, sekaligus -> resistor 10k ohm -> GND LED -> pin 9 -> resistor 220 ohm -> GND
const int PIN_SENSOR = A0; const int PIN_LED = 9; const int BATAS_GELAP = 400; void setup() { Serial.begin(9600); pinMode(PIN_LED, OUTPUT); } void loop() { int cahaya = analogRead(PIN_SENSOR); Serial.print("Cahaya: "); Serial.println(cahaya); if (cahaya < BATAS_GELAP) { digitalWrite(PIN_LED, HIGH); // gelap, lampu menyala } else { digitalWrite(PIN_LED, LOW); // terang, lampu mati } delay(200); }

6. Menentukan nilai batas, jangan menebak

Angka 400 pada program di atas bukan angka ajaib, dan hampir pasti tidak cocok untuk ruanganmu. Cara menentukannya begini: jalankan dulu program yang hanya mencetak nilai sensor, catat berapa nilainya saat ruangan terang dan saat sensor ditutup tangan, lalu ambil angka di tengah keduanya sebagai batas.

Kebiasaan mengukur dulu sebelum menetapkan angka ini berlaku untuk hampir semua sensor, termasuk sensor suhu dan sensor jarak.

7. Kalau bacaannya melompat-lompat

Bacaan sensor analog jarang benar-benar tenang. Cara paling sederhana untuk menghaluskannya adalah membaca beberapa kali lalu mengambil rata-ratanya.

int bacaRataRata(int pin) { long jumlah = 0; for (int i = 0; i < 10; i++) { jumlah += analogRead(pin); delay(5); } return jumlah / 10; }

8. Latihan

← Kembali Ke Daftar Materi Arduino