Modul Belajar Arduino Bersama UTHM 2019
Modul Belajar Arduino Bersama UTHM 2019
Apa mikrokontroller itu dan apa perbedaan antara mikroprosesor dan mikrokontroller?
Mikroprocessor adalah sebuah chip central processing unit (CPU) yang berdiri sendiri, sehingga
untuk bekerjanya microprocessor harus bersama-sama dengan komponen pendukung yang lain
yakni RAM/ROM, timer dan piranti input/output untuk membangun sebuah system yang disebut
dengan system mikroprosesor. Dalam system mikroprosesor, kita boleh menentukan sendiri
kapasitas ROM, RAM dan port-port I/O nya.
Arduino memiliki banyak jenis atau tipe diantaranya yang umum digunakan adalah Arduino
Tiny, Arduino Nano, Arduino UNO dan Arduino Mega (Gambar 4).
Pemilihan jenis Arduino tersebut tergantung dari keperluan, missal kita akan membangun
sebuah prototype hardware yang menyertakan banyak sensor, aktuator dan display maka boleh
dipilih Arduino jenis Mega. Dari sekian banyak jenis Arduino tersebut yang paling popular
digunakan terutama dikalangan pelajar dan mahasiswa adalah Arduino jenis Uno.
Serial
monitor
4. Input/Edit Area
5.Status Bar
Elemen-elemen dari kode program Arduino identik dengan bahasa pemrograman C++.
Untuk memprogram system mikrokontroller Arduino digunakan Arduino IDE (sketch) yang bisa
diunduh secara gratis di www.arduino.cc. Bahasa Pemrograman Arduino dapat dibagi dalam 3
kelompok utama:
1. Structure
2. Values (variables and constants) dan
3. Functions
Berikut penjelasan singkatnya.
Control Structure
No Instruksi Diskripsi
1. break Keluar dari loop
2. continue Melanjutkan ke putaran loop berikutnya tanpa memperhatikan
(mengeksekusi) instruksi-instruksi setelahnya.
3. do Instruksi do..while ini akan mengeksekusi statements terus menerus
<statements> (membuat loop) selama ekpresi di while bernilai True.
while
(ekspresi)
4. for ( syarat ) Untuk membuat pengulangan dengan persyaratan tertentu, Contoh
<statements> For (int i=0;i<10,i++)
Instruksi tersebut akan melakukan pengulangan statemen sebanyak 10x
5. goto Memaksa untuk eksekusi program menuju ke label tertentu
6. If ( Instruksi percabangan dimana bagian statemen akan dikerjakan jika dan
<condition>) hanya jika bagian condition bernilai “true”
{<statements>}
7. If Instruksi percabangan dimana bagian statement-1 akan dikerjakan jika
(<condition>) bagian condition bernilai “true”, dan akan mengerjakan statement-2 jika
{<statement-1>} bagian condition bernilai “false”
Else
{<statement-2>}
8. Return Untuk keluar (mengakhiri) dari suatu fungsi
9. Switch … case Mirip dengan instruksi percabangan if, hanya disini statement dari case
boleh lebih dari 1 atau banyak dan akan dieksekusi sesuai dengan
pernyataan dari switch.
10. While Untuk membuat loop. Bagian statements akan diulang terus menerus
(pernyataan) selama condition dari while bernilai true.
{ <statements>
}
Compound Operators
&= : compound bitwise and
*= : compound multiplication
++ : increment
+= : compound addition
-- : decrement
-= : compound subtraction
/= : compound division
^= : compound bitwise xor
|= : compound bitwise or
2. VARIABLES
Terkait dengan variable maka ada tipe atau jenis-jenis data (data types) dan juga konstanta
(constant). Tipe data dan konstanta dalam pemrograman Arduino banyak ragamnya seperti
disajikan dalam bentuk table berikut.
Function atau dalam bahasa Indonesia fungsi digunakan untuk mengendalikan board
Arduino dan melakukan berbagai komputasi. Kelompok fungsi yang paling penting dalam
pemrograman Arduino adalah fungsi untuk mengeluarkan (output) dan memasukkan (input) data
baik data digital maupun data analog.
Fungsi Input/Output
Arduino mempunyai 14 jalur (pin) digital yang bisa diset sebagai jalur masukan ataupun
jalur keluaran. Ke-14 pin tersebut diberi nomor urut mulai dari nomor 0 hingga 13. Dalam buku
ini diberi nama P0 .. P13. Untuk menset sebuah pin menjadi jalur keluaran (output pin) ataupun
masukan (input pin) digunakan fungsi pinMode(). Perhatikan cara penulisannya adalah case
sensitive artinya huruf besar dan huruf kecil mempunyai arti yang berbeda.
Contoh berikut ini akan menset pin nomor 7 dari Arduino Uno sebagai jalur keluaran dan pin
nomor 8 sebagai jalur masukan:
pinMode(7,OUTPUT);
pinMode(8, INPUT);
Fungsi digitalWrite()
Fungsi ini digunakan untuk mengeluarkan data digital (baca: bit) ke sebuah jalur (pin) digital
keluaran tertentu dari Arduino yang sudah diset sebelumnya. Data digital disini berupa sebuah
bit yang tentunya hanya ada 2 kemungkinan nilai (atau status) yakni bisa bernilai HIGH atau
LOW. Nilai atau status “HIGH” bisa diartikan sama dengan bernilai logic ”1” atau true atau
secara fisik identik dengan pin yang bersangkutan mengeluarkan tegangan 5 volt dc. Artinya jika
pin tersebut dihubungkan ke sebuah lampu led maka lampu led itu akan menyala. Sedangkan nilai
atau “LOW” adalah sebaliknya yakni sama dengan berlogic “0” atau false atau secara fisik pin
tersebut terhubung ke ground (bertegangan 0 volt).
Sintak dari fungsi digitalWrite():
nomor pin : nomor pin digital Arduino yang telah diset sebagai jalur keluaran
status : diisi HIGH (1) yang akan mengeluarkan tegangan 5 volt dc atau
LOW (0) yang akan mengeluarkan tegangan 0 volt.
Jika dijalankan maka akan berefek di pin 5 digital akan mengeluarkan tegangan 5 volt. Sehingga
jika pin 5 ini dihubungkan dengan lampu led, lampu akan menyala.
Fungsi digitalRead()
Fungsi ini kebalikan dari fungsi digitalWrite() yakni digunakan untuk membaca
data digital (bit) yang dimasukkan lewat sebuah pin digital Arduino yang sebelumnya telah diset
sebagai jalur masukan. Sintak fungsi digitalRead() ini adalah seperti berikut:
<variabel penampung> = digitalRead(<nomor pin>)
Variabel penampung adalah variabel bertipe integer yang digunakan untuk menerima dan
menampung hasil pembacaan data digital dari sebuah jalur masukan (pin nomor tertentu) yang
sudah diset sebelumnya dengan instruksi pinMode().
Contoh: int data = digitalRead(5);
Jika dijalankan, instruksi tersebut akan membaca data digital (status) dari pin no.5.
Fungsi analogRead()
Perhatikan Gambar 5, Arduino Uno memiliki 6 buah pin yang dapat digunakan sebagai
jalur input data analog. Keenam jalur (pin) analog tersebut diberi nomor: A0,A1,A2,A3,A4
dan A5. Di setiap pin input analog dari Arduino tersebut sudah ada fitur Analog to Digital
Converter (ADC) nya sehingga secara otomatis data analog yang di-input-kan ke pin tersebut
akan dikonversikan ke data digital. Tegangan input analog berkisar antara 0 hingga 5 volt yang
akan dikonversikan menjadi data digital (integer) mulai dari 0 sampai dengan 1023 (lebar data
digitalnya 10 bits).
Fungsi analogRead()ini digunakan untuk membaca data analog yang dimasukkan
lewat jalur (pin) analog dari Arduino. Sintak fungsi analogRead() ini adalah seperti berikut:
<variabel penampung> = analogRead(<nomor pin>)
Variabel penampung adalah variabel bertipe integer yang digunakan untuk menerima dan
menampung hasil pembacaan data analog yang sudah dikonversikan ke data digital dari sebuah
jalur masukan analog (pin analog nomor tertentu) .
Contoh: int data = analogRead(A0);
Jika dijalankan, instruksi tersebut akan membaca data analog dari pin analog input no. A0.
Parameter:
pin : nomor pin yang digunakan untuk keluaran. Tipe data: integer
value : the duty cycle, antara 0 (selalu off) dan 255 (selalu on). Tipe data yang
diijinkan: int
Contoh program:
void setup()
{
pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop()
{
val = analogRead(analogPin); // read the input pin
// analogRead values go from 0 to 1023,
// analogWrite values from 0 to 255
analogWrite(ledPin, val / 4);
}
Program diatas jika dijalankan maka kecerahan lampu led di pin 9 dapat dikendalikan
menggunakan potensiometer yang dihubungkan dengan pin analog A3.
Selanjutnya beberapa fungsi penunjang yang lain disajikan dalam bentuk table ringkasan
sebagai berikut.
Serial.begin()
Menset data rate dalam satuan bit per detik (baud) untuk transmisi data serial. Untuk komunikasi
menggunakan serial monitor dari Arduino IDE, pastikan untuk memakai salah satu dari daftar
baudrate yang ada dalam menu di sudut kanan bawah layar jendela serial monitor. Biasanya
digunakan baudrate 9600 bps atau 115200 bps.
Sintak:
Serial.begin(speed);
Dimana speed adalah kecepatan transfer (baudrate), biasanya 9600bps. Jadi bisa juga
ditulis:
Serial.begin(9600);
Serial.println()
Fungsi ini pada prinsipnya sama dengan Serial.print() yakni akan mencetak (menulis)
data ke port serial sebagai teks ASCII yang dapat dibaca oleh manusia, hanya dalam fungsi ini
diikuti oleh penulisan sebuah karakter carriage return (ASCII 13, atau „\r‟) dan sebuah karakter
baris baru (ASCII 10 atau „\n‟).
Sintak:
Serial.println(val);
dimana val adalah nilai yang akan ditampilkan (tipe data apapun).
void loop()
{
}
void setup()
{
pinMode(13,OUTPUT); // set pin 23 as Output pin
}
void loop()
{
digitalWrite(13,HIGH); // nyalakan led yg terhubung dgn pin 13
delay(1000); // selama 1000 msec
digitalWrite(13,LOW); // matikan led yg terhubung dgn pin 13
delay(1000); // selama 1000 msec
}
Tuliskan program berikut di Arduino IDE, kemudian verifikasi hingga tak ada kesalahan
program. Jalankan dengan mengupload ke Arduino. Lalu klik tombol serial monitor di Arduino
IDE untuk menampilkan jendela Serial Monitor. Perhatikan tampilan di jendela serial monitor .
void setup()
{
pinMode(13,OUTPUT); // set pin 23 as Output pin
Serial.begin(9600); // inisialisasi komunikasi serial (monitor)
// dengan baudrate 9600
}
void loop()
{
digitalWrite(13,HIGH); // nyalakan led yg terhubung dgn pin 13
Serial.println(“LED ON”); // tulis “LED ON” di serial monitor
delay(1000); // selama 1000 msec
digitalWrite(13,LOW); // matikan led yg terhubung dgn pin 13
Serial.println(“LED OFF”); // tulis “LED OFF” di serial monitor
delay(1000); // selama 1000 msec
}
Percobaan ke-4 dan seterusnya memerlukan beberapa alat dan bahan tambahan
diantaranya project board dan beberapa kabel jumper male-male dan male-female.
Untuk Percobaan meng-inputkan data ke Arduino ini diperlukan alat dan bahan sebagai berikut:
Mini push-button 1 buah
Resistor 2Kohm 1 buah
Resistor 220 ohm 1 buah dan
Lampu led 1.5-3V 1 buah .
220 ohm
2K ohm
void setup()
{
pinMode(pinled, OUTPUT); // set pin 13 sebagai keluaran
pinMode(pininput, INPUT); // set pin 2 sebagai masukan
}
void loop()
{
nilai= digitalRead(pininput); // baca pin status pin 2
5. Fade Out/In
Untuk melakukan Percobaan ke-5 ini diperlukan sebuah lampu led dan resistor bernilai
sekitar 200 ohm. Buatlah rangkaian seperti gambar berikut dengan bantuan project board dan
kabel male-male.
200 ohm
/*
Fade
This example shows how to fade an LED on pin 9 using the
analogWrite() function.
The analogWrite() function uses PWM, so if you want to change
the pin you're using, be sure to use another PWM capable pin.
On most Arduino, the PWM pins are identified with
a "~" sign, like ~3, ~5, ~6, ~9, ~10 and ~11.
This example code is in the public domain.
*/
void setup()
{
pinMode(ledpin, OUTPUT); // declare pin 9 to be an output
}
void loop() {
Verifikasi hingga tidak ada kesalahan program, lalu jalankan dengan mengupload program
tersebut ke Arduino. Amati nyala lampu led tersebut.
Pengayaan:
coba ganti nilai fadeAmount dan lama delay yang 30 msec. Amati apa yang terjadi dengan nyala
led.
This example code is cited from Arduino.cc (in the public domain).
*/
void setup()
{
Serial.begin(9600);
}
void loop()
{
// read the input on analog pin A5
int sensorValue = analogRead(A5);
// mapping the value into proper new value whatever you want
sensorValue = map(sensorValue,0,1023,0,255);
// print out the new value
Serial.println(sensorValue);
delay(10); // delay in between reads for stability
}
Verifikasi hingga tidak ada kesalahan program, lalu jalankan dengan mengupload program
tersebut ke Arduino. Lalu klik tombol serial monitor di Arduino IDE untuk menampilkan jendela
Serial Monitor. Putar-putar potensiometer ke kiri dan kenan. Perhatikan dan amati tampilan di
jendela serial monitor .
Pengayaan:
Aktifkan serial plotter dengan cara masuk ke menu Tools | Serial Plotter. Putar-putar lagi
potensiometer. Amati tampilan grafis di Serial Plotter.
Apa yang terjadi jika instruksi map(sensorValue,0,1023,0,255); diubah menjadi
map(sensorValue,0,1023,10,100);
Apa yang terjadi pada outputnya jika instruksi delay(10) di naikkan nilai delay nya?
Buatlah rangkaian seperti Gambar di atas. Ketikkan program dibawah ini di Arduino IDE
lalu verifikasi hingga tidak ada kesalahan. Jalankan program dengan mengupload di Arduino.
Putarlah potensiometer ke kiri atau ke kanan sambil diperhatikan nyala lampu led.
/*
This example shows how to fade an LED on pin 9
using the analogWrite() function.
It uses POTENSIOMETER attached to Pin A1
void setup() {
pinMode(led, OUTPUT); // declare pin 9 to be an output
Serial.begin(9600);
}
void loop() {
int pot = analogRead(A1);
pot = map(pot,0,1024,0,255);
Serial.print("Data Potensio : "); Serial.println(pot);
// set the brightness of LED at pin 9 range: 0-255:
8. ULTRASONIC sensor
Untuk percobaan ini diperlukan komponen modul sensor jarak ultrasonic jenis HC-SR04.
Kemudian buatlah rangkaian seperti gambar berikut.
void loop()
{
digitalWrite(7,LOW); // clear the triger pin
delayMicroseconds(10);
digitalWrite(7,LOW);
// read the echo pin, return the sound wave travel time
long duration = pulseIn(6,HIGH);
float distance = duration*0.034/2;
Serial.print("Distance (in Cm) = "); Serial.println(distance);
delay(2000);
}
Verifikasi hingga tidak ada kesalahan. Jalankan program dengan mengupload di Arduino.
Aktifkan jendela Serial Monitor. Amati tampilan yang ada di Serial Monitor.
Pengayaan:
Tempatkan sebuah obyek di depan sensor, lalu geser obyek tersebut menjauh dan mendekat dari
sensor. Amati perubahan jarak yang ditampilkan di Serial Monitor. Validasi jarak yang
ditampilkan di Serial Monitor dengan mengukur secara manual dengan penggaris jarak antara
sensor dan obyek.
9. DHT11 Sensor
Modul DHT11 adalah suatu sensor temperature/suhu dan kelembaban. Untuk membaca data
temperature dan kelembaban dari sensor DHT11 ini diperlukan library khusus yakni
SimpleDHT.h. Cara menginstallnya masuk ke menu Sketch | Include Library | Manage
Library..
Ketikkan DHT, lalu pilih SimpleDHT untuk diinstal. Jika sudah terinstal maka tampilan jendela
Library Manager-nya sebagai berikut.
#include <SimpleDHT.h>
SimpleDHT11 dht11(pinDHT11);
void setup() {
Serial.begin(9600);
delay(100);
Serial.println("Read temp & humidity data from DHT11");
Serial.println("====================================");
Serial.println("Start reading.....");
}
void loop() {
byte temperature = 0;
byte humidity = 0;
int err = SimpleDHTErrSuccess;
Sensor cahaya dengan LDR ini memiliki 2 jenis yakni (1) ada yang outputnya digital saja (0 :
jika ada cahaya, dan 1: jika tidak ada cahaya) dan (2) outputnya digital dan analog. Dalam contoh
ini digunakan yang outputnya 1 macam saja yakni output digital. Wujud fisik dari sensor cahaya
ini seperti gambar berikut.
void setup() {
pinMode(6,INPUT);
Serial.begin(9600);
}
Ketikkan progam diatas di Arduino IDE. Verifikasi hingga tidak ada kesalahan, lalu jalankan
dengan meng-upload di Arduino. Amati tampilan di layar monitor.
Secara umum, gambar skema motor stepper sederhana seperti berikut. Motor stepper
biasanya memiliki 4 buah pin input digital untuk mengendalikan arah dan kecepatan putaran.
Untuk menjalankan motor stepper tersebut ke arah kiri (berlawanan arah jarum jam) harus ada
perubahan tegangan (on-off) dari K1 ke K2, K2 ke K3, K3 ke K4, dan K4 ke K1 lagi, dst.
Kondisi on-off tiap koil ini bisa digambarkan dalam bentuk tabel sbb.
Step K1 K2 K3 K4
1 5 volt 0 0 0
2 0 5 volt 0 0
3 0 0 5 volt 0
4 0 0 0 5 volt
5 5 volt 0 0 0
6 0 5 volt 0 0
dst
Tabel di atas akan membuat motor stepper memutar ke (missal) kiri. Untuk membalik arah
putaran nya maka pola on – off koil-koilnya dibalik mulai dari K4, K3, K2, dst.
Apabila status on dan off-nya dari koil K1, K2, K3, K4 dikoneksikan dengan on-offnya Pin
digital D8,D9,D10, dan D11 dari sebuah mikrokontroller Arduino, maka program untuk
memutar motor stepper ke arah kiri (berlawanan arah dengan jarum jam).
Step A3 A2 A1 A0
1 0 0 0 1
2 0 0 1 0
3 0 1 0 0
4 1 0 0 0
5 0 0 0 1
6 0 0 1 0
... dst
20 1 0 0 0
void setup() {
pinMode(7,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop()
{
digitalWrite(8,HIGH);
delay(tH);
Jika dikehendaki ada sebuah saklar yang apabila dalam kondisi ditekan motor berhenti berputar
dan ketika kondisi dilepas, motor berputar terus.
void setup() {
pinMode(7,INPUT);
pinMode(8,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
Serial.begin(9600);
delay(100);
}
void stopRotate()
{
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
delay(10);
}
void LeftRotate()
{
digitalWrite(8,HIGH); digitalWrite(9,LOW);
digitalWrite(10,LOW); digitalWrite(11,LOW);
delay(t);
digitalWrite(8,LOW); digitalWrite(9,HIGH);
digitalWrite(10,LOW); digitalWrite(11,LOW);
delay(t);
digitalWrite(8,LOW); digitalWrite(9,LOW);
digitalWrite(10,HIGH); digitalWrite(11,LOW);
delay(t);
digitalWrite(8,LOW); digitalWrite(9,LOW);
digitalWrite(10,LOW); digitalWrite(11,HIGH);
delay(t);
}
void RightRotate()
{
digitalWrite(8,LOW); digitalWrite(9,LOW);
digitalWrite(10,LOW); digitalWrite(11,HIGH);
delay(t);
digitalWrite(8,LOW); digitalWrite(9,LOW);
digitalWrite(10,HIGH); digitalWrite(11,LOW);
delay(t);
digitalWrite(8,LOW); digitalWrite(9,HIGH);
digitalWrite(10,LOW); digitalWrite(11,LOW);
delay(t);
digitalWrite(8,HIGH); digitalWrite(9,LOW);
digitalWrite(10,LOW); digitalWrite(11,LOW);
delay(t);
}