ADC Arduino Uno

Arduino Uno dapat digunakan untuk membaca tegangan analog (memiliki ADC) pada pin atau terminal A0 hingga A5 yang umum disebut sebagai analog pin dimana mampu membaca 6 buah tegangan analog yang berbeda. Hal ini memberi keuntungan dimana satu papan mikrokontroler dapat membaca output tegangan analog dari 6 sensor yang berbeda.

Gambar 1. Analog pin dan pin tegangan referensi eksternal 

Pada halaman ini dikhususkan untuk membahas pembacaan tegangan analog dc sebagai dasar pemahaman terhadap cara kerja ADC Arduino Uno. Untuk tegangan analog ac akan dibahas dilain waktu pada halaman berbeda karena memerlukan pemahaman rumus matematika.
Akan tetapi yang perlu Anda ketahui adalah pembacaan pada analog pin dilakukan secara bergantian, dengan kata lain pembacaan tegangan analog tidak dapat dilakukan secara bersamaan, sebagai contoh jika Anda menggunakan 3 sensor suhu untuk mengukur suhu ruangan yang berbeda dimana pin yang digunakan adalah A0, A1 dan A2 maka Anda  perlu melakukan pembacaan tegangan analog pada A0 terlebih dahulu kemudian A1, lalu A2. Tidak ada ketentuan urutan pin mana yang harus dibaca terlebih dahulu karena ini tergantung Anda atau programmer.

Beberapa hal yang perlu diketahui sebelum membuat proyek menggunakan ADC Arduino Uno :

1. Arduino Uno memiliki default tegangan referensi internal 5 Volt.
Secara default ADC Arduino Uno menggunakan tegangan referensi internal 5 Volt. Jika Anda menulis program pembacaan tegangan pada analog pin maka jangkauan tegangan yang dapat diukur atau dibaca adalah 0 hingga 5 Volt. Jika Anda ingin Arduino membaca tegangan analog dari output sensor atau perangkat lain yang memiliki output maksimum 5 Volt, maka Anda dapat langsung menuliskan program pembacaan tegangan analog pada analog pin Arduino Uno.

2. Arduino Uno memiliki pilihan atau opsi tegangan referensi internal 1,1 Volt.
Jika tegangan analog output perangkat elektronika atau sensor yang dibaca pada analog pin memiliki nilai maksimum 1,1 Volt, maka perlu menggunakan tegangan referensi internal. Untuk menggunakan tegangan referensi internal 1,1 Volt Arduino Uno perlu menuliskan perintah analogReference(INTERNAL) pada blok void setup(){}. Contoh penulisan penggunaan tegangan internal 1.1 Volt Arduino Uno adalah :
void setup(){
analogReference(INTERNAL);
}

3. Arduino Uno memiliki pilihan atau opsi tegangan eksternal.
Jika tegangan analog yang dibaca pada analog pin Arduino Uno memiliki tegangan maksimum diluar 1,1 Volt dan 5 Volt (dibawah 5 Volt) maka opsi yang yang paling cocok adalah menggunakan tegangan referensi eksternal dengan menghubungkan pin AREF Arduino Uno dengan tegangan dc eksternal yang Anda inginkan (maksimum 5 Volt) karena dengan ini Anda dapat menyetel tegangan referensi sesuai keinginan. Pin aREF dapat dilihat pada Gambar 1. Atau jika Anda menginginkan tegangan eksternal dapat dirubah karena untuk alasan pengetesan atau ujicoba Anda memerlukan sebuah potensiometer yang dihubungkan ke pin aREF seperti ditunjukan pada Gambar 2 di bawah ini.

Arduino Uno menggunakan tegangan referensi eksternal
Gambar 2. Ilustrasi Arduino Uno menggunakan tegangan referensi eksternal

Untuk menggunakan tegangan referensi eksternal perlu menuliskan perintah analogReference(EXTERNAL) pada blok void setup(){}. Contoh penulisan penggunaan tegangan eksternal Arduino Uno adalah sebagai berikut :

void setup(){
analogReference(EXTERNAL);
}

4. Arduino Uno memiliki resolusi ADC 10 bit.
Resolusi ADC Arduino Uno adalah 10 bit dimana setiap pembacaan tegangan analog dari setiap sampel yang diambil diterjemahkan dalam bilangan biner 10 bit atau jika dibuat desimal maka nilai maksimum tegangan pada analog pin mencapai nilai tegangan referensi maka hasil pembacaannya adalah 1023.

5. Waktu konversi (conversion time) ADC Arduino Uno adalah 13 clock cycle
Waktu konversi tegangan analog menjadi digital ADC Arduino Uno pada kondisi normal single ended adalah 13 clock cycle. ADC Arduino Uno memiliki 7 bit prescaler untuk menentukan nilai sample rate ADC sebagai contoh prescaler di set pada 128 dan Arduino Uno memiliki clock source sebesar 16 MHz sehingga besarnya sample rate maksimum yang diijinkan adalah 16MHz /128 /13 = 9615 Hz atau dibulatkan 9600 Hz. 

Membuat Proyek ADC Arduino Uno

Membuat proyek Arduino umumnya menggunakan Arduino IDE, akan tetapi pada blog ini penulis menggunakan Sloeber IDE karena dapat melihat source code library bahkan dapat mengedit-nya dimana Arduino IDE tidak dilengkapi fitur ini.

Berikut langkah membuat project Arduino Uno ADC menggunakan Sloeber IDE. Sloeber menyediakan installer untuk sistem operasi Linux, Windows dan MacOS. Berikut adalah langkah membuat proyek pada Sloeber IDE :

  1. Jalankan Sloeber dengan meng-klik file executable  sloeber-ide.
  2. Klik menu File-New-Arduino Sketch
    Gambar 1. Menu Arduino Sketch

     
  3. Beri nama pada proyek Anda. Kemudian klik tombol Next
    Gambar 2. Jendela New Arduino sketch

  4. Isikan Platform folder, Board  yang Anda gunakan dan dalam halaman ini menggunakan Arduino Uno. Kemudian klik tombol Next
    Gambar 3. Jendela Arduino information

  5. Kemudian langsung saja klik tombol Finish
  6. Gambar 4. Jendela sketch template folder 
    Jendela opsi sketch template folder
    Gambar 4. Jendela opsi sketch template folder

  7. Pada tab Project Explorer klik Arduino_ADC.ino. Kemudian muncul jendela Arduino_ADC.ino dimana Anda dapat menuliskan program Arduino sama seperti jika Anda menggunkan Arduino IDE. 
  8. Gambar 5. Arduino Project 
    Arduino project
    Gambar 5. Arduino project

Penulisan program ADC Arduino Uno dan penjelasannya

Gambar 6 menunjukan program cara membaca tegangan analog dc pada pin A0 Arduino Uno.
Gambar 6. Program pembacaan tegangan dc pada analog pin A0


Berikut adalah penjelasan penulisan program Gambar 6 di atas :

float nilai ; 
Merupakan pendeklarasian variabel global "nilai" dengan tipe data float dimana memiliki nilai dua angka dibelakang koma.

float hasil :
Pendeklarasian variabel global "hasil" dengan tipe data float.

void setup() {}
Merupakan blok dimana tempat menuliskan program inisialisasi. Program inisialisasi merupakan program yang hanya dieksekusi sekali saja saat papan Arduino dihidupkan sehingga tidak masuk dalam pengulangan atau loop. Jika Anda menuliskan sebuah perintah pada blok ini maka perintah tersebut akan dieksekusi sekali saja dan tidak akan pernah dieksekusi ulang.

void loop() {}
Merupakan blok dimana semua perintah atau program yang ditulis didalam blok ini dieksekusi secara berurutan dari paling awal atau atas hingga paling bawah atau terakhir kemudian akan diulang kembali dari awal lagi dan terus menerus akan diulang. 

Serial.begin(9600);
Merupakan perintah untuk membuka port komunikasi serial dengan baud rate 9600 bps.

nilai = analogRead(A0);
Perintah analogRead(A0) merupakan perintah untuk membaca tegangan analog pada pin A0 Arduino Uno kemudian tegangan yang telah dibaca tadi dikonversi atau diubah menjadi bilangan biner atau digital lalu disimpan pada variabel nilai dengan tipe data float. Saat perintah analogRead(A0) dieksekusi ADC Aarduino Uno hanya mengambil satu sampel tegangan analog yang diterapkan pada Analog pin A0.

Perlu diingat semua proses dalam Arduino adalah menggunakan angka biner meskipun dalam penulisan program umumnya menggunakan desimal.

hasil = ((nilai / 1023) * 5.0);
Variabel nilai menyimpan hasil pembacaan analog pin A0 dengan tipe data float dimana nilainya tergantung besarnya tegangan pada Analog pin A0 dimana maksimal nilai variabel nilai adalah 1023 jika tegangan pada Analog pin A0 mencapai 5 Volt.

Bilangan pembagi 1023 ditujukan untuk membagi nilai dari variabel nilai  dengan nilai maksimum resolusi ADC Arduino Uno yaitu 1023 (10 bit).  Bilangan pengali 5.0 berfungsi untuk mengkonversi bilangan desimal nilai dibagi dengan 1023 menjadi tegangan dan nilai 5.0 digunakan karena menggunakan tegangan referensi 5 Volt.

Serial.print("A0 : ");
Merupakan perintah untuk menampilan tulisan " A0 : " pada serial monitor IDE baik Arduino IDE maupun Sloeber IDE. 

Serial.print(hasil);
Merupakan perintah untuk menampilkan hasil pembacaan tegangan analog pada analog pin A0 pada serial monitor IDE. Hasil yang ditampilkan diletakan disamping kana tulisan "A0 : ".

Serial.println(" Volt");
Perintah untuk menampilkan tulisan "Volt" pada serial monitor IDE dengan posisi disamping hasil perintah Serial.print sebelumnya. Perintah Serial.print selanjutnya akan ditampilkan di bawah hasil perintah ini.


Penulisan program pembacaan tegangan analog pada Analog pin A0 dan A1
Untuk malakukan pembacaan dua tegangan analog adalah dengan menghubungkan sumber tegangan analog pada analog pin Arduino, misalnya A0 dan A1. Sumber tegangan analog umumnya adalah keluaran atau output dari sensor, pada percobA0aan ini digunakan dua potensiometer seperti ditunjukan pada rangkaian Gambar 7.
Tegangan analog pada pin A0 dan A1
Gambar 7. Dua tegangan analog pada pin A0 dan A1

Inti dari penulisan program pembacaan lebih dari satu tegangan analog adalah melakukan pembacaan pada analog pin satu lalu disusul pembacaan analog pin lainnya seperti ditunjukan pada Gambar 8.


Pembacaan tegangan pada pin A0 dan A1
Gambar 8. Pembacaan tegangan analog pada pin A0 dan A1

Jika Anda memiliki banyak sensor dengan output tegangan analog (maksimum 6), Anda dapat menuliskan program pembacaan analogRead mulai dari A0 hingga A5 secara bergantian atau berurutan dengan sontoh dasar pada Gambar 8.

Problem pada pembacaan tegangan analog pada multi pin atau multi channel
Pada pembacaan multi channel atau multi analog pin akan terjadi permasalahan dimana pembacaan tergangggu oleh nilai pembacaan pada channel atau analog pin lainnya saat melakukan pemindahan atau switching dari 1 pin analog ke pin anlog lainnya. Untuk melakukan pengetesan dapat menggunakan program Gambar 8, Anda hanya perlu memasang 1 potensiometer saja contoh pada pin A0 saja, untuk pin A1 biarkan tidak terhubung dengan antar muka atau komponen lain. Saat program berjalan Anda akan melihat bahwa pada pembacaan pada pin A1 memiliki nilai hampir mendekati pembacaan pin A0. Jika Anda mengubah nilai tegangan pada potensiometer pada A0 maka otomatis pembacaan pin A1 yang tidak terhubung ke komponen apapun juga ikut berubah dengan nilai hampir sama dengan hasil pembacaan pin A0.

Saat ini penulis masih mencari cara agar untuk mencari tau bagaimana menyelesaikan masalah ini karena jika Anda menghubungkan sensor dengan tegagan output orde Volt dan mili Volt pada pin lainnya akan mempengaruhi nilai pembacaan pada analog  yang memiliki orde mili Volt.

Jika tidak ada update pada halaman ini, artinya penulis belum bisa menemukan solusi masalah ini, dan sebaiknya Anda menggunakan mikrokontroler yang memiliki 2 ADC internal.

Solusi sementara adalah dengan melakukan pembacaan dua kali pada masing-masing pin analog yang akan dibaca karena akan menghilangkan atau mengganti nilai analog pin lain dengan nilai pin yang dibaca saat itu sehingga meminimalisasi gangguan nilai tegangan dari pin lain.

EoF

Posting Komentar

0 Komentar