Souce Kode Arduino
Souce Kode Arduino
web
texts
movies
audio
software
image
logo
search
Search
upload
personSIGN IN
ABOUT
CONTACT
BLOG
PROJECTS
HELP
DONATE
JOBS
VOLUNTEER
PEOPLE
Arduino merupakan suatu perangkat yang dirancang dengan kemampuan komputasi yang
dapat berinteraksi secara lebih dekat dengan dunia nyata dibandingkan komputer biasa.
Satu
hal yang perlu dicatat ialah Arduino bersifat open source, baik microcontroller board
yang
dapat dimodifikasi, begitu juga dengan development environment untuk menuliskan sourc
e
code program yang disebut dengan istilah sketch.
ARDUINO
Sejarah Singkat
Arduino bermula pada tahun 2005, sebagai sebuah project bagi para pelajar di Interact
ion
Design Institute Ivrea di Ivrea, Italia. Pada saat itu para pelajar menggubakan BASIC
Stamp
yang cukup mahal bagi pelajar. Adalah Massimo Banzi, salah satu pendiri Arduino, yang
sekaligus mengajar di Ivrea, mencoba menyelesaikan persoalan tersebut. Asal mula nama
Arduino berasal dari nama sebuah bar yang ada di Ivrea, dimana para pendiri Arduino b
iasa
berkumpul disana. Untuk hardware wiring awal dirancang oleh Hernando Barragan. Bersam
a
dengan David Cuartielles, mulai memperkenaUcan Arduino.
Feature Kelebihan
Arduino dapat digunakan untuk mengembangkan suatu sistem interaktif, yang menerima
input dari bermacam switch atau sensor, dan mengendalikan bermacam hal semisal lampu,
motor, dan output lainnya.
Ada berbagai macam jenis microcontroller dan platform yang tersedia untuk keperluan
komputasi fisik. Arduino dirancang secara sederhana dan mudah dipelajari, dikembangka
n
untuk keperluan project tugas sekolah, kuliah, ataupun tugas akhir. Adapun kelebihan
yang
coba ditawarkan Arduino antara lain.
• Relatif murah
Untuk dasar tutorial pemrograman Arduino berikut ini beberapa function yang biasa
digunakan.
setupO
Digunakan untuk inisialisasi variable, pin mode, penggunaan library, dan lain sebagai
nya.
Hanya dijalankan sekali, pada saat Arduino pertama kali dinyalakan, atau setelah rese
t.
loopO
Setelah function setupO, digunakan function loop() yang sesuai dengan namanya, untuk
menjalankan program utama dalam Arduino secara berulang terus-menerus, hingga Arduino
dimatikan atau reset.
pinModeO
Digunakan untuk melakukan konfigurasi secara spesifik fungsi dari sebuah pin, apakah
digunakan sebagai input atau sebagai output. Contoh penggunaan function pinMode() ial
ah
sebagai berikut.
digitalReadO
Digunakan untuk membaca nilai pin digital yang spesifik, apakah bernilai HIGH atau LO
W.
Contoh penggunaan function digitalRead() ialah sebagai berikut.
Selain membaca nilai, ada juga function untuk menuliskan atau memberikan nilai pada s
uatu
pin digital secara spesifik. Dengan function digitalWrite() memberikan nilai pin digi
tal yang
spesifik apakah bernilai HIGH atau LOW, dapat dilakukan. Contoh penggunaan function
digitalWriteO ialah sebagai berikut.
• digitalWrite(13, HIGH) memberikan nilai digital HIGH pada pin 13 Arduino
delayO
Sesuai dengan namanya, function delayO digunakan untuk memberikan waktu tundaan
(dalam satuan millisecond) untuk mengerjakan satu baris program ke baris selanjutnya.
Contoh penggunaan function delayO ialah sebagai berikut.
• delay(lOOO) memberikan waktu tundaan 1000 millisecond, atau setara dengan 1 detik
sebelum melanjutkan mengerjakan perintah baris program selanjutnya
analogReadO
Selain membaca nilai digital, Arduino juga dapat digunakan untuk membaca nilai analog
.
Dengan menggunakan function analogRead(), untuk membaca nilai analog melalui pin
analog. Untuk board Arduino UNO memiliki 6 channel analog, Arduino Mini dan Nano 8
channel, sedangkan Arduino Mega 10 channel, dengan resolusi 10 bit analog to digital
converter. Dengan resolusi 10 bit memungkinkan pemetaan tegangan antara 0 volt hingga
5
volt dalam nilai integer dari 0 hingga 1023. Sehingga resolusi pembacaan nilai analog
ialah 5
volt dibagi 1024 unit, atau sekitar 4,9 mV per unit. Dibutuhkan sekitar 100 microseco
nd
untuk membaca suatu input analog, dengan kata lain tingkat pembacaan maximum nilai
analog ialah 10000 kaU dalam satu detik.
analogReference(type)
Digunakan untuk memberikan nilai tegangan referensi untuk input analog, dengan piliha
n
type yang ada antara lain.
• DEFAULT, nilai tegangan default untuk board Arduino ialah 5 volt atau 3,3 volt
• INTERNAL, sebuah referensi built-in, setara tegangan 1,1 volt pada ATmegal68
atau ATMega 328, dan 2,56 volt untuk ATMegaS
• INTERNALIVI, sebuah referensi built-in, tegangan 1,1 volt, untuk Arduino Mega
• INTERNAL2V56, sebuah referensi built-in, tegangan 2,56 volt, untuk Arduino Mega
• EXTERNAL, sebuah referensi dari pin AREF, nilai tegangan berkisar antara 0 volt
hingga 5 volt
Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula deng
an
menggunakan LED sebagai indikator output. Tutorial disusun secara bertahap mulai dari
dasar hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperlua
n
aplikasi lainnya. Delapan buah LED tersebut dirangkai secara common cathode, dimana
cathode dari setiap LED disambungkan ke ground Arduino. Sedangkan anode dari 8 buah
LED memperoleh arus dari pin 0 hingga 7 Arduino Uno, yang terlebih dahulu melalui
resistor sebagai pembatas arus. Resistor pembatas arus tersebut bisa bernilai 330 ohm
atau
470 ohm, semakin besar nilai hambatan resistor maka semakin redup nyala dari LED
tersebut. Rangkaian LED secara common cathode ini dimaksudkan karena untuk program
yang akan dibuat menggunakan prinsip active high, dimana bila diberikan logika high 1
, LED
akan menyala. Derrdkian sebaliknya, nyala LED akan padam bila diberikan logika low 0.
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan
Arduino IDE.
■O-
-C£y
Berikut ini adalah source code (sketch) untuk LED blinking, nyala mati secara bergant
ian.
/*
Loki Lang
—J
void setup ()
DDRD = 255;
void loopO
{
PORTD = 2 55;
delay (1000) ;
PORTD = 0;
delay (1000) ;
• Setelah didefinisikan sebagai output, PORTD digunakan untuk memberikan nilai data
output apakah 1 atau 0
• Pada saat diberikan nilai data 1 , maka akan mengeluarkan tegangan 5 volt untuk
menyalakan LED, sedangkan bila data bernilai 0, maka tidak ada tegangan yang
keluar dan nyala LED kemudian akan padam
• Ada delapan pin dalam PORTD yang digunakan dan diberikan nilai 255 (Bllllllll)
untuk menyalakan LED, sedangkan nilai 0 (BOOOOOOOO) untuk memadamkannya
• Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line
selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program
dengan lebih stabil
• Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delayO, semakin besar nilai
yang diberikan maka akan semakin lama durasinya. Adapun source code (sketch) cara lai
n
dengan hasil yang kurang lebih sama sebagai berikut.
/*
Loki Lang
—J
void setup ()
int lang;
}
void loopO
{
int lang;
delay (1000) ;
for (lang = 0; lang <= 7; lang++)
delay (1000) ;
• Untuk index 0 hingga 7 dari array ledPins diakses dengan variable lang melalui
perulangan menggunakan for
• Perulangan dengan for dimulai dari index 0, hingga index 7 (yang merupakan
representasi pin Arduino), dengan increment 1 kali tiap langkahnya
• Untuk mendefinisikan PORTD sebagai output, digunakan instruksi
pinMode(ledPins[lang], OUTPUT), sehingga LED yang terhubung dengan pin
Arduino 0 hingga 7 akan didefinisikan sebagai OUTPUT
• Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line
selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program
dengan lebih stabil
• Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Berikut ini adalah tutorial untuk belajar project dengan Arduino Uno bagi pemula deng
an
menggunakan seven segment display . Tutorial akan disusun secara bertahap mulai dari
dasar
hingga yang lebih rumit, semisal untuk project tugas akhir kuliah atau keperluan apli
kasi
lainnya. Adapun karena keterbatasan jumlah pin dalam board Arduino Uno, untuk
menghemat resource, dapat digunakan IC 7447, decoder . Fungsi dari IC 7447 ialah seba
gai
decoder yang menerima input BCD 4 bit dari Arduino, dan menghasilkan output 8 bit unt
uk
mengendalikan nyala dari seven segment display. Sehingga hanya dengan 4 pin saja (bil
a
tanpa decoder membutuhkan 8 pin) pada Arduino Uno, sudah dapat mengendalikan nyala
tampilan seven segment display. Berikut ini catatan untuk wiring diagram rangkaian.
• Menyamakan konfigurasi pin yang digunakan antara wiring diagram dengan souce
code
• Untuk wiring diagram output Arduino sebagai input ke decoder IC 7447 ialah
berturut-turut pin 0, pin 1, pin2, dan pin 3 masing-masing untuk input A, B, C, dan D
• Perubahan konfigurasi wiring diagram harus disesuaikan juga dengan source code
yang digunakan
• Untuk wiring diagram dari decoder IC 7447 ke seven segment display dapat
mengikuti gambar yang ada
• Untuk decoder IC 7447, menghasilkan output active low, berkaitan dengan jenis
seven segment display yang digunakan ialah common anode
Untuk source code (sketch), dituliskan dan upload ke Arduino Uno dengan menggunakan
Arduino IDE.
at
_L
BCDIO
DicodK
8x1kn
- — vw-
SA/\r
— AAAr-
— VvV
— ^Ayv
— ^AA^
♦Vce
I C ominon
Anode
»PKCH)|T
[I
(I
«pt(lA(l||T
ov[r
7447
0>2to«<VHC
.SV LS'HCT
tsjouvuil
n] ou«iuia
T:] iiu<iuit>
Ti]ou«iiiic
Tojouvuid
Berikut ini adalah source code (sketch) seven segment display sederhana tanpa menggun
akan
library.
/*
Loki Lang
—J
void setup ()
{
void loopO
{
PORTD
= 0;
//I
300000000
delay
1000)
PORTD
= 1;
//I
300000001
delay
1000)
PORTD
= 2;
//I
300000010
delay
1000)
PORTD
= 3;
//I
300000011
delay
1000)
PORTD
= 4;
//I
300000100
delay
1000)
PORTD
= 5;
//I
300000101
delay
1000)
PORTD
= 6;
//I
300000110
delay
1000)
PORTD
= 7;
//I
300000111
delay
1000)
PORTD
= 8;
//I
300001000
delay
1000)
PORTD
= 9;
//I
300001001
delay
1000)
• Disini DDRD diberikan nilai 15 atau sama seperti BOOOOl 111, yang mana empat
buah pin diberi nilai 1, artinya pin 0, pin 1, pin 2, dan pin 3 tersebut didefinisika
n
sebagai port output, sementara itu pin 4, pin 5, pin 6, dan pin 7 diberikan nilai 0,
maka
pin tersebut didefinisikan sebagai input
• Hanya empat buah pin Arduino yang digunakan sebagai output, dikarenakan IC 7447
cukup menerima empat masukan data untuk mengatur nyala seven segment display
• Untuk delay, digunakan untuk memberikan jeda eksekusi dari satu line ke line
selanjutnya dalam program, selain itu juga agar hardware dapat menjalankan program
dengan lebih stabil
• Durasi delay dalam ms, dengan kata lain 1000 ms sama dengan 1 detik
Lama durasi dapat disesuaikan dengan mengubah nilai dalam delayO, semakin besar nilai
yang diberikan maka akan semakin lama durasinya. Berikut ini adalah source code (sket
ch)
seven segment display sederhana tanpa menggunakan library, tapi dengan menggunakan
instruksi perulangan for.
7*
Loki Lang
—J
void setup 0
{
void loopO
PORTD = lang;
delay (1000) ;
}
Beberapa baris source code (sketch) sama seperti pada program yang pertama. Secara
penulisan program tersebut lebih singkat dari yang pertama, dengan perulangan for, be
rikut
penjelasannya.
• Perulangan for dengan variable lang, didefinisikan mulai dari nilai 0 hingga 9, den
gan
perubahan increment 1 setiap tahapnya
• Kemudian nilai variable lang, digunakan sebagai nilai data output PORTD sebagai
input decoder BCD to seven segment, IC 7447
Adapun source code (sketch) cara lain dengan menggunakan library sebagai berikut.
/*
Program seven
segment display
dengan menggunakan library
Loki Lang
#define A 0
#define B 1
#define C 2
#define D 3
#define Enable 4
void setup ()
void loopO
{
lang . of f ( ) ;
delaydOOO)
lang . zero ( )
delaydOOO)
lang . one ( ) ;
delay (1000)
lang . two ( ) ;
delaydOOO)
lang . three (
delaydOOO)
lang . four ( )
delaydOOO)
lang . five ( )
delaydOOO)
lang . six ( ) ;
delaydOOO)
lang . seven {
delaydOOO)
lang . eight (
;
delaydOOO)
lang . nine ( )
delaydOOO)
Berikut ini penjelasan source code (sketch) dengan menggunakan macro library.
• Pada saat proses compile dilakukan macro A, B, C, D, dan Enable, akan diganti oleh
nilai (alamat pin Arduino) yang direpresentasikannya
Berikut ini adalah tabel kebenaran dari input BCD (output dari Arduino) ke output sev
en
segment display, dengan IC 7447.
Arduino
NlUli
Input BCD
e
f
ribnajo
Low
Low
LOW
Low
Low
Low
High
I
Dboool
High
Low
LOW
High
High
High
High
nhii 110
Low
Low
High
Low
Low
High
Low
iihlVill
Low
Low
Low
Low
High
High
Low
ObOlOO
High
Low
Low
High
High
Low
Low
ObOlOl
Low
High
Low
Low
High
Low
Low
6
ObOllO
High
High
Loy/
Low
Low
Low
Low
ObOlll
Low
Low
Low
High
High
High
High
OblOOO
Low
Low
LOW
Low
Low
LOW
Low
OblOOl
Low
Low
Low
High
High
Low
Low
Dengan seven segment display common anode, active low, maka saat diberikan logika low
justru akan menyala.
Salah satu jenis penampil yang sering digunakan ialah LCD (Liquid Crystal Display), y
ang
memiliki banyak kelebihan dibandingkan seven segment display . Salah satu kelebihan L
CD
ialah menampilkan pesan text. Jenis LCD yang banyak digunakan untuk project
microcontroller sederhana ialah LCD 16x2, 16 kolom dengan 2 baris.
Untuk memulai belajar menggunakan penampil LCD, terlebih dahulu dilakukan pemetaan
konfigurasi wiring diagram. Hal ini ditujukan agar pin yang digunakan pada source cod
e dan
wiring diagram sesuai. Berikut ini ialah wiring diagram yang digunakan antara Arduino
dengan LCD pada uji coba awal.
7*
void setup 0
void loopO
lang . clear ( ) ;
lang . setCursor ( 3 , 1);
lang .print ( "Manchester" ) ;
lang . setCursor ( 5 , 1);
lang .print ( "United" ) ;
Dalam source code tersebut digunakan macro #include preprocessed directive yang memua
t
file header LiquidCrystal.h untuk library LCD, untuk penampil LCD. Proses inisialisas
i pin
Arduino yang terhubung ke pin LCD RS, Enable, D4, D5, D6, dan D7, dilakukan dalam bar
is
LiquidCrystal lang(12, 11, 5, 4, 3, 2); dimana lang merupakan variable yang dipanggil
setiap
kah instruksi terkait LCD akan digunakan. Catatan, untuk nama variable lang dapat diu
bah
dengan led atau nama lainnya, selama dalam pemanggilan namanya sesuai.
beginO
Untuk begin() digunakan dalam inisialisasi interface ke LCD dan mendefinisikan ukuran
kolomdan baris LCD. Pemanggilan begin() harus dilakukan terlebih dahulu sebelum
memanggil instruksi lain dalam library LCD. Untuk syntax penulisan instruksi begin()
ialah
sebagai berikut.
lang.begin(cols, rows)
Dengan lang ialah nama variable, cols jumlah kolom LCD, dan rows jumlah baris LCD.
clearO
Instruksi clear() digunakan untuk membersihkan pesan text. Sehingga tidak ada tulisan
yang
ditapilkan pada LCD.
setCursorO
Instruksi ini digunakan untuk memposisikan cursor awal pesan text di LCD. Penulisan s
yntax
setCursorO ialah sebagai berikut.
lang.setCursor(col, row)
Dengan lang ialah nama variable, col kolom LCD, dan row baris LCD.
printO
Sesuai dengan namanya, instruksi print() ini digunakan untuk mencetak, menampilkan pe
san
lang.print(data)
Dengan lang ialah nama variable, data ialah pesan yang ingin ditampilkan.
Penggunaan push button sebagai sebuah sensor, Arduino akan menerima data berapa kah
push button tersebut ditekan. Berdasarkan gambar wiring diagram yang ada, pada saat p
ush
button tidak ditekan maka tidak ada arus (input signal) yang mengalir sebagai input k
e pin
Arduino. Sedangkan bila ditekan maka akan ada arus (input signal) yang mengalir ke
Arduino. Untuk menghindari kondisi float (suatu kondisi antara high dan low), maka pu
sh
button dihubungkan dengan resistor puU down, terhubung dengan ground. Dengan demikian
bila rangkaian diubah, arus terputus, limit switch akan berada dalam kondisi low.
Berikut ini adalah source code (sketch) aplikasi pencacah sederhana dengan Arduino.
/*
Loki Lang
—J
int buttonPin = 2;
int buttonPushCounter = 0;
int buttonState = 0;
int lastButtonState = 0;
void setup {)
void loopO
{
if (buttonState == HIGH)
{
buttonPushCounter++ ;
}
lastButtonState = buttonState;
if (buttonPushCounter % 7 ==0)
else
{
• Variable buttonPin, untuk pin Arduino (pin 2) yang terhubung dengan input push
button
• Variable ledPin, untuk pin Arduino (pin 13) dimana terdapat LED indikator sebagai
output
• Variable buttonPushCounter, untuk mencacah berapa kali push button ditekan
• Variable buttonState, untuk menampung kondisi push button tidak ditekan bernilai
low, sedangkan bila ditekan bernilai high
• Variable buttonPin, untuk pin Arduino yang terhubung dengan push button
• Setiap kali push button ditekan (high), nilainya akan dibaca oleh Arduino, dan
meningkatkan nilai variable buttonPushCounter
• Bila saat menekan push button kemudian ditahan, nilainya hanya akan dibaca sekali
oleh Arduino, karena kondisi buttonState dan lastButtonState harus berbeda untuk
dapat mulai mencacah
• Setelah push button dilepas, nilai buttonState kembali low demikian dengan
lastButtonState
• Pada saat ledPin bernilai high, maka LED indikator di Arduino akan menyala
PWM
Pulse Width Modulation (PWM) merupakan suatu teknik untuk mendapatkan hasil output
analog dengan pendekatan secara digital. Teknik PWM ini mengendalikan lebar pulsa
berdasarkan modulator. Meski bapat diterapkan dalam penyandian informasi komunikasi,
penerapan utamanya lebih pada kendali daya perangkat listrik, semisal motor. Kendall
digital
digunakan untuk membentuk sebuah gelombang kotak (square wave), sebuah gelombang
signal untuk switch antara kondisi on dengan off. Pola kondisi on dan off tersebut
merepresentasikan suatu nilai full on pada Arduino (5 volt) dan kondisi off (0 volt)
dengan
mengubah perbandingan ratio antara waktu kondisi on dengan kondisi off dalam satu per
iode.
Durasi waktu on disebut dengan istilah lebar pulsa, pulse width. Untuk mendapatkan su
atu
variasi hasil output nilai analog, dapat dilakukan dengan mengubah lebar pulsa terseb
ut.
Perbandingan antara waktu signal on dengan waktu satu periode disebut dengan duty cyc
le.
Duty Cycle
Duty cycle dapat diartikan sebagai perbandingan antara waktu signal on dengan waktu
keseluruhan untuk satu periode. Besamya nilai duty cycle dinyatakan dalam percent. Ni
lai
duty cycle dapat bervariasi mulai dari 0% tidak ada signal on, hingga 100% tidak ada
signal
off, atau selalu dalam kondisi signal on.
Sebagai contoh duty cycle 60% dengan durasi 1000 ms. Maka waktu saat signal on ialah
60%
dari 1000 ms, yakni 600 ms. Sedangkan untuk waktu signal off ialah selisih antara dur
asi
keseluruhan dengan waktu signal on, yakni 400 ms.
Dalam bahasan kali ini akan dijabarkan mengenai project Arduino sederhana bagaimana
menampilkan karakter output pada LCD dari data input yang diberikan melalui komunikas
i
serial. Dalam hal ini dilakukan komunikasi antara komputer dengan Arduino, dimana inp
ut
karakter dari keyboard akan ditampiUcan kembali pada LCD.
Untuk memulai menggunakan penampil LCD, terlebih dahulu dilakukan pemetaan
konfigurasi wiring diagram. Hal ini ditujukan agar pin yang digunakan pada source cod
e dan
wiring diagram sesuai. Berikut ini ialah wiring diagram yang digunakan antara Arduino
dengan LCD pada uji coba awal. Untuk jenis LCD yang digunakan ialah 16 kolom dan 2
baris.
Berikut ini ialah source code (sketch) sederhana untuk menampilkan pesan text.
/*
Loki Lang
* /
3 , 2.) ;
void setup 0
lang .begin(16, 2) ;
Serial .begin (9600) ;
void loopO
if ( Serial . available () )
{
ae lay^iuu^ ,
lang . clear ( ) ;
0)
lang .write(Serial.read() )
}
}
Dalam source code tersebut digunakan macro #include preprocessed directive yang memua
t
file header LiquidCrystal.h, untuk hbrary LCD. Berikut ini adalah penjelasan source c
ode
(sketch) tersebut.
• Proses inisialisasi pin Arduino yang terhubung ke pin LCD RS, Enable, D4, D5, D6,
dan D7, dilakukan dalam baris LiquidCrystal lang(12, 11, 5, 4, 3, 2); dimana lang
merupakan variable yang dipanggil setiap kali instruksi terkait LCD akan digunakan.
Catatan, untuk nama variable lang dapat diubah dengan led atau nama lainnya, selama
dalam pemanggilan namanya sesuai
• Untuk while (Serial. available() > 0), selama komunikasi serial komputer dengan
Arduino berlangsung lancar, tidak terputus, maka akan dijalankan baris program
selanjutnya yakni menampilkan karakter ke LCD
• Untuk menampilkan data ke LCD dengan lang. write( source), dalam hal ini source
atau input yang digunakan berasal dari pembacaan data Serial.read()
Pada tutorial belajar Arduino kali ini akan membahas tentang bagaimana membuat aplika
si
pengukur suhu sederhana dengan menggunakan sensor suhu LM35. Karena nilai output dari
sensor suhu LM35 berupa signal analog, maka perlu dilakukan proses untuk mengubah sig
nal
analog tersebut ke signal digital dengan menggunakan feature ADC pada Arduino. Untuk
resolusi maximum ADC board Arduino Uno ialah 10 bit, sehingga nilai prescaler maximum
yang dapat digunakan sebesar 1023. Sebelum membuat project pengukur suhu dengan
Arduino, terlebih dahulu perlu memahami karakteristik dari sensor suhu LM35 yang akan
digunakan. Hal ini penting untuk keperluan kalibrasi dan ralat dari aplikasi pengukur
suhu
dengan Arduino tersebut.
Sensor suhu LM35 merupakan komponen elektronika yang memiliki kemampuan mendeteksi
input nilai besaran suhu dari lingkungannya, kemudian memberikan output besaran listr
ik
dalam bentuk tegangan. Konfigurasi kaki IC LM35 tampak pada gambar, dengan urutan Vs
tegangan pencatu (5 volt), nilai tegangan input ke microcontroller Arduino, dan groun
d.
Berikut ini adalah karakteristik dari sensor suhu LM35.
• Memiliki tingkat kepekaan suhu, dengan faktor skala linier berbanding dengan suhu
10 mV untuk setiap perubahan 1 derajad Celsius
• Memiliki tingkat ketepatan kalibrasi yaitu 0,5 derajad Celsius, pada suhu ruangan 2
5
derajad Celsius
• Memiliki pemanasan sendiri yang rendah (low-self-heating) yaitu kurang dari 0,1
derajad Celsius pada ruang kamar
Wiring Diagram
Langkah selanjutnya perlu dilakukan pemetaan konfigurasi wiring diagram. Hal ini ditu
jukan
agar pin yang digunakan pada source code dan wiring diagram sesuai. Berikut ini ialah
wiring diagram yang digunakan antara Arduino dengan LCD.
Berdasarkan gambar wiring diagram tersebut.
Source Code
Berikut ini adalah source code (sketch) Arduino, aplikasi pengukur suhu dengan LM35.
/*
Arduino LM35
Loki Lang
—J
#include <LiquidCrystal . h>
void setup ()
lang .setCursor(0,0);
lang .setCursor(0,l);
delay (1000) ;
void loopO
lang . clear ( ) ;
val = analogRead ( lm35 ) ; // nilai ADC terbaca
delay (100) ;
lang .setCursor(0,0);
lang .setCursor(0,l);
Penjelasan untuk source code (sketch) Arduino aplikasi pengukur suhu dengan LM35 iala
h
sebagai berikut.
• Variable temp merupakan variable untuk nilai suhu yang akan ditampilkan nilainya
pada LCD
Selebihnya ialah function untuk mengubah nilai ADC ke suhu Celsius dan function terka
it
dengan penampil LCD.
Dengan karakteristik sensor suhu LM35, bahwa setiap perubahan suhu 1 derajad Celsius
akan
mengakibatkan perubahan nilai tegangan sebesar 10 mV. Dalam nilai standard unit 1 der
ajad
Celsius mengakibatkan perubahan 0,01 V, hingga diperoleh konstanta perubahan tegangan
tiap satuan suhu 0,01 V/°C. Sebagai contoh, pada saat suhu 50 derajad Celsius nilai
tegangannya ialah sebesar 500 mV. Untuk mendapatkan nilai suhu dalam Celsius, terlebi
h
dahulu mengolah nilai data digital yang terbaca oleh ADC. Berikut ini ialah langkahny
a.
• Bagi nilai ADC yang terbaca dari sensor suhu LM35 dengan prescaler, nilai
maximum resolusi yang digunakan, resolusi ADC Arduino 10 bit, nilai maximum
resolusi 1023
• Selanjutnya mencari nilai tegangan terbaca, kalikan nilai yang diperoleh sebelumnya
dengan nilai tegangan referensi, dalam hal ini digunakan tegangan referensi sebesar 5
volt
• Setelah diperoleh nilai tegangan (dalam mV), selanjutnya ialah mengubah nilai
tersebut dalam skala suhu Celsius
• Dalam hal ini nilai skala tegangan mV dibagi dengan konstanta 0,01 V/°C, atau
dengan kata lain (pada source code) mengalikan nilai tegangan tersebut dengan 100
Project Arduino Membaca dan Menulis EEPROM
Tutorial belajar Arduino kali ini akan membahas mengenai menyimpan data ke EEPROM
lalu kemudian membacanya. Setelah data disimpan di EEPROM, nilai yang ada disana dapa
t
dilihat dengan menggunakan Serial Monitor pada Arduino IDE. Penulisan data pada
EEPROM akan menggunakan input data analog pembacaan dari potentiometer yang
terhubung ke pin analog Arduino A3. Untuk wiring diagram tersebut, tampak seperti pad
a
gambar.
Dengan satu pin potentiometer ke Vcc, satu ke Ground, dan satu lagi ke pin analog Ard
uino
A3. Untuk source code (sketch) yang digunakan dalam menuliskan data ke EEPROM
Arduino ialah sebagai berikut.
7*
ke EEPROM
Loki Lang
—J
#include<EEPROM.h>
int address = 0;
void setup 0
{
void loopO
{
address = 0;
delay (100) ;
Adapun penjelasan untuk source code (sketch) program Arduino menuliskan data ke
EEPROM ialah sebagai berikut.
• Agar library EEPROM dapat digunakan perlu mencakup file header EEPROM.h
terlebih dahulu
• EEPROM board Arduino Uno memiliki alamat dari 0 hingga 511 total ada 512
• Nilai variable lang didapat dari pembacaan nilai ADC pada pin analog Arduino A3
• Nilai ADC (10 bit, maximum 1023) yang terbaca dibagi dengan 4, karena nilai yang
dapat disimpan dalam sebuah alamat EEPROM Arduino maximum hanya 8 bit,
dengan nilai dari 0 hingga 255
• Setelah data disimpan pada alamat address, dilakukan increment address untuk
digunakan sebagai tempat penyimpanan data selanjutnya
• Proses increment alamat address tersebut dilakukan hingga mencapai alamat ke 511,
saat mencapai pencacahan increment 512, alamat address akan dikembalikan ke
alamat awal yakni kembali dari 0
7*
#include<EEPROM.h>
int address = 0;
byte lang;
void setup ()
void loopO
{
address += 1;
if (address == 512)
address = 0;
}
delay (500) ;
Adapun penjelasan untuk source code (sketch) program Arduino membaca data ADC yang
tersimpan di EEPROM ialah sebagai berikut.
• Agar library EEPROM dapat digunakan perlu mencakup file header EEPROM.h
terlebih dahulu
• EEPROM board Arduino Uno memiliki alamat dari 0 hingga 511 total ada 512
• Nilai variable lang didapat dari pembacaan nilai ADC pada pin analog Arduino A3
• Setelah itu data akan ditampilkan pada Serial Monitor dengan instruksi Serial.print
(),
berturut-turut adalah address kemudian variable lang, data ADC
• Karena data pada EEPROM tersimpan adalam bentuk byte, maka perlu dilakukan
tahap mengubah data byte menjadi DEC, nilai desimal, yang lebih mudah dimengerti
• Sama seperti sebelumnya, setelah selesai membaca dan menampilkan data pada
sebuah alamat EEPROM, kemudian dilakukan increment address untuk membaca
data pada alamat EEPROM selanjutnya
• Bila telah mencapai 511, pembacaan selanjutnya 512 akan kembali membaca ke
alamat 0 dari EEPROM
Pada board Arduino Uno hanya tersedia satu pin RX dan TX, dengan demikian (pada kondi
si
normal) hanya memungkinkan sebuah board Arduino Uno tersebut untuk melakukan
komunikasi serial dengan satu perangkat saja. Sedangkan dalam beberapa aplikasi ada y
ang
menuntut microcontroller untuk melakukan komunikasi serial dengan beberapa perangkat
sekaligus. Untuk mengantisipasi hal tersebut, board Arduino Uno dilangkapi dengan fea
ture
perangkat lunak yang memungkinkan untuk menjadikan pin Arduino lainnya sebagai pin RX
-
TX. Semisal menjadikan pin digital 9 sebagai RX dan pin digital 8 sebagai TX. Hal itu
dapat
dilakukan dengan menggunakan library SoftwareSerial. Pengujian ini dengan menggunakan
dua buah komputer yang terhubung dengan sebuah board Arduino Uno. Data yang
dikiramkan dari masing-masing komputer ditampilkan pada Serial Monitor Arduino Ide.
Selain itu diperlukan adapter untuk pin digital 8 dan 9 Arduino yang digunakan sebaga
i TX
dan RX ke salah satu komputer. Berikut adalah contoh penggunaan source code (sketch)
library SoftwareSerial dan penjelasannya.
7^
Loki Lang
void setup ()
{
void loopO
{
}
Adapun penjelasan untuk source code (sketch) program Arduino menuliskan data ke
EEPROM ialah sebagai berikut.
• Nama variable langSerial dapat diganti dengan nama lain, hanya perlu diingat nama
variable tersebut harus sama setiap kah memanggil fianction terkait library
SoftwareSerial
• Sebelum masuk pada program utama, dilakukan inisialisasi komunikasi serial baik
secara hardware (Serial.begin()) maupun software (langSerial.begin()) dengan
deklarasi serta baud rate yang digunakan yakni 9600
• Pada program utama akan dilihat apakah komunikasi serial dengan dua perangkat
tersebut dapat dijalankan
• Selama nilai return dari keduanya true, maka akan terus menjalankan instruksi
selanjutnya
• Bila salah satu nilai return (atau bahkan keduanya) dari Serial. available() atau
langSerial.availableO bernilai false, maka tidak ada instruksi yang dikerjakan, hingg
a
keduanya bernilai true
• Pada hardware serial akan membaca data yang diberikan oleh komputer yang
terhubung software serial, lalu menampilkannya di Serial Monitor
• Hal sebaliknya juga berlaku pada komputer yang terhubung dengan hardware serial,
akan membaca data dari komputer yang terhubung dengan software serial
Beberapa board Arduino dapat saling berhubungan untuk kemudian bertukar data satu sam
a
lain. Hal tersebut akan sangat berguna dalam sebuah project besar yang menuntut lebih
dari
sebuah board Arduino. Sebagai contoh, dua board Arduino dapat digunakan untuk melakuk
an
komunikasi bertukar data satu sama lain, sebagai perangkat Master Writer-Slave Receiv
er
melalui jalur komunikasi I2C synchronous serial. Untuk itu perlu digunakan beberapa
function yang ada pada library Wire Arduino untuk komunikasi I2C tersebut. Arduino
pertama, digunakan sebagai perangkat master, yang akan menuliskan data untuk dikirimk
an
ke perangkat slave. Dengan 6 byte data dikirim melalui pengalamatan slave Arduino. Se
telah
data diterima, isi data tersebut dapat dilihat pada Serial Monitor Arduino IDE, yang
terhubung dengan perangkat slave.
Komunikasi I2C Arduino membutuhkan dua jalur pengkabelan untuk mengirimkan dan
menerima data, adalah pin serial clock (SCL) yang pada Arduino memberikan pulsa clock
interval pengiriman data, dan pin serial data (SDA) yang memmuat data yang akan
dikirimkan antar kedua perangkat tersebut. Setiap kali pulsa clock berubah dari low m
enjadi
high (disebut dengan istilah rising edge of the clock), sebuah bit informasi yang mem
uat
alamat perangkat dan perintaan untuk data, dikirimkan dari Arduino melalui I2C jalur
SDA,
ke perangkat lainnya yang terhubung. Pada saat pin clock berubah dari high menjadi lo
w
(disebut dengan istilah falling edge of the clock), balasan data yang diminta sebelum
nya akan
dikirimkan, juga melalui jalur I2C Arduino yang sama.
Karena jalur komunikasi dengan I2C mengharuskan bahwa setiap perangkat slave yang
terhubung untuk memiliki alamat uniknya masing-masing, supaya perangkat master dan sl
ave
mampu tetap berkomunikasi dalam satu jalur. Bahkan perangkat master dapat berkomunika
si
dengan banyak perangkat slave, dengan tetap hanya menggunakan dua buah pin Arduino
saja. Selama alamat unik dari setiap perangkat slave dikenali maka komunikasi mungkin
untuk dilakukan.
Wiring Diagram
Untuk menghubungkan dua board Arduino Uno dilakukan dengan cara menghubungkan pin
A4 (SCL) master dengan pin A4 slave, pin A5 (SDA) master dengan pin A5 slave, serta
dengan menghubungkan Ground kedua board tersebut. Untuk wiring tampak seperti pada
gambar.
Source Code
Berikut ini adalah source code (sketch) Arduino untuk perangkat master yang akan
mengirimkan data, untuk selanjutnya diterima oleh perangkat slave tersebut, kemudian
ditampilkan di Serial Monitor Arduino IDE.
7*
#include <Wire.h>
void setup ()
Wire . begin ( ) ;
byte X = 0;
void loopO
{
Wire . endTransmission ( ) ;
X++;
delay (500) ;
Perangkat master akan mengirimkan data ke slave di alamat nomor 20, dengan data chara
cter
berukuran 6 byte. Data character yang dikirimkan oleh slave setelah diterima kemudian
akan
dibaca, untuk selanjutnya ditampilkan di Serial Monitor Arduino IDE. Dalam pesan data
yang dikirimkan oleh perangkat master, disertakan juga pencacahan berapa kali data te
lah
dikirimkan pada masing-masing pesan. Setelah source code (sketch) untuk perangkat mas
ter,
selanjutnya perlu membuat bagian untuk perangkat slave, yakni sebagai berikut.
7*
Loki Lang
—J
#include <Wire.h>
void setup ()
Wire .begin (2 0) ;
void loopO
{
delay (100) ;
Pada perangkat slave perlu dilakukan deklarasi alamat untuk perangkat tersebut. Dalam
hal
ini, perangkat slave diberikan alamat nomor 20, dan telah disesuaikan dengan sorce co
de
(sketch) pada perangkat master. Pada saat menerima data pesan dari perangkat master,
perangkat slave akan menjalankan procedure receiveEvent(), yang mana akan menampilkan
pesan data dari perangkat master. Pasan data dari perangkat master tersebut berisikan
berapa
kali telah dilakukan pengiriman data ke perangkat slave. Pesan data tersebut kemudian
akan
ditampilkan pada Serial Monitor Arduino IDE.
Uji Kasus
Dalam contoh project ini, program utama akan membaca data ADC dari potentiometer.
Secara default pembacaan ADC Arduino ialah 10 bit, mulai dari 0 hingga 1023, jumlah
keseluruhan 1024. Untuk project ini akan diubah dalam nilai 4 bit, mulai dari 0 hingg
a 15,
jumlahnya 16. Untuk mengubah dari 10 bit (jumlahnya 1024) menjadi 4 bit (jumlahnya),
yakni dengan membagi nilai 10 bit tersebut dengan nilai 64. Dari hasil tersebut diper
oleh data
yang bernilai 0 hingga 15. Data tersebut selain akan ditampiUcan dalam Serial Monitor
Arduino IDE, juga akan ditampilkan dalam deretan empat buah LED yang merepresentasika
n
nilai binary dari data nilai tersebut. Sedangkan penggunaan dua buah interrupt disini
untuk
menyimpan dan membaca data ADC dalam EEPROM . Satu buah interrupt digunakan untuk
menyimpan data ke EEPROM, sedangkan satu lagi digunakan untuk membaca data dalam
EEPROM tersebut.
Source Code
Untuk selanjutnya source code (sketch) interrupt Arduino yang digunakan sebagai berik
ut.
7*
Arduino Uno
Loki Lang
—J
#include <EEPROM.h>
int lang;
void setup ()
void loopO
case 0 :
delay (1000) ;
break;
case 1 :
digitalWrite (4, HIGH) ;
digitalWrite ( 5 , LOW) ;
1 " ) ;
delay (1000) ;
break;
case 2 :
2 " ) ;
delay (1000) ;
break;
case 3 :
digitalWrite ( 5 , HIGH);
digitalWrite ( 6, LOW);
3 " ) ;
delay (1000) ;
break;
case 4 :
digitalWrite ( 5 , LOW);
digitalWrite ( 6, HIGH);
digitalWrite (7 , LOW);
Serial .println ("Nilainya
4 " ) ;
delay (1000) ;
break;
case 5 :
digitalWrite (4 , HIGH);
diaitalWrite (5 . LOWK-
digitalWrite ( 6, HIGH);
digitalWrite (7, LOW);
5 " ) ;
delay (1000) ;
break;
case 6 :
digitalWrite ( 6, HIGH);
6") ;
delay (1000) ;
break;
case 7 :
digitalWrite (4 , HIGH);
digitalWrite ( 6, HIGH);
digitalWrite (7 , LOW);
7 " ) ;
delay (1000) ;
break;
case 8 :
digitalWrite (4 , LOW);
8") ;
delay (1000) ;
break;
case 9:
break;
case 10:
delay (1000) ;
break;
case 11:
delay (1000) ;
break;
case 12:
delay (1000) ;
break;
case 13:
delay (1000) ;
break;
case 14:
delay (1000) ;
break;
case 15:
delay (1000) ;
break;
void menyimpan ( )
{
int address = 0;
detachlnterrupt (0) ;
detachlnterrupt (1) ;
while (address < 8)
Serial. print In 0 ;
address++;
delay (1000) ;
}
attachlnterrupt ( 0 , menyimpan, RISING);
attachlnterrupt ( 1 , membaca, RISING);
void membaca 0
{
int address = 0;
detachlnterrupt (0) ;
detachlnterrupt (1) ;
while (address < 8)
Untuk pin digital Arduino 4, 5, 6, dan 7 berturut-turut digunakan sebagai output untu
k
menyalakan LED, dari nilai Least Significant Bit ke Most Significant Bit. Untuk inter
rupt 0
Arduino Uno pada pin digital 2, sedangkan interrupt 1 ada pada pin digital 3. Penggun
aan
switch dengan tambahan resistor pull-down ke ground, ditujukan untuk menghindari nila
i
float saat switch tidak ditekan. Dengan memberikan resistor pull-down tersebut akan
memberikan nilai default tegangan saat switch tidak ditekan mendekati 0 volt. Hal ter
sebut
juga berpengaruh pada source code (sketch) mode operasi interrupt yang digunakan yakn
i
RISING. Untuk mode operasi RISING, interrupt akan menjalankan interrupt bila terjadi
perubahan nilai pada pin interrupt dari low menjadi high. Sesuai dengan kondisi switc
h
dengan resistor pull-down, yang bila tidak ditekan akan bernilai low, sedangkan bila
ditekan
akan bernilai high.
Untuk deklarasi external interrupt agar dapat digunakan pada Arduino Uno, menggunakan
attachlnterruptO yang sesuai dengan nomor interrupt, function yang dipanggil, dan mod
e
operasi interrupt tersebut. Sedangkan bila diberikan instruksi detachlnterrupt() yang
sesuai
nomor interrupt, akan membuat interrupt tersebut tidak bisa dijalankan. Untuk
detachlnterruptO cukup berguna dalam menjalankan suatu proses, block program, atau
bahkan dalam interrupt, yang harus dijalankan, tanpa gangguan interrupt lainnya.