Pada saat kita menggunakan tombol sebagai sinyal input/masukan pada 
pin input Arduino maka sebenarnya kita hanya memberikan dua kemungkinan 
kondisi sinyal masukan yaitu tombol tertekan atau tombol tidak tertekan.
 Pada saat tombol tertekan kita menghubungkan atau memberikan tegangan 5
 volt pada masukan sedangkan sebaliknya pada saat tombol dilepas hanya 
memberikan tegangan 0 volt.
Kondisi input yang demikian dikenal 
sebagai digital input dengan logika 1 dan 0, dimana 1 untuk tegangan 
HIGH atau 5 volt dan 0 untuk tegangan LOW atau 0 volt.  Begitu juga 
halnya pada sisi output, jika hanya melibatkan dua kondisi keluaran 
seperti misalnya saat menghidupkan dan memadamkan led pada suatu saat 
tertentu maka kita hanya melibatkan dua kondisi output digital. Output 
digital 1 atau HIGH dengan output tegangan 5 volt dan output digital 0 
atau LOW dengan output tegangan 0 volt.
Pada beberapa sistim kontrol, pengolahan input dan output secara digital
 mungkin sudah memenuhi kinerja yang dibutuhkan. Akan tetapi pada 
kondisi tertentu ada kemungkinan dihadapkan pada kondisi input dan 
output yang membutuhkan besaran yang berubah-ubah dengan nilai yang 
kontinyu dan tidak lagi hanya dengan dua keadaan seperti halnya sinyal 
digital.  Sinyal semacam ini disebut sebagai sinyal analog,
 sebagai contoh saat kita menghubungkan sensor yang tegangan keluarannya
 bervariasi dalam kisaran dari 0 volt sampai 5 volt. Maka dalam hal ini 
Arduino sebagai kontroler harus mampu mengidentifikasi/mengolah semua 
variasi tegangan keluaran dari sensor yang dihubungkan pada pin inputnya
 tersebut. Begitu juga halnya saat diperlukan tegangan output yang 
membutuhkan nilai tegangan yang bervariasi, seperti misalnya saat kita 
menginginkan mengatur tingkat keterangan sebuah led atau berubahnya 
kecepatan sebuah motor. 
ANALOG INPUT
Arduino khusus menyediakan 6 kanal (8 kanal pada model Mini dan Nano,
 dan 16 pada model Mega) untuk difungsikan sebagai analog input. Analog 
ke digital converternya menggunakan resolusi 10 bit yang berarti range 
nilai analog dari 0 volt sampai 5 volt akan dirubah kenilai integer 0 
sampai 1023, atau resolusinya adalah 5 volt/1024=4,9mV per unit dimana 
itu berarti nilai digital yang dihasilkan akan berubah setiap perubahan 
4,9mV dari tegangan input analognya. Akan tetapi range input analog dan 
resolusi tersebut dapat dirubah dengan fungsi analogReference().
Perintah yang digunakan untuk fungsi analog input ini adalah:
- analogRead(pin): berfungsi untuk membaca nilai analog pada input pin yang akan menghasilkan nilai integer antara 0-1023.
 - analogReference(parameter): berfungsi untuk menentukan referensi yang digunakan. Parameternya meliputi:
 
- DEFAULT: default analog reference yaitu 5V (pada board Arduino 5V) atau 3,3 volt (pada board Arduino 3,3 V)
 - INTERNAL: built-in referensi internal tergantung pada jenis mikrokontroler yang terpasang pada board Arduino, 1.1 volt pada ATmega168 atau ATmega328 dan 2.56 volt pada ATmega8.
 - INTERNAL1V1: a built-in referensi internal 1.1V (khusus Arduino Mega)
 - INTERNAL2V56: a built-in referensi internal 2,56V (khusus Arduino Mega)
 - EXTERNAL: pilihan referensi yang tergantung pada tegangan yang diberikan pada pin AREF(hanya dengan range tegangan 0 sampai 5V).
 
Perlu untuk diperhatikan, jangan menggunakan referensi dibawah 0 volt 
atau lebih dari 5 volt dan pastikan memilih referensi external sebelum 
perintah analogRead() jika menghubungkan pin AREF dengan referensi 
eksternal karena jika tidak akan bisa merusak mikrokontrol. 
Secara teori suatu analog output akan mengeluarkan output tegangan 
bervariasi sesuai dengan nilai yang dikehendaki, maka seharusnya pin 
output analog Arduino seharusnya mampu mengeluarkan tegangan output 
dengan kisaran tegangan dari 0 V sampai 5V. Akan tetapi tidak demikian 
adanya, karena pin-pin Arduino yang difungsikan sebagai output 
sebenarnya hanya mampu sebagai digital output yaitu hanya mampu 
mengeluarkan tegangan 0V atau 5V.  Lalu bagaimana Arduino menangani 
Analog Output tersebut? Arduino menggunakan cara Pulsa Wide Modulasi 
(PWM) atau modulasi lebar pulsa untuk menghasilkan analog output yang 
dikehendaki. Metode PWM ini menggunakan pendekatan perubahan lebar pulsa
 untuk menghasilkan nilai tegangan analog yang diinginkan. Pin yang 
difungsikan sebagai PWM analog output akan mengeluarkan sinyal pulsa 
digital dengan frekwensi 490 Hz dimana nilai tegangan analog diperoleh 
dengan merubah Duty Cycle atau perbandingan lamanya pulsa HIGH terhadap 
periode (T) dari sinyal digital tersebut. Jika pulsa HIGH muncul selama 
setengah dari periode sinyal maka akan menghasilkan duty cycle 5o% yang 
berarti sinyal analog yang dihasilkan sebesar setengah dari tegangan 
analog maksimal yaitu 1/2 dari 5 V atau sama dengan 2,5 V begitu juga 
halnya jika pulsa HIGH hanya seperempat bagian dari periode sinyal maka 
tegangan analog identik yang dihasilkan adalah 1/4 dari 5V = 1,25 V dan 
seterusnya.
- Pin: nomor pin Arduino yang akan digunakan sebagai analog output
 - value: nilai duty cycle yang diinginkan dengan nilai 0-255, yang berarti nilai 0 untuk 0Volt dan 255 untuk tegangan keluaran maksimum atau 5Volt.
 
Berikutnya mari kita mencoba aplikasi input output analog ini secara 
langsung pada Arduino. Untuk yang pertama saya menggunakan potensiometer
 yang dihubungkan pada analog pin 0 seperti pada gambar berikut ini:
Pada latihan ini akan menampilkan pada serial monitor nilai 
input analog yang dihasilkan dengan merubah posisi potensiometer. 
Sketchnya sebagai berikut:
int analogPin = 0;
int val = 0;
void setup() {
  Serial.begin(9600);
}
void loop() {
  val = analogRead(analogPin);
  Serial.println(val,DEC); //tampilkan pada serial monitor dalam desimal
  Serial.println(val,BIN); //tampilkan pada serial monitor dalam biner
  delay(1000); //merefresh tampilan setiap 1 detik
}
Dan berhasil…posisi potensio mentok minimal akan menghasilkan nilai 0
 dan posisi potensio mentok maksimal menghasilkan nilai 1023 atau 
1111111111(biner).
Lanjut berikutnya mencoba analog output dengan mengeluarkan sinyal 
analog ke pin 9 yang dihubungkan dengan rangkaian seri resistor dan led 
seperti rangkaian berikut:
int kecerahan = 0;
int levelperubah = 5;//step perubahan kecerahan 
void setup()  {
Serial.begin(9600);
} 
void loop()  {
  analogWrite(9, kecerahan);
  Serial.println(kecerahan);//tampilkan kecerahan di serial monitor
  kecerahan = kecerahan + levelperubah;//perbaharui nilai kecerahan
  if (kecerahan == 0 || kecerahan == 255) {//jika mencapai nilai batas
    levelperubah = -levelperubah ; //berubah kenilai sebaliknya
  }
  delay(500);
}
Hasilnya kecerahan led akan berubah setiap 1/2 detik dengan step 
perubahan 5 digit, setelah mencapai kecerahan maksimum (tampilan pada 
serial monitor 255) akan meredup kembali sampai led padam (tampilan pada
 serial monitor 0) dan akan terus berulang kembali begitu seterusnya.
Terakhir mengkombinasikan analog input dari potensiometer untuk 
mengatur analog output mengatur kecerahan dari led, berikut gambar:
const int analogInPin = 0;  // analog input pada pin analog 0
const int analogOutPin = 9; // analog output pada pin 9/terpasang led
int sensorValue = 0;        // variable input analog
int outputValue = 0;        // variable output analog
void setup() {
  // inisialisasi komunikasi serial pada 9600 bps:
  Serial.begin(9600);
}
void loop() {
  // membaca nilai analog in:
  sensorValue = analogRead(analogInPin);
  // memetakan kedalam kisaran output analog:
  outputValue = map(sensorValue, 0, 1023, 0, 255);
  // merubah nilai analog output:
  analogWrite(analogOutPin, outputValue);           
  // mencetak pada serial monitor:
  Serial.print("sensor = " );
  Serial.print(sensorValue);
  Serial.print("  output = ");
  Serial.println(outputValue);
  // tunggu 20 milidetik sebelum lanjut ke pembacaan berikutnya
  delay(20);
}
Pada sketch diatas digunakan function “map()” untuk memetakan input 
analog yang resolusinya 1024 ke output analog yang resolusinya hanya 
256.
Referensi:




Tidak ada komentar:
Posting Komentar