Anda di halaman 1dari 7

25 September 2011

Analog Input dan Output pada Arduino

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
mengidentikasi/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:
1. analogRead(pin): berfungsi untuk membaca nilai analog pada
input pin yang akan menghasilkan nilai integer antara 0-1023.
2. analogReference(parameter): berfungsi untuk
referensi yang digunakan. Parameternya meliputi:

menentukan

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
(khusus Arduino Mega)

referensi

INTERNAL2V56: a built-in
(khusus Arduino Mega)

referensi

internal
internal

1.1V
2,56V

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.


ANALOG OUTPUT
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.

Perintah yang digunakan untuk output analog adalah analogWrite


(pin,value), dimana:
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 berhasilposisi 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:

sketchnya adalah:
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:

Sketchnya sebagai berikut:


const int analogInPin = 0; // analog input pada pin analog 0
const int analogOutPin = 9; // analog output pada pin 9/terpasang led
int sensorValue = 0;
int outputValue = 0;

// variable input analog


// 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:
http://arduino.cc

http://fansduino.wordpress.com/2011/05/27/analog-inputdan-output/
http://www.google.co.id/imgres
dendiatama di 06.38
Berbagi

Tidak ada komentar:


Poskan Komentar
Tolong Tinggalkan komentar setelah mengakses
blog ini....terimakasih...

Beranda

Lihat versi web


About Me

dendiatama
Saat ini saya sedang menempuh study S1 di Universitas
Gunadarma, Fakultas Ilmu Komputer, Jurusan Sistem Komputer,
Depok, Jawa Barat
Lihat prol lengkapku
Diberdayakan oleh Blogger

Anda mungkin juga menyukai