Anda di halaman 1dari 46

1

Building with the “Arduino UNO R3 Starter Kit”


Pengenalan Arduino sudah built in dalam satu board. Oleh sebab itu kita
bisa fokus ke pengembangan sistem.
Apa itu Mikrokontroller?

Menurut wikipedia:

A microcontroller (sometimes abbreviated µC,


uC or MCU) is a small computer on a single
integrated circuit containing a processor core,
memory, and programmable input/output
peripherals.

Dalam diskusi sehari-hari dan di forum internet, Gambar 1.2 Project board dan Kabel Jumper
mikrokontroller sering dikenal dengan sebut µC, uC,
Untuk praktek, kita akan menggunakan project
atau MCU. Terjemahan bebas dari pengertian
board (ada yang menyebutnya dengan istilah bread
tersebut, bisa dikatakan bahwa mikrokontroller
board) dan beberapa kabel jumper untuk
adalah komputer yang berukuran mikro dalam satu
menghubungkan antara komponen dan Arduino
chip IC (integrated circuit) yang terdiri dari processor,
(Gambar 1.2). Dengan project board kita tidak perlu
memory, dan antar muka yang bisa diprogram. Jadi
menyolder rangkaian sehingga relatif mudah dan
disebut komputer mikro karena dalam IC atau chip
cepat dalam merangkai. Project board memungkinkan
mikrokontroller terdiri dari CPU, memory, dan I/O
kita untuk membangun dan membongkar rangkaian
yang bisa kita kontrol dengan memprogramnya. I/O
dengan cepat sehingga sangat cocok untuk
juga sering disebut dengan GPIO (General Purpose
eksperimen. Tapi jika kita ingin membuat rangkaian
Input Output Pins) yang berarti : pin yang bisa kita
yang permanen, maka kita harus menggunakan PCB.
program sebagai input atau output sesuai kebutuhan.

Gambar 1.3 Peta jalur pada project board

Yang terpenting adalah, kita harus memahami


jalur-jalur pada project board. Project board terdiri
dari jalur vertikal dan jalur horisontal. Jalur vertikal ada
di bagian tengah yang terdiri dari 2 x 64 jalur. Masing-
Gambar 1.1 Board Arduino Uno masing jalur terdiri dari 5 titik vertikal, misal jalur 1A-
1B-1C- 1D-1E dan jalur 1F-1G-1H-1I-1J yang kedua
Dalam ebook ini kita akan menggunakan board
tidak saling tersambung. Jalur horisontal sebanyak 8
Arduino Uno (Gambar 1.1). Board Arduino terdiri dari
jalur, 4 jalur ada di bagian atas dan 4 jalur lagi di bagian
hardware / modul mikrokontroller yang siap pakai dan
bawah. Jalur ini bisa digunakan untuk power supply
software IDE yang digunakan untuk memprogram
(VCC dan GND) untuk rangkaian. Untuk lebih jelasnya,
sehingga kita bisa belajar dengan mudah. Kelebihan
silakan perhatikan Gambar 1.3. Garis merah
dari Arduino yaitu kita tidak direpotkan dengan
menunjukkan bahwa lubang tersebut terhubung
rangkaian minimum sistem dan programmer karena
secara fisik.
Instalasi Arduino IDE

Anda bisa mendownload Arduino IDE di website


Arduino atau software yang telah disediakan di paket
CD. Software Arduino ada yang versi installer (hanya
untuk Windows) dan versi terkompres dalam zip. Jika
memilih versi tanpa install (format .zip), maka Anda
hanya perlu mengekstraknya di folder mana saja dan
Anda bisa langsung menjalankannya. Untuk pengguna
Windows, Anda bisa menginstall dengan mengikuti
instruksi dalam ebook ini.

Instalasi di Windows Tapi jika gagal, lanjutkan ke step selanjutnya.


1. Pasang board Arduino Anda ke port USB pada
komputer atau laptop, kemudian tunggu hingga 5. Anda harus install secara manual dari device
Windows mencoba untuk menginstall driver manager. Untuk masuk ke device manager, Anda
sendiri. Biasanya dia gagal menginstall driver jika bisa melakukannya dengan dua cara:
belum memiliki driver tersebut. (Silakan
lanjutkan ke step berikutnya)
2. Install Software Arduino IDE yang ada di paket
CD.
3. Jika anda menggunakan Arduino Versi SMD maka
masuk dulu ke step ini, jika menggunakan
Arduino versi DIP silahkan lewati.  Tekan tombol ("Windows" + R) secara
 Extract file CH340.rar yang ada di paket CD di bersamaan. Tombol "Windows" adalah
folder driver dan software tombol pada keyboard dengan logo Windows.
 Lalu instal seperti file biasa, maka akan tampil Setelah Anda menekan tombol "Windows" +
seperti gambar di bawah ini. R, maka akan muncul "Run", ketikkan
"devmgmt.msc" (tanpa tanda petik),
kemudian tekan tombol ENTER. Jika benar,
maka akan muncul window Device Manager.

 Klik install lalu tunggu hingga selesai.


 Jika Device Manager Anda sudah keluar, Anda
4. Jika berhasil, dan arduino terinisialisasi berarti
bisa lanjut ke point 4, jika tidak, coba cara
instalasi selesai. Maka ketika membuka device
berikut untuk menampilkan device manager.
manager akan tampil port arduino seperti berikut
 Klik Start - pilih Control Panel. Di dalam Tools > Board
Control Panel, pilih System and Security, lalu > Arduino UNO
pilih System. Selanjutnya pilih Device 4. Pilih port yang digunakan Arduino dengan cara
Manager. mengklik menu Tools > Ports > (pilih yang ada
Arduino-nya)
5. Klik tombol upload (tombol dengan panah ke
kanan)
6. Setelah berhasil diupload, akan muncul tulisan
"Done uploading" di bagian bawah. Jika berhasil,
maka LED dengan tulisan "L" pada board Arduino
akan kelap-kelip.
Arduino IDE

6. Pada Device Manager, perhatikan bagian Ports


(COM & LPT), akan muncul device baru dengan
nama "Arduino UNO (COMxx)"
7. Klik kanan pada "Arduino UNO (COMxx)",
kemudian pilih "Update Driver Software".
8. Selanjutnya pilih "Browse my computer for Driver
software".

Arahkan lokasi tempat penyimpatan instalan


menuju C:\Program Files (x86)\Arduino\drivers,
Pastikan check box include subfolder dicentang.
Kilk NEXT untuk melanjutkan proses instalasi. Setelah itu
restart lalu buka hubungkan kembali arduino, cek di Untuk memprogram board Arduino, kita butuh
device manager apakah sudah berhasil terinstall. aplikasi IDE (Integrated Development Environment)
1. Selanjut mari kita coba untuk mengupload bawaan dari Arduino. Aplikasi ini berguna untuk
sampel code yang ada pada software Arduino membuat, membuka, dan mengedit source code
2. Jalankan Aplikasi Arduino (arduino.exe), pada Arduino (Sketches, para programmer menyebut
pojok kanan bawah akan ada tulisan "Arduino source code arduino dengan istilah "sketches").
UNO on COMxx". Berarti port yang digunakan Selanjutnya, jika kita menyebut source code yang
Arduino adalah COMxx, jika tulisan tersebut tidak ditulis untuk Arduino, kita sebut "sketch". Sketch
muncul, berarti instalasi driver belum berhasil merupakan source code yang berisi logika dan
atau board Arduino belum disambungkan ke algoritma yang akan diupload ke dalam IC
komputer. Selanjutnya, silakan buka sampel led mikrokontroller (Arduino).
flip-flop dengan cara Klik menu File > Examples > Interface Arduino IDE seperti gambar diatas dari
1.Basic > Blink kiri ke kanan dan atas ke bawah, bagian-bagian IDE
3. Setting board Arduino dengan cara : Klik menu Arduino terdiri dari:
 Verify : pada versi sebelumnya dikenal dengan
istilah Compile. Sebelum aplikasi diupload ke board
Arduino, biasakan untuk memverifikasi terlebih
dahulu sketch yang dibuat. Jika ada kesalahan pada
sketch, nanti akan muncul error. Proses Verify /
Compile mengubah sketch ke binary code untuk
diupload ke mikrokontroller
 Upload : tombol ini berfungsi untuk mengupload
sketch ke board Arduino. Walaupun kita tidak
mengklik tombol verify, maka sketch akan di-
compile, kemudian langsung diupload ke board.
Berbeda dengan tombol verify yang hanya
berfungsi untuk memverifikasi source code saja.
 New Sketch : Membuka window dan membuat
sketch baru
 Open Sketch : Membuka sketch yang sudah pernah
dibuat. Sketch yang dibuat dengan IDE Arduino
akan disimpan dengan ekstensi file .ino
 Save Sketch : menyimpan sketch, tapi tidak disertai
mengcompile.
 Serial Monitor : Membuka interface untuk
komunikasi serial, nanti akan kita diskusikan lebih
lanjut pada bagian selanjutnya
 Keterangan Aplikasi : pesan-pesan yang dilakukan
aplikasi akan muncul di sini, misal "Compiling" dan
"Done Uploading" ketika kita mengcompile dan
mengupload sketch ke board Arduino
 Konsol : Pesan-pesan yang dikerjakan aplikasi dan
pesan-pesan tentang sketch akan muncul pada
bagian ini. Misal, ketika aplikasi mengcompile atau
ketika ada kesalahan pada sketch yang kita buat,
maka informasi error dan baris akan
diinformasikan di bagian ini.
 Baris Sketch : bagian ini akan menunjukkan posisi
baris kursor yang sedang aktif pada sketch.
 Informasi Port : bagian ini menginformasikan port
yang dipakah oleh board Arduino.
akan Anda gunakan harus langsung sesuai
ARDUINO PROGRAMMING arah matematika contoh 0-1 atau 0 - - 32768
1. Addition, Subtraction, Multiplication, & Division  Untuk pemrograman yang memerlukan
Diskripsi pecahan, gunakanlah vaiabel float, tapi perlu
Operasi ini memberikan hasil penambahan, disadari hal ini mempunyai kelemahan
pengurangan, pembagian dan perkalian dari dua dalam memiliki ukuran yang besar dan
operan. Operasi adalah pengaturan menggunakan dua kecepatan komputasi yang rendah
tipe data dalam operan seperti 9/4 adalah 2 dimana 9  Gunakanlah operasi penglihan seperti
dan 4 adalah intejer. Selain itu bisa juga diartikan (int)myFloat untu merubah sebuah variable
operasi tersebut merupakan dapat menangani hasil menjadi variable lain yang belum kita
yang mempunyai range dalam sebuah tipe data ( 1 ketahui.
intejer mempunyai nilai 32,767 sampai -32,768). Jika
beberapa operan mempunyai perbedaa tipe data yang 1.1 assignment operator (single equal sign)
“besar” yang digunakan untuk perhitungan. Salah satu Menyimpan nilai variable sebelah kanan ke dalam
operan yang digunaka adalah tipe float atau tipe variable sebelah kiri. Single equal sign dalam
double, floating point dapat digunakan untuk pemrograman C adalah pemanggilan operator tugas
penghitungan (assignment operator). Hal ini berbeda dengan kelas
aljabar yang mengindikasikan persamaan atau
Contoh penyamaan. Operator penugasan ini memberitahu
y = y + 3; mikrokontroler untuk mengevaluasi nilai apapun atau
ekspresi yang berada di sebelah kanan dan
x = x - 7;
menyimpannya ke dalam variable sebelah kiri.
i = j * 6;
r = r / 5;
Contoh
int sensVal; // mendeklarasikan sensVal
Syntax sebagai variable //intejer
result = value1 + value2;
senVal = analogRead(0); // menyimpan
result = value1 - value2; (dijitasi) voltase //yang masuk pada
result = value1 * value2; analog pin ke 0 dalam sensVal
result = value1 / value2;
tips pemrograman
Variable yang ada di sebelah kiri dari assignment
Parameter
operation (= sign) dibutuhkan untuk digunakan
Value1 : merupakan variable atau konstan
menjaga nilai yang sudah tersimpan di dalamnya.
Value2 :merupakan variable atau konstan Tips
Jika hal itu tidak cukup besar untuk menangani
pemrograman :
sebuah nilai, nilai yang sudah tersimpan di variable
 Ketahui bahwa integer constan default untuk tersebut akan menjadi salah. Jangan terkecoh
int sehingga beberapa konstanta
dengan assignment operator [=] (sama dengan)
penghitungan bisa overflow (60*1000 akan
dengan operator komparasi [==] (dobel sama
menghasilkan hasil yang negative)
dengan) yang mengevaluasi dua ekspresi menjadi
 Pilih besaran variable yang besarnya cukup hasil.
untuk menangani hasil dari penghitungan
Anda
 Ketahui bahwa tanda operasi bilangan yang
2. TIPE DATA var – nama variable unsigned Anda
2.1 Int val – nilai yang berada dalam variable tersebut.
Intejer merupakan tipe data yang utama dari macam
Tips Coding
penyimpanan dan terdiri dari 2 nilai byte. Mempunyai
Ketika membuat variable yang melebihi kapasitas, maka
range dari -32,768 sampai 32,762 (nilai minimal adalah
akan membalik ke kapasitas minimum
-2^15 dan nilai maksimal (2615)-1 )

unsigned int x
Contoh
int ledPin = 13; x = 0;
x = x - 1; // x sekarang 65535

Syntax x = x + 1; // x sekarang 0
Int var = val;
2.3 Word
var – nama variable intejer Anda
Sebuah word menyimpan 16 bit angka dari 0 sampai
val – nilai yang diberikan dalam variable Anda
65535 sama seperti unsigned int
Contoh
Tips Coding
word w = 10000;
Saat beberapa variable dibuat untuk melebihi kapasitas
maksimal, maka nilai tersebut akan membalik ke 2.4 byte
minimal kapasitas, begitu juga sebaliknya. byte menyimpan sebuah 8-bit dari 0 samapi 255

Contoh
int x
byte b = B10010; // "B" is the binary
x = -32,768; formatter (B10010 = 18 decimal)
x = x - 1; // x sekarang menjadi 2.5 float
//32,767 – berbalik ke arah negatif.
Tipe data untuk angka floating point, sebuah angka
yang mempunyai titik decimal. Floating-point sering
x = 32,767; dugunakan pada nilai yang mendekati analog dan nilai
yang berkesinambungan karena mempunyai resolusi
x = x + 1; // x sekarang menjadi yang lebih tinggi dari pada intejer. Floating-point
//32,768 – berbalik kea rah positif
mempunyai besar 3.4028235E+38 dan -
3.4028235E+38. Sehingga dapat menyimpan 32bit
2.2 Unsigned Int (4byte. ) informasi.
Unsign int sama seperti int, namun dalam pemberian Float hanya mempunyai kepresisian 6 – 7 dijit
angka negative tidak diperkenankan, sebagai gantinya decimal. Yang maksudnya total angka dari dijitnya
nilai negative digantikan nilai positif sehingga bukan angka dari titik kanan setelah decimal. Tidak
mempunyai range 0 sampai 65,535 (2^16)-1). seperti platform, dimana Anda dapat mendapatkan
Contoh akurasi dari penggunaan tipe data double (sampai 15
unsigned int ledPin = 13; dijit) dalam arduino, double adalah besarnya sama
seperti float.
Syntax
Angka Floating-point belum tentu tepat, dan bisa
unsigned int var = val;
menghasilkan hasil yang tidak biasa saat di komparasi.
Seperti misalkan 6.0 / 3.0 hasilnya mungkin bukan 2.0 // see Integer Constants for explanation
Anda harus mengganti dan mengecek nya karena nilai of the 'L'
absolute berbeda dengan angka yang memiliki Syntax
ketelitian.
long var = val;

Contoh 2.8 Unsigned Long


Unsigned Long adalah variable yang mempunyai lebar
float myfloat;
32bit dan tidak seperti long, unsigned long tidak dapat
float sensorCalbrate = 1.117; menyimpan angka negative, mempunyai range antara 0
sampai 4,294,967,295 (2^32 – 1).
Syntax
float var = val; Contoh
var – nama variable Anda val – nilai yang diberikan unsigned long time;
Contoh Kode void setup()
int x; {
int y; Serial.begin(9600);
float z; }
void loop()

x = 1; {

y = x / 2; // y sekarang 0, int tidak Serial.print("Time: "); time =


dapat mengani nya millis();

z = (float)x / 2.0; // z sekarang .5 //mencetak waktu saat program


(Anda memiliki hasil 2.0, bukan 2) dijalankan Serial.println(time);

2.6 double // besaran waktu tunggu saat tidak


mengirim sejumlah data delay(1000);
Dalam Arduino, Double sama seperti float namun
memiliki kepresisian yang sedikit berbeda. }
Tips Syntax
Pengguna yang membawa kode dari source code dari
unsigned long var = val;
luar yang didalamnya terdapat variable double lebih
baik diuji terlebih dahulu untuk mengetahui perbedaan 2.9 Boolean
ketepatan yang terdapat pada Arduino. Boolean menangani dua nilai yaitu true atau false
2.7 Long sedangkan variable menempati satu byte dari memori.
Variable long adalah variable yang mempunyai Contoh
penyimpanan angka yang lebar yaitu 32 bit (4byte) dari int LEDpin = 5; // LED pada pin 5
-2,147,483,648 sampai 2,147,487,483,647 int switchPin = 13;
Contoh
//saat switch terpasang pada pin 13,
long speedOfLight = 186000L;
yang lain //terkoneksi pada ground
boolean running = false;
void setup() char myChar = 65;
{ // both are equivalent
pinMode(LEDpin, OUTPUT);
pinMode(switchPin, INPUT);
2.11 Unsigned Char
digitalWrite(switchPin, HIGH);
Tipe data yang membutuhkan 1 byte dari memori.
// menghidupkan pullup resistor Sepeti pada tipe data byte, unsigned char mempunyai
panjang 0 sampai 255.
}
Dalam Arduino, tipe data ini jarang digunakan
Contoh
void loop() unsigned char myChar = 240;
{
if (digitalRead(switchPin) == LOW) 2.12 Arrays
Array adalah kumpulan dari beberapa variable yang saling
{
berkaitan dengan sebuah nomer indeks.
// switch ditekan - pullup membiarkan Membuat (deklarasi) sebuah Array
//pin high normally Dibawah ini adalah membuat sebuah metode array yang
benar.
delay(100); // delay untuk switch
int myInts[6];
running = !running;
int myPins[] = {2, 4, 8, 3, 6};
// toggle variable running
int mySensVals[6] = {2, 4, -8, 3, 2}; char
digitalWrite(LEDpin, running)
message[6] = "hello";
// indikasi via LED
} Anda dapat mendeklarasikan aray tanpa
menginisialisasikan nya seperti dalam myInts.
}
Mengakses sebuah array
2.10 Char Array merupakan zero indexed yang menunjuk pada
Sebuah tipe data yang mengambil 1 byte memori untuk array yang telah diinisialisasi sebelumnya, elemen
menyimpan nilai karakter. Karakter huruf tertulis pertama dari array adalah indeks ke 0
mySensVals[0] == 2,
dalam tanda kutip satu seperti „A‟ (untuk karakter
yang banyak, menggunakan tanda petik dua : “ABC”). mySensVals[1] == 4, dan sampai ke empat.
Anda dapat melihat encoding yang lebih spesifik dalan
ASCII CHART. Ini dimaksudkan dapat memungkinkan Seperti halnya array dengan 10 elemen, indek 9 adalah
untuk menjalankan aritmatika dalam nilai ASCII yang elemen terahir
menggunakan karakter misalkan „A‟ +1 memiliki nilai
66, karena nilai ASCII dari huruf A adalah 65. int myArray[10]={9,3,2,4,3,2,7,8,9,11};

// myArray[9] contains 11
Tipe dara char adalah angka encoding dari -128 sampai
127 //myArray[10] is invalid and contains
random information (other memory address)
Contoh
char myChar = 'A';
Tidak seperti BASIC atau JAVA, dalam compiler C tidak // ...
mengecek untuk mengetahui jika akses array sudah }
sesuai batas besaran array yang Anda deklarasikan
sebelumnya. 2.14 string
Text string dapat dituliskan ke dalam dua cara, Anda
Sebuah penugasan dalam sebuah array dapat menggunakan tipe data String yang merupakan
mySensVals[0] = 10; bagian dari dasar versi 0019, atau Anda dapat
untuk mendapatkan sebuah nilai dari array menggunakan sebuah string luar dari sebuah array tipe
x = mySensVals[4]; char dan null-terminatenya.

Array dan perulangan OR Contoh


Array dapat dimanipulasikan dalam perulangan for, char Str1[15];
dimana penghitungan perulangan digunakan sebagai char Str2[8] = {'a', 'r', 'd', 'u',
indeks pada beberapa elemen array. Seperti contoh 'i', 'n', 'o'};
untuk mencetak beberapa elemen sebuah array pada
char Str3[8] = {'a', 'r', 'd', 'u',
serial port, Anda dapat melakukan sesuatu seperti 'i', 'n', 'o', '\0'};
berikut :
char Str4[ ] = "arduino"; char Str5[8]
int i; = "arduino"; char Str6[15] =
"arduino";
for (i = 0; i < 5; i = i + 1) {
Serial.println(myPins[i]);

}
kemungkinan – kemungkinan untuk deklarasi
srting
2.13 Void  deklarasi sebuah array dari chars tanpa
Kata kunci void hanya digunakan dalam inisialisasi seperti dalam Str1
mendelarasikan fungsi. Hal ini untuk mendandakan  deklarasi sebuah array dari chars (dengan
bahwa fungsi itu diharapkan untuk memberi informasi satu extra char) dan compiler akan
dari fungsi yang telah dipanggil. menambah karakter null seperti dalam Str2
Contoh  menambahkan karakter null secara lagsung,
// actions are performed in the Str3
functions "setup" and "loop"  inisial dengan sebuah konstanta string dalam
tanda kutipan, compiler akan menghitung
// but no information is reported
lebar konstanta array untuk panjang
to the larger program
kontanta string dan sebuah pengahiran
void setup() karakter null, Str4
{  inisial array dengan menuliskan besar dan
konstanta string, Str5
// ...
 inisial array, memberi ruang ekstra untuk string
} yang lebih besar, Str6
2.14.1 Ahiran Null
Biasanya, banyak string yang diahiri dengan
void loop() sebuah karakter null (kode ASCII 0). Hal ini
{ membolehkan fungsi (seperti Serial.print() ) untuk
memanggil diahir string. Selain itu, meraka akan
melanjutkan pembacaan byte subskuen dari memori 4 Penghitungan
yang bukan merupakan bagian dari string. Hal ini 4.1 abs(x)
dimaksud saat Anda membutuhkan string yang Menghitung nilai absolute dari sebuah cacah
memiliki ruang untuk karakter yang lebih banyak dari
teks yang anda inginkan. Ini kenapa Str2 dan Str5 Parameter
membutuhkan 8 karakter sedangkan “arduino” hanya
x : cacah perhatian
7, posisi yang terahir secara otomatis akan ditempai
oleh karakter null.Str4 akan otomatis sebesar 8 karena tentang abs() berfungsi untuk penerapan, hindari
karakter, satu dari external null. Dalam Str3, kami penggunaan fungsi yang terdapat tanda kurang, hal akan
mempunyai penyertaan karakter null secara explicit. menghasilkan hasil yang salah
abs(a++); // avoid this - yields incorrect
2.14.2 Menyatukan string yang panjang results
Anda dapat menyatukan string yang panjang
a++; // use this instead -
seperti berikut :
abs(a);// keep other math outside the
char myString[] = "This is the first line" //function
“second line”
constrain (x,a,b)
2.14.3 Array dari string contrain merupakan angka batasan dalam sebuah
char* myStrings[]={"This is string 1", range
"This is string 2", "This is string 3",

"This is string 4", "This is string parameter


5","This is string 6"}; x : angka dari contrain ; semua tipe data
void setup(){ Serial.begin(9600); a : batas bawah dari range; semua tipe data b : batas
atas dari range; semua tipe data
}
kebalikan
void loop(){ x : jika x diantara a dan b a : jika x lebih kecil dari a b :
for (int i = 0; i < 6; i++) jika x lebih dari b

{
Contoh
Serial.println(myStrings[i]); sensVal = constrain(sensVal, 10, 150);
// batas range dari nilai sensor antara 10
delay(500);} //dan 150

3 String
4.2 map(value, fromLow, fromHigh, toLow,
Kelas String, bagian dari dasar versi 0019,
membolehkan kita memanipulasi string dari teks lebih
toHigh)
komplek dari cara array karakter yang digunakan. Anda Memetakan ulang sebuah angka dari sebuah range ke
dapat menggabungkan String, menambahkannya yang lainnya. Ini adalah sebuah nilai dari fromLow yang
mencari dan megganti substring dan sebagainya. Hal itu sudah dipetakan ke toLow, sebuah nilai dari fromHigh
lebih banyak mengambil memori dari pada array yang pada toHigh.
sederhana. Contoh
y = map(x, 1, 50, 50, 1);

fungsi ini juga menangani angka negative


y = map(x, 1, 50, 50, -100);
Contoh Contoh
/* Map an analog value to 8 bits (0 to
int buttonPin = 3;
255) */ void setup() {}
void setup()
void loop()
{
{
Serial.begin(9600); pinMode(buttonPin, INPUT);
int val = analogRead(0);

val = map(val, 0, 1023, 0, 255); }


analogWrite(9, val);
void loop()
}
{
Catatan tambahan
//
Untuk penghitungan matematika, berikut adalah ...
fungsinya
}
long map(long x, long in_min, long
in_max, long out_min, long out_max)
5.2 loop()
{ Setelah membuat fungsi setup (), yang harus
return (x - in_min) * (out_max - out_min) dilakukan adalah menginisialisasi dan mengeset nilai
/ (in_max - in_min) + out_min; inisial dari fungsi loop() dengan tepat apa nama yang
} akan diberikan. Gunakan ini untuk mengaktifkan board
Arduino.
4.4 min(x,y) Contoh
Menghitung minimum dari dua angka int buttonPin = 3;
sensVal = min(sensVal, 100); // setup initializes serial and the button
pin void setup()
// assigns sensVal to the smaller of
//sensVal or 100 {

// ensuring that it never gets above 100. beginSerial(9600); pinMode(buttonPin,


INPUT);
//max() juga ikut digunakan untuk
//konstrain yang lebih rendag dari }
//variable range, sedangkan min()
//digunakan untuk konstrain yang mempuyai // loop checks the button pin each time,
//range lebih tinggi. // and will send serial if it is pressed
sensVal = max(senVal, 20); // assigns void loop()
sensVal to the larger of sensVal or 20
{
5 Struktur
if (digitalRead(buttonPin) == HIGH)
5.1 setup() serialWrite('H');
Fungsi setup() untuk memulai sketsa
else
pemrograman, inisilaisasi variable, pin mode, memulai
menggunakan library dan lainnya. Fungsi setup akan serialWrite('L');
dijalankan sekali setelah arduino dihidupkan atau di delay(1000);
reset.
}
yang mempunyai inputan kurang dari 500 dan yang lain
6 Control Sructure beraksi jika inputan tersebut > 500, maka kodenya
6.1 IF dapat dituliskan sebagai berikut
If yang digunaan dalam imbuhan dengan operator
if (pinFiveInput < 500)
pembanding.
{
Format untuk if :
// action A
if (someVariable > 50)
{ }
// bisa digunakan untuk statemen yang
else
lain
} {

// action B
Untuk cara lain, statemen if selalu dalam keadaan true
}
if (x > 120) digitalWrite(LEDpin, HIGH);

if (x > 120) digitalWrite(LEDpin, HIGH); Else juga dapat digunakan secara bertingkat sampai
if (x > 120){ digitalWrite(LEDpin, dengan tak terhingga selama proses yang kita
HIGH); } inginkan belum menyatakan sebuah kebenaran atau
if (x > 120)
berlogika true, berikut contoh kodenya
if (pinFiveInput < 500)
{
{
digitalWrite(LEDpin1, HIGH);
// do Thing A
digitalWrite(LEDpin2, HIGH);
}
}
else if (pinFiveInput >= 1000)
// semua dianggap benar
{
6.2 Comparison Operators // do Thing B
x == y (x sama dengan y)
}
x != y (x tidak sama dengan y)
else
x < y (x lebih kecil dari y)
{
x > y (x lebih besar dari y)
// do Thing C
x <= y (x lebih kecil sama dengan y)

x >= y (x lebih besar sama dengan y) }

6.3 IF/ELSE 6.4 Switch/case


Struktur if/else membeikan kita control yang lebih Seperti halnya if statemen, switch…case
besar untuk menangani berbagai statement megontrol alir dari program yang membolehkan
dibandingkan dengan statemen dasar if. Jadi struktur if beberapa parameter yang berbeda untuk dieksekusi
else merupakan gabungan pernyataan if bersaang yang dalam kondisi yang bervariasi.
membolehkan logika ya atau tidak. Untuk contoh,
sebuaah input analog dapat mengerjakan sebuah aksi
Contoh int PWMpin = 10; // LED in series with 470
switch (var) { case 1: ohm resistor on pin 10
//do something when var equals 1 break;
case 2:
void setup()
//do something when var equals 2 break;
default: {
// if nothing else matches, do the // no setup needed
default
// default is optional }
} void loop()

{
Syntax
switch (var) { for (int i=0; i <= 255; i++){
case label: analogWrite(PWMpin, i);

// statements break; delay(10);


case label:
}
//statements
break; }
default:
// statements
} Tips
Dalam C, statemen for sangat fleksibel disbanding
break selalu ada dalam statemen case, dan digunakan untuk
dengan for yang ada pada BASIC. Beberapa diantaranya
ahiran dari bermacam macam case, tanpa statemen break,
dalah elemen header bisa saja dihilangkan, namun
statemen swich akan terus dijalankan sesuai ekpresi tanpa
henti (“falling- through”) sampai menemukan statemen
tanda titik koma harus tetap disertakan.
break atau sampai satemen swich ditutup.
for(int x = 2; x < 100; x = x * 1.5){
println(x);
6.5 For }
Pernyataan for digunakan untuk mengulang sebuah menghasilkan: 2,3,4,6,9,13,19,28,42,63,94
blok statemen yang terus berputar. Biasanya, Contoh lain
pernyataan for digunakan untuk mengkombinasikan
sebuah array dalam menyatakan sebuah pin atau data.
void loop()
Berikut header untuk perulangan for :
{

for (initialization; condition; increment) { int x = 1;


//statement(s);
} for (int i = 0; i > -1; i = i + x){
analogWrite(PWMpin, i);

Inisialisasi dilakukan pertama dan sekali saja. Condition if (i = 255) x = -1;


adalah berapa kali kita akan melakukan looping, // switch direction at peak
increment adalah menunjukan bahawa looping akan delay(10);
dijalankan secara bertingkat.
}
Contoh :
// Dim an LED using a PWM pin }
6.3 while while (x < 100);

While akan melakukan perulangan secara


kontinyu dan tidak terbatas samapi ekspresi tersebut
6.8 break
menemukan kembali parenthesisnya, () menjadi false.
break digunakan untuk mengahiri perulangan dari
Biasanya digunakan untuk mengetes sebuah sensor
do, for atau while. Dan juga digunakan untuk
karena perulangan ini tak akan berahir sampai adanya
mengahiri statemen switch.
kondisi eksternal yang meutupnya
Syntax Contoh
while(expression) for (x = 0; x < 255; x ++)
{
// statement(s) {
}
digitalWrite(PWMpin, x);

sens = analogRead(sensorPin);
Parameters
expression - (boolean) statemen C mengoreksi true if (sens > threshold){ // bail out
atau false on sensor detect x = 0;

break;
Contoh }
var = 0;
delay(50);
while(var < 200){ //mengulang sesuatu
sampai 200 kali var++; }

6.9 goto
6.4 do-while Untuk melompati alur program ke program yang
Perulangan do bekerja seperti cara while sudah kita beri label.
melakukan perulangan, perulangan do hanya Syntax label:
mengerjakan sekali di ahir statemen.
do goto label; // mengrirm alur ke program yang telah
diberi label.
{
Tips
//statement block
Dalam menggunakan goto, adalah tidak lazim dalam
}
pemrograman C. beberapa buku memberikan gambaran
while (test condition); bahwa statemen goto justru akan mengganggu jalannya
alur program, karena tidak bisa stemen yang ada didalam
goto tidak dapat dikenali dan tidak dapat di debug,
Contoh sehingga hasilnya pun tidak bisa kita ketahui. Berikut
do contoh programnya:

{ for(byte r = 0; r < 255; r++){

delay(50); // wait for sensors to for(byte g = 255; g > -1; g--){


stabilize x = readSensors(); // check
for(byte b = 0; b < 255; b++){
the sensors

}
if (analogRead(0) > 250){ goto }
bailout;}

// more statements ...


7 FUNCTION
} 7.1 pinMode()
} Digunakan untuk mengkonfigurasi pin secara
spesifik sebagai sebuah intputan atau outputan.
}
Syntax
6.10 bailout pinMode(pin, mode)
Mengahiri sebuah fungsi dan mengembalikan sebuah
nilai dari sebuah fungsi tersebut untuk memanggil Parameters
fungsi yang lain jika diinginkan. pin: set nomer pin mode mode: INPUT or OUTPUT
Syntax:
return; return value;
contoh
int ledPin = 13; // LED terkoneksi pada
digital pin 13
Contoh void setup()
sebuah fungsi untuk membandingkan inputan
sebuah sensor kepada sebuah threshold {

pinMode(ledPin, OUTPUT);
int checkSensor(){
// set digital pin sebagai output
if (analogRead(0) > 400) { return 1;
}
else{

return 0; void loop()


} {
} digitalWrite(ledPin, HIGH); // set
LED on
6.11 continue
Statemen countinue membiarkan atau delay(1000);
melanjutkan penghentian perulangan (do, for atau
// waktu tunggu
while). Digunakan untuk melanjutkan pada dalam second
pengecekan sebuak ekspresi kondisi dari loop dan digitalWrite(ledPin
memprosesnya dengan beberapa subsequent yang ,
berulang ulang. LOW);

// set LED off


Contoh
for (x = 0; x < 255; x ++) delay(1000); //
waktu tunggu dalam second
{
}
if (x > 40 && x < 120){
7.2 digitalWrite()
// create jump in values continue;
Menulisakan logika HIGH atau LOW pada pin
} dijital. Jika pin telah dikonfigurasi sebagai OUTPUT
digitalWrite(PWMpin, x); delay(50); dengan pinMode(), itu berarti arus akan diset dengan
nilai 5V(atau 3.3V dalam board) untuk HIGH, 0V Parameters
(ground) untuk LOW. pin: nomer dari digital pin yang ingin dibaca (int)
Jika pin dikonfigurasi sebagai INPUT, maka
penulisan logika HIGH dengan digitalWrite() akan Contoh
membutuhkan sebuah resistor pullup internal 20K int ledPin = 13;
.penulisan LOW akan mendisable pullup nya. Pullup // LED terkoneksi pada digital pin 13 int
resistor cukup untuk menyalakan LED dengan redup, inPin = 7;
jadi jika LED bekerja namun samar, maka harus
// pushbutton terkoneksi digital pin 7 int
memperbaiki set pin ke output dengan fungsi val = 0;
pinMode()
// variable to store the read value

Syntax void setup()


digitalWrite(pin, value) {

pinMode(ledPin, OUTPUT);
Parameters
pin: nomer pin // set digital pin 13 sebagai output
value: HIGH or LOW pinMode(inPin, INPUT);

// set digital pin 7 sebagai input


Contoh
int ledPin = 13; // LED connected to }
digital pin 13

void setup()
void loop()
{
{
pinMode(ledPin, OUTPUT);
val = digitalRead(inPin); // baca input
// sets the digital pin as output pin

} digitalWrite(ledPin, val);

// set LED untuk nilai pada button


void loop()
}
{
Set pin 13 seperti nilai dari pin 7 yang menjadi
digitalWrite(ledPin, HIGH); // sets the inputan. Jika pin tidak terkoneksi pada digitalRead()
LED on delay(1000); // waits for a maka dapat dikembalikan pada HIGH atau LOW dan
second digitalWrite(ledPin, LOW); //
dapat berganti secara acak.
sets the LED off delay(1000); // waits
for a second Input pin analog dapat digunakan sebagai digital pin,
} tertunjuk sebagai A0, A1, dsb.

7.3 digitalRead() 8 ANALOG I/O


Membaca nilai dari spesifikasi digital pin yang 8.1 analogReference(type)
bernilai HIGH atau LOW. Fungsi ini digunakan untuk mengkonfigurasi
Syntax voltase acuan yang digunakan untuk input analog,
digitalRead(pin) sebagai pilihannya :
 DEFAULT : default acuan analog sebesar 5V
(dalam 5V Arduino board) atau 3.3 V (dalam sebagai int (0 sampai 1023) .
3.3V board Arduino)
 INTERNAL : sebuah acuan built-inn sama Contoh
dengan 1.1V dalam ATmega168 atau int analogPin = 3;
ATmega328 dan 2.56V pada ATmefa8 (tidak // potentiometer wiper (middle terminal)
terdapat pada Arduino Mega) / / connected to analog pin 3
 INTERNAL1V1 : acuan built-in 1.1V (hanya Arduino
// outside leads to ground and +5V
Mega)
 INTERNAL2V56: acuan built-in 2.56V (hanya int val = 0;
Arduino Mega) // variable to store the value read
 EXTERNAL : voltase yang digunakan pada pin AREF
void setup()
Parameters
type: acuan yang digunakan (DEFAULT, INTERNAL, {
INTERNAL1V1, INTERNAL2V56, atau EXTERNAL). Serial.begin(9600);

// setup serial
Setelah mengganti acuan analog, pembacaan pertama
pada analogRead() mungkin idak bisa akurat. Jika Anda }
menggunakan acuan voltase external (digunakan untuk
pin AREF), Anda harus mennyeting acuan analog pada
void loop()
EXTERNAL sebelum memanggil analogRead(). selain
itu, Anda bisa mengaktifkan acuan voltase bersamaan {
(internally generated) dan pada pin AREF, dapat val = analogRead(analogPin);
merusak mikrokontroler pada board Arduino.
// read the input pin

8.2 analogRead() Serial.println(val);


Membaca nilai dari pin analog. Board arduino
// debug value
menampung 6 chanel (8 chanel pada Mini dan Nano,
16 pada Mega), 10-bit ADC. Ini berarti akan }
memetakan voltase antara 0 sampai 5 volt dalam nilai 8.3 analogWrite()
integer antara 0 dan 1023. Sehingga menghasilkan analogWrite() dapat digunakan untuk menulis nilai
resolusi pembacaa dai 5volt/1024 unti atau 0.0049volt analog (gelombang PWM) untuk sebuah pin. Dapat juga
(4.9mV) per unit. Panjang input dan resilusi dapat digunakan menyalakan LED dengan cahaya yang
digantkan dengan alalogReference(). Hal ini bervariasi atau mengontrol motor dengan kecepatan
membutujkan 100milisecond (0.0001s) untuk yang bervariasi. Frekuensi sinyal PWM bisa mencapai
membaca input analog, jadi maksimum rate 490 Hz. Di dalam board Arduino ATmega168 atau
pembacaan sekitar 10000 kali per detik. ATmega328, pin yang berfungsi adalah 3,5,6,9,10 sdan
11. Di dalam Arduino Mega bekerja pada pin 2 bersama
Syntax 13, dalam Arduino ATmega8 hanya mendukung
analogRead(pin)
analogWrite() pada pin 9,10 dan 11. Anda tidak dapat
memanggil pinMode() untuk menyeting pi sebagai
Parameter
output sebelum memanggil analogWrite().
pin : nomer dari pin input aalog untuk dibaca dari (0
sampai 5 pada umumnya, 0 sampai 7 pada Mini dan
Fungsi dari analogWrite tidak bisa bekerja tanpa pin
Nano, 0 sampai 15 pada Mega) bisa juga dituliskan
analog atau fungsi analogRead. //analogWrite values from 0 to 255

}
Syntax
analogWrite(pin, value) 9 Advance I/O
9.1 pulseIn()
parameter Fungsi ini digunakan untuk membaca sebuah pulsa
pin: pin yang untuk ditulis (HIGH atau LOW) pada sebuah pin
value : putaran penugasan : antara 0 (selalu off) dan
Syntax
255 (selalu on).
pulseIn(pin,value) pulseIn(pin, value,
Pada output PWM yang dihasilkan pada pin 5 dan timeout)
6 akan mempunyai putaran penugasan yang lebih
tinggi. Hal ini dikarenakan interaksi dengan fungsi Parameter
millis() dan delay() yang membagi sesame penggunaan pin : nomer pin yang akan dibaca pulsa nya (int) value :
internal timer yang digunakan oleh output PWM. tipe dari pulsa (HIGH atau LOW) (int)
timeout (optional) : angka dalam mikrosekon waktu
Contoh tunggu pulsa untuk memulai, defaultnya adalah 1 detik
Set output pada LED dengan nilai yang disesuaikan dari (unsigned long)
nilai potensiometer
Contoh
int ledPin = 9; // LED connected to int pin = 7;
digital pin 9
unsigned long duration;
int analogPin = 3;

//potentiometer connected to analog pin 3


void setup()
int val = 0; // variable to store the read
{
value
pinMode(pin, INPUT);

void setup() }

{ void loop()

pinMode(ledPin, OUTPUT); {

// sets the pin as output duration = pulseIn(pin, HIGH);

} }

void loop()
9.9 shiftOut()
{
Shift out adalah sebuah byte dari data dalam satu
val = analogRead(analogPin); // read bit per satuan waktu.
the input pin

analogWrite(ledPin, val / 4); Syntax


shiftOut(dataPin, clockPin, bitOrder,
// analogRead values go from 0 to value)
1023,
parameter void setup() {
dataPin : pin yang menjadi output bit (int) //set pins to output because they are
clockPin : pin yang sekali dilewati dengan dataPin (int) addressed in the main //loop
bitOrder : bit yang akan diberikan untuk shift out berupa
pinMode(latchPin, OUTPUT);
MSBFIRS atau LSBFIRST (Most significant Bit First atau
Least Significant Bit First) pinMode(clockPin, OUTPUT);
value : data untuk shift out (byte) pinMode(dataPin, OUTPUT);

}
dataPin dan clockPin harus selalu dikonfigurasi sebagai
output untuk memanggil pinMode() void loop() {

//count up routine
// Do this for MSBFIRST serial int data =
500; for (int j = 0; j < 256; j++) {
// shift out highbyte
//ground latchPin and hold low for as long
shiftOut(dataPin, clock, MSBFIRST, (data
as you are //transmitting
>> 8));
digitalWrite(latchPin, LOW);
// shift out lowbyte
shiftOut(dataPin, clockPin, LSBFIRST, j);
shiftOut(data, clock, MSBFIRST, data);
//return the latch pin high to signal chip
that it
// Or do this for LSBFIRST serial data =
//no longer needs to listen for
500;
information
// shift out lowbyte
digitalWrite(latchPin, HIGH);
shiftOut(dataPin, clock, LSBFIRST, data); delay(1000);

// shift out highbyte 9.3 tone()


shiftOut(dataPin, clock, LSBFIRST, (data Dapat menghasilkan gelombang kotak dengan
>> 8)); spesifikisai frekuensi (50% siklus kerja) dalam sebuah
pin.biasanya pin ini dikoneksikan pada buzzer atau
speaker untuk memutar bunyi. Bunyi ini akan diputar
Contoh terus menerus sebulum ada pemanggilan noTone(). Jika
tone() sedang bekerja pada sebuah pin, maka pin yang
For accompanying circuit, see the tutorial on controlling a
74HC595 shift register. lain tidak akan mempunyai efek apapun, jadi bila kita
akan membunyikan suara pada beberapa pin, maka kita
//Pin connected to ST_CP of 74HC595 harus menyertakan fungsi noTone() pada setiap ahir
int latchPin = 8; ekspresinya.
//Pin connected to SH_CP of 74HC595
Syntax
int clockPin = 12;
tone(pin, frequency)
////Pin connected to DS of 74HC595 tone(pin, frequency, duration)

int dataPin = 11;


10 COMMUNICATION // other code here
10.1 Serial }
Untuk berkomunikasi dengan computer atau
device lain, semua board arduino mempunyai serial 10.3 EXTERNAL INTERRUPT
port (UART atau USART). Untuk berkomunikasi 10.3.1 attachInterrupt(interrupt, function, mode)
mengunakan digital pin 0 (RX) dan 1 (TX) seperti Fungsi yang lebih spesifik untuk memanggil
computer dengan USB. Dalam Arduino Mega, external interrupt. Mengganti beberapa funsi
mempunyai tambahan 3 serial port : serial 1 pada pin sebelumnya yang telah disertakan. Kebanyakan board
19 (RX) dan 18 (TX), serial 2 pada pin 17 (RX) dan 16 Arduino mempunyai 2 external interup. Nomer 0
(TX), serial 13 pada pin 15(RX) dan 14 (TX), untuk (dalan digital pin 2) dan 1 (dalam digital pin 3). Arduino
berkomuniksai dengan PC, Anda membutuhkan USB to Mega mempunyai 4 tambahan: nomer 2 (pin 21), 3 (pin
Serial adaptor,untuk mengkomunikasikan dengan 20), 4 (pin 19) dan 5 (pin 18)
external TTL serial device. Jangan menyambungkan pin Parameter
pada RS232 secara langsung, karena mempunyai +/- interrupt : nomer interupsi (int)
12v yang bisa merusak board Arduino.
10.2 INTERUPT function : fungsi untuk memanggil interupsi yang terjadi,
menjadi acuan bagi interrupt servicer routine.
10.2.1 interrupt()
Mengaktifkan kembali interupsi (setelah mode : mendefinsikan jika terjadi trigger interupsi, ada 4
nonaktif oleh noInterupt() ).interupsi memperbolehkan parameter yang menjadi validasi nilainya :
program lain yang lebih penting untuk berjalan terlebih
dahulu. Beberapa fungsi tidak akan dapat bekerja jika - LOW untuk trigger interupsi saat pin low.
interupsi tersebut diable, dan berkomunikasi kembali - CHANGE untuk trigger interupsi saat pin
ketika diabaikan. mengganti nilai
- RISING untuk trigger saat pin berpindah dari low
Contoh menjadi high.
void setup() {} void loop() - FALLING untuk pin yang berpindah dari high ke
low
{

noInterrupts(); Interupsi digunakan untuk membantu menangani


// critical, time-sensitive code masalah penjadualan waktu pada program
here interrupts(); mikrokontroler.

// other code here Contoh

} int pin = 13;

10.2.2 noInterupts() volatile int state = LOW;


Mematikan interupsi (Anda dapat mengaktifkan void setup()
kembali dengan interups()).fungsi ini adalah kebalikan
{
dari fungsi interups().
Contoh pinMode(pin, OUTPUT); attachInterrupt(0,
void setup() {} void loop() blink, CHANGE);
{
}
noInterrupts();
// critical, time-sensitive code here void loop()
interrupts();
{ dan 1juta microsecond adalah 1 detik.
digitalWrite(pin, state); Syntax
delayMicroseconds(us)
}

void blink() Parameter


us : angka untuk jeda dalam microsecond (unsigned int)
{

state = !state; Contoh


int outPin = 8; // digital pin 8
}
void setup()
11 TIME
11.1 delay() {
Memberi jeda pada program unuk beberapa waktu pinMode(outPin, OUTPUT);
( dalam millisecond)
// sets the digital pin as output
Syntax
delay(ms) }

void loop()
Parameter
ms : waktu dalam millisecond (unsigned long) {

digitalWrite(outPin, HIGH); //
Contoh sets the pin on
int ledPin = 13; // LED connected to
delayMicroseconds(50); // pauses for
digital pin 13
50 microseconds
void setup()
{ digitalWrite(outPin, LOW); // sets the
pin off
pinMode(ledPin, OUTPUT);
delayMicroseconds(50); // pauses for
// sets the digital pin as output
50 microseconds
}
}
void loop()
Mengkonfigurasi pin nomer 8 sebagai pin output,
{ memberikan pulsa dengan waktu 100 microsecond per
digitalWrite(ledPin, HIGH); // periode.
sets the LED on

delay(1000); // waits for a second

digitalWrite(ledPin, LOW); //
sets the LED off

delay(1000); // waits for a second

11.2 delayMicroseconds()
Memberi jeda program dalam beberapa waktu
(mikrodetik), 1000 microsecond adalah 1 milisecond
Project 1 - LED Flasher
Komponen yang dibutuhkan 10, kaki ini adalah kaki Anoda LED yang harus
terhubung ke pin positif, sedangkan kaki LED yang
pendek terhubung ke ground (GND), karena kaki
Breadboard LED ini merupakan kaki Katoda LED.

Setelah semuanya benar maka hubungkan USB ke


Led komputer anda lalu buka software Arduino IDE.
Program
Masukan kode berikut ke halaman Arduino IDE :
220Ω Resistor

// Project 1 - LED
Jumper Flasher int ledPin = 10;

void setup() {

pinMode(ledPin, OUTPUT);
Rangkaian
}
Pertama setelah memastikan software
void loop() {
arduino sudah terinstall dengan baik dan benar
selanjutnya kita hubungkan semuanya seperti digitalWrite(ledPin,
HIGH); delay(1000);
gambar dibawah ini: digitalWrite(ledPin,
LOW); delay(1000);

Setelah itu klik Verify/Compile pada software


Arduino IDE, tunggu hingga selesai dan sukses
mengcompile program, jika pada notifikasi muncul
error maka perlu di tinjau ulang, mungkin ada
kesalahan pada tipe board yang di pakai, com yang
sedang digunakan ataupun source code yang tidak
tertulis. Setelah itu klik tombol Upload, pada
proses ini program akan di transfer ke board
Arduino, tunggu hingga program terupload dan
muncul notifikasi “Done uploading” maka Led
akan berkedip.

Tidak masalah jika menggunakan kabel jumper


yang berbeda atau pun arduino yang berbeda
selama koneksi antara komponen seperti gambar.
Pastikan posisi Anoda dan Katoda LED benar, LED
dengan kaki yang panjang terhubung ke pin digital
Project 2 – Trafic Light
Pada kali ini kita akan membuat sebuah
program lampu jalan atau Trafic Light, cara kerja Pada kali ini kita menghubungkan 3 LED sekaligus
program ini yaitu LED pada posisi warna merah dengan pin Anoda LED terhubung dengan pin 8, 9
kemudian akan berpindah ke LED berwarna hijau dan 10 papan arduino melalui resistor 220 Ω
yang sebelumnya melalui LED warna kuning dan sebelumnya. Untuk memudahkan merangkai
kembali lagi ke LED merah melalui LED kuning maka kita hubungkan semua pin katoda led pada
terlebih dahulu.
satu jalur breadboard menuju pin ground papan
arduino.

Program

Masukan kode berikut, cek ulang lalu upload.


Komponen yang dibutuhkan

Breadboard

// Project 2 - Traffic Lights


int ledDelay = 10000; // delay in between changes
LED Merah int redPin = 10;
int yellowPin =9;
LED Kuning int greenPin =8;

void setup() { pinMode(redPin,


LED Hijau OUTPUT); pinMode(yellowPin,
OUTPUT); pinMode(greenPin,
OUTPUT);
3 x 220Ω Resistor }

void loop() {

Jumper // turn the red light on


digitalWrite(redPin, HIGH);
delay(ledDelay); // wait 5 seconds

digitalWrite(yellowPin, HIGH); // turn on yellow


Rangkaian delay(2000); // wait 2 seconds

digitalWrite(greenPin, HIGH); // turn green on


digitalWrite(redPin, LOW); // turn red off
digitalWrite(yellowPin, LOW); // turn yellow off
delay(ledDelay); // wait ledDelay milliseconds

digitalWrite(yellowPin, HIGH); // turn yellow on


digitalWrite(greenPin, LOW); // turn green off
delay(2000); // wait 2 seconds

digitalWrite(yellowPin, LOW); // turn yellow off


// now our loop repeats
}

Pada project selanjutnya kita akan menambahkan


lampu pedestrian dan push button untuk
membuat Trafic Light Interactive.
Project 3 – Interactive Trafic Light

Kali ini kita membuat Interactive Trafic Light,


program yang digunakan sama dengan trafic light pada 6 x 150Ω Resistor
projek 3 hanya kali ini kita akan menambahkan
program lampu pedestrian/pejalan kaki yang
digunakan untuk menyebrang jalan. Lampu pedestrian Tactile Switch Push
akan berfungsi ketika push button ditekan, ini akan Putton
mengubah keadaan trafic light untuk mobil menjadi
merah dan trafic light untuk pejalan kaki akan Breadboard
berwarna hijau.

Komponen yang dibutuhkan


2 x LED Merah Jumper

LED Kuning

2 x LED Hijau
Rangkaian
Hubungkan LED dan push button sesuai dengan
diagram yang ada pada halaman sebelumnya, lalu
hubungkan LED pada pin 8,9,10,11 dan 12 serta push // Project 4 - Interactive Traffic Lights
Int carRed = 12; // assign the car lights int
button pada pin 2. carYellow = 11;
int carGreen = 10;
int pedRed = 9; // assign the pedestrian lights
Program int pedGreen = 8;
int button = 2; // button pin
int crossTime = 5000; // time allowed to cross
Masukan kode pada halaman arduino IDE, cek kembali unsigned long changeTime; // time since button
pressed
lalu klik upload.
void setup() {
Setelah berhasil, ketika menjalakan program kita akan pinMode(carRed, OUTPUT);
void setup() {
melihat trafic light untuk mobil akan berwarna hijau, pinMode(carRed, OUTPUT);
pinMode(carYellow, OUTPUT);
dan trafic light untuk pejalan kaki berwarna merah. pinMode(carGreen, OUTPUT);
Ketika push button kita tekan, program akan mengecek pinMode(pedRed, OUTPUT);
pinMode(pedGreen, OUTPUT);
keadaan trafic light untuk mobil agar berubah menjadi pinMode(button, INPUT); // button on pin 2
merah, setelah itu giliran lampu untuk pejalan kaki // turn on the green light
digitalWrite(carGreen, HIGH);
yang akan berubah warna menjadi hijau, waktu tunggu digitalWrite(pedRed, HIGH);
yang di tentukan dari mulai penekanan tombol hingga }

perubahan trafic light menjadi warna merah di atur void loop() {


oleh syntax changeLight() sedangkan untuk lamanya int state = digitalRead(button);
/* check if button is pressed and it is over 5
waktu yang dibutuhkan untuk lampu pejalan kaki dari seconds since last button press */
berwarna merah menjadi hijau diatur oleh syntax if (state == HIGH && (millis() - changeTime) >
changeTime() pada source code di halaman berikutnya. 5000) {
// Call the function to change the lights
Lampu pejalan kaki akan berwarna hijau lalu berkedip changeLights();
maka waktu tunda untuk lampu pejalan kaki akan }
}
habis, dan lampu akan berwarna merah dan trafic light
void changeLights() {
untuk mobil akan berubah menjadi warna kuning dan
digitalWrite(carGreen, LOW); // green off
hijau kembali. digitalWrite(carYellow, HIGH); // yellow on
delay(2000); // wait 2 seconds

digitalWrite(carYellow, LOW); // yellow off


digitalWrite(carRed, HIGH); // red on
delay(1000); // wait 1 second till its safe

digitalWrite(pedRed, LOW); // ped red off


digitalWrite(pedGreen, HIGH); // ped green on
delay(crossTime); // wait for preset time period

// flash the ped green

for (int x=0; x<10; x++) {


digitalWrite(pedGreen, HIGH);
delay(250);
digitalWrite(pedGreen, LOW);
delay(250);
}
// turn ped red on digitalWrite(pedRed, HIGH);
delay(500);

digitalWrite(carYellow, HIGH); // yellow on


digitalWrite(carRed, LOW); // red off
delay(1000);
digitalWrite(carGreen, HIGH);
digitalWrite(carYellow, LOW); // yellow off
// record the time since last change of lights
changeTime = millis();
// then return to the main program loop
}
Project 4 – Light Sensor
Pada project ini kita akan menggunakan LDR ( Light Masukan kode berikut lalu upload. Steleah sukses kita
Dependent Resistor) untuk membaca nilainya dan merubah akan melihat LED berkedip on dan off. Jika kita tutupi
kecepatan kedipan pada led. LDR (dalam keadaan gelap) maka LED akan berkedip
lebih lambat dari sebelumnya dan jika kita terangi LDR
Komponen yang dibutuhkan menggunakan lampu maka LED akan terlihat berkedip
lebih cepat dari sebelumnya.
Light Dependent
Resistor (LDR)

//Project 4 - Light Sensor


220Ω Resistor
// Pin we will connect to LED
int ledPin = 6;
// Pin connected to LDR
10KΩ Resistors int ldrPin = 0;
// Value read from LDR
int lightVal = 0;
LED Hijau
void setup()
{
Breadboard // Set both pins as outputs
pinMode(ledPin, OUTPUT);
}

void loop()
Jumper
{
// Read in value from LDR
lightVal = analogRead(ldrPin);
// Turn LED on
Rangkaian digitalWrite(ledPin, HIGH);
// Delay of length lightVal
delay(lightVal);
// Turn LED off
digitalWrite(ledPin, LOW);
// Delay again
delay(lightVal);
}

Setelah melakukan percobaan diatas maka coba tukar


posisi LDR dengan resistor 10k, posisi kaki LDR langsung
ke supply sedangkan kaki resistor terhubung ke
ground. Amati hasilnya.

Hubungkan seri LDR dan resistor 10K lalu diantara


keduanya terhubung ke input analog A0, berikut
merupakan sebuah pembagi tegangan, seperti gambar
diatas, selanjutnya hubungkan LED kaki anoda ke pin
digital 6 melalui resistor, dan kaki katoda ke ground.

Program
Project 5 – Pushbutton

Pushbutton merupakan komponen yang


menghubungkan dua titik di dalam sebuah rangkaian /*
ketka kita menekannya. Contohnya LED akan menyala Program
Button
ketika kita menekan pushbutton. Pada percobaan kali Turns on and off a light emitting diode(LED)
connected to digital pin 13, when pressing
ini kita akan membuat LED menyala ketika pushbutton a pushbutton attached to pin 2.
ditekan, dan akan mati ketika pushbutton dilepas .
The circuit:
* LED attached from pin 13 to ground
Komponen yang dibutuhkan * pushbutton attached to pin 2 from +5V
* 10K resistor attached to pin 2 from ground
Push Putton * Note: on most Arduinos there is already
an LED on the board attached to pin 13.
220Ω Resistor
// set pin numbers:

const int buttonPin = 2; // the number


10KΩ Resistors of the pushbutton pin
const int ledPin = 13; // the number
of the LED pin
LED Hijau
// variables will change:
int buttonState = 0; // variable for
Breadboard reading the pushbutton status

void setup() {
// initialize the LED pin as an output:
Jumper pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an
input:
pinMode(buttonPin, INPUT);
}
Rangkaian
Pertama hubungkan 1 kaki pushbutton dihubungkan void loop() {
dengan 1 kaki resistor dan pin digital 7, kaki pushbutton // read the state of the pushbutton value:
yang lain dihubungkan dengan VCC dan satu kaki buttonState = digitalRead(buttonPin);

resistor yang lain di hubungkan dengan ground. Lihat // check if the pushbutton is pressed.
contoh diagram rangkaian di atas. // if it is, the buttonState is HIGH:
Sedangkan untuk led kita bisa menghubungkannya if (buttonState == HIGH) {
// turn LED on:
dengan ke kaki 13 setelah melalui resistor 220Ω, digitalWrite(ledPin, HIGH);}
sedangkan kaki katoda LED dimasukan ke ground else {
arduino, pada project ini bisa digunakan juga LED // turn LED off:
digitalWrite(ledPin, LOW);
internal yang telah disediakan di papan arduino, }
sehingga kita tidak perlu menambahkan led lagi. }
Project 6 – Pushbutton Switch
Project ini hampir sama dengan project
sebelumnya, komponen yang digunakanpun sama Program
dengan project sebelumnya, akan tetapi pada kali ini /* switch
kita akan menggunakan pushbutton sebagai switch Each time the input pin goes from LOW to
yang dimana akan menghidupkan LED (atau apapun HIGH (e.g. because of a push-button press),
the output pin is toggled from LOW to HIGH
yang terhubung ke pin LED) dari keadaan mati atau
or HIGH to LOW. There's a minimum delay
mematikan LED dari keadaan hidup hanya dengan between toggles to debounce the circuit
menggunakan 1 pushbutton. (i.e. to ignore noise).
*/
Komponen yang dibutuhkan int inPin = 2; // the number of the input
pin
Tactile Switch int outPin = 13; // the number of the output
pin
Push Putton
int state = HIGH; // the current state of
the output pin
220Ω Resistor int reading; // the current reading
from the input pin
int previous = LOW; // the previous
reading from the input pin
10KΩ Resistors
// the follow variables are long's because
the time, measured in miliseconds,
// will quickly become a bigger number than
LED Hijau can be stored in an int.
long time = 0; // the last time the
output pin was toggled
Breadboard long debounce = 200; // the debounce time,
increase if the output flickers

void setup()
{
Jumper
pinMode(inPin, INPUT);
pinMode(outPin, OUTPUT);
}

void loop()
Rangkaian {
Kita akan menghubungkan 3 kabel ke papan arduino, reading = digitalRead(inPin);
VCC, Ground dan pin digital 2, pertama 1 kaki
// if the input just went from LOW and
pushbutton dihubugnkan dengan 1 kaki resistor dan HIGH and we've waited long enough
pin digital 7, kaki pushbutton yang lain dihubungkan // to ignore any noise on the circuit,
dengan VCC dan satu kaki resistor yang lain di toggle the output pin and remember
// the time
hubungkan dengan ground. Lihat contoh diagram if (reading == HIGH && previous == LOW &&
rangkaian di atas. millis() - time > debounce) {
Sedangkan untuk led kita bisa menghubungkannya if (state == HIGH)
state = LOW;
dengan ke kaki 13 setelah melalui resistor 220Ω, else
sedangkan kaki katoda LED dimasukan ke ground state = HIGH;
arduino, pada project ini bisa digunakan juga LED
time = millis();
internal yang telah disediakan di papan arduino,
}
sehingga kita tidak perlu menambahkan led lagi.
digitalWrite(outPin, state);
previous = reading;
}
Project 7– Two button and LED
Pada project sebelumnya kita sudah mencoba
menggunakan pushbutton sebagai switch, pada
project kali ini kita akan mencoba memodifikasi Rangkaian
program dan skematik dari program pushbutton.

Pada projek ini kita akan mencoba mengatur tingkat


kecerahan dari LED, program sebelumnya LED hanya
menyala ketika hidup (HIGH) atau mati (LOW). Lalu
bagaimana cara mengatur tingkat kecerahan dari LED?

1. Dengan mengubah nilai resistor yang


terhubung sebagai pembatas arus untuk LED
2. Menggunakan fungsi yang disebut Pulse Width
Modulation (PWM)

Pada Arduino Uno sudah dilengkapi dengan pin PWM (


yaitu pin yang terdapat simbol ~ pada papan arduino,
yaitu pin 3,4,5,9,10 dan 11). Kita dapat memberikan
rentan nilai dai 0 sampai 255. 0 berarti nilai tegangan Rangkailah pushbutton, LED dan Resistor seperti pada
pada pin tersebut bernilai 0V, sedangkan 255 berarti rangkaian diatas, pushbutton 1 ke pin digital 2,
tegangan pada pin tersebut bernilai 5V. Pada bahasa pushbutton 2 ke pin digital 2dan kaki Anoda LED ke
pemograman arduino nilai tersebut dipanggil pin PWM 9.
menggunakan funsi analogWrite().
Program
Komponen yang dibutuhkan
const int kPinButton1 = 2;
Breadboard const int kPinButton2 = 3;

const int kPinLed = 9;

LED Merah void setup()


{
Push button pinMode(kPinButton1, INPUT);
pinMode(kPinButton2, INPUT);
pinMode(kPinLed, OUTPUT);
220Ω Resistor digitalWrite(kPinButton1, HIGH); // turn on
pullup resistor
digitalWrite(kPinButton2, HIGH); // turn on
pullup resistor
Jumper }
int ledBrightness = 128; //first value LED
void loop()
{
if(digitalRead(kPinButton1) == LOW){
ledBrightness--;
}
else if(digitalRead(kPinButton2) == LOW){
ledBrightness++;
}
ledBrightness = constrain(ledBrightness, 0,
255);
analogWrite(kPinLed, ledBrightness);
delay(20);
}
Project 8– Potensiometer
Jika tadi kita menggunakan pushbtton maka
pada project kali ini kita akan menggunakan potensio Program
sebagai pengatur nilai PWM. Potensio merupakan
sebuah resistor yang nilainya bisa diatur berdasarkan const int kPinPot = A0;
putaran pada knob potensio, nilai yang dihasilkan bisa const int kPinLed = 9;
bervariasi tergantung nilai maksimum yang tertera
void setup()
pada potensio, contoh jika nilai yang tertera pada {
potensio bernilai 10k, maka itu merupakan nilai pinMode(kPinPot, INPUT);
maximum dari sebuah potensio, dengan kata lain jika pinMode(kPinLed, OUTPUT);
}
potensio diputar berlawan arah nilai maximum maka
nilai akan berkurang sampai menuju 0 ohm. void loop()
{
Komponen yang dibutuhkan int ledBrightness;
int sensorValue = 0;

sensorValue = analogRead(kPinPot);
Breadboard ledBrightness = map(sensorValue, 0, 1023, 0,
255);
analogWrite(kPinLed, ledBrightness);
}
LED Merah

Potensio 10k

220Ω Resistor

Jumper

Hubungkan kaki anoda led ke pin 9 dan kaki katoda LED


ke kaki resitor yang dilanjutkan ke VCC.

Rangkaian pada code diatas terdapat code map(sensorValue, 0,


1023, 0, 255);

kode tersebut mengubah nilai 0 sampai 1023 ke o


sampai 255, berikut fungsi dari code diatas map(value,
fromLow, fromHigh, toLow, toHigh) mengapa dirubah
? karena pada pin PWM hanya membaca nilai dari
rentan 0 sampai 255, sedangkan pada input analog A0
bisa membaca nilai dari 0 sampai 1023.
Project 9– RGB LED
RGB singkatan dari Red, Green, Blue
merupakan warna-warna primer yang jika digabungkan
Perhatikan gambar berikut:
antara warnanya dapat menghasilkan warna-warna
yang berbebeda atau warna sekunder seperti ungu,
orange atau warna lainya. Pada project kali ini kita akan
membuat kompinasi warna yang berbeda
menggunakan LED RGB.

Komponen yang dibutuhkan

Breadboard

LED RGB

Potensio 10k
Program

220Ω Resistor const int kPinPot1 = A0;


const int kPinPot2 = A1;
const int kPinPot3 = A2;
const int kPinLed_R = 6;
const int kPinLed_G = 10;
Jumper const int kPinLed_B = 11;

void setup()
{
pinMode(kPinLed_R, OUTPUT);
Rangkaian pinMode(kPinLed_G, OUTPUT);
pinMode(kPinLed_B, OUTPUT);
Hubungkan setiap pin potensio 1 dan 3 ke vcc dan }
ground, hubungkan setiap pin potensio 2 (Pin tengah)
void loop()
ke pin analog arduino A0, A1 dan A2, karena pada RGB
{
kita menggunakan jenis RGB common Anoda maka
semua pin yang terhubung dengan warna RGB diberi int potValue;
arus positif, disini kita akan menggunakan tegangan int ledValue;

yang ada di pin digital arduino maka di hubungkan ke potValue = analogRead(kPinPot1);


pin digital PWM 6, 10 dan 11. Sedangkan pada RGB ledValue = map(potValue, 0, 1023, 0, 255);
jenis ini digunakan satu ground yang dihubungkan analogWrite(kPinLed_R, ledValue);

langsung ke pin ground arduino, untuk mengetahui potValue = analogRead(kPinPot2);


yang mana kaki ground dari RGB ini secara fisik bisa ledValue = map(potValue, 0, 1023, 0, 255);
dilihat kaki yang paling panjang berarti itu adalah kaki analogWrite(kPinLed_G, ledValue);
ground pada RGB common anoda. Pada program ini potValue = analogRead(kPinPot3);
kita akan mengontrol LED RGB menggunakan 3 ledValue = map(potValue, 0, 1023, 0, 255);
potensiometer, 1 potensio mengontrol LED merah, 1 analogWrite(kPinLed_B, ledValue);
}
potensio LED hijau dan satu lainya mengontrol LED
hijau.
Project 10 –Servo
Para projek kali ini kita akan menggunakan Program
motor servo sebagai aktuator, hal pertama yang perlu
kita ketahui adalah bagaimana cara menggerakan
#include <Servo.h>
motor servo menggunakan arduino. Servo myservo;
// create servo object to control a servo
Komponen yang dibutuhkan // twelve servo objects can be created on
//most boards
int pos = 0;
// variable to store the servo position
Breadboard
void setup() {
myservo.attach(8);
// attaches the servo on pin89 to the servo
//object
Servo SG9g/90 }

void loop() {
for (pos = 0; pos <= 180; pos += 1) {
// goes from 0 degrees to 180 degrees
Jumper // in steps of 1 degree
myservo.write(pos);
// tell servo to go to position in variable
//'pos'
delay(15);
Rangkaian // waits 15ms for the servo to reach the
//position
}
for (pos = 180; pos >= 0; pos -= 1) {
// goes from 180 degrees to 0 degrees
myservo.write(pos);
// tell servo to go to position in variable
//'pos'
delay(15);
// waits 15ms for the servo to reach the
//position
}
}

Pada servo umumnya terdapat 3 kabel yaitu kabel


supply, ground dan data, warna kabel setiap servo Pada program selanjutnya hampir sama dengan
terkadang berbeda, tapi pada kali ini kita akan program diatas hanya pada program ini posisi servo
menggunakan motor servo Merk Toper Pro 90/9g, sudah diatur pada perintah servoblue.write(posisi
nilai).
pada servo ini kabel warna coklat untuk ground, merah
untuk supply dan orange untuk data, hubungkan ketiga Program
kabel tersebut ke arduino seperti pada gambar.
#include <Servo.h> //Include the servo
//library
Pada program kali ini kita akan memutar kondisi servo Servo servoblue; //The servo gets the name
dari 0 derajat sampai 180 derajat, kanan dan kiri, //“servoblue”
begitu seterusnya. void setup()
{
servoblue.attach(8);
//The signal line of the servo is on pin 8
}
void loop()
{
servoblue.write(0);
//Position 1 with an angle of 0°
delay(3000); //Wait 3 seconds
servoblue.write(90);
//Position 2 with an angle of 90°
delay(3000); //Wait 3 seconds
}
Project 11 –Servo Control
Project selanjutnya lanjutan dari project servo Program
sebelumnya, akan tetapi jika pada project sebelumnya
posisi servo sudah di atur untuk menempati posisi
tertentu, kali ini kita akan mengatur posisi servo #include <Servo.h>
menggunakan potensio.
Servo myservo;
Komponen yang dibutuhkan // create servo object to control a servo

int potpin = 0;
// analog pin used to connect the
Breadboard //potentiometer

int val;
// variable to read the value from the
//analog pin
Servo SG9g/90 void setup() {
myservo.attach(9);
// attaches the servo on pin 9 to the servo
//object
}
Potensio 10k
void loop() {
val = analogRead(potpin);
// reads the value of the potentiometer
//(value between 0 and 1023)
Jumper val = map(val, 0, 1023, 0, 180);
// scale it to use it with the servo
//(value between 0 and 180)
myservo.write(val);
// sets the servo position according to the
//scaled value
Rangkaian delay(15);
// waits for the servo to get there
}

LATIHAN

1. Gunakan sensor analog lain utnuk merubah


posisi servo, implementasikan!

Hubungkan pin data servo ke pin 8, lalu hubungakan


kaki 2 potensio (Posisi tengah) ke pin analog 0 arduino.
Project 12 –LCD 16x2
Project kali ini kita akan menggunakan LCD sebagai
penampil data, LCD yang digunakan pada starter kit ini
Penting!
yaitu menggunakan LCD 16x2, kita akan menampilkan
kata Hello World pada LCD. Perlu diperhatikan posisi kaki pertama pin LCD, jangan
sampai terbalik menghubungkan pin LCD, pin satu dan
Komponen yang dibutuhkan
16 LCD biasanya diberi tanda pada bagian setiap ujung
Program
pin/pin akhir pada LCD
Breadboard
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers


LCD 16x2 //of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and
Potensio 10k //rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
Jumper
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since
//counting begins with 0):
Rangkaian lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
}

Maka hasil yang di dapat yaitu LCD pada kolom 0 baris


0 akan menampilkan tulisan hello, world!, dan di kolom
pertama baris 1 akan menampilkan hitungan dalam
detik.
Koneksikan pin LCD ke pin Arduino sesuai urutan Seperti progra lainya, LCD dijalankan menggunakan
berikut perintah perintah khusus yang sudah di definisikan di
1. LCD RS pin (pin 4 lcd) to digital pin 12 library LiquidCrystal.h seperti perintah lcd.print() untuk
2. LCD Enable pin (pin 5 lcd) to digital pin 11 menampilkan data dan perintah lcd.setCursor(0,1)
3. LCD D4 pin (pin 11 lcd) to digital pin 5 yaitu menempatkan kursor pada kolom 0 baris 1,
4. LCD D5 pin (pin 12 lcd) to digital pin 4 berikut program-program LCD lainya. Untuk skematik
5. LCD D6 pin (pin 13 lcd) to digital pin 3 sama seperti skematik program LCD.
6. LCD D7 pin (pin 14 lcd) to digital pin 2
7. LCD R/W pin (pin 5 lcd) to ground
8. LCD VSS pin (pin 1 lcd) to ground
9. LCD VCC pin (pin 2 lcd) to 5V
10. LCD Brightness pin (pin 3 lcd) to potensio pin 2
11. LCD Backlight + pin (pin 15 lcd) to +5V
12. LCD Backlight - pin (pin 16 lcd) to ground
LCD – Blink
Cursor pada LCD akan berkedip, perintah pada LCD – Auto Scroll
program ini yaitu lcd.Blink() dan lcd.noBlink()

Berikut programnya Program

Program // include the library code:


#include <LiquidCrystal.h>
// include the library code:
#include <LiquidCrystal.h> // initialize the library with the numbers
of the interface pins
// initialize the library with the numbers LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() {
// set up the LCD's number of columns and
rows:
void setup() { lcd.begin(16, 2);
// set up the LCD's number of columns and }
//rows:
lcd.begin(16, 2); void loop() {
// Print a message to the LCD. // set the cursor to (0,0):
lcd.print("hello, world!"); lcd.setCursor(0, 0);
} // print from 0 to 9:
for (int thisChar = 0; thisChar < 10; this
void loop() { Char++) {
// Turn off the blinking cursor: lcd.print(thisChar);
lcd.noBlink(); delay(500);
}
delay(3000);
// Turn on the blinking cursor:
// set the cursor to (16,1):
lcd.blink(); lcd.setCursor(16, 1);
delay(3000); // set the display to automatically
} scroll:
lcd.autoscroll();
// print from 0 to 9:
for (int thisChar = 0; thisChar < 10; this
Char++) {
LCD – Serial Input lcd.print(thisChar);
delay(500);
Program }
// turn off automatic scrolling
lcd.noAutoscroll();
#include <LiquidCrystal.h>
// clear screen for the next loop:
// initialize the library with the numbers lcd.clear();
//of the interface pins }
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
// set up the LCD's number of columns and
rows:
lcd.begin(16, 2);
// initialize the serial communications:
Serial.begin(9600);
}

void loop() {
// when characters arrive over the serial
port...
if (Serial.available()) {
// wait a bit for the entire message to
//arrive
delay(100);
// clear the screen
lcd.clear();
// read all the available characters
while (Serial.available() > 0) {
// display each character to the LCD
lcd.write(Serial.read());
}
}
}
LCD – Scroll LCD – Text Direction

Program
Program
// include the library code:
// include the library code: #include <LiquidCrystal.h>
#include <LiquidCrystal.h>
// initialize the library with the numbers
// initialize the library with the numbers of the interface pins
//of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int thisChar = 'a';
void setup() {
// set up the LCD's number of columns and void setup() {
//rows: // set up the LCD's number of columns and
lcd.begin(16, 2); rows:
// Print a message to the LCD. lcd.begin(16, 2);
lcd.print("hello, world!"); // turn on the cursor:
delay(1000); lcd.cursor();
} }

void loop() { void loop() {


// scroll 13 positions (string length) to // reverse directions at 'm':
the left if (thisChar == 'm') {
// to move it offscreen left: // go right for the next letter
for (int positionCounter = 0; positionCoun lcd.rightToLeft();
ter < 13; positionCounter++) { }
// scroll one position left: // reverse again at 's':
lcd.scrollDisplayLeft(); if (thisChar == 's') {
// wait a bit: // go left for the next letter
delay(150); lcd.leftToRight();
} }
// reset at 'z':
// scroll 29 positions (string length + if (thisChar > 'z') {
//display length) to the right // go to (0,0):
// to move it offscreen right: lcd.home();
for (int positionCounter = 0; positionCoun // start again at 0
ter < 29; positionCounter++) { thisChar = 'a';
// scroll one position right: }
lcd.scrollDisplayRight(); // print the character
// wait a bit: lcd.write(thisChar);
delay(150); // wait a second:
} delay(1000);
// increment the letter:
// scroll 16 positions (display length + thisChar++;
//string length) to the left }
// to move it back to center:
for (int positionCounter = 0; positionCoun
ter < 16; positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}

// delay at the end of the full loop:


delay(1000);

}
Project 14 –Ultrasonic
Kali ini kita akan menggunakan sensor ultrasonic kembalinya gelombang suara dan mengonversi waktu
sebagai penghitung jarak, jarak akan di tampilkan tersebut menjadi jarak.
menggunakan ukuran cm atau inch, jarak yang bisa
terhitung normal oleh sensor ini berkisar 3 cm sampai Program
300 cm lebih dari itu terkadang mendapat error yang
lebih besar.
int trigger=7; //”trigger” on pin 7.
Komponen yang dibutuhkan int echo=6; //”echo” on pin 6.
long time=0;//The value “time” will safe the
//time between transmission and
Breadboard //returning of the soundwave.
long dist=0; //The value “dist” will save
the calculated distance. It will
//start with “0”. Instead of “int” we are
using “long” for this value, to save a
Ultrasonik //bigger number.
void setup()
{
Serial.begin (9600); //Starting the serial
communication. It will send the
//data from the arduino board to the
Jumper computer to show it on the serial monitor.
pinMode(trigger, OUTPUT); //”trigger” (Pin
7) is an output.
pinMode(echo, INPUT); //”echo” (Pin 6) is an
input.
Rangkaian }
void loop()
{
digitalWrite(trigger, LOW); //Low voltage on
the trigger pin to produce a
//clear signal.
delay(5); //….for 5 milliseconds.
digitalWrite(trigger, HIGH); //Creating the
soundwave.
delay(10); //..for 10 milliseconds.
digitalWrite(trigger, LOW); //Stop creating
the soundwave.

time = pulseIn(echo, HIGH);


dist = (time/2) / 29.1;

//This calculation transforms the measured


//time into the distance in centimeter. (The
//sound needs 29,1 seconds for one
centimeter.

Pada ultrasonik HC-SR04 memiliki 4 pin yaitu pin vcc, if (dist >= 200 || dist <= 0) //If the
//distance gets over 200cm OR under 0cm,
ground, trigger dan echo. {
Serial.println("No measurement"); //So the
Hubungkan pin vcc dan groung dari sensor ke arduino, //serial monitor displays “No measurement”
pin trigger ke pin 7 dan pin echo ke pin 6 arduino. }
else //otherwise
Cara kerja singkat dari sensor ini yaitu ketika pin trigger {
di beri sinyal pendek (5v) dari mikrokontroler maka Serial.print(dist);
Serial.println("cm");
sensor mengeluarkan gelombang suara, dan ketika }
gelombang tersebut memantul mengenai dinding atau delay(1000);
objek lainya gelombang tersebut kembali, sensor akan }

mengirim sinyal balik ke arduino melalui pin echo.


Arduino mengukur waktu antara transmisi dan
Project selanjutnya masih menggunakan jarak akan
tetapi kita akan menambah komponen yaitu buzzer
sebagai tanda pada projek ini. Kita akan menentukan
jarak tertentu yang di mana jika jarak tersebut di
lewati maka buzzer akan berbunyi.
Program
Komponen yang dibutuhkan

int trigger=12;
Breadboard int echo=13;
long time=0;
long dist=0;
int piezo=5; //Piezo speaker on pin 5.
void setup()
Ultrasonik {
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(piezo, OUTPUT); //The pin (5)
Jumper connected to the piezo is a output.
}
void loop()
{
digitalWrite(trigger, LOW);
Buzzer delay(5);
digitalWrite(trigger, HIGH);
delay(10);
digitalWrite(trigger, LOW);
time = pulseIn(echo, HIGH);
dist = (time/2) / 29.1;
Rangkaian if (dist >= 500 || dist <= 0)
{
Sama seperti skematik projek sebelumnya, akan tetapi Serial.println("No measurement");
kita akan menambahkan buzzer, kaki positif buzzer }
dihubungkan ke pin digital 5 arduino, dan pin negatif ke else
{
ground. Serial.print(dist);
Serial.println("cm");
Perhatikan lambang positif pada buzzer menunjukan }
kaki positif pada buzzer. if (dist <= 20) //If the measured distance
gets 20 or shorter...
{
digitalWrite(piezo,HIGH); //..the piezo
should beep
}
else //If not ...
{
digitalWrite(piezo,LOW); //..the speaker
should be quiet.
}
delay(1000);
}

Dari program diatas kita dapat menebak hasilnya jika


jarak kurang dari 20 cm maka buzzer akan berbunyi dan
sebaliknya jika jarak lebih dari 20 cm buzzer akan mati.

Pahami dengan baik baik program diatas selanjutnya


kita akan mencoba program ultrasonik yang lebih
kompleks, berikut kita akan membuat project
ultrasonik – reverse system warning.
Project 15 –Ultrasonic Reverse System
Warning
Komponen yang dibutuhkan Program

int trigger=7;
Breadboard int echo=6;
long time=0;
int LED=12;
long dist=0;
void setup()
Ultrasonik {
Serial.begin (9600);
pinMode(trigger, OUTPUT);
pinMode(echo, INPUT);
pinMode(12, OUTPUT);
Jumper }
void loop()
{
digitalWrite(trigger, LOW);
delay(5);
digitalWrite(trigger, HIGH);
Rangkaian delay(10);
digitalWrite(trigger, LOW);
Masih menggunakan skematik yang sama akan tetapi time = pulseIn(echo, HIGH);
ditambahkan LED sebagai penanda, hubungkan led ke dist = (time/2) / 29.1;
pin digital 13 pada arduino, atau bisa menggunakan if (dist >= 500 || dist <= 0)
{
LED internal yang terdapat di Arduino.
Serial.println("No measurement");
}
Caara kerjanya yaitu ketika posisi jarak ultrasonik else
sudah pada jarak tertentu maka led akan berkedip, jika {
makin dekat kedipan led akan semakin cepat, begitu Serial.print(dist);
Serial.println("cm");
sebaliknya.
}
if (dist <= 40)
{
digitalWrite(LED, HIGH);
delay(dist*3);
digitalWrite(LED, LOW);
delay(dist*3);
}

LATIHAN

1. Gabungkan buzzer dan LCD dalam project ini.


Project 16 –Relay
Relay adalah salah satu aktuator yang banyak relay tidak mendapat tegangan input kondisi relay saat
digunakan, fungsi relay digunakan untuk mengsaklar, itu adalah tidak terhubung atau Normally open,
yang bisa disaklar tidak hanya tegangan DC tapi juga sedangkan Normally Close sebaliknya ketika relay tidak
tegangan AC dengan trigger yang kecil, penggunaanya mendapat tegangan input maka kondisi relay sudah
hanya memberi logika High ata Low pada pin input terhubung.
Program
relay.

Komponen yang dibutuhkan void setup()


{
pinMode(8, OUTPUT);
}
Breadboard void loop()
{
digitalWrite(6, HIGH);

//At this point the relay turns on


Relay Modul delay(1000); //..wait one second
digitalWrite(6, LOW);

//turn off the relay again


delay(1000); //...wait a second
Jumper }

Rangkaian

Gunakan relay sebagai output dari projek-projek sebelumnya.

Hubungkan input vcc dan ground di modul relay ke


arduino, lalu hubungkan pin IN ke pin 8 Arduino, pada
modul relay ini mempunyai 3 pin input yaitu vcc,
ground dan sinyal, sinyal ini diberi trigger oleh
mikrokontroler 5V atau 0V.

Relay mempunyai 2 kondisi Normally Open (NO) dan


Normally Close (NC), maksudnya adalah ketika posisi
Project 17 – DHT Temperature and
Humadity
Pada projek kali ini kita akan membuat sebuah 5. Untuk kaki Ke-3 DHT11 kita abaikan saja
pengukur suhu dan kelembaban menggunakan sensor
DHT11.

Komponen yang dibutuhkan

Breadboard

Program
Relay Modul

#include "DHT.h"

DHT dht;
Jumper
void setup()
{
Serial.begin(9600);
Serial.println();
Serial.println("Status\tHumidity
Rangkaian
(%)\tTemperature (C)\t(F)");

dht.setup(2); // data pin 2


}

void loop()
{
delay(dht.getMinimumSamplingPeriod());

float humidity = dht.getHumidity();


float temperature = dht.getTemperature();

Serial.print(dht.getStatusString());
Serial.print("\t");
Serial.print(humidity, 1);
Serial.print("\t\t");
Serial.print(temperature, 1);
Serial.print("\t\t");

Serial.println(dht.toFahrenheit(temperature)
, 1);
}

Setelah di upload selanjutnya buka serial monitor maka


akan tampil nilai kelembaban dan suhu.
1. Hubungkan kaki ke-1 DHT11 ke 5V Arduino LATIHAN
2. Hubungkan kaki ke-2 DHT11 ke pin 2 Arduino
3. Dengan menggunakan Resisitor 10 Kilo Ohm, 1. Tampilkan kelembaban dan suhu pada LCD!
hubungkan kaki ke-2 DHT11 ke 5V Arduino.
4. Hubungkan kaki ke-4 DHT11 ke GND Arduino
2. Buat program mengenai sensor DHT11
digabungkan LCD dan modul output (Motor,
Relay, Buzzer, LED, dll)
Project 18 – Infrared
Pada project ini kita akan menggunakan sensor TL1838
sebagai penerima sinyal infrared, sensor ini memiliki 3 Program
pin, konfigurasi dari setiap pin ini yaitu 1=out/signal,
2=ground dan 3=vcc (lihat datasheet). Hati-hati untuk #include <Irremote.h>
int RECV_PIN = 11; //The contact which
sensor type lain susunan pin bisa berubah, posisi
//outputs the data gets connected with pin
ground dan vcc bisa tertukar, jadi lihat datasheet untuk 11.
memastikan konfigurasi untuk setiap sensor. IRrecv irrecv(RECV_PIN); //Here we are
//defining an object, that is supposed to
Komponen yang dibutuhkan //read out the infrared sensor on pin 11.
decode_results results; //This command
//defines that the read out infrared data
//gets saved under “results”.
Breadboard void setup()
{
Serial.begin(9600); //In the setup we are
//starting the serial connection, to
//see the data from the remote on the serial
TL1838 //monitor.
pinMode (13, OUTPUT);
irrecv.enableIRIn(); //This command
//initializes the infrared sensor.
}
Jumper void loop()
{ //The loop part is quite short because of
//the used library.
if (irrecv.decode(&results)) {
Remote Infrared
(Remote Universal, //If data is received...
Remot TV, dll) Serial.println(results.value, DEC);

//..they should show up on the serial


//monitor as decimal number (DEC).
irrecv.resume(); //Receive the next value.
Rangkaian } }

Setelah berhasil upload, silahkan buka serial monitor


arduino lalu tekat sembarang tombol pada remote
infrared dan arahkan ke sensor TL1838, maka akan
tampil kode berbentuk angka desimal, setiap tombol
yang ditekan akan menghasilkan angka desimal yang
berbeda, angka itulah yang akan kita definisikan nanti.

Contoh ketika menekan tombol “1” maka muncul nilai


desimal “1678996467”.

Setiap remote infrared mempunyai nilai desimal yang


Hubungkan pin 1 sensor ke pin 11 arduino, pin 2 ke
berbeda, terkadang ada juga ketika tombol ditekan
ground serta 3 ke vcc.
menghasilkan nilai yang tidak konstan atau bahkan
muncul nilai “4294967295” ini bukan kode unik dari
tombol tersebut, hal ini bisa terjadi biasanya apabila
kita menekan tombol secara berkelanjutan/ditekan
lama. Dengan kata lain sama seperti type sensor lain,
remote pun punya spesifikasinya masing masing.
Project 18 – Control LED Using Infrared
Pada projek ini kita akan menggunakan remote
infrared untuk mengendalikan LED. Program
Komponen yang dibutuhkan
#include <Irremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
Breadboard decode_results results;
void setup()
{
Serial.begin(9600);
pinMode (13, OUTPUT);
TL1838
//Pin 13 gets connected with a LED (Output).
digitalWrite(13, LOW);

//At first the LED should be tuned off.


irrecv.enableIRIn();
Jumper }
void loop() {
if (irrecv.decode(&results)) {
Remote Infrared Serial.println(results.value, DEC);
(Remote Universal, if (results.value == 16724175)
Remot TV, dll) //If The IR receiver receives the number
//16724175 (button 1)...
{digitalWrite (13, HIGH);}

//...the LED gets turned on.


Rangkaian if (results.value == 16718055)

//If the IR receiver receives the number


//16718055 (button 2)...
{digitalWrite (13, LOW);}

//….the LED gets turned off.


irrecv.resume(); // Receive the next value
} }

Hasilnya jika tombol 1 ditekan makan led akan


menyala, dan jika tombol 2 ditekan maka LED akan
padam.

LATIHAN

1. Gunakan remote infrared untuk


Untuk skematik masih menggunakan skematik yang mengendalikan relay, motor servo, RGB LED
sama, kita juga bisa menggunakan LED internal pada serta sensor dan aktuator lainya.
arduino, yaitu pada pin digital 13 atau kita bisa (Konsepnya sama seperti program push button
memasang LED lagi di pin yang lain seperti yang ada yang sebelumnya kita buat, jika mikrokontroler
pada projek sebelumnya. mendefinisikan sinyal High dan Low yang di
hasilkan push button, kali ini menggunakan
Setelah kita mendefinisikan kode unik berbentuk
nilai decimal yang di hasilkan remote infrared).
desimal pada setiap tombol remote, selanjutnya kita
definisikan tombol tersebut untuk menghidupkan LED.

Contoh tombol remote “1” ditekan menghasilkan nilai


“16724175” dan ketika tombol “2” ditekan
menghasilkan nilai “16718055”.

Anda mungkin juga menyukai