Laman

Jumat, 31 Januari 2014

Mikrokontroler Arduino (Mikrokontroler Terbaru)


 

Arduino adalah kit mikrokontroler yang serba bisa dan sangat mudah penggunaan nya. Dirancang khusus untuk pemula, tetapi pada kenyataan nya banyak dipakai oleh professional untuk membuat proyek-proyek elektronika. Saat ini Arduino sudah sangat populer dan sudah banyak dipakai untuk membuat proyek-proyek seperti drum digital, pengontrol LED, web server, MP3 player, pengendali robot, pengendali motor, sensor suhu/kelembaban, pengontrol kamera, dsb.
Hubungan Arduino Dengan Teknologi Robotika
          Dunia elektronika saat ini diramaikan dengan proyek-proyek membuat robot. Mulai dari robot mainan, sampai pada robot yang serius seperti robot pemadam api, robot produksi, dsb. Kalau anda adalah seorang penggemar elektronika yang berangkat dari mengoprek radio dan amplifier, besar kemungkinan akan merasa repot kalau ingin mengembangkan hobby ke arah robotika atau peralatan elektronika yang dapat berhubungan dengan komputer misalnya. Ya, karena dunia elektronik sekarang sudah sangat jarang menggunakan komponen linear seperti dulu, tetapi sudah menggunakan mikrokontroler.
          Mikrokontroler adalah adalah pengendali mikro yang berbentuk chip (atau IC) yang dapat diprogram menggunakan komputer. Di dalam chip tersebut terdapat ruang untuk menyimpan program dan ruang menyimpan data (EEPROM).  Mikrokontroler adalah otak elektronik yang dapat mengendalikan perangkat-perangkat elektronik lain nya. Misalnya mengendalikan relay, menampilkan gambar di LCD, dsb.
Kesulitan terbesar seorang pemula yang ingin membuat proyek mikrokontroler adalah dalam membuat program dan menanamkan program itu pada chip mikrokontroler. Tetapi beruntunglah sekarang ada sebuah kit mikrokontroler yang bisa membantu kita mempelajari mikrokontroler atau membuat robot. Nama kit tersebut adalah Arduino.
Cara Mendapatkan Arduino
          Arduino adalah proyek open source. Artinya desain hardware maupun software terbuka untuk umum dan bisa dikembangkan sendiri kalau mau. Walaupun demikian, bagi seorang pemula mikrokontroler tentu akan repot membuat sendiri Arduino Board nya, karena untuk membuatnya diperlukan chip programmer (untuk menanamkan bootloader Arduino pada chip).
Lebih Jauh Tentang Arduino

        Kegunaan Arduino tergantung kepada kita yang membuat program. Arduino bisa digunakan untuk mengontrol LED, bisa juga digunakan untuk mengontrol helikopter. Contoh yang sudah pernah dibuat adalah MP3 player, pengontrol motor, mesin CNC, monitor kelembaban tanah, pengukur jarak, penggerak servo, balon udara, pengontrol suhu, monitor energi, statiun cuaca, pembaca RFID, drum elektronik, GPS logger, monitoring bensin dan masih banyak lagi. Silahkan buka Google, Youtube atau lihat di http://www.freeduino.org
Kelebihan Arduino
  • Tidak perlu perangkat chip programmer karena di dalamnya sudah ada bootloader yang akan menangani upload program dari komputer.
  • Sudah memiliki sarana komunikasi USB, sehingga pengguna Laptop yang tidak memiliki port serial/RS323 bisa menggunakan nya.
  • Bahasa pemrograman relatif mudah karena software Arduino dilengkapi dengan kumpulan library yang cukup lengkap.
  • Memiliki modul siap pakai (shield) yang bisa ditancapkan pada board Arduino. Misalnya shield GPS, Ethernet, SD Card, dll.

Bahasa Pemrograman Arduino

           Bahasa pemrograman Arduino adalah bahasa C. Tetapi bahasa ini sudah dipermudah menggunakan fungsi-fungsi yang sederhana sehingga pemula pun bisa mempelajarinya dengan cukup mudah. Untuk membuat program Arduino dan mengupload ke dalam board Arduino, anda membutuhkan software Arduino IDE (Integrated Development Enviroment) yang bisa di download gratis di http://arduino.cc/en/Main/Software. Panduan bahasa pemograman Arduino beserta dengan contoh-contohnya bisa dibaca di halaman http://arduino.cc/en/Reference/HomePage.

Kelebihan Arduino


Arduino merupakan sistem mikrokontroler yang relatif mudah dan cepat dalam membuat aplikasi elektronika maupun robotika. Buktinya ada beberapa kursus robotika yang dulunya mengajarkan pemrograman AVR menggunakan bahasa C/C++, kini telah beralih ke pemrograman menggunakan Arduino.


Saking ‘mudah’-nya Arduino, ada golongan orang yang merasa anti dengan Arduino. Golongan ini menganggap Arduino adalah pembodohan karena tidak mengajarkan teknik yang mendalam tentang mikrokontroler dan pemrograman-nya. Pendapat ini tidak benar, karena kalau kita belajar pemrograman Visual Basic pun sebenarnya kita sedang belajar hal yang dipermudah oleh Microsoft – kita tidak belajar interupsi bios untuk membaca keyboard, mendalami memory VGA untuk menuliskan teks, mempelajari direct access harddisk untuk menyimpan database, dsb. Tetapi tidak ada yang menganggap Visual Basic sebagai pembodohan bukan? :)
Ok, lanjutkan ke topik semula. Di bawah ini ada beberapa kelebihan yang membuat Arduino menarik minat hobbyist dan orang awam yang tertarik dengan elektronika.

Open Source

Hardware maupun software Arduino adalah open source. Artinya kita bisa membuat tiruan atau clone atau board yang kompatibel dengan board Arduino tanpa harus membeli board asli buatan Italy. Kalaupun kita membuat board yang persis dengan desain asli, kita tidak akan dianggap membajak (asalkan tidak menggunakan trade mark ‘Arduino’).

Tidak memerlukan chip programmer

Chip pada Arduino sudah dilengkapi dengan bootloader yang akan menangani proses upload dari komputer. Dengan adanya bootloader ini kita tidak memerlukan chip programmer lagi, kecuali untuk menanamkan bootloader pada chip yang masih blank.

Koneksi USB

Sambungan dari komputer ke board Arduino menggunakan USB, bukan serial atau parallel port. Sehingga akan mudah menghubungkan Arduino ke PC atau laptop yang tidak memiliki serial/parallel port.

Fasilitas chip yang cukup lengkap

Arduino menggunakan chip AVR ATmega 168/328 yang memiliki fasilitas PWM, komunikasi serial, ADC, timer, interupt, SPI dan I2C. Sehingga Arduino bisa digabungkan bersama modul atau alat lain dengan protokol yang berbeda-beda.

Ukuran kecil dan mudah dibawa
Ukuran board Arduino cukup kecil, mudah di bawah kemana-mana bersama laptop atau dimasukan ke dalam saku.

Bahasa pemrograman relatif mudah

Walaupun bahasa pemrograman Arduino adalah bahasa C/C++, tetapi dengan penambahan library dan fungsi-fungsi standar membuat pemrograman Arduino lebih mudah dipelajari dan lebih manusiawi. Contoh, untuk mengirimkan nilai HIGH pada pin 10 pada Arduino, cukup menggunakan fungsi digitalWrite(10, HIGH); Sedangkan kalau menggunakan bahasa C aslinya adalah PORTB |=(1<<2);

Tersedia library gratis

Tersedia library yang sangat banyak untuk menghubungkan Arduino dengan macam-macam sensor, aktuator maupun modul komunikasi. Misalnya library untuk mouse, keyboard, servo, GPS, dsb. Berhubung Arduino adalah open source, maka library-library ini juga open source dan dapat di download gratis di website Arduino.

Pengembangan aplikasi lebih mudah

Dengan bahasa yang lebih mudah dan adanya library dasar yang lengkap, maka mengembangkan aplikasi elektronik relatif lebih mudah. Contoh, kalau kita ingin membuat sensor suhu. Cukup membeli sebuah IC sensor suhu (misalnya LM35) dan menyambungkan ke Arduino. Kalau suhu tersebut ingin ditampilkan pada LCD, tinggal membeli sebuah LCD dan menambahkan library LCD pada program yang sama, dan seterusnya.

Komunitas open source yang saling mendukung

Software Linux, PHP, MySQL atau WordPress perkembangannya begitu pesat karena merupakan software open source dimana ada komunitas yang saling mendukung pengembangan proyek. Demikian juga dengan Arduino, pengembangan hardware dan software Arduino didukung oleh pencinta elektronika dan pemrograman di seluruh dunia. Contoh, interface USB pada Arduino Uno mengambil dari LUFA project. Library dan contoh-contoh program adalah sumbangan dari beberapa programmer mikrokontroler, seperti Tom Igoe, dsb

Preview Arduino UNO

Overview
Arduino Uno adalah board mikrokontroler berbasis ATmega328 (datasheet). Memiliki 14 pin input dari output digital  dimana 6 pin input tersebut dapat digunakan sebagai output PWM dan 6 pin input analog, 16 MHz osilator kristal, koneksi USB, jack power, ICSP header, dan tombol reset. Untuk mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan Board Arduino Uno ke komputer dengan menggunakan kabel USB atau listrik dengan AC yang-ke adaptor-DC atau baterai untuk menjalankannya.
Uno berbeda dengan semua board sebelumnya dalam hal koneksi USB-to-serial yaitu menggunakan fitur Atmega8U2 yang diprogram sebagai konverter USB-to-serial berbeda dengan board sebelumnya yang menggunakan chip FTDI driver USB-to-serial.
Nama “Uno” berarti satu dalam bahasa Italia, untuk menandai peluncuran Arduino 1.0. Uno dan versi 1.0 akan menjadi versi referensi dari Arduino. Uno adalah yang terbaru dalam serangkaian board USB Arduino, dan sebagai model referensi  untuk platform Arduino, untuk perbandingan dengan versi sebelumnya, lihat indeks board Arduino.
Summary
Microcontroller ATmega328
Operasi dengan daya 5V Voltage
Input Tegangan (disarankan) 7-12V
Input Tegangan (batas) 6-20V
Digital I / O Pins 14 (dimana 6 memberikan output PWM)
Analog Input Pin 6
DC Lancar per I / O Pin 40 mA
Saat 3.3V Pin 50 mA DC
Flash Memory 32 KB (ATmega328) yang 0,5 KB digunakan oleh bootloader
SRAM   2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed ?16 MHz
Skematis & Desain Referensi
EAGLE file: Arduino-uno-referensi-design.zip
Skema: Arduino-uno-schematic.pdf 

Catu Daya

Uno Arduino dapat diaktifkan melalui koneksi USB atau dengan catu daya eksternal (otomatis). Eksternal (non-USB) daya dapat berasal baik dari AC-ke adaptor-DC  atau baterai. Adaptor ini dapat dihubungkan dengan menancapkan plug jack pusat-positif ukuran 2.1mm konektor POWER. Ujung kepala dari baterai dapat dimasukkan kedalam Gnd dan Vin pin header dari konektor POWER. Kisaran kebutuhan daya yang disarankan untuk board Uno adalah 7 volt sampai dengan 12 volt, jika diberi daya kurang dari 7 volt kemungkinan pin 5v Uno dapat beroperasi tetapi tidak stabil kemudian jika diberi daya lebih dari 12V, regulator tegangan bisa panas dan dapat merusak board Uno.
Pin listrik adalah sebagai berikut:
  1. VIN. Tegangan masukan kepada board Arduino ketika itu menggunakan sumber daya eksternal (sebagai pengganti dari 5 volt  koneksi USB atau sumber daya lainnya).
  2. 5V. Catu daya digunakan untuk daya mikrokontroler dan komponen lainnya.
  3. 3v3. Sebuah pasokan 3,3 volt dihasilkan oleh regulator on-board.
  4. GND. Ground pin.
Memori

ATmega328 memiliki 32 KB (dengan 0,5 KB digunakan untuk bootloader),  2 KB dari SRAM dan 1 KB EEPROM (yang dapat dibaca dan ditulis dengan EEPROM liberary).
Unit Input dan Output

Masing-masing dari 14 pin digital di Uno dapat digunakan sebagai input atau output, dengan menggunakan fungsi pinMode (), digitalWrite (), dan digitalRead (), beroperasi dengan daya 5 volt. Setiap pin dapat memberikan atau menerima maksimum 40 mA dan memiliki internal pull-up resistor (secara default terputus) dari 20-50 kOhms. 
Selain itu, beberapa pin memiliki fungsi khusus:
  1. Serial: 0 (RX) dan 1 (TX). Digunakan untuk menerima (RX) dan mengirimkan (TX) TTL data serial. Pin ini dihubungkan ke pin yang berkaitan dengan chip Serial ATmega8U2 USB-to-TTL. 
  2. Eksternal menyela: 2 dan 3. Pin ini dapat dikonfigurasi untuk memicu interrupt pada nilai yang rendah, dengan batasan tepi naik atau turun, atau perubahan nilai. Lihat (attachInterrupt) fungsi untuk rincian lebih lanjut. 
  3. PWM: 3, 5, 6, 9, 10, dan 11. Menyediakan output PWM 8-bit dengan fungsi analogWrite (). 
  4. SPI: 10 (SS), 11 (Mosi), 12 (MISO), 13 (SCK). Pin ini mendukung komunikasi SPI menggunakan SPI library. 
  5. LED: 13. Ada built-in LED terhubung ke pin digital 13. Ketika pin bernilai nilai HIGH, LED on, ketika pin bernilai  LOW, LED off.
  6. Uno memiliki 6 masukan analog, berlabel A0 sampai dengan A5, yang masing-masing menyediakan 10 bit dengan resolusi (yaitu 1024 nilai yang berbeda). Selain itu, beberapa pin memiliki fungsi khusus: 
  7. I2C: A4 (SDA) dan A5 (SCL). Dukungan I2C (TWI) komunikasi menggunakan perpustakaan Wire. 
  8. Aref. Tegangan referensi (0 sampai 5V saja) untuk input analog. Digunakan dengan fungsi analogReference (). 
  9. Reset. Bawa baris ini LOW untuk me-reset mikrokontroler.
Lihat juga mapping  pin Arduino dan port ATmega328.

Komunikasi

Uno Arduino memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer, Arduino lain, atau mikrokontroler lainnya. ATmega328 menyediakan UART TTL (5V) untuk komunikasi serial, yang tersedia di pin digital 0 (RX) dan 1 (TX). Sebuah ATmega8U2 sebagai saluran komunikasi serial melalui USB dan sebagai port virtual com  untuk perangkat lunak pada komputer. Firmware ’8 U2 menggunakan driver USB standar COM, dan tidak ada driver eksternal yang diperlukan. Namun, pada Windows diperlukan, sebuah file inf. Perangkat lunak Arduino terdapat monitor serial yang memungkinkan digunakan memonitor data tekstual sederhana yang akan dikirim ke atau dari board Arduino. LED RX dan TX  di papan tulis akan berkedip ketika data sedang dikirim melalui chip USB-to-serial dengan koneksi USB ke komputer (tetapi tidak untuk komunikasi serial pada pin 0 dan 1).
Sebuah SoftwareSerial library memungkinkan untuk berkomunikasi secara serial pada salah satu pin digital pada board Uno’s.
ATmega328 juga mendukung I2C (TWI) dan komunikasi SPI. Perangkat lunak Arduino termasuk perpustakaan Kawat untuk menyederhanakan penggunaan bus I2C, lihat dokumentasi untuk rincian. Untuk komunikasi SPI, menggunakan perpustakaan SPI.
Pemrograman

Uno Arduino dapat diprogram dengan menggunakan software Arduino (download). Pilih “Arduino Uno dari menu> Peralatan Board (sesuai dengan mikrokontroler).

Bahasa Pemrograman Arduino


Arduino menggunakan pemrograman dengan bahasa C. Berikut ini adalah sedikit penjelasan yang ditujukan kepada anda yang hanya mempunyai sedikit pengalaman pemrograman dan membutuhkan penjelasan singkat mengenai karakter bahasa C dan software Arduino. Untuk penjelasan yang lebih mendalam, web Arduino.cc adalah sumber yang lengkap.

Struktur


Setiap program Arduino (biasa disebut sketch) mempunyai dua buah fungsi yang harus ada.
  • void setup( ) {   } Semua kode didalam kurung kurawal akan dijalankan hanya satu kali ketika program Arduino dijalankan untuk pertama kalinya.
  • void loop( ) {   } Fungsi ini akan dijalankan setelah setup (fungsi void setup) selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara terus menerus sampai catu daya (power) dilepaskan.
Syntax


Berikut ini adalah elemen bahasa C yang dibutuhkan untuk format penulisan.
  • // (komentar satu baris) Kadang diperlukan untuk memberi catatan pada diri sendiri apa arti dari kode-kode yang dituliskan. Cukup menuliskan dua buah garis miring dan apapun yang kita ketikkan dibelakangnya akan diabaikan oleh program.
  • /*   */ (komentar banyak baris) Jika anda punya banyak catatan, maka hal itu dapat dituliskan pada beberapa baris sebagai komentar. Semua hal yang terletak di antara dua simbol tersebut akan diabaikan oleh program.
  • {   } (kurung kurawal) Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir (digunakan juga pada fungsi dan pengulangan).
  • ; (titk koma) Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma yang hilang maka program tidak akan bisa dijalankan).
Variabel


Sebuah program secara garis besar dapat didefinisikan sebagai instruksi untuk memindahkan angka dengan cara yang cerdas. Variabel inilah yang digunakan untuk memindahkannya.
  • int (integer) Digunakan untuk menyimpan angka dalam 2 byte (16 bit). Tidak mempunyai angka desimal dan menyimpan nilai dari -32,768 dan 32,767.
  • long (long) Digunakan ketika integer tidak mencukupi lagi. Memakai 4 byte (32 bit) dari memori (RAM) dan mempunyai rentang dari -2,147,483,648 dan 2,147,483,647.
  • boolean (boolean) Variabel sederhana yang digunakan untuk menyimpan nilai TRUE (benar) atau FALSE (salah). Sangat berguna karena hanya menggunakan 1 bit  dari RAM.
  • float (float)Digunakan untuk angka desimal (floating point). Memakai 4 byte (32 bit) dari RAM dan mempunyai rentang dari -3.4028235E+38 dan 3.4028235E+38.
  • char (character) Menyimpan 1 karakter menggunakan kode ASCII (misalnya ‘A’ = 65). Hanya memakai 1 byte (8 bit) dari RAM. 

Operator Matematika


Operator yang digunakan untuk memanipulasi angka (bekerja seperti matematika yang sederhana).
  • ( = ) Digunakan untuk membuat sesuatu menjadi sama dengan nilai yang lain (misalnya: x = 10 * 2, x sekarang sama dengan 20).
  • ( % ) Digunakan untuk Menghasilkan sisa dari hasil pembagian suatu angka dengan angka yang lain (misalnya: 12 % 10, ini akan menghasilkan angka 2).
  • ( + ) Penjumlahan
  • ( - ) Pengurangan
  • ( *) Perkalian
  • ( / ) Pembagian
Struktur Pengaturan


Program sangat tergantung pada pengaturan apa yang akan dijalankan berikutnya, berikut ini adalah elemen dasar pengaturan (banyak lagi yang lain dan bisa dicari di internet).
1. if..else, dengan format seperti berikut ini:
if (kondisi) { }
else if (kondisi) { }
else { }
Dengan struktur seperti diatas program akan menjalankan kode yang ada di dalam kurung kurawal jika kondisinya TRUE, dan jika tidak (FALSE) maka akan diperiksa apakah kondisi pada else if dan jika kondisinya FALSE maka kode pada else yang akan dijalankan.
2. for, dengan format seperti berikut ini:
for (int i = 0; i < #pengulangan; i++) { }
Digunakan bila anda ingin melakukan pengulangan kode di dalam kurung kurawal beberapa kali, ganti #pengulangan dengan jumlah pengulangan yang diinginkan. Melakukan penghitungan ke atas dengan i++ atau ke bawah dengan i–.

Digital
  1. pinMode(pin, mode) Digunakan untuk menetapkan mode dari suatu pin, pin adalah nomor pin yang akan digunakan dari 0-19 (pin analog 0-5 adalah 14-19). Mode yang bisa digunakan adalah INPUT atau OUTPUT. 
  2. digitalWrite(pin, value) Ketika sebuah pin ditetapkan sebagai OUTPUT, pin tersebut dapat dijadikan HIGH (ditarik menjadi 5 volts) atau LOW (diturunkan menjadi ground). 
  3. digitalRead(pin) Ketika sebuah pin ditetapkan sebagai INPUT maka anda dapat menggunakan kode ini untuk mendapatkan nilai pin tersebut apakah HIGH (ditarik menjadi 5 volts) atau LOW (diturunkan menjadi ground).
Analog

Arduino adalah mesin digital tetapi mempunyai kemampuan untuk beroperasi di dalam alam analog (menggunakan trik). Berikut ini cara untuk menghadapi hal yang bukan digital.
  1. analogWrite(pin, value) Beberapa pin pada Arduino mendukung PWM (pulse width modulation) yaitu pin 3, 5, 6, 9, 10, 11. Ini dapat merubah pin hidup (on)atau mati (off) dengan sangat cepat sehingga membuatnya dapat berfungsi layaknya keluaran analog. Value (nilai) pada format kode tersebut adalah angka antara 0 ( 0% duty cycle ~ 0V) dan 255 (100% duty cycle ~ 5V). 
  2. analogRead(pin) Ketika pin analog ditetapkan sebagai INPUT anda dapat membaca keluaran voltase-nya. Keluarannya berupa angka antara 0 (untuk 0 volts) dan 1024 (untuk 5 volts).

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 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:
  1. analogRead(pin): berfungsi untuk membaca nilai analog pada input pin yang akan menghasilkan nilai integer antara 0-1023.
  2. 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.
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 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:
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;        // 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.

Tidak ada komentar:

Posting Komentar