Hallo, selamat datang kembali. Pada artikel sebelumnya kita sudah membahas tentang input output digital, nah, pada artikel ini kita akan belajar tentang fungsi yang digunakan untuk mengontrol input dan output analog yang pada pin arduino, fungsi itu adalah analogRead(), analogWrite() dan analogReference(), mari kita bahas :
analogRead()
analogRead() berfungsi untuk membaca nilai input analog yang masuk pada pin analog (pin dengan label A0 sampai A5) fungsi ini berguna untuk membaca sensor yang mengeluarkan output sinyal analog seperti sensor suhu, cahaya dan potensiometer. Arduino memiliki 10 bit ADC (Analog to Digital Converter) didalamnya, 10 bit ADC mengacu pada kemampuan mikrokontroller untuk mengubah sinyal analog menjadi nilai integer dengan resolusi 10 bit (2^10 = 1023), ini berarti input sinyal analog bisa diubah menjadi nilai interger dari rentang 0 sampai 1023. ADC memerlukan tegangan referensi sebagai nilai pembanding dengan input analog yang dibaca pin, tegangan referensi default arduino UNO adalah 5V, maksudnya adalah, arduino akan membandingkan input analog yang dibaca pin dengan nilai 5 volt, ini berarti resolusi pembacaan nilai analognya adalah 5v/1023 unit, yaitu sebesar 0,0049 volt per unit, ini artinya nilai integer “1” setelah dikonversi sama dengan 0,0049 volt. Contoh, jika ada input analog yang masuk sebasar sebesar 3v pada pin, nilai integernya adalah 3V/0,0049 yaitu 612. syntax analogRead() nya:
analogRead (pin);
Parameter :
- pin : Nomor pin arduino yang diatur modenya
- return value fungsi ini adalah nilai integer 0 sampai 1023
analogWrite()
Arduino tidak memiliki output analog murni, namun untuk mengantisipasinya kita bisa menggunakan sinyal PWM (Pulse Width Modulation), kita bahas dulu mengenai PWM. PWM adalah teknik untuk menghasilkan sinyal analog menggunakan sinyal digital dengan mengatur durasi HIGH dan LOW dari output digital, karena PWM adalah sinyal digital maka sinyalnya berbentuk gelombang kotak (square wave) , ada beberapa istilah pada PWM yang perlu diketahui:
- Time on : Durasi pada saat kondisi HIGH
- Time off : Durasi pada saat kondisi LOW
- Periode : Durasi total kondisi HIGH dan LOW pada 1 gelombang (1 puncak dan 1 lembah)
- Duty Cycle : Rasio (dalam persen) antara durasi sinyal HIGH dengan periode.
- Frekuesi : jumlah gelombang pada satu detik, arduino memiliki frekuensi PWM sebesar 500Hz
Resolusi pin PWM arduino adalah 8 bit (2^8 = 226), artinya pin PWM bisa mengeluarkan output dengan rentang 0-225. dimana nilai 0 sama dengan 0 volt dan 225 sama dengan 5 volt, sehingga jika kita mengatur analogWrite(225) maka duty cycle nya adalah 100%, dan jika kita mengatur analogWrite(127) maka duty cycle adalah 50%.
Pin yang mempunyai fitur PWM adalah pin digital 3,5,6,9,10 dan 11 (ada simbol “~” disamping nomor pin) diaktifkan dengan fungsi analogWrite().
berikut syntax analogWrite():
analogWrite(pin,value);
Parameter
- pin : nomor pin analog arduino yang ingin diatur
- kondisi : nilai integer antara 0 sampai 225
Banyak pekerjaan yang bisa dilakukan dengan output PWM seperti mengatur kecerahan LED, kecepatan motor DC, menggerakan dan mengatur posisi motor servo, kontrol pemanas, dimmer lampu dll.
analogReference()
Ketika arduino membaca sinyal analog (dari sensor misalnya), arduino akan membandingkan voltase hasil pembacaan sinyal analog terhadap voltase referensi pada arduino itu sendiri, voltase referensi pada arduino sama dengan voltase kerjanya, misal arduino UNO memiliki voltase kerja 5V, maka voltase referensinya adalah 5V. namun bagaimana jika kita ingin mengukur voltase antara 0 – 2 V atau 0 – 4,6 V ? bagaimana ADC tau range maksimum voltase yang ingin kita ukur ? jawabannya adalah dengan menggunakan pin AREFF. Pin AREFF memungkinkan kita untuk menggunakan ekternal power supply sebagai referensi voltase. Misalnya kita ingin mengukur voltase yang range maksimumnya adalah 3,3 V, tinggal sambungkan saja 3,3 V entah dari IC regulator atau modul step down 3,3V ke pin AREFF, kemudian pembacaan sinyal analognya akan berubah menjadi 0,00322 V/unit (3,3V / 1023 = 0,00322 V). untuk mengaktifkan external AREFF bisa menggunakan syntax ini di fungsi void setup() :
analogReference(type);
Parameter
type :
- DEFAULT — menggunakan voltase referensi dafault arduino yaitu 5v atau 3,3v (tergantung jenis boardnya)
- INTERNAL — menggunakan referensi built-in yaitu 1,1v pada ATmega168/ATmega328p dan 2.58v untuk ATmega 32U4 dan ATmega8
- EXTERNAL — menggunakan voltase referensi external dengan range 0-5v (tidak boleh melebihi 5v)
Eksperiment
Sekarang kita coba implementasikan fungsi-fungsi tadi ke project sederhana “mengontrol kecerahan LED dengan potensiometer”, beberpa komponen yang kita perlukan adalah
- Arduino Uno BELI
- Kabel USB BELI
- Kabel Jumper Male to Male BELI
- Potensiometer 10K ohm
- Resistor 220 Ohm
- LED 5mm
Lalu ketik dan upload code dibawah ini :
byte ledPin = 7;
byte Potensio = A0;
void setup()
{
Serial.begin(9600);
pinMode(ledPin, OUTPUT);
}
void loop()
{
int analogSignal = analogRead(Potensio);
int brightness = map(analogSignal, 0, 1023, 0, 255);
analogWrite(ledPin, brightness);
Serial.print("analogSignal= ");
Serial.println(analogSignal);
Serial.print("PWM signal= ");
Serial.println(brightness);
delay(100);
}
Buka serial monitor dan coba putar pelan potesiometer, pada serial monitor kita bisa melihat perubahan nilai yang terjadi, variabel “analogSignal” menyimpan nilai analog yang dibaca oleh pin A0 sedangkan variabel “brightness” menyimpan nilai sinyal PWM yang digunakan untuk mengontrol kecerahan LED. Disini saya melakukan experimen itu di simulator WOKWI jika ingin mencoba juga silahkan klik disini. pada serial monitor WOKWI terlihat hasil seperti gambar dibawah
Penjelasan code nya fokus saja dulu ke baris program 11 dan 13, disana saya menggunakan fungsi analogRead(Potensio); untuk membaca sinyal analog dari potensiometer kemudian menyimpannya di variabel “analogSignal”, Resolusi sinyal analog dari pin A0 adalah 10 bit karena dia berasal dari ADC sedangkan output untuk mengontrol kecerahan LED adalah sinyal PWM yang mana resolusinya adalah 8 bit, maka kita perlu mengkonversi nilai integer pada variabel analogSignal menjadi nilai integer untuk output PWM dengan menggunakan fungsi mapping (baris 12). Setelah itu, tinggal menampilkan nilai variabel nya saja dengan fungsi serial agar bisa ditampilkan di serial monitor.