ADC ESP32 – Membaca nilai analog menggunakan Arduino IDE

Dalam artikel ini kita akan menunjukan bagaimana cara untuk membaca input analog ESP32 dengan menggunakan Arduino IDE. Pembacaan analog sangat berguna saat kita membaca nilai dari variable resistor seperti potensiometers atau sensor analog.

Pembacaan input analog menggunakan ESP32 itu sangat mudah dengan menggunakan fungsi analogRead(GPIO) , yang diterima sebagai argument, untuk GPIO itu disetting sebai channel I/O yang ingin di baca.

Analog Inputs (ADC)

Membaca nilai analog dengan ESP32 artinya kita dapat mengukur berbagai level tegangan antara 0 V dan 3.3 V.

Tegangan yang diukur kemudian akan di assign ke nilai antara 0 – 4095, dimana 0 V mengacu ke 0 dan 3.3 V mengacu kepada 4095. Tegangan antara 0V dan 3.3 V akan mengacu kepada nilai antara 0 – 4095.

ADC is Non-linear

Idealnya, kita akan mengharapkan nilai yang linear ketika kita menggunakan Pin ESP32 ADC. Sayangnya, hal tersebut tidak terjadi. Nilai yang akan terjadi itu seperti chart di bawah ini :

Chart diatas artinya ESP23 tidak akan dapat membedakan antara nilai 3.3V dan 3.2 V. kita akan tetap nilai yang sama untuk kedua tegangan tersebut yaitu : 4095.

Hal yang sama akan terjadi untuk tegangan sangat rendah antara 0V dan 0.1V, kita akan mendapat nilai yang sama : 0.

Kita perlu untuk aware terhadap hal ini ketika kita menggunakan Pin ADC ESP32.

Fungsi analogRead()

Untuk pembacaan input analog dengan ESP32 menggunakan Arduino IDE itu sesimpel dengan menggunakan fungsi analogRead(). Fungsi tersebut diterima sebagai argument GPIO yang ingin kamu baca. 

analogRead(GPIO);

ESP32 mendukung pengukuran di 18 channel yang berbeda, dalam versi DEVKIT V1 DOIT yang punya 30GPIO, hanya memiliki 15 channel.

Di bawah ini adalah pinout nya, pin ADC itu yang di tandai dengan warna merah.

Pelajari lebih lanjut mengenai ESP32 GPIO di artikel kami yang lain mengenai Pinout ESP32.

Pin analog input ini memiliki resolusi 12-bit. Artinya Ketika membaca input analog, range hasilnya dari 0 sampai 4095.

Catatan :  Pin ADC2 tidak dapat digunakan Ketika kita menggunakan Wi-Fi. Jadi ketika kita menggunakan Wi-Fi dan kita mendapatkan kesusahan untuk mendapatkan nilai dari pin ADC2, mending kita gunakan pin ADC1.

Fungsi Lainnya

Ada beberapa fungsi lain yang dapat berguna dengan menggunakan pin ADC

  • analogReadResolution(resolution): set sample bit dan resolution. Untuk nilainya itu antara 9 bit ( 0-511) dan 12 bit (0-4095). Default nya itu di 12-bit resolution.
  • analogSetWidth(width): set sample bit dan resolution. Untuk nilainya itu antara 9 bit ( 0-511) dan 12 bit (0-4095). Default nya itu di 12-bit resolution.
  • analogSetCycles(cycles): set jumlah cycle per sampel. Defaultnya di 8 dengan range 1-255.
  • analogSetSamples(samples): set jumlah sampel dalam reange. Defaultnya 1 sampel. Ini memiliki efek untuk meningkatkan sensitifitas.
  • analogSetClockDiv(attenuation): set divider untuk Clock ADC. Defaultnya 1 dengan range 1 – 255.
  • analogSetAttenuation(attenuation): set input attenuation untuk semua pin ADC. Default nya ADC_11db. Nilai yang diterima:
    • ADC_0db: set no attenuation. ADC dapat mengukur hingga sekitar 800 mV (1V input = pembacaan ADC 1088).
    • ADC_2_5db: input tegangan dari ADC akan di attenuated, membuat range pengukuran akan melebar hingga 1100 mV. (1V input = pembacaan ADC 3722).
    • ADC_6db: input tegangan dari ADC akan di attenuated, membuat range pengukuran akan melebar hingga 1350 mV. (1V input = pembacaan ADC 3033).
    • ADC_11db: input tegangan dari ADC akan di attenuated, membuat range pengukuran akan melebar hingga 2600 mV. (1V input = pembacaan ADC 1575).
  • analogSetPinAttenuation(pin, attenuation): set input attenuation ke spesifik pin. Defaultnya itu ADC_11db. Nilai attenuation nya sama dengan sebelumnya.
  • adcAttachPin(pin): meenyambungkan pin ke ADC (mengclearkan analog mode lainnya). Hasil nya akan berupa TRUE or FALSE.
  • adcStart(pin)adcBusy(pin) dan resultadcEnd(pin): mulai perubahan ADC di pin bus yang terhubung. Pastikan jika pengubahan di pin ADC bus itu beneran berjalan ( hasil TRUE atau FALSE). Return nya 16-bit integer.

Membaca nilai Analog dari Potensiometer dengan ESP32

Untuk melihat cara menggunakan nya, kita akan membuat contoh yang simple untuk membaca nilai dari sebuah potensiometer.

Untuk contoh ini, kita membutuhkan :

Kalian bisa membeli barang barang di atas di store kita yahhhhh…

Skematik

Hubungkan potensiometer ke ESP32. Pin tengah dari potensiometer terhubung denga GPIO 34. Kamu bisa menggunakan skematik diagram di bawah sebagai referensi.

Kode

Kita akan program ESP32 menggunakan Arduino IDE, jadi pastikan kamu memiliki add on ESP32.

Buka Arduino IDE kalian dan copy kode di bawah ini.

// Potentiometer is connected to GPIO 34 (Analog ADC1_CH6) 
const int potPin = 34;

// variable for storing the potentiometer value
int potValue = 0;

void setup() {
  Serial.begin(115200);
  delay(1000);
}

void loop() {
  // Reading potentiometer value
  potValue = analogRead(potPin);
  Serial.println(potValue);
  delay(500);
}

Kode ini membaca nilai dari potensiometer dan menampilkan nya di serial monitor.

Dalam kode ini, kita mulai dengan menetapkan GPIO yang terhubung dengan potensiometer. Dalam contoh ini yaitu GPIO 34

const int potPin = 34;

dalam setup(), kita menginisialisai komunikasi serial dengan baud rate di 115200.

Serial.begin(115200);

Di loop(), gunakan fungsi analogRead() untuk membaca input analog dari potPin.

potValue = analogRead(potPin);

terakhir, tampilkan nilai yang dibaca potensiometer di serial monitor.

potValue = analogRead(potPin);

Upload kode ke ESP32. Pastikan kamu memilih board dan COM yang benar di menu Tools.

Testing

Setelah meng-upload kode dan menekan tombol reset di ESP32, buka serial monitor dan set di baud rate 115200. Putar potensiometer dan lihat lah adanya perubahan nilai yang ditampilkan.

Nilai maksimum yang ditampilkan adalah 4095 dengan nilai minimum nya adalah 0.

Kesimpulan

Dalam artikel kita mempelajari bagaimana membaca input analog menggunakan ESP32 dan Arduino IDE. Kesimpulan nya :

  • Board ESP32 DEVKIT V1 DOIT (versi dengan 30 pin) memiliki 15 pin ADC yang dapat digunakan untuk membaca input analog.
  • Pin ini memiliki resolusi 12 bit dengan nilai pembacaan antara 0 – 4095.
  • Untuk membaca nilai di Arduino IDE, kita hanya gunakan fungsi analogRead() 
  • Pin ADC ESP32 tidak memiliki niali linear. Kita mungkin tidak akan dapat membedakan nilai dari 0V dan 0.1V atau antara 3.2V dan 3.3V.

Leave a Comment

Your email address will not be published. Required fields are marked *

Select the fields to be shown. Others will be hidden. Drag and drop to rearrange the order.
  • Image
  • Description
  • Capacitance
  • Diameter
  • Height
  • Leakage Current
  • Length
  • Max Operating Temperature
  • Min Operating Temperature
  • Operating temp
  • Operating Temperature Range
  • Operation voltage
  • Power Rating
  • Rated current
  • Rated voltage
  • Resistance
  • Resonant freq
  • Sound output
  • Storage temp
  • Tebal
  • Temperature Coefficient
  • Tolerance
  • Tone
  • Voltage Rating
  • Voltage Rating DC
  • Weight
Compare