0% menganggap dokumen ini bermanfaat (0 suara)
71 tayangan

Modul 0 - Pengenalan Arduino - 160125

Modul ini memperkenalkan Arduino dengan menjelaskan tujuan, alat dan bahan, dasar teori, dan pemrograman Arduino. Teori mencakup arsitektur perangkat keras dan lunak Arduino serta cara menulis dan mengkompilasi program Arduino.

Diunggah oleh

corneliandini
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
71 tayangan

Modul 0 - Pengenalan Arduino - 160125

Modul ini memperkenalkan Arduino dengan menjelaskan tujuan, alat dan bahan, dasar teori, dan pemrograman Arduino. Teori mencakup arsitektur perangkat keras dan lunak Arduino serta cara menulis dan mengkompilasi program Arduino.

Diunggah oleh

corneliandini
Hak Cipta
© © All Rights Reserved
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 27

Modul - 0

Pengenalan Arduino

1 Tujuan Praktikum
Pada praktikum ini anda diminta untuk dapat menguasai beberapa kompetensi khusus yang
berhubungan dengan mikroprosesor berbasis Arduino. Beberapa kompetensi khusus tersebut antara
lain,

Mengenal arsitektur perangkat keras Arduino, dan mampu mengkoneksikannya ke piranti


lain dengan aman.

Mampu melakukan pemrograman mikroprosesor Arduino dengan Arduino IDE.

Mampu menulis program Arduino dengan bahasa C (khusus Arduino)

Mampu melakukan proses masukan/luaran dasar dengan Arduino.

Mampu memakai Monitor untuk mengamati jalannya program arduino, untuk kemudian
membetulkan jika ada kesalahan.

2 Alat dan Bahan


Untuk praktikum ini, diperlukan alat dan bahan sebagai berikut:

No Nama Banyak Keterangan


1 Komputer / Laptop 1
2 Kabel USB 1
3 Kit Arduino + Arduino 1
4 Kit LED 1
5 Kabel IDC-10 2

Praktikum Laboratorium TF II Pengenalan Arduino - 1


3 Dasar Teori
Arduino merupakan suatu projek open-source yang diinisiasi oleh Massimo Banzi, David
Cuartielles, David Mellis, dan Nicholas Zambetti. Arduino terdiri dari dua perangkat, yaitu
perangkat keras (hardware) dan perangkat lunak (software). Sifat open-source ini memperbolehkan
pengguna untuk mengakses informasi sumber seperti skematik rangkaian listrik untuk perangkat
keras dan kode pemrograman untuk perangkat lunak. Perangkat keras Arduino dapat kita beli
dengan harga yang relatif murah bila dibandingkan dengan development board sejenis. Selain itu
perangkat lunak yang ada dapat kita gunakan secara gratis dan dapat berjalan di sistem operasi
Windows, Linux, maupun Macintosh.

3.1 Perangkat Keras Arduino


Secara umum, Arduino adalah suatu micro-controller, yaitu prosesor khusus untuk sistem-sistem
otomatis kecil yang sangat membutuhkan masukan/luaran cepat ke piranti luar lain. Arsitektur
Arduino nampak Gambar 1 berikut.

Gambar 1. Perangkat Keras Arduino

Inti dari sistem ini adalah mikroprosesor ATMega328, yang dilengkapi dengan beberapa blok
tambahan. Blok-blok inti adalah:

CPU adalah otak yang menjalankan perangkat lunak.


EEPROM (Erasable Programmable Read Only Memory) sebesar 1KB, digunakan untuk
menyimpan firmware (perangkat lunak paling dasar).
FPM (Flash Program Memory) sebesar 32KB, digunakan untuk menyimpan software
yang di-upload ke Arduino, berupa program dan data-data utama.

Praktikum Laboratorium TF II Pengenalan Arduino - 2


SRAM (Stack Random Access Memory) sebesar 2KB, adalah memori untuk stack (data
dan informasi pemanggilan subrutin) selama program berjalan.
Timer, adalah komponen untuk membantu pewaktuan dalam program, misalnya untuk
penundaan (delay) atau interupsi secara periodik.

3.1.1 Digital Pin


Arduino memiliki blok digital pin sebanyak 14 buah, diberi nama D0 - D13. Masing-masing digital
pin ini bisa bekerja dengan dua level sinyal yaitu HIGH (sekitar 3 5 Volt) atau LOW (sekitar 0 - 2
Volt). Yang istimewa, ke-14 port ini bisa dikonfigurasi untuk berbagai mode:

1. Digital input, misalnya untuk menerima masukan dari tombol.


2. Digital output, misalnya untuk luaran ke LED. Dalam hal ini pin D13 sudah memiliki LED.
3. PWM (pulse width modulation) output, adalah luaran berupa pulsa periodik dengan lebar
pulsa yang bisa diatur. Hanya ada 6 pin yang sanggup untuk PWM yaitu D3, D5, D6, D8,
D9 dan D11.
4. Interrupt, adalah masukan yang dapat memicu perubahan jalannya program secara langsung,
berguna untuk masukan yang sifatnya penting dan mendesak, misalnya sinyal alarm. Pin
yang bisa menerima interupsi adalah pin D2 dan D3.
5. UART (Serial interface) untuk komunikasi serial, khusus pin D0 dan D1.
6. SPI (Serial Parallel Interface) pada pin D10 D13, untuk komunikasi dengan piranti serial.

3.1.2 Analog Pin


Arduino juga memiliki 6 analog pin, diberi nama A0 A5. Mode yang bisa dilakukan melalui pin
tersebut adalah:

1. Digital Output.
2. Digital Input.
3. Analog Input, untuk menerima masukan sinyal yang harganya antara 0 5 Volt, dan
akan dikonversi menjadi angka 0 1023 (10 bit).
4. I2C pada pin A4 dan A5, bisa digunakan untuk komunikasi antar Arduino.

Praktikum Laboratorium TF II Pengenalan Arduino - 3


3.1.3 Catu Daya
Ada empat jalan memberi daya listrik pada arduino, yaitu:

Melalui konektor USB. Dengan jalan ini Arduino dan seluruh piranti yang terhubung
akan mengambil daya dari komputer. Dianjurkan agar arus total yang diambil tidak lebih
dari 500mA. Jika berlebih, maka port USB di komputer anda bisa rusak !
Melalui konektor Jack-DC pada Arduino, dengan tegangan masukan 7-12 Volt, yang
akan diregulasi menjadi 5V. Jika tegangan kurang dari 6 Volt, maka jalannya prosesor
akan tidak normal dan bisa jadi Arduino akan mengambil daya dari USB. Sebaliknya
jika tegangan berlebih, maka keping regulator akan cepat panas. Sementara itu kapasitas
arus regulator hanyalah 800 mA. Jika arus yang diambil berlebih, regulator bisa rusak.
Pin daya Vin. Sama seperti melalui Jack-DC, hanya lewat pin.
Pin daya 5V. Untuk memberi daya external langsung ke prosesor Arduino tanpa melalui
regulator. Oleh karena itu pastikan bahwa listrik melalui jalur ini sudah teregulasi 5V
dengan baik.
Dengan demikian, Arduino sangat fleksibel dalam menerima daya listrik. Namun konsekuensinya,
berhati-hatilah dalam mengkoneksikan Arduino ke daya listrik, sesuaikan dengan daya yang dipakai
seluruh piranti.

3.1.4 Jenis Arduino


Arduino telah berkembang cukup lama, sehingga saat ini di pasaran sudah ada berbagai tipe
Arduino. Pada praktikum ini, tipe-tipe yang mungkin akan kita gunakan adalah:

Arduino Duemilanove : tipe paling tua, memakai prosesor 8 bit ATMega 328 dan chip FTDI
untuk komunikasi ke komputer.

Arduino Uno : penerus Duemilanove dengan prosesor ATMega328, dan prosesor


ATMEGA8U2-MU untuk komunikasi ke komputer.

Arduino Nano: sama seperti Duemilanove, namun dengan bentuk yang lebih kecil.

Intel Galileo: klone Arduino yang dibuat oleh Intel.

3.2 Perangkat Lunak Arduino


Untuk melakukan pemrograman Arduino, ada perangkat lunak Arduino IDE (integrated
development environment) yang mudah dipakai. Perangkat lunak ini bisa dijalankan disuatu
komputer, dengan sistem operasi Linux, Windows maupun MacOS. Seperti terlihat pada Gambar 2,

Praktikum Laboratorium TF II Pengenalan Arduino - 4


program ini cukup sederhana.

Gambar 2. Layar IDE Arduino dan Referensi Arduino pada browser

Ada sebuah editor utama dimana kita bisa menulis program dalam bahasa Arduino. Di bawahnya
ada jendela hitam yang akan menampilkan pesan-pesan saat proses kompilasi maupun upload. Di
bagian atas ada baris tombol-tombol menu. Dua yang penting adalah tombol save dan upload.
Paling atas ada baris menu guna mengaktifkan berbagai fitur layanan dari File hingga Help. Untuk
belajar, ada dua menu yang berguna yaitu:

Menu File > Examples : menyediakan berbagai contoh kode sumber.

Menu Help > Reference : menampilkan referensi bahasa Arduino pada suatu web browser.
Selama belajar ini, sangat dianjurkan untuk membuka referensi ini saat anda bertemu
berbagai perintah-perintah baru.

3.3 Pemrograman Arduino


Ada tiga langkah utama yang dilakukan dalam melakukan pemrograman mikroprosesor dengan
Arduino IDE, yaitu,

1. Menulis kode program.

2. Melakukan kompilasi (compilation) pada kode program yang telah ditulis.

3. Mengunggah (upload) program yang telah dikompilasi ke mikroprosesor.

Dalam menulis program, arduino memakai bahasa C++ yang telah disederhanakan dan disesuaikan
untuk mikroprosesor. Dalam bahasa C atau C++, program selalu memiliki satu fungsi utama yakni
main(). Demi mempermudah pemrograman mikroprosesor, bahasa arduino menetapkan adanya dua
subrutin utama yaitu loop() dan setup() seperti kode dasar di bawah ini.

Praktikum Laboratorium TF II Pengenalan Arduino - 5


//Struktur Standar Kode Program Arduino

// Deklarasi Konstanta

// Deklarasi Variabel Global

void setup(){
// Perintah (inisialisasi)
}

void loop(){
// Perintah (jalan terus secara berulang)
}

Gambar 4. Flowchart setup() dan loop()

Diagram alir Gambar 4 memperlihatkan bagaimana kedua subrutin utama tersebut akan dijalankan.
Begitu mikroprosesor dihidupkan, maka setup() akan berjalan sekali saja. Setelah itu loop() akan
berjalan secara berulang hingga mikroprosesor di matikan, di-reset atau di-program ulang.

Setelah kode program selesai ditulis maka kode sumber arduino harus disimpan menjadi file dengan
extensi ino. Langkah selanjutnya, kode sumber harus dikompilasi menjadi kode biner. Dalam
kompilasi ini, kode sumber mungkin mengandung kesalahan tulis (syntax error). Arduino akan
menampilkan kesalahan tersebut pada kotak pesan (di bagian bawah). Baca baik-baik pesan
tersebut, lalu benarkan kode sumber, dan kompilasi kembali sampai sukses.

Setelah kompilasi selesai, maka kode biner dapat di-upload ke mikroprosesor dengan prosedur:

Arduino sudah harus terkoneksi ke komputer melalui jalur USB, dan nampak bahwa lampu
indikator dayanya menyala.

Pada Arduino IDE, pilih jalur komunikasi serial antara komputer dengan mikroprosesor dari
menu Tools > Serial Port. Di sistem operasi Linux, port serial yang digunakan adalah

Praktikum Laboratorium TF II Pengenalan Arduino - 6


/dev/ttyUSB* (duemilanove, nano) atau /dev/ttyACM* (uno). Pada sistem operasi
Windows selalu menggunakan COM*.

Pada Arduino IDE, pilih jenis perangkat keras Arduino yang sesuai melalui menu Tools >
Boards. Pilih sesuai board yang anda gunakan, Arduino Uno atau Arduino Duemilanove.

Setelah ketiga hal tersebut siap, maka tinggal klik tombol upload. Tunggu sejenak hingga
pada kotak pesan muncul pesan bahwa proses upload sudah selesai (done). Sekecap
kemudian, program akan mulai dijalankan di perangkat keras arduino.

3.4 Pengamanan Arduino


Arduino mudah rusak ! Dari pengalaman sebelumnya, sekitar 5 10 Arduino rusak per semester.
Karena itu mohon perlakukan dengan baik, dimana prinsipnya adalah:

1. Koneksikan piranti ke Arduino hanya ketika sistem sedang mati (tak ada catu dayanya).

2. Ketika akan memberi catu daya, perhatikan betul bahwa koneksi sudah benar dan tak ada
yang konslet.

3. Ketika hidup, jangan memakai daya berlebihan.

Harap baca http://playground.arduino.cc/Main/ArduinoPinCurrentLimitations. Perhatikan bahwa


ada batasan arus per PIN, per Port, dan total satu chip.

Praktikum Laboratorium TF II Pengenalan Arduino - 7


Gambar 5. Batasan arus arduino (dari playground.arduino.cc).

4 Tugas Awal
Tugas awal harap dikerjakan di rumah, satu tiap regu, ditulis tangan pada kertas A4. Asisten akan
memeriksanya sebelum praktikum dimulai. Tugas awal ini PENTING untuk pelaksanaan
praktikum. Karena itu jika tugas awal tidak layak, asisten berhak menolak regu anda melakukan
praktikum. Untuk praktikum pertama ini, lakukan:

1. Baca 10 Ways to Destroy an Arduino di http://ruggedcircuits.com/html/ancp01.html.


Tuliskan 3 kesalahan yang menurut anda paling mungkin bisa terjadi pada praktikum ini.
Tugas awal yang satu ini harap dilakukan dengan sungguh-sungguh.

Praktikum Laboratorium TF II Pengenalan Arduino - 8


2. Ingat-ingat pelajaran PTI di TPB lalu baca Language Reference Arduino. Buatlah tabel
tipe data berikut, lalu lengkapi:

Tipe data Ukuran (byte) Nilai minimum Nilai maksimum


byte 1 0 255
word
char
unsigned char
int
unsigned int
long
unsigned long
float
double
boolean

3. Masih dari arduino reference, lihat bahwa ada 5 kelompok operator (arithmetic, comparison,
boolean, bitwise dan compound). Pelajari lagi semuanya. Untuk tugas awal jelaskan tentang
perbedaan operator boolean dan bitwise berikut (beri contoh):

! dan ~
&& dan &
|| dan |
4. Pada praktikum nanti kita akan bekerja dengan LED yang nyalanya cukup silau. Siapkan
tutup LED dengan alas sekitar 3x3 cm2 dengan bentuk yang kreatif, atau selembar kertas
dengan gambar pemandangan (kita akan membuat program matahari terbit).

Praktikum Laboratorium TF II Pengenalan Arduino - 9


5 Praktikum

5.1 Koneksi Kit Praktikum


Untuk memudahkan praktikum ini, Arduino sudah dilengkapi dengan berbagai kit. Mula-mula ada
kit utama tempat menaruh Arduino. Pada kit ini telah ada regulator 5V dengan kapasitas 800mA,
dan 3 buah konektor IDC-10 pin, masing-masing untuk pin [D2-D9], [D6-D13], serta [A0-A5+D2-
D3]. Kit utama tersebut kemudian dapat disambung ke beberapa kit pelengkap, yaitu :

1. Kit LED
2. Kit Keypad
3. Kit Motor DC
4. Kit Logic

Gambar 6. Koneksi Kit Utama Kit LED

Pada praktikum kali ini, kita akan memakai kit utama dan kit LED seperti Gambar 6. Arduino
terpasang di bagian bawah kit utama, tidak terlihat pada Gambar. Jika pada kit utama dipakai
arduino duemilanove, uno atau nano, maka prosedur mengkoneksikan adalah:

1. Jika sistem sedang hidup, maka cabut dulu catu daya, setelah itu USB.

2. Pastikan sistem sudah mati dengan melihat apakah LED Arduino masih menyala.

3. Sambung kit pelengkap ke kit utama dengan kabel IDC-10, sesuai peruntukannya.

4. Komputer/laptop sudah hidup, sambung ke Arduino dengan kabel USB.

5. Pasang kabel catu daya 12V ke kit utama (Jangan ke jack DC Arduino !).

Praktikum Laboratorium TF II Pengenalan Arduino - 10


Mohon perhatikan sungguh-sungguh bahwa:

Jika langkah 2 dilanggar, ada kemungkinan Arduino akan rusak saat disambung ke kit
pelengkap karena hubung singkat yang menimbulkan spike listrik.

Jika langkah 3 dan 4 terbalik, biasanya komunikasi Arduino ke komputer akan error,
terutama saat memakai Arduino nano.

Sementara itu galileo perlu langkah berbeda, sebab membutuhkan arus lebih dari 500mA sehingga
tak akan kuat jika hanya dicatu oleh USB. Prosedurnya adalah:

1. Jika sistem sedang hidup, maka cabut dulu USB baru catu daya eksternal.

2. Pastikan sistem sudah mati dengan melihat apakah LED Galileo masih menyala.

3. Sambung kit pelengkap ke kit utama sesuai peruntukannya.

4. Pasang kabel catu daya 12V ke kit utama.

5. Komputer/laptop sudah hidup, sambung ke Galileo dengan kabel USB.

Sekali lagi mohon perhatikan sungguh-sungguh bahwa:

Jika langkah 2 dilanggar, Galileo bisa rusak saat disambung ke kit pelengkap !!!

Jika langkah 1 terbalik (cabut catu daya dulu), atau jika langkah 4 dan 5 terbalik (pasang
USB dulu), maka USB komputer akan overload dan bisa rusak.

5.2 Struktur Setup dan Komunikasi Serial


Sebagai langkah pertama untuk memrogram arduino, jalankan Arduino IDE pada komputer, lalu
coba ketikkan program berikut.

void setup(){
Serial.begin(9600); // mulai komunikasi USB dengan baud=9600
Serial.println("Hello computer"); // kirim via USB
}

void loop() {} // kosong saja


Kode 1. Dasar setup dan komunikasi mikrokontroler Arduino

Program ini menunjukkan contoh penggunaan setup(), yaitu subrutin yang akan dijalankan satu kali
diawal program. Program ini juga menunjukkan pemakaian pustaka Serial untuk mengirim data dari
arduino ke komputer melalui USB. Seperti dijelaskan pada Pengantar, arduino memiliki fasilitas
USB yang bisa dipakai untuk meng-upload program sekaligus untuk komunikasi ketika program
sudah berjalan. Hal ini sangat praktis dibanding dengan sistem mikroprosesor jaman sebelumnya,

Praktikum Laboratorium TF II Pengenalan Arduino - 11


yang memerlukan jalur berbeda untuk memrogram dan berkomunikasi.

Setelah selesai diketik, simpan dulu program yang sudah diketik tadi dengan menekan tombol
Save. Kemudian tekan tombol upload untuk mengkompilasi dan langsung mengupload program.
Begitu terdengar nada beep (tanda program sudah selesai di-upload), segera tekan icon Serial
Monitor pada perangkat lunak Arduino sehingga muncul jendela monitor. Atur baud Rate sehingga
sama dengan diprogram (bisa antara 1200, 2400, , 115200). Setelah itu coba tutup serial monitor,
lalu buka lagi. Arduino akan jalan lagi dari awal dan mestinya pada jendela tersebut akan
menampilkan kalimat "Hello computer". Arduino juga akan jalan ulang (reboot) jika ditekan
tombol reset. Tombol itu selalu tersedia pada setiap arduino, demikian pula pada kit utama.

5.3 Loop dan Timer


Pada latihan sebelumnya, tampilan Hello computer hanya terjadi sekali saja, dan setelah itu tak
terjadi apa-apa lagi. Sebenarnya, arduino tidak mati. Dia terus bekerja, namun tak melakukan apa-
apa lagi karena fungsi loop-nya kosong. Sekarang coba tambahkan program menjadi seperti berikut.

// subrutin berjalan sekali saja


void setup(){
Serial.begin(9600);
delay(10);
Serial.println("Hello computer");
}

// subrutin berjalan berulang-ulang


void loop() {
delay(3000); // tunda 3 detik
Serial.print("Saya sudah jalan selama:");
Serial.println(millis()); // baca waktu, kirim ke USB
}
Kode 2. Dasar looping dan pewaktuan mikrokontroler Arduino

Upload program tersebut, dan jalankan serial monitor. Amati keluaran program sekarang,
bandingkan dengan sebelumnya, dan pahami tiga hal baru yang ditunjukkan contoh ini:

Subrutin loop. Bagaimanakah jalannya ?

Fungsi delay(). Apa gunanya ?

Fungsi millis(). Apa gunanya ? Apakah ada hubungannya dengan delay ?

Cobalah ubah nilai delay menjadi 1000, lalu jalankan kembali Apa yang terjadi ?

Praktikum Laboratorium TF II Pengenalan Arduino - 12


5.4 Konstanta dan Keluaran Digital
Kini kita mencoba antarmuka luaran digital ke rangkaian elektronik. Untuk itu kita akan gunakan
kit LED yang sudah tersedia. Pada kit tersebut, terdapat 4 LED yang masing-masing terhubung ke
pin digital I/O arduino (D8 D11) seperti nampak pada Gambar 7.

// konstanta
#define LED1 8
#define DELAY 1000

void setup()
{
Serial.begin(9600);
pinMode(LED1, OUTPUT);
}

void loop()
{
Serial.println(HIGH);
digitalWrite(LED1, HIGH);
delay(DELAY);
Serial.println(LOW);
Gambar 7. Rangkaian LED digitalWrite(LED1, LOW);
delay(DELAY);
}
Kode 3. Program keluaran digital

Tulislah programnya pada Arduino IDE, lalu jalankan. Amati nyala LED, dan coba pahami bahwa:

Pada awal program ada baris #define untuk mebuat konstanta. Hal ini demi memperjelas
penulisan program, dan akan mudah jika kelak harus mengubah koneksi perangkat keras.

Pada bagian setup, mula-mula perangkat keras disiapkan dengan perintah pinMode().

Selanjutnya pada bagian loop(), LED bisa dinyalakan/dimatikan dengan perintah


digitalWrite().

Setelah selesai diketik, upload program ke Arduino. Amati peristiwa yang terjadi pada LED0, dan
coba pahami program yang baru saja dibuat.
Tugas 1 :
Buatlah program sehingga ke-empat LED menyala bergantian dengan selang waktu 250 ms
sehingga nampak berjalan. Isi program kira-kira seperti ini, lengkapi lalu jalankan !

Praktikum Laboratorium TF II Pengenalan Arduino - 13


void loop(){
Serial.println("LED-1 Nyala");
digitalWrite(LED1,HIGH);
delay(DELAY);
digitalWrite(LED1,LOW);

Serial.println("LED-2 Nyala");
digitalWrite(LED1+1,HIGH);
delay(DELAY);
digitalWrite(LED1+1,LOW);

// dan seterusnya sampai LED4


........
}
Kode 4: Program Lampu Berjalan

5.5 Variabel dan Masukan Digital


Pada kit LED juga tersedia dua tombol yang rangkaiannya seperti pada Gambar 8. Kedua jenis
rangkaian ini disebut:
Pull-down: S1 dipasang ke arah VDD, lalu disambung resistor ke GND.
Pull-up: Sebaliknya S2 dipasang ke GND, lalu disambung resistor ke VDD.
Coba pahami rangkaian itu. berapa tegangan yang akan masuk ke pin D4 saat tombol S1
dilepas/ditekan ? Demikian pula berapa tegangan pada pin D2 saat tombol S2 dilepas/ditekan ?

// konstanta
#define LED1 8
#define BUTTON1 4

void setup(){
Serial.begin(9600);
pinMode(LED1,OUTPUT);
pinMode(BUTTON1,INPUT);
}

void loop(){
boolean s1 = digitalRead(BUTTON1);
digitalWrite(LED1,s1);
Serial.println(s1);
delay(1000);
Gambar 8. Rangkaian tombol }
Kode 5. Dasar masukan digital

Pada kode 5, terlihat program agar LED1 menyala jika tombol S1 ditekan. Pada setup(), seluruh pin
harus di-set dulu modenya sebagai INPUT atau OUTPUT. Lalu pada loop(), digunakan perintah
digitalRead() untuk membaca kondisi tombol, yang hasilnya disimpan ke variabel s1. Perhatikan

Praktikum Laboratorium TF II Pengenalan Arduino - 14


bahwa s1 ini dipesan dengan tipe data boolean, karena memang hanya akan menyimpan data HIGH
atau LOW. Namun dalam bahasa C, seluruh tipe data bilangan bulat (byte, int, char, long)
sebenarnya bisa dianggap sebagai boolean, dimana:
Jika berisi 0, artinya false.
Jika bukan 0 maka dianggap true.
Karena itu perintah berikut juga bisa bekerja pada arduino:
int s1 = digitalRead(BUTTON1);

Selanjutnya variabel s1 ini dipakai untuk menyalakan LED melalui perintah digitalWrite().

Tugas 2.
Cobalah program 5 tersebut. Setelah sukses dan paham, coba kembangkan agar tombol S2
dapat menyala/matikan LED-2.

5.6 Operator
Pada perangkat keras, S1 terpasang secara pull-down sementara S2 secara pull-up. Karena itulah
hasil bacaan digitalnya akan selalu terbalik. Agar LED2 menyala saat S2 ditekan, maka variabel s2
harus diolah dulu, misalnya demikian:

boolean s2 = digitalRead(BUTTON2);
boolean d2 = !s2; // negasikan s2 pakai operator boolean
digitalWrite(LED2, d2);

Kode 6. Contoh Operator

Pengolahan lebih kompleks bisa dilakukan dengan mengkombinasikan berbagai operator yang
sudah disediakan bahasa C.

Tugas 3:
Pada tugas awal anda sudah mempelajari operator boolean not (!), and (&&) dan or (||).
Dengan memakai operator tersebut, buatlah program untuk mengatur nyala LED1 hingga
LED4 sesuai penekanan tombol S1 dan S2 seperti tabel berikut:

S1 S2 LED1 LED2 LED3 LED4


Lepas Lepas ON - - -
Tekan Lepas - ON ON ON
Lepas Tekan - - ON ON
Tekan Tekan - - - ON

Praktikum Laboratorium TF II Pengenalan Arduino - 15


5.7 Pengulangan
Pada tugas 1 kita telah membuat program lampu berjalan sesuai Kode 4. Program tersebut akan
berjalan dengan benar, namun rasakan bahwa selama menulis anda harus melakukan salin-tempel,
kemudian mengubah sedikit variabel. Bayangkan jika ada 100 LED yang harus dijalankan. Rasanya
kurang cerdas kalau kita harus menulis 100 blok kode yang sama. Untuk itulah dalam pemrograma
dikenal jurus pengulangan yang memungkinkan satu blok perintah dilaksanakan berkali-kali sesuai
kondisi tertentu. Bahasa C menyediakan tiga jenis pengulangan yaitu FOR, WHILE dan DO-
WHILE. Jika digunakan dengan tepat, kode menjadi singkat dan jalannya program akan efisien.

Dalam menulis pengulangan, kita harus bisa mengamati empat hal:

1. Apa variabel yang berubah (contoh pada tugas 1, variabel nomor pin).

2. Berapa nilai awalnya (pada contoh adalah LED0 = 8).

3. Berapa besar perubahannya (pada contoh adalah 1).

4. Berapa nilai akhirnya (pada contoh adalah LED3 = 11).

Bila hal-hal tersebut telah ditentukan, maka kita bisa menulis program lebih ringkas sebagai berikut:

// konstanta
#define LED1 8
#define LED4 11
#define DELAY 1000

// contoh setup dengan pengulangan


void setup() {
for(int pin=LED1; // variabel yg berubah, diberi nilai awal
pin <= LED4; // syarat terus, sesuai nilai akhir
pin++) // perubahan
{
pinMode(pin,OUTPUT); // bagian yang diulang
}
}

// nyala dari LED1 hingga LED4 dengan pengulangan


void loop(){
// loop for, ditulis dalam 1 baris
for(int pin=LED1; pin <= LED4; pin++) {
digitalWrite(pin,HIGH);
delay(DELAY);
digitalWrite(pin,LOW);
}
}
Kode 7. Program lampu berjalan pakai pengulangan
Pada contoh tersebut, yang perlu dipelajari adalah :

Praktikum Laboratorium TF II Pengenalan Arduino - 16


1. Perintah pengulangan for. Nampak bahwa perintah ini memiliki bagian kontrol dalam
kurung () dan bagian yang diulang dalam kurung {}. Bagian kontrol terdiri atas:

Inisialisasi: dijalankan sekali saja di awal pengulangan pertama.

Pemeriksaan: dijalankan di awal setiap pengulangan, jika berharga false maka


pengulangan berhenti.

PerubahanL dijalankan diakhir setiap pengulangan.

2. Bagian pemeriksaan biasanya memakai operator komparison (==, !=, <, >, <=, >=)
dikombinasikan dengan operator boolean (&&, ||, !). Kesalahan kecil yang fatal di sini
adalah salah menulis operator (==) menjadi operator (=).

3. Pengubahan memakai operator inkremen (i++). Hal ini sama saja dengan menulis i=(i+1),
namun lebih singkat dan efisien.

Tugas 4:
Modifikasilah kode 7 sehingga LED menyala dari LED4 ke LED1 (terbalik arah dari contoh
kode 7) dengan metode pengulangan for, dan operator dekremen () untuk pengubahannya.

5.8 Pencabangan
Kini kita akan membuat program LED berjalan yang bisa berbalik arah jika tombol s1 ditekan. Pada
masalah ini, program punya dua kemungkinan operasi dan harus memilih salah satu berdasar satu
kondisi tertentu. Untuk itu, bahasa pemrograman menyediakan fitur pencabangan. Ada dua bentuk
dasar pencabangan yaitu IF dan IFELSE. Berikut ini kerangka program lampu berjalan dengan
konstruksi if - else.
// konstanta
............

void setup(){ . . .}

boolean s1;

void loop(){
s1 = digitalRead(BUTTON1);

// pencabangan sesuai bacaan tombol


if (s1) {
. . . // nyala dari LED1 hingga LED4
}
else {
. . . // nyala dari LED4 hingga LED1

Praktikum Laboratorium TF II Pengenalan Arduino - 17


}
delay(500);
}

Kode 8. Pencabangan if-else

Tugas 5:
Lengkapi kerangka Kode 8 (dengan memasukkan potongan dari kode 7 dan tugas 4). Setelah
diupload dan berjalan, coba tekan tombol S1, tahan beberapa saat, lalu lepas kembali.

5.9 Pemilihan
Pemilihan adalah fitur yang mirip dengan pencabangan, namun kondisi pemilihannya bisa banyak.
Dalam bahasa arduino, perintah yang tersedia adalah switch-case yang mampu melakukan
pemilihan berdasar suatu variabel bilangan bulat (byte, int, dll). Sebagai contoh, misal kita ingin
menyalakan LED sesuai dengan Tabel pada tugas 3. Ini bagian loop-nya.

void loop () {
boolean s1 = digitalRead(BUTTON1);
boolean s2 = digitalRead(BUTTON2);

// susun angka memakai operator bitwise


// sehingga bisa diperoleh angka 0 3 (biner 00 - 11)
byte angka = 0;
if (s1) angka = angka | 1;
if (!s2) angka = angka | 2;
Serial.println(angka, BIN);

// matikan dulu semua LED


. . .

// nyalakan lagi memakai pemilihan


switch (angka) {
case 3 : digitalWrite(LED4, HIGH); // tanpa break
case 2 : digitalWrite(LED3, HIGH); // akan terus
case 1 : digitalWrite(LED2, HIGH); break;
default: digitalWrite(LED1, HIGH);
}
delay(1000);
}

Kode 9: Program lampu kombinasi dengan pemilihan


Tugas 6:
Lengkapi kerangka Kode 9, lalu jalankan. Amati nyalanya LED, dan pahami manfaat perintah
switch-case, beserta break-nya. Coba taruh break di alhir case 2 maupun 3. Apa akibatnya ?

Praktikum Laboratorium TF II Pengenalan Arduino - 18


5.10 Subrutin dan Analog Output
Subrutin adalah fitur bahasa pemrograman agar keseluruhan program menjadi modular, sekaligus
bisa lebih singkat. Sejak awal, kita sudah menggunakan subrutin setup() dan loop(). Selanjutnya
kita bisa membuat fungsi lainnya sesuai keperluan yang akan dipanggil oleh setup() maupun loop().

Sebagai contoh, kali ini kita akan memakai sebuah LED RGB (Red Green Blue) yang sudah
tersedia pada kit dengan rangkaian seperti pada Gambar 9. Nampak bahwa LED ini memiliki
common anode yang terhubung ke VCC, sementara masing-masing katoda-nya terhubung ke pin
arduino (D3, D5, D6) melalui resistor. Ketiga pin tersebut mampu mengeluarkan analog output
berupa PWM (pulse width modulation). Kode sumber program untuk menyalakan LED RGB
tersebut menyala mati dengan warna ungu (merah + biru) adalah sebagai berikut:

#define PIN_R 3
#define PIN_G 5
#define PIN_B 6

// setup kosong saja


// karena analogWrite tak perlu pinMode
setup() {}

loop() {
analogWrite(PIN_R, 128); // nyala 1/2
analogWrite(PIN_G, 255); // padam
analogWrite(PIN_B, 128); // nyala 1/2
delay(1000);
analogWrite(PIN_R, 255); // padam
analogWrite(PIN_G, 255); // padam
analogWrite(PIN_B, 255); // padam
Gambar 9. Rangkaian LED delay(500);
RGB }
Kode 11. Blink ungu
Silahkan ketik dan jalankan program tersebut. Oh ya, jangan lupa pasang dulu tutup LED RGB
yang sudah anda siapkan pada tugas awal !

Setelah puas takjubnya, mari kita pahami programnya. Perhatikan bahwa fungsi analogWrite()
membuat suatu pin mengeluarkan sinyal PWM dengan duty-cycle tertentu. Bentuk sinyal luaran
PWM terhadap waktu nampak pada Gambar 10. Pada arduino, periode gelombang kotaknya (Tp)
sekitar 2,128 mili detik. Sementara itu duty-cycle (Td) bisa diatur dari harga 0 255 sesuai yang
diminta saat memanggil analogWrite.

Praktikum Laboratorium TF II Pengenalan Arduino - 19


D
Td= T
255 p

Td : lebar pulsa PWM


Tp : periode siklus PWM
D : duty-cycle

Gambar 10. Sinyal PWM

Namun harus diperhatikan bahwa LED RGB pada kit ini memakai common anoda, sehingga LED
akan menyala ketika pin arduino sedang LOW, bukannnya sedang HIGH. Dengan demikian LED
akan menyala penuh ketika D=0, menyala setengah terang ketika D=128, dan padam ketika D=255.
Karena itulah pada program kita menyalakan LED dengan memanggil:

analogWrite(PIN_R, 128); // menyala setengah terang

Dan sebaliknya memadamkan dengan memanggil:

analogWrite(PIN_R, 255); // padam

Sementara itu dari ilmu pencahayaan, warna RGB adalah warna elementer. Kita bisa membuat
warna lain dengan mengkombinasikan ketiga elemen RGB-nya, seperti beberapa contoh pada tabel
berikut (dalam hal ini 255=nyala penuh, 0 = padam).

Warna R G B
merah 255 0 0
kuning 128 128 0
hijau 0 255 0
cyan 0 128 128
biru 0 0 255
ungu 128 0 128
putih 85 85 85
Putih terang sekali 255 255 255

Perhatikan bahwa dalam hal ini jumlah dari ketiga elemen diusahakan selalu 255, agar total
intensitasnya tetap. Kalau mau terang sekali, boleh saja semua dinyalakan penuh. Namun seperti
telah anda baca pada tugas awal, harus ingat bahwa :

Praktikum Laboratorium TF II Pengenalan Arduino - 20


TOTAL ARUS YANG BISA DI-SINK MELALUI 1 PORT ARDUINO HANYA 100mA !

Dalam hal ini setiap led menarik arus sekitar 15 mA. Kalau ketiga RGB menyala bersamaan, masih
aman selama tidak ada I/O lain yang menyala.

Kembali ke kode 11, lihat bahwa setiap kali menyalakan led RGB kita harus memanggil
AnalogWrite() 3 kali. Kita bisa menyingkat hal ini dengan membuat subrutin, sehingga di-loop
tinggal dipakai berulang kali dengan lebih mudah seperti contoh berikut:

// sub rutin menulis LED RGB dengan masukan r,g,b antara 0-255
// pwm dibalik sebagai 255-r, untuk kompensasi common anoda
void rgbWrite(byte r, byte g, byte b) {
analogWrite(PIN_R, 255-r);
.........................;
.........................;
}

loop() {
rgbWrite(128,0,128); // panggil subrutin, nyalakan ungu
delay(500);
rgbWrite(0,0,0); // padamkan
...
}
Kode 12. Memakai subrutin untuk menyalakan led RGB

Tugas 7: Lengkapi program pada kode 12 agar LED bisa berkedip merah, hijau, biru.

5.11 Array
Dalam pemrograman seringkali kita memiliki banyak data sejenis (tipenya sama), dan ingin diakses
secara berurut. Untuk itu bahasa C menyediakan array, yaitu variabel banyak item yang masing-
masing item-nya bisa diakses memakai indeks. Sebagai contoh, tiga elemen RGB bisa disimpan
sebagai berikut:
// pesan dan inisialisasi variabel, tanpa array
byte r1 = 128;
byte g1 = 0;
byte b1 = 128;

// jika pakai array


byte rgb1[3] = {128, 0, 128};

Lebih jauh lagi, array bisa multi-dimensi. Program berikut memberi contoh bagaimana kita bisa
membuat tabel warna dengan array 2 dimensi. Efeknya antara lain, subrutin writeRGB maupun
loop bisa dibuat lebih singkat.

Praktikum Laboratorium TF II Pengenalan Arduino - 21


// array byte 1 dimensi ukuran 3
// menyimpan pin LED RGB yang tidak urut
byte pin_rgb[3]={3,5,6};

// array byte 2 dimensi menyimpan warna.


// dimensi pertama harus pakai ukuran (3, sesuai rgb)
// dimensi kedua boleh tak pakai ukuran
// C akan otomatis menyesuaikan sesuai banyaknya inisialisasi
byte tabel_warna[][3] = {
{255,0,0}, // merah
{192,64,0}, // kuning
{0,255,0} // hijau
};

// subrutin rgbWrite dengan masukan array


void rgbWrite(byte rgb[]) {
// array bisa diakses dengan indeks variabel i
// item pertama indeksnya selalu 0 sehingga
// rgb[0]=red, rgb[1]=green, dst
// karena itu bisa pakai loop berikut
for(int i=0; i<3; i++) {
analogWrite(pin_rgb[i], 255-rgb[i]);
}
}

void setup() {
}

void loop(){
// banyaknya warna bisa dihitung dengan fungsi sizeof
int n = sizeof(tabel_warna) / (3 * sizeof(byte));

// pengulangan, akses array dimensi kedua


// kirim seluruh dimensi pertama ke subrutin
for (int i=0; i<n; i++) {
rgbWrite(tabel_warna[i]);
delay(500);
}
}
Kode 13. LED menyala sesuai deretan angka
Tugas 8:
Coba buat program traffic light dimana LED menyala merah 5 detik, kuning 1 detik, lalu
hijau 7 detik demikian seterusnya (petunjuk: simpan lama delay di array).

Alhamdulillah .. sampai di sini, selamat. Kita sudah mengulang pelajaran PTI satu semester
dalam satu kali praktikum. Boleh berhenti kalau merasa sudah cukup. Kalau masih semangat, ayo
teruskan.

Praktikum Laboratorium TF II Pengenalan Arduino - 22


Kita akan membahas topik-topik advanced :

Data dan Direct port manipulation. Cara hacker memrogram port arduino, rahasia kakak-
kakak anda yang jago robotik dan ikut berbagai kompetisi.

Pemrograman berorientasi obyek, akan berguna untuk membuat program arduino yang
kompleks. Konsep dasarnya juga bisa mengantar anda belajar lebih jauh memrogram
aplikasi di desktop pakai Java atau C++, maupun memrogram Android.

.......

Masih semangat ???

5.12 Advanced Tipe Data


Topik advanced pertama, seorang hacker harus benar-benar sadar memilih tipe data. Berikut ini
program benchmark sederhana memperlihatkan berbagai operasi pada berbagai tipe data.

// parameter benchmark
#define AWAL 1
#define OPERATOR +
#define DATA 2
#define ULANG 25000

// Tipe data di-benchmark


byte data1;
word data2;
int data3;
float data4;

// subrutin cetak hasil


void print(char *tipe, int ukuran, long hasil, long lama) {
Serial.print(tipe);
Serial.print('\t');
Serial.print(ukuran);
Serial.print('\t');
Serial.print(hasil);
Serial.print('\t');
Serial.println(lama);
}

void setup() {
long lama;

Serial.begin(115200);
Serial.print("Arduino benchmark ");
Serial.println(ULANG);
Serial.println("Tipe \tUkuran \tHasil \tLama");

Praktikum Laboratorium TF II Pengenalan Arduino - 23


// benchmark data1
lama = micros(); // catat waktu mulai
data1 = AWAL; // isi data awal
for (int i=0; i<ULANG; i++) {
data1=data1 OPERATOR DATA; // lakukan operasi berulang kali
}
lama=micros()-lama; // hitung lama operasi
print("byte", sizeof(data1), data1, lama); // laporkan

// benchmark data2
lama=micros();
data2 = AWAL;
for (int i=0; i<ULANG; i++) {
data2=data2 OPERATOR DATA;
}
lama=micros()-lama;
print("word", sizeof(data2), data2, lama);

// benchmark data3
lama=micros();
data3 = AWAL;
for (int i=0; i<ULANG; i++) {
data3=data3 OPERATOR DATA;
}
lama=micros()-lama;
print("int", sizeof(data3), data3, lama);

// benchmark data4
lama=micros();
data4 = float(AWAL);
for (int i=0; i<ULANG; i++) {
data4=data4 OPERATOR float(DATA);
}
lama=micros()-lama;
print("float", sizeof(data4), long(data4), lama);
}

void loop() {}
Kode 14. Benchmark tipe data

Coba jalankan, simak ukuran data, hasil, dan juga lama prosesnya. Coba lagi sambil mengganti
parameter benchmark, misalnya:
#define AWAL 1
#define OPERATOR -
#define DATA 1
#define ULANG 20000

Dari pengamatan tersebut, coba simpulkan kelebihan dan kekurangan masing-masing tipe data.

Praktikum Laboratorium TF II Pengenalan Arduino - 24


5.13 Advanced I/O
Baiklah, berikutnya kita akan pakai teknik direct port manipulation yang di manual Arduino diberi
catatan use with your own peril, karena :

Tidak portabel, karena berbeda sesuai tipe prosesor. Misalnya kode untuk Uno, akan berbeda
dengan Mega maupun Galileo.

Namun keuntungannya sangat menggoda untuk tetap dipakai, yaitu:

Dapat mengakses beberapa digital I/O sekaligus.

Amat sangat cepat sekali.

Kita akan coba teknik ini untuk membuat lampu berjalan pada LED1 hingga LED4. Keempat LED
tersebut terkoneksi ke pin D8 hingga D11. Silahkan lihat Gambar 5, secara hardware pin tersebut
di-mapping ke PORTB, bit 0 hingga 3. Ini dia contoh program pakai DPM ...

// Direct Port Manipulation


// membuat LED berjalan di D8-D11
// Atau setara dengan PORTB bit 0-3
// Dalam hal ini PORTB bit 4-7 tidak sedang dipakai
// jadi masih aman jika terkena dampak

void setup() {
// set mode pakai DDRB, tidak lagi pakai pinMode
// Jika bit 0 = input, 1 = output
DDRB = B00001111;

// menyalakan LED2 (bit 1) pakai fungsi bitSet


bitSet(PORTB, 1);
delay(1000);

// menyalakan LED4 dan LED1 sekaligus


PORTB = PORTB | B00001001;
delay(1000);

// mematikan LED4 dan LED2 sekaligus


// tanpa mengubah LED3 dan LED1
PORTB = PORTB & B11110101;
delay(1000);

// mematikan LED1 pakai fungsi bitClear


bitClear(PORTB, 0);
delay(1000);

// nyalakan semua LED sekaligus


// ini hanya aman kalau bit 4 -7 tidak dipakai
PORTB = B00001111;

Praktikum Laboratorium TF II Pengenalan Arduino - 25


delay(1000);
}

void loop() {
// lampu berjalan, geser ke kanan
PORTB = PORTB >> 1; // operasikan port langsung

// cek kondisi lampu, baca langsung dari port


if (PORTB == 0) {
PORTB = B00001000; // ubah port langsung
}

// delay saja
delay (1000);
}
Kode 15. Direct Port Manipulation

Lihat, enak sekali menuliskannya dibanding pakai digitalWrite bukan ? Waktu eksekusi juga
sekitar 40 kali lebih cepat. Namun seperti sudah diperingatkan, kode ini tidak akan jalan di Arduino
Mega atau galileo.

5.14 Struct
Selanjutnya dalam pemrograman, seringkali kita punya kumpulan data yang seharusnya merupakan
suatu kesatuan. Misalnya saja data posisi di kordinat kartesian (x,y) atau data mahasiswa (NIM,
nama). Pada kasus kita, data warna rgb juga sebaiknya diakses sebagai suatu kesatuan seperti
contoh berikut:

// mendefinikan struktur RGB dengan 3 field r, g, dan b


struct RGB {
byte r; // pesan field masing-masing warna
byte g; // awas, urutan field menentukan inisialisasi
byte b;
};

// Bila sudah membuat struct


// maka kita bisa memesan variabel dengan tipe struct itu
RGB kuning = {128,128,0}; // inisialisasi sesuai posisi
RGB cyan = ..........;
RGB ungu = ..........;

// sementara itu fungsi bisa menerima masukan struct


void rgbWrite(struct RGB w) {
analogWrite(PIN_R, 255-w.r); // akses memakai var.field
...........................;
...........................;

Praktikum Laboratorium TF II Pengenalan Arduino - 26


}

void loop(){
rgbWrite(kuning); // panggil subrutin pakai struct
...
}

Kode 16. Memakai subrutin dan struct untuk menyalakan led RGB

Latihan 9:
Lengkapi program pada kode 14 agar LED bisa berkedip kuning, cyan, ungu.

6 Tugas Akhir
Gali Language Reference lebih dalam, klik salah satu Arithmetic Operator (misal +). Anda akan
masuk ke halaman reference/Arithmetic.html. Simak baik-baik bagian Programming tips.
Dalam hubungannya dengan tipe data dan operator, jelaskan apa yang dimaksud dengan tip ini:

Know that integer constants default to int, so some constant calculations may overflow
(e.g. 60 * 1000 will yield a negative result).

Know at what point your variable will "roll over"and also what happens in the other
direction e.g. (0 - 1) OR (0 - - 32768).

For math that requires fractions, use float variables, but be aware of their drawbacks:
large size, slow computation speeds.
Tuliskan pendapat anda pada selembar kertas. Kumpulkan ke asisten saat praktikum selesai.

7 Referensi
http://arduino.cc/en/Reference/HomePage

http://arduino.cc/en/Tutorial/HomePage

http://arduino.cc/en/Main/Hardware

Praktikum Laboratorium TF II Pengenalan Arduino - 27

Anda mungkin juga menyukai