Mengenal Fungsi analogRead() Pada Arduino

Fungsi analogRead() memungkinkan kita untuk membaca nilai analog dari pin input, yang sangat berguna untuk mengukur sensor atau sinyal analog.
Mengenal analogRead pada Arduino

Pendahuluan

Arduino adalah platform pengembangan elektronik yang populer, terutama bagi pemula dan profesional dalam bidang kontrol dan automasi. Salah satu fungsi dasar yang sering digunakan dalam proyek Arduino adalah analogRead(). Fungsi ini memungkinkan kita untuk membaca nilai analog dari pin input, yang sangat berguna untuk mengukur sensor atau sinyal analog lainnya. Dalam artikel ini, kita akan mempelajari cara kerja analogRead(), bagaimana menggunakannya, dan beberapa contoh praktis untuk memperdalam pemahaman Anda.

Apa Itu analogRead()?

Pengertian dan Teknik Dasar

analogRead() adalah fungsi bawaan dalam Arduino yang digunakan untuk membaca nilai analog dari pin input. Arduino memiliki beberapa pin analog (A0 hingga A5 pada Arduino UNO) yang terhubung ke ADC (Analog-to-Digital Converter) internal. ADC ini mengubah sinyal analog (seperti tegangan dari sensor) menjadi nilai digital yang dapat diproses oleh mikrokontroler.

ADC (Analog-to-Digital Converter)

ADC adalah komponen penting dalam mikrokontroler yang mengubah sinyal analog menjadi data digital. Proses ini melibatkan beberapa tahap:

  1. Sampling: Mengambil sampel dari sinyal analog pada waktu tertentu.
  2. Quantization: Mengubah nilai sampel tersebut menjadi nilai diskrit (digital).
  3. Encoding: Mengubah nilai diskrit menjadi representasi biner.

Arduino UNO menggunakan ADC 10-bit, yang berarti nilai yang dikembalikan oleh analogRead() akan berada dalam rentang 0 hingga 1023. Ini berarti Arduino dapat membagi tegangan referensi (biasanya 5V) menjadi 1024 level yang berbeda.

Resolusi ADC

Resolusi ADC menentukan seberapa halus perbedaan tegangan yang dapat dibaca oleh ADC. Pada Arduino UNO, dengan resolusi 10-bit, setiap peningkatan nilai analogRead() setara dengan kenaikan tegangan sebesar 4.88 mV (dihitung dari 5V / 1024). Namun, resolusi ini bisa berbeda pada mikrokontroler lain. Misalnya, mikrokontroler dengan ADC 12-bit akan memiliki resolusi yang lebih tinggi (4096 level).

Tegangan Referensi

Tegangan referensi (VREF) adalah tegangan maksimum yang dapat diukur oleh ADC. Pada Arduino UNO, default VREF adalah 5V. Namun, Anda dapat menyesuaikan VREF menggunakan pin AREF untuk meningkatkan resolusi atau mengukur tegangan yang lebih kecil.

Simulasi Konversi Analog ke Digital

Deskripsi Singkat

Fungsi analogRead() digunakan untuk membaca nilai analog dari pin input. Nilai yang dikembalikan adalah representasi digital dari tegangan yang diberikan ke pin tersebut, dengan rentang 0 hingga 1023 (untuk ADC 10-bit).

Sintaksis

analogRead(pin);

Parameter:

  • pin: Nama pin analog yang akan dibaca (misalnya, A0, A1, dll).

Nilai Kembalian

Fungsi analogRead() mengembalikan nilai integer dalam rentang 0 hingga 1023 (untuk ADC 10-bit). Nilai ini mewakili tegangan analog yang diukur pada pin.

Contoh Penggunaan

Contoh 1: Membaca Nilai Potensiometer

Dalam contoh ini, kita akan membaca nilai dari potensiometer yang terhubung ke pin A0 dan menampilkan nilainya di Serial Monitor. 

void setup() {
  Serial.begin(9600);
}
void loop() {
  int potValue = analogRead(A0);
  Serial.println(potValue);
  delay(100);
}

Penjelasan:

  • Potensiometer dihubungkan ke pin A0.
  • Fungsi analogRead() membaca nilai analog dari potensiometer.
  • Nilai tersebut ditampilkan di Serial Monitor.

Contoh 2: Mengontrol Kecerahan LED dengan Potensiometer

Dalam contoh ini, kita akan menggunakan potensiometer untuk mengontrol kecerahan LED yang terhubung ke pin PWM (misalnya, pin 9). 

int ledPin = 9;
void setup() {
  pinMode(ledPin, OUTPUT);
}
void loop() {
  int potValue = analogRead(A0);
  int brightness = map(potValue, 0, 1023, 0, 255);
  analogWrite(ledPin, brightness);
  delay(10);
}

Penjelasan:

  • Nilai dari potensiometer (0-1023) dipetakan ke rentang 0-255 untuk PWM.
  • Fungsi analogWrite mengatur kecerahan LED berdasarkan nilai yang dihasilkan.

Contoh 3: Membaca Suhu dari Sensor TMP36

TMP36 adalah sensor suhu yang memberikan tegangan output proporsional dengan suhu (°C) dengan 0.5V off-set pada 0 degC. Dalam contoh ini, kita akan membaca nilai dari TMP36 dan mengkonversinya menjadi suhu. Lihat datasheet untuk mengetahui lebih lanjut tentang TMP36.

void setup() {
  Serial.begin(9600);
  analogReference(EXTERNAL); 
}
void loop() {
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (3.3 / 1023.0); 
  float temperature = (voltage - 0.5) * 100.0; 
  Serial.print("Temperature: ");
  Serial.println(temperature);
  delay(100);
}

Penjelasan:

  • Menetapkan Vref dari external (melalui pin AREF= 3.3V)
  • Tegangan dari TMP36 diukur menggunakan analogRead().
  • Tegangan tersebut dikonversi menjadi suhu dalam °C.

Tugas untuk Anda

Tugas: Buatlah proyek sederhana di mana Anda membaca nilai dari sensor LDR (Light Dependent Resistor) dan menampilkan kondisi cahaya ("Terang", "Sedang", "Gelap") di Serial Monitor.

Solusi

void setup() {
  Serial.begin(9600);
}

void loop() {
  int ldrValue = analogRead(A0);
  if (ldrValue > 800) {
    Serial.println("Terang");
  }
  else if (ldrValue > 400) {
    Serial.println("Sedang");
  }
  else {
    Serial.println("Gelap");
  }
  delay(500);
}

Penjelasan:

  • Nilai dari LDR dibaca menggunakan analogRead().
  • Kondisi cahaya ditentukan berdasarkan nilai LDR dan ditampilkan di Serial Monitor.

Kesimpulan

Fungsi analogRead() adalah alat yang sangat berguna dalam proyek Arduino untuk membaca sinyal analog. Dengan memahami cara kerja ADC, resolusi, dan tegangan referensi, Anda dapat memanfaatkan fungsi ini untuk berbagai aplikasi, seperti mengukur sensor, mengontrol perangkat, dan banyak lagi. Praktik langsung dengan contoh-contoh yang diberikan akan memperkuat pemahaman Anda tentang cara menggunakan analogRead() secara efektif.

FAQ (Frequently Asked Questions)

Apa yang terjadi jika tegangan input melebihi VREF?

Jika tegangan input melebihi VREF, nilaianalogRead() akan tetap maksimum (1023 pada ADC 10-bit). Namun, ini juga berisiko merusak pin input.

Bisakah saya menggunakan analogRead() pada pin digital?

Tidak, analogRead() hanya dapat digunakan pada pin analog yang terhubung ke ADC.

Bagaimana cara meningkatkan resolusi ADC?

Anda dapat meningkatkan resolusi dengan menurunkan VREF menggunakan pin AREF atau menggunakan mikrokontroler dengan ADC yang memiliki resolusi lebih tinggi.

Apakah analogRead() akurat untuk aplikasi presisi tinggi?

A: Untuk aplikasi presisi tinggi, Anda mungkin perlu mempertimbangkan gangguan noise, kalibrasi sensor, atau menggunakan ADC eksternal dengan resolusi lebih tinggi.

Referensi

Penghobi Elektronika