Bab 7 Analog-to-Digital Conversion

1. Analog-to-Digital Conversion

Dunia tempat kita tinggal merupakan dunia analog. Semua fenomena alam yang terjadi merupakan fenomena analog, bukan hanya binary 0 atau 1. Contohnya matahari mulai dari terbit sampai terbenam akan menghasilkan intensitas cahaya yang berubah perlahan-lahan tidak hanya nyala dan mati seperti lampu.

Dalam matematika, nilai analog memiliki jumlah nilai yang tak terhingga di antara kedua nilai. Sebagai contoh pada Gambar 1 sebelah kiri menampilkan nilai analog dari tegangan 0-5V. Setelah nilai 2.7V terdapat 2.71V, 2.718V, 2.7182V, dan seterusnya sampai tak terhingga. Akan tetapi mikrokontroler hanya dapat merepresentasikan nilai yang terbatas seperti pada Gambar 1 sebelah kanan. Sebagai contoh tipe data 8-bit hanya bisa menyimpan data dari 0-255. Di antara nilai 139 dan 140 tidak ada nilai lain.

Mikrokontroler membutuhkan module yang bernama analog-to-digital converter (ADC) untuk melakukan konversi dari analog ke digital. ADC akan melakukan konversi dari nilai analog misalnya dari 0-5V ke nilai digital misalnya 0-255. Dengan menggunakan ADC, mikrokontroler dapat membaca nilai tegangan dari misalnya potensiometer atau sensor yang memiliki output tegangan analog.

2. Sinyal Analog dan Digital

Dalam elektronik, sinyal merupakan nilai tegangan yang berubah-ubah terhadap waktu. Sinyal analog memiliki sample tegangan tak terhingga terhadap waktu. Selain itu nilai amplitude-nya juga bersifat tak terhingga banyaknya. Sedangkan sinyal digital memiliki sample tegangan yang terbatas terhadap waktu. Selain itu nilai amplitude-nya juga bersifat terbatas.

ADC akan melakukan proses yang bernama sampling untuk mengubah jumlah sample terhadap waktu yang tak terhingga menjadi terbatas. Selain itu ADC juga akan melakukan proses yang bernama quantization untuk mengubah nilai amplitude yang tak terhingga menjadi terbatas.

Gambar 2 atas menampilkan proses sampling. Jumlah sample pada sumbu waktu yang dihasilkan akan menjadi terbatas. Gambar 2 bawah menampilkan proses quantization. Nilai amplitude yang dihasilkan akan menjadi terbatas.

Gambar 3 menampilkan proses ADC ketika membaca sinyal analog. Sinyal tersebut dapat berasal dari sensor. Sinyal yang berwarna merah merupakan sinyal analog, sedangkan sinyal yang berwarna hijau merupakan sinyal digital. Setiap periode sampling, nilai amplitude sinyal tersebut akan diubah menjadi nilai digital.

Proses sampling dan quantization ditentukan oleh kecepatan sampling dan resolusi ADC tersebut. Misalkan ADC dengan kecepatan sampling 1 MSPS dan resolusi 8-bit akan menghasilkan 1 juta sample per detik dan quantization sebanyak 256 step.

3. Peripheral ADC ESP32

Mikrokontroler ESP32 memiliki dua ADC. ADC1 memiliki 8 channel dan ADC2 memiliki 10 channel. Sehingga total ada 18 channel. Setiap channel mewakili satu pin input analog, tetapi tidak semua channel tersebut dapat digunakan untuk aplikasi kita. Hal ini karena ada beberapa channel yang tidak terhubung ke pin dan ada juga channel yang tidak bisa digunakan ketika Wi-Fi aktif.

4. Library ADC

Pada bagian ini, kita akan belajar mengenai fungsi pada library Arduino yang diperlukan untuk menggunakan ADC. Fungsi analogRead merupakan fungsi yang perlu kita panggil saat akan membaca nilai ADC. Fungsi tersebut memiliki satu input argument yaitu pin ADC yang akan dibaca nilainya. Nilai return fungsi tersebut bertipe unsigned integer 16-bit yang merupakan nilai ADC yang terbaca.

uint16_t analogRead(uint8_t pin);

5. Sensor Cahaya LDR

Light-dependent resistor (LDR) (atau disebut juga photoresistor atau photocell) merupakan jenis resistor yang nilai hambatannya dapat berubah tergantung intensitas cahaya yang diterima pada permukaannya. Gambar 4 menampilkan contoh komponen LDR yang ukurannya bervariasi (dalam skala mm).

Hambatan pada LDR akan berkurang ketika intensitas cahayanya bertambah. Fenomena ini disebut juga photoconductivity. Pada kondisi gelap, LDR dapat memiliki hambatan beberapa mega Ohm (MΩ), sedangkan pada kondisi terang LDR dapat memiliki hambatan beberapa ratus Ohm.

6. Rangkaian Sensor Cahaya LDR

Untuk menggunakan LDR sebagai sensor cahaya, kita perlu merangkai sensor tersebut seperti rangkaian pembagi tegangan. Skematik rangkaian tersebut ditampilkan pada Gambar 5. Tegangan output dari rangkaian pembagi tegangan tersebut akan dibaca oleh ADC.

Untuk menganalisis rangkaian tersebut, kita bisa menggunakan rumus pembagi tegangan seperti pada rumus ini:

Dimana:

7. Contoh Program

Pada bagian ini akan dibahas satu contoh program ADC untuk membaca sensor cahaya LDR. Nilai sensor yang dibaca ADC akan dikirim ke PC melalui komunikasi serial, kemudian ditampilkan pada program serial monitor. Program ini bersifat umum untuk pembacaan ADC, apapun sensor yang digunakan asalkan output-nya analog, maka kode pada contoh program ini dapat digunakan.

Untuk dapat menjalankan contoh program ini diperlukan beberapa komponen:

  • Development board ESP32

  • LDR

  • Resistor 10KΩ

  • Breadboard

  • Kabel jumper

Ilustrasi koneksi dari LDR ke ESP32 ditampilkan pada gambar 6. Pin yang digunakan untuk menghubungkan LDR ke ESP32 ditampilkan pada tabel berikut ini.

Kode berikut ini menampilkan contoh program ADC. Berikut ini penjelasan cara kerja program tersebut:

  • Pada line 1, kita membuat sebuah variable bertipe integer untuk menyimpan hasil pembacaan ADC.

  • Pada line 6, kita mengkonfigurasi komunikasi serial.

  • Pada line 12, kita melakukan pembacaan ADC dengan memanggil fungsi analogRead, kemudian nilai yang terbaca disimpan pada variable light_sensor.

  • Pada line 13, kita mengirim nilai ADC tersebut ke PC.

  • Pada line 14, kita menambahkan delay sebesar 500ms agar pembacaan nilai ADC tidak terlalu cepat.

adc-light-sensor.ino
int light_sensor = 0;

void setup()
{
  // Konfigurasi komunikasi serial
  Serial.begin(9600);
}

void loop()
{
  // Print nilai LDR ke serial monitor setiap 0.5 detik
  light_sensor = analogRead(27); // Nilai sensor LDR
  Serial.println(light_sensor);
  delay(500);
} 

Gambar 7 menampilkan hasil dari contoh program ini. Pada kondisi terang, hasil pembacaan ADC sekitar 600, kemudian ketika sensor LDR ditutup dan cahayanya berkurang, maka hasil pembacaan ADC menjadi sekitar 100.

Selain menggunakan serial monitor, kita juga bisa menvisualisasikan nilai sensor cahaya dengan serial plotter seperti pada Gambar 8.

8. Repository Kode Program

Kode program ADC untuk pembacaan sensor cahaya LDR dapat didapatkan di repository ini: adc-light-sensor.

Last updated