Anda di halaman 1dari 116

CATATAN PEMBUKA

Ebook ini terinspirasi dari berbagai macam buku mengenai tutorial arduino seperti buku
Introduction to Arduino karangan Alan G. Smith, Beginning Arduino karangan Michael
McRoberts dan beberapa buku tutorial lainnya dari luar maupun dalam negeri. Dari bermacam-
macam ebook dan tutorial yang telah kami rangkum dan kami sesuaikan agar lebih mudah
dipahami dan diaplikasikan oleh pengguna pemula Arduino bahkan bagi anda yang tidak
mengerti sama sekali mengenai mikrokontroler dan dasar elektronika. Gambar- gambar yang
kami buat pada tutorial ini adalah hasil karya kami sendiri baik gambar produck maupun
gambar rangkaian (wiring) dengan menggunakan aplikasi Fritzing.org, Eagle, dan Proteus.
Jenis papan Arduino yang kami gunakan pada tutorial Basic ini adalah Arduino Nano seperti
yang terdapat pada paket Mini Monster Trainer Arduino Kit.
Kata Pengantar

Dengan mengucapkan syukur ke Hadirat Allah SWT, karena atas kehendak-Nya


modul dengan judul Mini Monster Trainer Arduino Kit dapat terealisasi, modul ini
merupakan modul pembelajaran elektronik yang digunakan sebagai panduan untuk
mempelajari pemrograman mikrokontroler serta penggunaanya.

Modul ini mencoba untuk membantu dan memandu bagi siapapun yang ingin
mempelajari pemrograman mikrokontroler khususnya menggunakan Arduino secara
mandiri. Pemrograman menggunakan bahasa C/C++ sangatlah mudah dipelajari.
Berbagai contoh dan teori yang melibatkan komponen elektronika diulas dalam modul
ini. Diharapkan pembaca dapat mempraktikkan berbagai program sederhana yang
terdapat pada modul ini sekaligus mengasah kemampuan dengan mencoba berbagai
hal menggunakan Arduino uno.

Akhir kata, kami berharap bahwa modul ini dapat memberikan pengetahuan
dasar mengenai pemrograman mikrokontroler Arduino untuk pemula (Basic) dan dapat
berguna sebagai referensi pengetahuan dasar elektronika.

Bandung, April 2020


Penyusun

Monsterchip
Daftar Isi

BAB 1 MIKROKONTROLLER ............................................................................................. 1

1.1. Pengertian Mikrokontroler ................................................................................. 2

1.2. Manfaat Mikrokontroler .................................................................................... 2

1.3. Sekilas Tentang Arduino Nano .......................................................................... 3

BAB 2 MINI MONSTER TRAINER ARDUINO KIT .............................................................. 7

2.1. Sekilas Tentang Mini Monster Trainer Arduino Kit ............................................ 8

2.2. Mari Mengenal Arduino Nano ....................................................................... 8

2.3. Apa Itu IDE arduino? ................................................................................... 10

2.4. Memulai Instalasi Driver Arduino Nano ....................................................... 11

2.5. Uji Coba Board Arduino Nano .................................................................... 13

BAB 3 PENGENALAN TOOLBAR IDE ARDUINO, DAN PENGENALAN STRUKTUR


SERTA SYNTAX BAHASA PROCESSING ............................................................. 19

3.1 Pengenalan Toolbar dan Istilah Pada IDE Arduino ............................................ 20

3.2 Structure dan Syntax Pemrograman pada IDE Arduino .................................... 23

BAB 4 MEMPELAJARI DASAR PEMROGRAMAN INPUT DAN OUTPUT ........................ 33

4.1 Program Dasar ................................................................................................... 35

4.2 LED Blink ............................................................................................................ 35

4.3 Traffic LED .......................................................................................................... 42

BAB 5 MEMPELAJARI PERINTAH DASAR DAN FUNGSI-FUNGSI LOGIKA ................... 45

5.1 Perintah IF dan IF-ELSE .................................................................................... 46

BAB 6 MEMBUAT BERBAGAI MACAM PROJECT DASAR INPUT DIGITAL DAN


OUTPUT PWM ......................................................................................................... 62

6.1 Mengontrol LED dengan Push-Button ................................................................ 63

6.2 Membuat Fanding LED dengan Pin PWM ......................................................... 66

BAB 7 KOMUNIKASI SERIAL ............................................................................................. 70

7.1. Pengenalan Tool dan struktur Program untuk Komunikasi Serial ........... 71

7.2. Analog Read Serial ............................................................................................ 75

7.3. Pengontrolan RGB Light Melalui Serial Monitor ........................................ 78


BAB 8 PROGRAM DASAR DISPLAY ................................................................................. 81

8.1. Sketch Dasar Penggunaan LCD ....................................................................... 82

8.2. Sketch Dasar Penggunaan Modul LCD + I2C ................................................... 88

BAB 9 APLIKASI SENSOR ................................................................................................. 91

9.1. Aplikasi Sensor LDR .......................................................................................... 92

9.2. Aplikasi Sensor DHT-11 .................................................................................... 95

9.3. Aplikasi Sensor Jarak ........................................................................................ 100

9.4. Aplikasi Mengendalikan Servo .......................................................................... 105


Pendahuluan

Deskripsi Ebook Tutorial Mini Monster Trainer Arduino Kit


Ada banyak sekali buku maupun modul yang membahas dan mempelajari cara
memprograman sebuah mikrokontroler baik yang berada di pasaran maupun di
perpustakaan, namun tak jarang kita malah merasa bingung dan kesulitan ketika kita
ingin mempelajarinya secara mandiri, terlebih apabila kita benar-benar tidak memiliki
dasar pengetahuan elektronika, dasar digital, maupun pemrograman. Selain kendala-
kendala tersebut kendala terbesar adalah program compiler yang tak gratis ditambah
kita harus memiliki perangkat tambahan yaitu sebuah perangkat compiler, kitapun
harus berhati-hati kala kita ingin mengembangkan project tertentu, karena
bisa-bisa tanpa kita sadari kita telah melanggar hak cipta seseorang, tentu hal itu
tidaklah kita inginkan.
Seiring berjalannya waktu hadirlah sebuah modul mikrokontroller bernama
Arduino yang begitu banyak digemari dan menyita banyak perhatian orang-orang
yang ingin mempelajari pemrograman mikrokontroler. Selain murah dan simple dalam
penggunaan hardware juga memiliki kemudahan dalam mempelajari software
kompilernya yang bernama IDE arduino ditambah bahasa pemrograman processing
yang benar-benar mudah dimengerti. Tak heran Arduino begitu banyak digemari para
penggunaanya, selain berbagai kemudahan dalam mempelajarinya Arduino juga
bersifat Open-Source sehingga kita dapat dengan bebas mengembangkan, meminta
bahkan membagikan berbagai project yang kita ketahui tanpa perlu khawatir adanya
pelanggaran hak cipta. Kepopulerannya tidak luput dari dukungan berbagai macam
vendor yang menyediakan berbagai komponen dan aplikasi yang memungkinkan
arduino dapat digunakan untuk berbagai aplikasi dari mulai pengendali aktuator
sederhana hingga pengendali peralatan dari jarak jauh melalui aplikasi WEB ataupun
prangkat pendukung seperti GPS.
Ada banyak sekali project yang dapat kita pelajari di berbagai blog, situs video
maupun di berbagai forum di internet. Tampaknya kemunculan Arduino dengan sifatnya
yang Open-Souce membuat para penggunanya memiliki rasa ingin saling berbagi dan
saling membantu. Dengan alasan itulah modul ini ditulis berharap dengan modul ini
dapat lebih mempermudah kita mempelajari program dan membuat berbagai
macam project dengan Arduino.
Ebook Tutorial Mini Monster Trainer Arduino Kit ini ditulis dengan anggapan
bahwa kita benar-benar belum mengenal pemrograman mikrokontroler, tak terlalu
menguasai computer, teknik digital bahkan awam terhadap fungsi dan kegunaan baik
komponen maupun sensor elektronika. Dengan asumsi tersebut maka modul ini
diharapkan dapat dipelajari oleh siapapun tanpa mengenal pengetahuan dasar
apapun, latar pendidikan apapun bahkan dasar kemampuan apapun.
Tidak seperti ebook tutorial atau buku kebanyakan, modul ini memiliki cara
pendekatan yang berbeda, dimana kita membuat sebuah project terlebih dahulu
seteah itu kita akan membahas dan menganalisa program yang telah kita buat beserta
pengetahuan dasar setiap komponen yang kita pakai. Dengan menggunakan modul
elektronik yang menarik dan penggunaan Mini Monster Trainer Arduino Kit akan
sangat mempermudah dan sangan efisien dalam mempelajarinya.

Prasyarat
▪ Memiliki pengetahuan dasar cara menggunakan PC
▪ Akan lebih mudah jika telah mengenal bahasa pemrograman C
sebelumnya
▪ Dapat membedakan warna
▪ Akan lebih baik jika telah memiliki dasar elektronika dan teknik digital

Petunjuk Penggunaan Modul


▪ Bacalah dengan baik tiap bab dan sub bab pada Modul
▪ Perhatikan setiap catatan dan informasi penting yang terdapat pada judul
▪ Gunakan hyperlink untuk mengakses judul dan sub judul dengancepat
▪ Clik pada gambar dan pemrograman untuk mendapatkan tampilan yang lebih
jelas

Tujuan Akhir
▪ Dapat mengenal dan menggunakan Arduino.
▪ Dapat membuat program dengan menggunakan Bahasa
Pemrograman Arduino berupa program yang mengendalikan suatu perangkat
(alat) sesuai dengan panduan dalam modul.
BAB 1
MIKROKONTROLER

Materi

1.1. Pengertian Mikrokontroler


1.2. Manfaat Mikrokontroler
1.3. Sekilas Tentang Arduino Nano

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
▪ Memahami pengertian dan manfaat mikrokontroler
▪ Memahami prinsip kerja dan penerapan mikrokontroler
▪ Mengenali jenis modul mikrokontroler Arduino Uno dan mengetahui
perbedaannya dengan modul mikrokontroler lainnya
▪ Mengetahui sejauh mana perkembangan dan pemanfaatan
mikrokontroler saat ini.

1
1.1. Pengertian Mikrokontroler

Yang dimaksud dengan mikrokontroler adalah sebuah sistem mikroprosesor


yang terkandung didalam sebuah chip yang mempunyai masukan dan keluaran serta
kendali dengan program yang bisa ditulis dan dihapus dengan cara yang khusus. Cara
kerja mikrokontroler sebenarnya hanya membaca dan menulis data. Sebagai contoh,
bayangkan diri kita saat mulai belajar membaca dan menulis, ketika kita sudah bisa
melakukan hal itu maka kita dapat membaca tulisan apapun baik buku, cerpen, artikel
dan sebagainya, dan kita juga dapat menulis hal-hal sebaliknya. Apabila kita sudah
mahir membaca dan menulis data maka kita dapat membuat program untuk membuat
suatu sistem pengaturan otomatis menggunakan mikrokontroler sesuai keinginan kita.

Mikrokontroler berbeda dari mikroprosesor serba guna yang digunakan di dalam


sebuah PC, karena sebuah mikrokontroler umumnya telah berisi komponen-komponen
pendukung, seperti : prosesor, memori, dan I/O. Namun, secara analogi
mikrokontroler merupakan komputer didalam chip yang digunakan untuk
mengontrol peralatan elektronik, yang ditekankan untuk efisiensi dan efektifitas
biaya. Secara harfiahnya juga dapat disebut "pengendali kecil" dimana sebuah sistem
elektronik yang sebelumnya banyak memerlukan komponen-komponen pendukung
seperti IC TTL dan CMOS dapat direduksi/diperkecil dan akhirnya terpusat serta
dikendalikan oleh mikrokontroler ini. Dengan penggunaan mikrokontroler ini maka :
1. Sistem elektronik akan menjadi lebih ringkas.
2. Tingkat keamanan dan akurasi yang lebih baik.
3. Rancang bangun sistem elektronik akan lebih cepat karena sebagian besar dari
sistem adalah perangkat lunak yang mudah dimodifikasi.
4. Kemudahan dalam penggunaannya untuk sistem yang berbasis mikrokontroler.
5. Pencarian gangguan lebih mudah ditelusuri karena sistemnya yang kompak.
Namun demikian, tidak sepenuhnya mikrokontroler dapat mereduksi
komponen ICTTL dan CMOS karena seringkali masih diperlukan
untuk aplikasi kecepatan tinggi atau menambah jumlah saluran masukan dan
keluaran (I/O).

1.2. Manfaat Mikrokontroler

Manfaat sistem mikrokontroler banyak sekali, apabila hanya mendengar


penjelasan dari teori, maka “ batasnya hanya sampai kepada imajinasi kita ”. Oleh karena

2
itu kita harus mempraktekannya. Dengan praktek perlahan kita dapat menguasainya,
dan menerapkannya ke dalam kehidupan sehari-hari. Sekedar contoh sederhana
penggunaan mikrokontroler, dapat kita lihat di sekitar lingkungan seperti mesin cuci,
microwave, penanak nasi cerdas, sistem parking, kemudian di dunia pertanian kita
dapat membuat kontrol kelembaban untuk budidaya jamur, di dunia perikanan kita dapat
mengendalikan suhu air kolam dan pemberi pakan otomatis. Bahkan SMS Gateway,
atau ke arah militer kita mampu menciptakan radio militer frekuensi hopping (radio
komunikasi anti sadap dengan lompatan frekuensi 100 kali dalam 1 detik), sistem
pemantau cuaca menggunakan balon udara, Automatic Vehicel Locator
(menggunakan GPS) dan sebagainya. Semua itu sekedar contoh, masih banyak lagi
yang bisa kita kembangkan dengan mikrokontroler. Sebagai prospek, arah
perkembangan dunia elektronika saat ini adalah ke embedded system (sistem
tertanam) atau embedded electronic (elektronik tertanam), jadi apabila kita ingin
belajar dan menguasai mikrokontroler maka kita sudah berada pada jalur yang tepat.

1.3. Sekilas Tentang Arduino Nano

Belakangan ini, Mikrokontroler keluarga Arduino menjadi sangat populer.


kepopuleran Arduino terlihat dari jumlah penggunanya saat ini yang mencapai lebih dari
satu juta pengguna, data ini didapat dari hasil penjualan resmi dari sebuah perusahaan
pembuatnya, bahkan diperkirakan jumlah pemakainya bisa berjumlah dua kali lipatnya
dengan adanya pengguna Arduino Clone (arduino Tiruan) penggunanya tidak hanya
berasal dari kalangan orang-orang yang bergelut dibidang elektronika atau otomasi saja,
namun kalangan umum pun banyak yang mempelajarinya bahkan anak-anak sekalipun.

Pada tutorial ini kami mencoba membantu dan memandu siapa saja yang ingin
mempelajari pemrograman Mikrokontroler berbasis Arduino Nano. Arduino mudah
didapatkan dengan harga yang cukup terjangkau dengan salah satu keunggulannya
adalah pemrogramannya yang sangat mudah, bahkan orang yang belum pernah
mempelajari bahasa pemrograman sebelumnyan pun bisa dengan cukup mudah
memahami cara pemrogramannya. Dengan dasar- dasar pemrograman yang akan
diberikan secara bertahap, diharapkan anda dapat mempraktekan berbagai projects
sederhana sekaligus menguasai pemrograman dasarnya.

3
(A)

(B)

Gambar 1.1 Bentuk Fisik Arduino Nano : (A) Arduino Nano Umum (B) Arduino
Nano yang Diproduksi Robotdy

4
Tanya

&

Jawab

1. Apakah untuk mempelajari pemrograman pada Arduino perlu menguasai terlebih


dahulu bahasa pemrograman tertentu?

Jawab :
Bahasa pemrograman Arduino menggunakan bahasa pemrograman yang
dikembangkan sendiri oleh Arduino dengan berbasis pada Processing. Bahasa
pemrograman ini identik dengan bahasa pemrograman C/C++, bagi anda yang
telah belajar pemrograman tersebut akan sangat mudah dan membantu dalam
memahaminya kemungkinan anda akan cepat terbiasa dengan
bahasa
Pemrograman Arduino, namun jika anda belum pernah belajar bahasa
pemrograman sekalipun tidak akan menjadi masalah, karena bahasa
pemrograman Arduino sangat mudah dipahami dengan teknik yang akan
diberikan pada modul ini.

2. Apakah sebelum memakai trainer ini seseorang harus memiliki keahlian


tertentu seperti merangkai rangkaian elektronik dan menguasai teknik digital?

Jawab :

Hal itu tidak terlalu penting, karena modul ini akan memandu anda secara
bertahap langkah demi langkah cara penggunaannya dan anda akan cepat
terbiasa, selain akan memberi pengetahuan tentang pemrograman, modul ini juga
sekaligus akan memberi anda pengetahuan dasar rangkaian elektronik dan dasar
teknik digital yang berkaitan dengan interfeacing dan pemrograman
mikrokontroler.

5
Rangkuman
Mikrokontroler adalah sebuah sistem mikroprosesor yang terkandung didalam
sebuah chip yang mempunyai masukan dan keluaran serta kendali dengan program
yang bisa ditulis dan dihapus dengan cara yang khusus.

Maanfaat mikrokontroler adalah untuk mengontrol suatu sistem atau alat secara
otomatis.

Arduino Nano merupakan sebuah modul mikrokontroler yang dibuat dengan


tujuan untuk mempermudah pengguna mempelajari dan memprogram mikrokontroler
untuk berbagai macam tujuan. Kemudahan mempelajari pemrograman mikrokontroler
Arduino memungkinkan siapa saja dapat mempelajarinya.

6
BAB 2
Mini Monster Trainer Arduino Kit

Materi

2.1. Sekilas Tentang Mini Monster Trainer Arduino Kit

2.2. Mari Mengenal Arduino Nano

2.3. Apa Itu IDE arduino?

2.4. Memulai Instalasi Driver Arduino Nano

2.5. Uji Coba Board Arduino Nano

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
▪ Memahami karakteristik Arduino Nano
▪ Mengetahui cara instalasi Driver Arduino Nano Secara Manual
▪ Melakukan pengujian sederhana Pada Arduino Uno dengan
▪ Membuat project LED blinking.

7
2.1. Sekilas Tentang Mini Monster Trainer Arduino Kit
Mini Monster Trainer Arduino Kit merupakan sebuah paket bundling yang berisi
berbagai macam komponen dan modul untuk mempermudah mempelajari
pemrograman dasar Arduino. Selain akan dibahas mengenai pemrograman dasar
arduino juga akan membahas beberapa komponen dasar beserta fungsinya sebagai
awal dari pengenalan komponen-komponen pendukung Arduino yang biasa digunakan
untuk membuat project-project yang lebih kompleks. Pada KIT ini Jenis Arduino yang
dipakai adalah Arduino Nano.

Gambar 2.1 Gambar Mini Monster Trainer Arduino Kit

2.2. Mari Mengenal Arduino Nano


Arduino merupakan sebuah platform board protoyping dari physical
computing yang bersifat open source. Komponen utama dalam papan Arduino adalah
sebuah mikrokontroler 8 bit yaitu ATmega yang dibuat oleh perusahaan Atmel
Corporation. Berbagai papan Arduino menggunakan tipe ATmega yang berbeda-beda
tergantung dari spesifikasinya, sebagai contoh Arduino Uno R3 menggunakan
ATmega328P ber-type DIP, Arduino Nano menggunakan ATmega328P ber-type
SMD, sedangkan Arduino Mega 2560 yang lebih canggih menggunakan ATmega2560.
Pada Mini Monster Trainer Arduino Kit ini arduino yang akan kita gunakan adalah
Arduino Nano R3 yang secara fungsi dan kemampuan sama persis dengan
Arduino Uno R3.

8
Arduino Nano R3 adalah sebuah board prototype berbasis mikrokontroler
ATmega328p SMD dengan ukuran yang sangat kecil dan sangat mudah digunakan
pada Breadboard. Keunggulan lainnya adalah memiliki jumlah Pin Analog yang lebih
banyak dari Arduino Uno.

Gambar 2.2 Bagian-Bagian Arduino Nano


• Memiliki 14 Pin Digital, yaitu Pin digital D0 s/d D13. Pin digital merupakan Pin
(kaki) Arduino Nano yang dapat kita seting sebagai output digital maupun input
digital. Digital artinya Pin tersebut dapat menjadi I/O (Input atau Output) digital.
Input Digital artinya arduino dapat menerima sinyal atau data berupa tegangan
sebesar 0V atau 5V sedangkan Output digital artinya Arduino dapat menghasilkan
tegangan 0V atau 5V.
• Memiliki 6 Pin Output PWM, yaitu Pin D3, D5, D6, D9, D10 dan
D11sehingga jika kita perhatikan keenam pin digital tersebut selain berfungsi
sebagai I/O digital juga dapat berfungsi sebagai Output PWM
• Untuk mengetahui apa itu PWM akan kita bahas pada project yang menggunakan
Pin PWM nanti.
• Memiliki 8 pin Input Analog, pin ini berfungsi sebagai pembaca tegangan yang
dihasilkan oleh sensor analog seperti sensor suhu, LDR, potensio, dll. Nilai sebuah
input dapat dibaca program dengan nilai antara 0 s/d1023, dimana nilai tersebut
mewakili tegangan dari 0V s/d 5V.

9
• USB Berfungsi untuk Memuat program dari komputer ke dalam board, sebagai
komunikasi serial antara board dan computer dan sebagai pemberi daya pada
board.
• Tombol Reset berfungsi untuk me-reset board Arduino Uno sehingga program
akan kembali ke awal. Tombol reset ini terhubung ke Atmega328 melalui kapasitor
100nf
• Vin, merupakan sumber daya eksternal. Pengunaan daya eksternal ketika board
Arduino Nano tidak terhubung melaui USB dan Vin ini dapat diberikan
tegangan DC antara 6 s/d12V, dan kami rekomendasikan sebesar 7V s/d 9V.
• Gnd bisa dikatakan sebagai polaritas negative ( - ) sebuah arus listrik

2.3. Apa itu IDE Arduino (Integrated Development Environment )

IDE Arduino adalah software yang cukup sederhana yang dibuat dengan
menggunakan Java. IDE Arduino terdiri dari:
• Editor program, sebuah windows yang memungkinkan pengguna menulis dan
mengedit program dalam bahasa Processing .
• Compiler, sebuah modul yang mengubah kode program (bahasa
Processing ) menjadi kode biner. Bagaimanapun sebuah microcontroller tidak
akan bisa memahami bahasa Processing . Yang bisa dipahami oleh
microcontroller adalah kode biner. Itulah sebabnya dalam hal ini compiler
diperlukan.
• Uploader, sebuah modul yang memuat kode biner dari komputer ke
dalam memori di dalam papan Arduino
Walaupun tampak seperti program Windows pada umumnya, namun
sebetulnya program ini adalah sebuah program Java. Sehingga untuk menjalankan
program ini diperlukan Java Runtime Environment (JRE) atau Java Development Kit
(JDK) yang telah terinstal. Software ini dapat digunakan secara gratis dan dapat diubah
atau dikembangkan secara bebas. Selain itu software ini dapat berjalan di berbagai jenis
OS seperti Windows, Mac OS X, dan Linux.

10
Gambar 2.3 Tampilan Software Arduino IDE

2.4. Memulai Instalasi Draiver Arduino Nano CH340


Untuk melakukan pemrograman dengan Arduino Uno terlebih dahulu kita harus
menginstal Driver Arduino Uno pada PC. Karena jika tidak melakukan penginstalan
driver maka proses untuk menanamkan program pada Arduino Uno tidak dapat
dilakukan. Berikut adalah langkah-langkah untuk menginstal driver :
Buka folder driver pada CD yang terdapat pada paket Mini Monster Trainer Arduino Kit
kemudian instal drivernya :

Gambar 2.4 Buka File CH341SER.zip

11
Gambar 2.5 Instal File SETUP.EXE

Gambar 2.6 Click INSTALL

Gambar 2.7 Penginstalan Berhasil, Click OK

12
2.5. Uji Coba Board Arduino Nano

Koneksikan Arduino Nano pada PC/Laptop dengan kabel USB yang telah
terdapat pada paket Mini Monster Trainer Arduino Kit

Gambar 2.8 Interface Arduino Nano pada PC via USB Buka


Aplikasi IDE ARDUINO

Gambar 2.9 Membuka Aplikasi IDE Arduino

Setelah aplikasi terbuka cemudian cek port komunikasi antara Arduino dan
PC dan pilih yang terdeteksi. Pada gambar di bawah, port yang terdeteksi adalah
COM19. Nomor COM berbeda-beda pada setiap PC, silahkan pilih yang terdeteksi.

13
Gambar 2.10 Membuka Aplikasi IDE Arduino
Pada Gambar diatas terlihat bahwa port komunikasi arduino telah terdekteksi
yang menandakan bahwa driver Arduino sudah berhasil teristal dan siap digunakan.
Pilih jenis board yang akan kita gunakan. Karena pada Mini Monster Trainer
Arduino Kit yang telah kita sediakan menggunakan Arduino Nano R3 maka jenis board
juga harus memilih Arduino Nano

Gambar 2.11 Memilih Jenis Board Sesuai Dengan Yang Kan Digunakan

14
Memilih prosesor atau chip Arduino Nano yang digunakan yaitu Atmega328p
(Old Bootloader)

Gambar 2.12 Memilih Processor Arduino Nano

Mencoba Memasukan Program yang terdapat pada examples

Gambar 2.13 Membuka sample program Blink

15
Lakukan proses Upload dengan menekan toolbar Upload yang dilingkari merah
pada gambar dibawah

Gambar 2.14 Upload Sketch Blink

Gambar 2.15 Proses Upload Berhasil

16
Jika Proses Upload berhasil maka akan terdapat informasi “Done uploading”
seperti pada highlight gambar di atas. Jika berhasil maka perhatikan Board Arduino
nano yang telah kita masukan program blink tersebut. Terlihat bahwa salah satu lampu
(LED) yang terdapat pada Board Arduino nano berkedip (nyala selama 1000ms atau
sedetik dan padam selama 1000ms).
Jika semua proses diatas telah berhasil maka dapat dipastikan bahwa Arduino
nano telah siap untuk dipakai dalam project selanjutnya pada tutorial ini.

*Catatan: Untuk kegiatan selanjutnya pastikan setiap setingan telah sesuai dengan
yang telah kita lakukan di atas seperti pemilhan board sehingga proses uploading.

17
Tanya
& Jawab

1. Apa yang harus kita lakukan apabila proses pengujian dengan

program LED Blinking telah berhasil?


Jawab :

Kita dapat segera melangkah pada tahap selanjutnya. tahap


selanjutnya akan anda pelajari pada BAB 3,

2. Apakah ketika Arduino kita lepas dari kabel USB program yang telah dibuat
akan hilang?
Jawab :

Tentu tidak, program yang telah anda dibuat akan tertanam


dalam mikrokontroler, program tersebut akan kembali dijalankan ketika kita
kembali memberi sumber tegangan pada Arduino. Sumber tegangan untuk
arduino adalah sumber tegangan DC yang bisa bersumber dari Adaptor atau
baterai. Besarnya sumber tegangan yang diperbolehkan adalah 5-20 V,
namun agar lebih aman sumber tegangan yang direkomendasikan adalah
9VDC.

18
BAB 3
PENGENALAN TOOLBAR IDE ARDUINO, DAN PENGENALAN
STRUKTUR SERTA SYNTAX BAHASA PROCESSING

Materi

3.1 Pengenalan Toolbar dan Istilah Pada IDE Arduino


3.2 Structure dan Syntax Pemrograman pada
IDE Arduino

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
• Memahami dan mengenali fungsi dari setiap toolbar pada software IDE Arduino
serta dapat menyeting IDE Arduino agar dapat digunakan untuk proses
compilling pada papan Arduino UNO
• Dapat menganalisis kekeliruan apabila terjadi Kesalahan pada proses compilling
(error)
• Memahami struktur umum pemrograman pada bahasa Processing serta
mengetahui fungsi berbagai macam syntax, variable, tipe data dan operator
Aritmatic.

19
3.1. Pengenalan Toolbar dan Istilah Pada IDE Arduino

Pada BAB ini, kita akan mempelajari fungsi-fungsi dari toolbar dan istilah pada
IDE Arduino. Untuk mempelajari hal tersebut kita masih akan menggunakan program
LED Blinking yang telah kita coba pada bab sebelumnya. Hal pertama yang perlu
dilakukan tentu membuka kembali aplikasi IDE Arduino dan buat kembali program LED
Blinking (buka kembali BAB II pada materi “2.6
Uji Coba Mini Monster Trainer Arduino Kit lalu amatilah tampilan pada IDE arduino
tersebut.

3.1.1. Sketch

Pada IDE Arduino setiap program yang dibuat pada lembar kerja IDE Arduino
dinamakan sebagai “SKETCH”, inilah istilah yang digunakan pada IDE Arduino untuk
setiap program kita buat, hal ini dapat diliihat di bagian yang di lingkari di bawah ini.

Gambar 3.1 Tools interface IDE Arduino


3.1.2. Verify

Pada gambar diatas juga terdapat lima buah Quick Access Tollbar yang
salah satunya yaitu “verify”. Fungsi toll ini adalah sebagai berikut :

20
“verify” : merupakan tombol perintah untuk memverifikasi sketch dengan
tujuan untuk mengetahui apakah sketch yang telah kita buat telah sesuai atau masih
terdapat kekeliruan. Selanjutnya cobalah menekan tombol tersebut pada sketch LED
Blinking yang telah kita buat sebelumnya dan amati apa yang terjadi.

Jika sketch yang telah kita buat sesuai


dan dapat dicompile maka kita akan
mendapat informasi bahwa proses
compiling telah selesai seperti pada
gambar di samping. “Compiling” adalah
proses penerjemahan

program atau sketch yang telah kita buat kedalam bahasa mesin atau biner. Perlu
diketahui pada dasarnya mikrokontroler hanya memahami perintah dalam kode biner (1
dan 0) oleh sebab itu fungsi utama dari IDE Arduino adalah untuk menerjemahkan atau
merubah bahasa pemrograman Processing kedalam bahasa mesin atau biner sehingga
dapat dieksekusi atau dijalankan oleh mikrokontroler.

3.1.3. Upload

Apabila dalam proses verifikasi tidak menunjukan kesalahan maka dengan kata
lain Sketch tersebut sudah dapat di tanamkan. Cara penanaman sketch

tersebut yaitu dengan menekan tombol “Upload” seperti yang telah


dilakukan pada proses ujicoba di BAB II. Setelah diupload maka sketch akan di
terjemahkan kedalam bilangan biner yang dapat dimengerti oleh mikrokontroler dan
kemudian mikrokontroler akan menjalankan atau memproses data tersebut, hasilnya
salah satu LED pada Kit Bundling yang diinterfeacekan dengan Arduino uno akan
berkedip atau on/off secara teratur.

3.1.4. Analisis Kesalahan Program

Untuk memahami apa yang dimaksud dengan sub BAB ini sialahkan coba untuk
menghapus salah satu simbol milsalnya tanda “ } “ di akhir sketch blink yang pernah kita
coba untuk ujicoba board Arduino Nano lalu tekan tombol “Verify” dan amati apa yang
terjadi sewaktu proses verify dilakukan! Jika sudah maka pada IDE akan nampak seperti
dibawah ini :

21
Gambar 3.2 Contoh Kesalahan Dalam Proses Upload

Pada proses tersebut baris pemrograman terakhir akan disoroti dan pada
terdapat pesan yang memberi kita petunjuk yang menyatakan pada pemrograman
tersebut belum diberi tanda ”}“ sebagai tanda berakhirnya sebuah program atau proses
sehingga tidak dapat di eksekusi.

Kesalahan selanjutnya yang sering terjadi adalah kurangnya kecermatan dalam


menulis program. Mungkin saja ketika mencoba beberapa sketch yang diberikan di
modul ini kita hanya melakukan copy dan paste sebuah program,

namun ketika kita mencoba menyalinnya kembali dengan mengetik ulang dari awal
maka mungkin saja kesalahan seperti contoh kasus yang akan dijelaskan sekarang
akan sering terjadi. Untuk lebih memahami silahkan anda rubah perintah “digitalWrite”
menjadi “DigitalWrite” atau “digitalwrite” lalu coba verifikasi dan perhatikan apa yang
akan terjadi! Yang akan terjadi adalah seperti yang ditunjukan pada gambar berikut ini.

Untuk membuktikannya silahkan anda melakukan beberapa ekperimen berkaitan


dengan hal ini. Pada dasarnya apabila kita salah atau kurang cermat dalam membuat
sebuah program, kita dapat mengetahuinya dengan mengamati perubahan warna
otomatis dari perintah yang kita tulis seperti pada perintah “DigitalWrite” di atas.

22
Aturan case sensitive ini tidak hanya berlaku untuk penulisan perintah saja seperti
semua tulisan yang berwarna atau berubah warna otomatis pada lembar kerja IDE
Arduino,

3.2. Structure dan Syntax Pemrograman pada IDE Arduino

Seperti yang telah disinggung pada bahasan sebelumnya, IDE Arduino


menggunakan bahasa pemrograman Processing. Bahasa pemrograman ini identik
dengan bahasa pemrograman C/C++ tetapi dengan penambahan library dan fungsi-
fungsi standar membuat pemrograman Arduino lebih mudah dipelajari dan lebih
manusiawi, Contoh, untuk mengirimkan nilai “HIGH” pada pin 10 pada Arduino, cukup
menggunakan fungsi “ digitalWrite(10, HIGH); ” Sedangkan kalau menggunakan
bahasa C aslinya adalah “ PORTB |=(1<<2); ”. Selain itu tersedia library yang sangat
banyak untuk menghubungkan Arduino dengan macam-macam sensor, aktuator
maupun modul komunikasi. Misalnya library untuk mouse, keyboard, servo, GPS, dsb.
Berhubung Arduino adalah open source, maka library-library ini juga open source dan
dapat di download gratis di website Arduino.

3.2.1. Structure

Struktur dasar dari bahasa pemrograman Processing untuk Arduino IDE


ini terdiri dari dua bagian yaitu:

1. void setup( )
2. {
3. // Statement;
4. }
5.
6. void loop( )
7. {
8. // Statement;
9. }

• void setup( ) { } : Semua kode di dalam kurung kurawal akan dijalankan

hanya satu kali ketika program Arduino dijalankan untuk pertama kalinya. Void

setup () Ini digunakan untuk pendefinisian mode pin atau memulai komunikasi

serial. Fungsi setup() harus diikut sertakan dalam program walaupun tidak ada

statement yang dijalankan

23
• void loop( ) { } : Fungsi ini akan dijalankan setelah setup (fungsi void setup)

selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi secara terus

menerus sampai catu daya (power) dilepaskan.

Contoh pada sketch LED Blinking:

1. void loop()
2. {
3. digitalWrite(13, HIGH); // nyalakan ‘pin’ 13
4. delay(1000); // pause selama 1 detik
5. digitalWrite(13, LOW); // matikan ‘pin’ 13
6. delay(1000); // pause selama 1 detik
7. }

3.2.2. Syntax

Berikut ini adalah elemen bahasa processing yang dibutuhkan untuk format

penulisan.

// (komentar satu baris)

Kadang diperlukan untuk memberi catatan pada diri sendiri apa arti dari kode-

kode yang dituliskan. Cukup menuliskan dua buah garis miring dan apapun

yang kita ketikkan di belakangnya akan diabaikan oleh program.

/* */ (komentar banyak baris)

Jika pembuat program memiliki banyak catatan, maka hal itu dapat dituliskan

pada beberapa baris sebagai komentar. Semua hal yang terletak diantara dua

simbol tersebut akan diabaikan oleh program.

{ } (kurung kurawal atau curly braces)

Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir

(digunakan juga pada fungsi dan pengulangan).

; (titk koma)

Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma

yang hilang maka program tidak akan bisa dijalankan).

24
3.2.3. Variable
Variable adalah sebuah penyimpan nilai yang dapat digunakan dalam
program. Variable dapat diubah sesuai dengan instruksi yang kita buat. Ketika
mendeklarisikan variable harus diikut sertakan type variable serta nilai awal
variable.

Type variableName = 0;

Contoh :
Int inputVariable = 0; //mendefinisikan sebuah variable bernama input
//Variable dengan nilai awal 0

Variable Scope
Sebuah variable dapat dideklarasikan pada awal program sebelum void

setup(), secara local di dalam sebuah function, dan terkadang di dalam sebuah block

statement pengulangan.

▪ Sebuah variable global hanya satu dan dapat digunakan pada semua block

function dan statement di dalam program. Variable global dideklarasikan

pada awal program sebelum function setup().

▪ Sebuah variable local dideklarasikan di setiap block function atau di setiap

block statement pengulangan dan hanya dapat digunakan pada block yang

bersangkutan saja.

Contoh penggunaan:

1. int value; // ‘value’ adalah variable global dan dapat digunakan pada semua
2. //block funtion
3.
4. void setup()
5. {
6. // tidak ada setup
7. }
8.
9. void loop()
10. {
11. for ( int i=0; i<20;) { // 'i' hanya dapat di gunakan dalam pengulangan saja
12. }

3.2.4. Data Type Untuk Variable


Byte
Type byte dapat menyimpan 8-bit nilai angka bilangan asli tanpa koma.
Byte memiliki range 0 – 255

25
byte upi = 180; // mendeklarasikan ‘upi’ sebagai type byte
Integer
Integer adalah tipe data yang utama untuk menyimpan nilai bilangan
bulat tanpa koma. Penyimpanan integer sebesar 16-bit dengan range 32.767
sampai -32.768.
Int fptk = 1600; // mendeklarasikan ‘fptk’ sebagai type integer

Long
Perluasan ukuran untuk long integer, penyimpanan long integer
sebesar 32-bit dengan range 2.147.483.647 sampai -2.147.483.648
long bandung = 500000; // mendeklarasikan ‘bandung’ sebagai type

Float
Float adalah tipe data yang dapat menampung nilai decimal, float merupakan

penyimpan yang lebih besar dari integer dan dapat menyimpan sebesar

32-bit dengan range 3.4028235E+38 sampai -3.4028235E+38


float jpte = 3.14; // mendeklarasikan ‘jpte’ sebagai type float

Array

Array adalah kumpulan nilai yang dapat diakses dengan index number, nilai

yang terdapat dalam array dapat dipanggil dengan cara menuliskan nama

array dan index number. Array dengan index 0

merupakan nilai pertama dari array. Array perlu dideklarasikan dan kalau

perlu diberi nilai sebelum digunakan.

Contoh penggunaan array:

1. int arrayNomor[] = {2,4,6,8,10}


2. x = arrayNomor[5]; // x sekarang sama dengan 10

3.2.5. Operator Aritmetic


Aritmetic

Operator aritmatik terdiri dari penjumlahan, pengurangan, pengkalian,

dan pembagian.

1. y = y + 3;
2. x = x - 8;
3. i = i * 5;
4. r = r / 9;

dalam menggunakan operan aritmatik harus diperhatikan agar tidak terjadi


overflow range data.

26
Compound Assignments

Statement ini membadingkan dua variable dan apabila terpenuhi akan bernilai 1

atau true. Statement ini banyak digunakan dalam operator

bersyarat.

1. x == y; // x sama dengan y
2. x != y; // x tidak sama dengan y
3. x < y; // x lebih kecil dari y
4. x > y; // x lebih besar dari y
5. x <= y; // x lebih kecil dari sama dengan y

Logic Operator

Operator logical digunakan untuk membandingkan 2 ekspresi dan

mengembalikan nilai balik benar atau salah tergantung dari operator yang

digunakan. Terdapat 3 operator logical AND,OR, dan NOT, yang biasanya

digunakan pada if statement.

Contoh penggunaan:

- Logical AND
if (x > 0 && x < 5) //bernilai benar apabila kedua operator pembanding
- Logical OR
if ( x > 0 || y > 0) //bernilai benar apabila salah satu dari operator
//pembanding terpenuhi

- Logical NOT
if ( !x > 0 ) // benilai benar apabila ekspresi operator salah

Konstanta
Arduino mempunyai beberapa variable yang sudah dikenal yang kita sebut

konstanta. Ini membuat memprogram lebih mudah untuk dibaca. Konstanta

dikelasifikasi berdasarkan group.

- True / False

Merupakan konstanta Boolean yang mendifinisikan logic level.

False mendifinisikan 0 dan True mendifinisikan 1

1. if ( b == TRUE );
2. {
3. //doSomething
4. }

27
- High/Low

Konstanta ini mendifinisikan aktifitas pin HIGH atau LOW dan digunakan

ketika membaca dan menulis ke digital pin. HIGH

didefinisikan sebagai 1 sedangkan LOW sebagai 0.

digitalWrite(13, HIGH ); //pin digital 13 akan bernilai HIGH atau

//menghasilkan 5V

- Input/Output

Konstanta ini digunakan dengan fungsi pinMode() mendifinisikan mode pin

digital, sebagai input atau output


pinMode(13, OUTPUT); //menyatakan bahwa pin 13 akan dipakai sebagai output

- If

If Operator if melakukan tes sebuah kondisi seperti nilai analog sudah

berada di bawah nilai yang kita kehendaki atau belum, apabila

terpenuhi maka akan mengeksekusi baris program yang ada dalam

brackets kalau tidak terpenuhi maka akan mengabaikan baris

program yang ada dalam brackets.

1. if ( someVariable ?? value )
2. {
3. //DoSomething;
4. }

- If... Else

Operator if…else mengetest sebuah kondisi apabila tidak sesuai dengan

kondisi yang pertama maka akan mengeksekusi baris program yang ada di

else.

1. if ( inputPin == HIGH )
2. {
3. //Laksanakan kondisi A;
4. }
5. else
6. {

28
7. //Laksanakan kondisi B;
8. }

- For

Operator for digunakan dalam blok pengulangan tertutup.

1. for ( initialization; condition; expression )


2. {
3. //doSomethig;
4. }

- While

Operator while akan terus mengulang baris perintah yang ada

dalam bracket sampai ekspresi sebagai kondisi pengulangan benilai

salah.

1. while ( someVariable ?? value )


2. {
3. //doSomething;
4. }

- Do... While

Sama halnya dengan while() hanya saja pada operator Do…while

tidak melakukan pengecekan pada awal tapi di akhir, sehingga

otomatis akan melakukan satu kali baris perintah walaupun pada

awalnya sudah terpenuhi.

1. do
2. {
3. //doSomething;
4. }
5. while ( someVariable ?? value );

- Digital I/O

Input / Output Digital pada breadboard Arduino ada 14, pengalamatnya 0 -

13, ada saat tertentu I/O 0 dan 1 tidak bisa digunakan karena dipakai untuk

komunikasi serial, sehingga harus hati-hati dalam pengalokasian I/O.

- pinMode(pin, mode)

29
Digunakan dalam void setup() untuk mengkonfigurasi pin apakah sebagai

Input atau Output. Arduino digital pin secara default dikonfigurasi sebagai

input sehingga untuk merubahnya harus menggunakan operator

pinMode(pin, mode).

1. pinMode (pin, OUTPUT); // mengset pin sebagai output


2. digitalWrite(pin, HIGH); // pin sebagai mengalirkan arus

- digitalRead(pin)

membaca nilai dari pin yang kita kehendaki dengan hasil HIGH atau

LOW.
value = analogRead(pin); // mengset ‘value’ sama dengan nilai analog

- analogWrite(pin, value)

mengirimkan nilai analog pada pin analog


analogWrite(pin, value); // menulis ke pin analog

- Time

- delay(ms)

Menghentikan program untuk sesaat sesuai dengan yang

dikehendaki, satuanya dalam millisecond.

delay(1000); // menunggu selama satu detik

- millis()

Mengembalikan nilai dalam millisecond dihitung sejak Arduino board

menyala. Penapungnya harus long integer.


Value = millis(); // set ‘value’ menjadi millis()

- Math

- min(x,y)

Membadingkan 2 variable dan akan mengembalikan nilai yang paling

kecil
value = min(value, 100); // set ‘value’ sebagai nilai yang paling
// kecil
- max(x,y)

30
Max merupakan kebalikan dari min.

value =max(value, 100); // kebalikan dari min

- Random

- randomSeed(seed)

- random(min,max)

- Serial

Serial.begin(rate)

Statement ini digunakan untuk mengaktifkan komunikasi serial dan menset

baudrate.

1. void setup()
2. {
3. Serial.begin(9600); //open serial port and set baudrate 9600 bps
4. Serial.println(100); //mengirimkan 100
5. Serial.println(data); //Mengirimkan data ke serial port
6. }

31
Rangkuman
Sketch merupakan istilah yang digunakan pada IDE Arduino untuk setiap
program yang dibuat Pada IDE Arduino

Verify merupakan tombol perintah untuk memverifikasi sketch dengan tujuan


untuk mengetahui apakah sketch yang telah kita buat telah sesuai atau masih terdapat
kekeliruan

Upload merupakan sebuah istilah untuk peroses pengkonversian sketch


kedalam bahasa mesin yang kemudian setiap perintah dalam sketch dapat dieksekusi
oleh Mikrokontroler

Struktur dasar dari bahasa pemrograman Processing untuk Arduino


IDE ini terdiri dari dua bagian yaitu :
void setup( )
{
}

void loop( )
{
}
Ini merupakan struktur umum yang digunakan proses pembuatan sketch pada
IDE Arduino
Syntax merupakan elemen berupa beberapa elemen penulisan pada bahasa
pemrograman Processing. Element tersebut diantaranya

// (komentar satu baris)


/* */ (komentar banyak baris)
{ } (kurung kurawal atau curly braces)
; (titk koma)

Variable adalah sebuah penyimpan nilai yang dapat digunakan dalam program.
Variable dapat diubah sesuai dengan instruksi yang kita buat. Ketika mendeklarisikan
variable harus diikut sertakan type variable serta nilai awal variable. Nilai untuk
variable diistilahkan dengan sebutan Data Type yang terdiri dari Byte, Integer, Long,
Float dan Array.

Operator Aritmetic merupakan istilah dari program-program yang dapat


digunakan pada IDE Arduino dalam pembuka sketch

32
BAB 4
MEMPELAJARI DASAR PEMROGRAMAN IPUT DAN OUTPUT

Materi

4.1 Program Dasar

4.2 LED Blink

4.3 Traffic LED

Lembar informasi
Pembahasan pada bab kita akan mempelajari dasar pemrograman dan
pemnggunaan IDE arduino diantaranya membahas mengenai bagaimana proses
mendownload program pada Arduino Uno mulai dari interfeacing (membuat rangkaian
dengan Kit Interfeace Arduino Uno) menuliskan program, proses mendownload
program, menganalisa program, menganalisa komponen dan rangkaian hingga sampai
mengamati hasilnya.

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
▪ Mampu menulis sketch dengan benar dan mampu membuat berbagai
project menggunakan LED

▪ Dapat memahami berbagai perintah dasar dan konsep dalam


pemrograman

33
▪ Mampu membuat project berbeda denga mengunakan rangkaian yang sama
▪ Mampu membedakan perbedaan setiap type data dan mampu
menggunakan type data yang tepat dalam membuat berbagai project
▪ Mampu menghitung besaran resistor berdasarkan kode warna dan mampu
menentukan niai resistor untuk membatasi arus pada LED
▪ Mampu menganalisis skematik rangkaian dan menerapkannya pada
breadboard dan Mini Monster Trainer Arduino Kit
▪ Dapat menganalisis prinsip kerja dari setiap project yang dibuat.

34
4.1. Program Dasar

Jika biasanya untuk memahami, mengetahui atau mempelajari sebuah program


dimulai dari mempelajari dan mengingat teori-teori lalu kemudian diaplikasikan atau
dipraktekan dengan membuat sebuah project, namun pada modul ini kita akan
menggunakan metode dengan pendekatan yang berbeda. Justru sebaliknya, pada
modul ini kita akan membuat sebuah project dari mulai membuat sebuah program,
melakukan interfeacing atau merangkai rangkaian hingga mengamati hasil dari kegiatan
tersebut terlebih dahulu, kemudian barulah kita menganalisis dan mencoba
memahaminya baik itu dari segi bahasa pemrograman, interfeacing (input/output)
maupun dari segi rangkaian atau hardware.

4.2. LED Blinking


Sketch ini pernah kita buat dan kita aplikasikan sebelumnya, yaitu pada saat kita
melakukan pengujian Mini Monster Trainer Arduino Kit di bab dua. Kali ini kita juga akan
membahas dan menganalisis project tersebut dan mencoba untuk memahaminya.

4.2.1. Persiapan Untuk Membuat Project LED Blingking


Rangkailah (interfeacekan) Mini Monster Trainer Arduino Kit dan Arduino seperti
gambar di bawah ini :

Gambar 4.1 Rangkaian (Wiring) Pada Breadboard


Program (sketch) LED Blinking

1. /*
2. LED Blinking merupakan perogram paling dasar yang dapat dijalankan arduino. By : Monsterchip
3. */

35
4.
5. int R = 13; // pemberian nama dan inisialisasi untuk LED yang akan digunakan
6.
7. void setup()
8. {
9. pinMode(R, OUTPUT);
10. }
11.
12. void loop()
13. {
14. digitalWrite(R, HIGH);
15. delay(1000);
16. digitalWrite(R, LOW);
17. delay(1000);
18. }

Hasil
Hasil dari project ini yaitu menyala dan matinya salah satu LED pada Mini Monster
Trainer Arduino Kit yaitu led bernama “R” secara beraturan dengan jeda satu detik.
Pemasangan LED harus diperhatikan polaritasnya. Kaki yang panjang mengarah ke
kutup Positif (+), sedangkan kaki yang pendek atau kaki pada permukaan LED yg
datar, mengarah ke kutub negatif (-) Analisis Sketch (Program) LED Blinking

Syntax
Jika kita amati sketch tersebut kita akan melihat beberapa element pada bahasa
pemrograman Arduino.
// (komentar satu baris)

Tanda ini berfungsi untuk menuliskan komentar. Hal ini berguna untuk
memberikan keterangan atau arti dari kode yang kita buat, ini akan sangat
membantu untuk mengingat terlebih jika program yang kita buat sangat banyak.
Apapun yang ditulis di belakang tanda tersebut akan diabaikan pada proses
upload. Lalu bagaimana jika komentar kita lebih dari satu baris dengan
menggunakan tanda ini? Untuk menjawabnya mengapa kita tidak mencobanya
saja? Kemudian silahkan simpulkan dari hasil percobaan tersebut.
/* */ (komentar banyak baris)

Jika pembuat program memiliki banyak catatan, maka hal itu dapat dituliskan

pada beberapa baris sebagai komentar. Semua hal yang terletak diantara dua

simbol tersebut akan diabaikan oleh program.

{ } (kurung kurawal atau curly braces)


Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir

(digunakan juga pada fungsi dan pengulangan).

36
; (titk koma)
Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma yang

hilang maka program tidak akan bisa dijalankan, untuk membuktikannya silahkan

coba hapus dan upload lalu amati yang terjadi).

Penjelasan mengenai syntax di atas sebenarnya telah kita bahas pada bab
tiga, namun penjelasan langsung pada project yang kita buat akan lebih
membantu kita memahami fungsinya secara langsung.

Data Type Untuk Variable

Pada bagian inisialisasi yaitu pada bagian “ int R = 13; “ sketch ini menggunakan
type data integer untuk variabel “R” (R adalah nama yg diberikan untuk LED yang kita
gunakan) dan dinyatakan akan dirangkai atau dihubungkan dengan digital pin Digital13
(D13).
Lalu mengapa kita gunakan data integer? Untuk itu silahkan baca kembali pada
sub bab 3.2.4 yang membahas hal tersebut. Penggunaan data yang tepat akan
menghasilkan program yang baik dan akan menghemat memori yang diperlukan. Jika
penggunaan data interger sudah dirasa cukup mengapa kita harus menggunakan tipe
data yang lain misalnya “long” atau “float”. Untuk membuktikannya kita bisa melakukan
percobaan sederhana, yaitu mari kita perhatikan pada bagian informasi di IDE arduino
yang akan kita dapat setelah sketch diupload.

Gambar 4.2 Bagian informasi IDE Arduino


Di bagian tersebut setelah kita upload sketch yang telah sesuai dan dapat
dieksekusi maka kita akan mendapatkan informasi jumlah memori yang terpakai oleh
sketch tersebut yaitu sebesar 1,084 byte dan maksimum memory yang bisa kita buat
dan upload pada Arduino Uno adalah 32, 256 byte. Sekarang silahkan rubah type data
pada program tersebut menjadi “long” (long R = 13;) atau “float” (float R=13) dan lihat
apa yang terjadi!
Lalu bagaimana jika kita ingin menggunakan pin digital yang lain mengingat
jumlah pin digital pada Arduino ada sebanyak 14 buah (0-13)? Untuk merubah pin yang

37
kita gunakan kita tinggal merubah bilangan “13” pada bagian inisialisasi tersebut (int R =
13;) menjadi pin yang kita inginkan, contoh jika kita ingin menggunakan pin digital “12”
maka inisialisasi ditulis menjadi ” int R = 12; “ dan seterusnya, namun tentunya pada
rangkaian kita harus merubah interfeacing-nya yaitu merubah hubungan kabel jumper
yang terhubung pada pin 13 menjadi pin 12.

Structure Program
Analisis lebih lanjut kini kita menginjak pada struktur program, dimana pada
sketch ini terdapat dua bagian utama program void yaitu “void setup() “ dan void loop
“void loop()” dimana bagian tersebut memiliki fungsi masing-masing.
Void Setup
Mari kita bahas fungsi void setup pada sketch ini. Perhatikanlah program yang
ditulis adalah sebagai berikut :
Pada gambar di Bawah yaitu di bagian void setup terdapat statement,

1. {
2. pinMode (R, OUTPUT);
3. }

Gambar 4.3 Program LED blingking di IDE

Yang berarti program ini akan memerintahkan pin yang digunakan “R” yaitu pin
“13” diseting sebagai output, dan untuk menyeting ini maka Arduino Uno akan

38
melakukan eksekusi sekali dengan memberikan tegangan output pada pin tersebut
sesaat setelah program diuplod pada Arduino Uno.
Lalu apa yang dimaksud dengan “OUTPUT” itu sendiri? Lalu apa perbedaan
statement output dan input? Darimana kita tau bahwa Arduino memang mengeksekusi
sebanyak satu kali program pada bagian void setup tersebut?
Yang dimaksud dengan “ OUTPUT ” yang ditulis tersebut yaitu sebuah perintah
agar mikrokontroler mengeluarkan tegangan output (besar tegangan output pada
mikrokontroler adalah sebasar +5V), sedangkan perbedaannya dengan statement
“INPUT” yaitu pada perintah ini justru sebaliknya, yaitu perintah agar mikrokontroler
membaca tegangan yang masuk (tegangan input maksimum adalah sebesar +5V) untuk
di proses pada perintah selanjutnya. Untuk mengetahui apakah memang benar Aduino
Uno akan mengeksekusi atau menjalankan program pada bagian Void setup, kita bisa
mengamatinya secara langsung dan silahkan mencobanya dengan mengupload sketch
tersebut. Ketika sesaat sketch diupload maka led akan menyala sebanyak satu kali.

Void loop
Void Loop merupakan program utama dalam sebuah program, dimana program
ini akan dieksekusi atau dijalankan setelah void setup. Bedanya pada void loop program
akan dijalankan berulangkali hingga catudaya pada arduino dilepas.
Pada sketch ini void loop berisi program utama LED Blinking yaitu :

Lalu apa yang dimaksud dengan “delay”? dan mengapa bilanganya ditulis
sebesar “1000”? yang dimaksud dengan delay adalah program agar mikrokontroler
menjalankan perintah sebelumnya selama tentang waktu yang di tentukan. Kemudian
bilangan “1000” merupakan besaran waktu dalam bentuk mili detik, yang artinya 1000ms

39
= 1s (1 detik), 2000ms = 2s (2 detik) dan seterusnya. Untuk membuktikannya mengapa
tidak kita coba merubah besaran delay pada sketch ini?

4.2.2. Analisis Hardware LED Blinking

Mini Monster Trainer Arduino Kit merupakan trainer untuk membuat berbagai
program dan rangkaian sederhana, dengan trainer ini kita tidak hanya belajar mengenai
pemrograman namun juga tau cara bagaimana merangkaianya serta mengerti fungsi
dari masing-masing komponen yang kita pakai.
Resistor
Arus yang diperlukan untuk menghasilkan cahaya yang paling terang pada jenis
LED Super Bright dan LED Ultra Bright adalah sebesar 0.02A, untuk itu kita perlu
menggunakan sebuah resistor agar arus yang mengalir pada LED tidak melebihi 0.02A.
Yang menjadi pertanyaan adalah “Berapakah nilai resistor yang
diperlukan?”, Nah perhitungannya adalah sebagai berikut :

R : Nilai resistor
Vs : Sumber tegangan (tegangan maksimum pada pin output Arduino sebesar
+5V)
Vf : Tegangan barrier (1.2V s/d 1.8V) merupakan tegangan yang harus dilewati
terlebih dahulu untuk mengalirkan arus pada LED
If : Arus kerja maksimum (20mA)

Sehingga dengan persamaan di atas dapat ditentukan bahwa nilai


minimum resistor yang harus digunakan adalah sebagai berikut:
R = (5-1,2V )/ 0.02A = 190
namun untuk memperkecil resiko kerusakan MCu karena terlalu sering
mengalirkan arus yang besar yang dipakai adalah resistor yang bernilai 220. Dengan
begitu mikrokontroler dan LED akan memiliki keawetan yang lebih

lama.

40
Gambar 4.4 Rangkaian LED Series Resistor

Untuk mengetahui nilai resistor berdasarkan kode warna kita dapat mempelajari
dibawah ini. Perhatikanlah tabel kode warna resistor pada tabel berikut.

Tabel 4.5 Kode Warna Resistor

Ganbar 4.6 Cincin Pada Resistor

Sesuai dengan perhitungan sebelumnya, bahwa nilai resistor yang diperlukan


adalah sebesar 220 Ω maka warna-warna pada cincin resistor tersebut adalah sebagai
berikut.

41
Ganbar 4.7 Warna Cincin Pada Resistor 220 Ohm 1%

Cicncin pertama adalah merah yang dalam tabel memiliki nilai 2, cincin kedua juga
berwarna merah yang bernilai 2 dan cincin ketiga merupakan pengali yang berwarna
Coklat bernilai 101, sedangkan yang berwarna emas adalah toleransi.

Catatan: Apabiala rangkaian yang telah dibuat dan diprogram tidak berjalan seperti
semestinya pastikan rangkaian telah sesuai dengan gambar dan ingat memasang LED
jangan sampai terbalik antara katoda dan Anodanya, karena jika terbalik maka LED tidak
akan menyala.

4.3. Traffic LED


Project ini merupakan project untuk mengatur nyala LED agar menyerupai lampu
lalulintas. Untuk permulaan mari kita mulai dengan mencoba mengontrol tiga buah LED
(Merah, Kuning, dan Hijau).
Merangkai Rangkaian Traffic LED
Buatlah rangkaian pada breadboard seperti gambar di bawah ini :

42
Gambar 4.8 Wiring /Rangkaian Traffic LED
Program (sketch) Traffic LED

1. // Project Traffic Lights


2. int ledDelay = 5000; // menentukan delay yang dapat dipanggil
3. int r = 12;
4. int y = 11;
5. int g = 10;
6.
7. void setup()
8. {
9. pinMode(r, OUTPUT);
10. pinMode(y, OUTPUT);
11. pinMode(g, OUTPUT);
12. }
13.
14. void loop()
15. {
16. digitalWrite(r, HIGH); // LED merah menyala
17. delay(ledDelay); // tunggu selama 5 detik
18. digitalWrite(y, HIGH); // LED Kuning menyala
19. delay(2000); // tunggu 2 detik setelah LED kuning menyala
20. digitalWrite(g, HIGH); // LED hijau menyala
21. digitalWrite(r, LOW); // LED Merah mati
22. digitalWrite(y, LOW); // LED Kuning mati
23. delay(ledDelay); // tunggu selama 5 detik
24. digitalWrite(y, HIGH); // LED Kuning Menyala
25. digitalWrite(g, LOW); // Led Hijau Mati
26. delay(2000); // tunggu 2 detik
27. digitalWrite(y, LOW); //LED kuning Mati
28. }

Kemudian mari kita amati hasil dari pemrograman tersebut.

Analisis Sketch Trafick LED


Setelah diperogram maka LED akan menyala menyerupai lampu lalulintas, dimana
akan ada empat bagian program yang dieksekusi berulang pada “Void loop()” simulasi
seperti gambar dibawah ini :

43
Gambar 4.9 Simulasi hasil pemerograman.

Setelah diberikan contoh, silahkan dicoba untuk membuat Traffic LED dengan
mengunakan enam buah LED. Cobalah membuat program untuk mengontrol enam buah
LED tersebuat sehingga dapat menyerupai lampu lalulintas yang sebenarnya. Perlu
diketahui bahwa membuat simulasi lampu lalulintas memang terlihat sederhana,
namun bagi pemula ini akan sedikit membingungkan dan cukup memakan waktu tapi
akan tetap menyenangkan. Perlu diingat bahwa ketika lampu lalulintas pertama
berwarna merah maka lampu lalulintas lainnya berwarna hijau dan seterusnya,

Demikian untuk pengenalan singkat tentang Arduino, merakit komponen dengan


peoject board, dan membuat program sederhana LED berkedip. Silakan lakukan
improvisasi rangkaian tersebut sehingga lebih paham dan lebih nyaman menggunakan
project board. Selanjutnya, kita akan lebih mendalami beberapa perintah dasar dan
fungsi-fungsi logika untuk membuat program Arduino.

44
BAB 5
MEMPELAJARI perintah dasar dan fungsi-fungsi logika

Materi

5.1 Perintah IF dan IF-ELSE

Lembar Informasi

Sebelumnya kita sudah belajar tentang membuat LED berkedip, saat ini kita
akan lebih memahami lebih dekat tentang Bahasa pemrograman dan fungsi- fungsi
logika yang umum dipakai. Implementasi dari pembelajaran fungsi logika tersebut akan
diterapkan pada beberapa model Animasi LED seperti running LED atau yang lainnya.

45
5.1. Perintah IF dan IF – ELSE
Perintah IF memiliki beberapa kombinasi, bisa IF saja, IF-ELSE, IF-ELSE IF-
ELSE (IF-ELSE di dalam IF-ELSE), dan seterusnya. Semakin kompleks tentu logika
yang dipakai akan semakin rumit.

5.1.1. Logika IF
Mari kita buat rangkaian seperti LED blink yang pernah kita buat namun memakai Pin
yang berbeda yaitu PIN D13 (digital 13). Berikut adalah gambar rangkaiannya pada
Breadboard,

Gambar 5.1 Rangkaian LED Pada Logika IF


Program Dasar Menggunakan logika IF Silahkan
Masukan Program di bawah ini :

1. //Penggunaan Logika IF BY: Monsterchip


2.
3. const int LED_MERAH = 13;
4. int Nilai_Tunda = 1000; // awal time delay 1000 / 1 detik
5.
6. void setup()
7. {
8. pinMode(LED_MERAH, OUTPUT);// pin LED sebagai output
9. }
10.
11. void loop()
12. {
13. // Setiap looping, nilai timeDelay dikurangi 100
14. Nilai_Tunda = Nilai_Tunda - 50;
15. if(Nilai_Tunda <= 0) //Jika Nilai_Tunda 0 atau bernilai negatif maka...
16. {
17. Nilai_Tunda = 1000; //Nilai_Tunda diseting bernilai 1000 kembali
18. }
19. digitalWrite(LED_MERAH, HIGH);//Nyalakan dan matikan LED selama timeDelay
20. //delay(Nilai_Tunda);

46
21. digitalWrite(LED_MERAH, LOW);
22. delay(Nilai_Tunda);
23. }

Analisis Program
Pada program ini LED pada awalnya akan berkedip pelan selama 1000ms, lama-
lama akan berkedip cepat, dan akan akhirnya akan berkedip pelan lagi. Untuk
menganalisis program tersebut, mari kita bahas satu persatu.
Ketika awal dinyalakan, maka delay atau jeda adalah 1000. Nilai tersebut di
inisialisasi pada “ int Nilai_Tunda = 1000; “. Baris ini tidak dijadikan konstanta (const)
sebagaimana “LED_MERAH” karena nilai dari “Nilai_Tunda “akan diubah-ubah. Dalam
program ditunjukan pada gambar 5.2 yang bernomor 1.

Gambar 5.2 Penggunaan Logika IF


Pada gambar di atas yang diberi tanda kotak merah bernomor 2 menyatakan
bahwa LED_Merah diseting sebagai Output.

47
Kemudian pada nomor 3 bahwa kita menyatakan “Nilai_Tunda” merupakan
Nilai_Tunda yang dikurangi 50 . Sehingga Nilai_Tunda pertama yang digunakan untuk
menyalakan dan mematikan LED adalah 1000-50 = 950. Pada perulangan selanjutnya,
Nilai_Tunda kembali dikurangi 50, sehingga pada
perulangan ke-2 nilai dari Nilai_Tunda menjadi 850 (lebih singkat dari
Nilai_Tunda yang awal), begitu seterusnya hingga pada Nilai_Jeda 50.
Sehingga jika kita runut maka ketika program berjalan awalnya
Nilai_Tunda bernilai 1000 kemudian dikurangi 50 sehingga Nilai_Tunda menjadi
950, kemudian setelah program loop dijalankan maka Nilai_Tunda kembali urangi 50
sehingga menjadi 850 pada perulangan yang ke-2 dan seterusnya. Pengurangan ini
dieksekusi setiap looping atau setiap baris terakhir pada “ void loop ” dijalankan (Garis
panah no. 6) hingga sampai Nilai_Tunda bernilai 0. Lalu jika sudah bernilai 0 maka
logika IF akan dijalankan.
Logika IF (garis merah no 4 pada gambar Gambar 5.2) yaitu :
if(Nilai_Tunda <= 0)
jika kita terjemahkan maka arti dari logika tersebut adalah “ jika nilai pada
Nilai_Tunda kurang dari sama dengan 0 (bernilai 0 atau negatif) maka akan
menjalankan perintah selanjutnya yang ada di dalam {} IF yaitu “ Nilai_Tunda =
1000; ” atau artikan bahwa Nilai_Tunda kita seting kembali bernilai 1000. Sehingga
program ini akan membuat LED nyala dan mati dengan jeda yang semakin cepat lalu
kembali melambat. Program ini akan terus menerus dijalankan hingga Arduino kita
matikan, namun akan tetap tersimpan pada memori Arduino, sehingga ketika Arduino
kita nyalakan kembali makan program ini akan kembali dijalankan.
Perintah IF pasti akan diikuti dengan kondisi yang bernilai True yang diapit dengan
tanda kurung, if (kondisi) Pada Sketch atau program di atas kondisi yang digunakan
adalah Nilai_Tunda <= 0, Nilai_Tunda lebih kecil atau sama dengan nol. Artinya, jika
Nilai_Tunda bernilai 0 atau lebih kecil dari 0, maka blok kode dalam IF akan dieksekusi
Pada project diatas selain memperkenalkan penerapan logika “IF” kita
juga sudah memakai operator aritmatika yaitu , silahkan baca kembali BAB 3 mengenai
Operator Aritmatika. Sebagai pengingat berikut adalah operator aritmatika yang biasa
digunakan

48
5.1.2. Perintah Atau Logika IF-ELSE
Pada dasarnya IF-ELSE merupakan pengembangan dari IF. ELSE berarti
kondisi yang tidak sesuai dengan kondisi dalam IF. Dengan kata lain, ELSE artinya “jika
tidak”. Sehingga jika kita bandingkan ketika antara keduanya dimana logika IF akan
mengeksekusi setiap pernyataan dengan analogi seperti dibawah ini :
“Saya sedang bermain game, Jika sekarang jam 5 sore maka sekarang waktunya
membaca juga”
Begitulah logika IF berjalan yaitu mengeksekusi dua kegiatan jika kondisi
terpenuhi sedangkan logika IF-ELSE bisa kita analogikan dengan:
“jika sekarang jam 5 pagi maka waktunya bangun, jika tidak maka saya tidur”
Maka pada analogi diatas pada Logika IF-ELSE dapat menentukan pilihan yaitu
jam 5 pagi bangun sedangkan jika bukan jam 5 pagi berarti tidur. Perlu
dicatat bahwa logika IF-ELSE juga merupakan logika dasar yang jika ketika
dianalogikan seperti diatas maka hanya dua kegiatan yaitu bangun dan tidur.

49
Mari kita buat aplikasinya dalam rangkaian yang sama sebelumnya namun agar
lebih variatif kita gunakan pin yang lain yaitu pin 8.
Program Penggunaan Logika IF-ELSE

1. //Penggunaan Logika IF-ELSE BY: Monsterchip


2.
3. const int pinLED = 8;
4. int Waktu_Delay = 1000; // awal time delay 1000 | 1 detik
5.
6. void setup()
7. {
8. pinMode(pinLED, OUTPUT);// pin LED sebagai output
9. }
10.
11. void loop()
12. {
13. /* Jika Waktu_Delay bernilai lebih kecil sama dengan 0 maka LED akan diam selama 3 detik
14. lalu nilai Waktu_Delay direset ke 1000
15. */
16. if(Waktu_Delay <= 100) //Jika Waktu_Delay sudah Kurang Dari Sama dengan 100
17. {
18. delay(3000); //Jeda selama 3 detik
19. Waktu_Delay = 1000; //Setelah jeda 3 detik maka nilai Waktu_Delay
20. //diseting kembali menjadi 1000
21. }
22. else
23. {
24. Waktu_Delay = Waktu_Delay - 100; // nilai Waktu_Delay dikurangi 100
25. }
26.
27. digitalWrite(pinLED, HIGH);//NyalakanLED selama timeDelay
28. delay(Waktu_Delay);
29. digitalWrite(pinLED, LOW); //Matikan LED selama timeDelay
30. delay(Waktu_Delay);
31. }

Rangkaian Pada Breadboard

50
Gambar 5.3 Rangkaian LED Untuk Logika IF-ELSE

Pada Program 4 Penggunaan Logika IF-ELSE jika timeDelay bernilai lebih kecil
sama dengan 100, maka akan LED akan diam selama 3 detik lalu nilai timeDelay akan
direset ke 1000, jika tidak maka akan dilakukan pengurangan terhadap timeDelay
sebanyak 100. Perhatikan, peroses reset dan pengurangan tidak pernah dilakukan
bersama-sama. Silakan dicoba dan cek hasilnya
Setelah membahas tentang IF dan IF-ELSE, kita akan mebahas tentang While.
While merupakan salah satu model perulangan dengan karakteristik tertentu. Untuk lebih
jelasnya, silakan lanjut ke pembahasan selanjutnya

5.1.3. Pengunaan Perulangan WHILE


Perintah WHILE merupakan perintah untuk melakukan perulangan berdasarkan
suatu kondisi, jadi banyaknya perulangan tidak bisa ditentukan dengan pasti. Dalam
WHILE seakan ada pengecekan kondisi seperti perintah IF untuk melakukan
perulangan. Bentuk umum dari perintah WHILE yaitu :

1. while (kondisi)
2. {
3. //eksekusi code
4. }

Jika kondisi sesuai, maka perintah atau source code yang ada dalam kurung
kurawal “{}” tersebut akan dieksekusi. Untuk lebih memahami tentang perintah WHILE,
mari kita modifikasi Sketch 2.2 dengan penambahan WHILE dan beberapa perubahan
lainnya. Agar lebih mudah dipahami mari kita praktekan langsung penggunaan WHILE
ini dengan rangkaian yang sama yaitu LED pada pin 8

51
Gambar 5.4 Rangkaian LED Untuk Logika WHILE
Program Penggunaan Logika WHILE

1. //Penggunaan Logika WHIE BY: Monsterchip


2. const int pinLED = 8; // Pin 8 untuk LED
3. int Waktu_Delay = 1000; // awal Waktu_Delay 1000 | 1 detik
4.
5. void setup()
6. {
7. pinMode(pinLED, OUTPUT); // pin LED sebagai output
8. }
9.
10. void loop()
11. {
12. // selama nilai Waktu_Delay > 0
13. // eksekusi blok program ini
14. while(Waktu_Delay > 0)
15. {
16. digitalWrite(pinLED, HIGH); // LED hidup dengan durasi 500 milisekon delay(500);
17. digitalWrite(pinLED, LOW); // LED mati dengan durasi 500 milisekon delay(500);
18. Waktu_Delay = Waktu_Delay - 100;// kurangi Waktu_Delay dengan 100
19. // setelah Waktu_Delay dikurangi terus-menerus
20. // maka pada akhirnya akan bernilai minus atau < 0
21. // maka while di atas akan berhenti
22. }
23.
24. // selama nilai Waktu_Delay kurang dari 1000
25. // eksekusi blok program ini
26. while(Waktu_Delay < 1000)
27. {
28. digitalWrite(pinLED, HIGH); // LED hidup dengan durasi 100 milisekon delay(100);
29. digitalWrite(pinLED, LOW); // LED mati dengan durasi 100 milisekon delay(100);
30. Waktu_Delay = Waktu_Delay + 100;// tambahkan Waktu_Delay dengan 100
31. }
32. }

Program di atas akan mengedipkan LED dengan durasi yang berbeda. Awalnya
LED akan berkedip dengan durasi ½ detik sebanyak 10 kali, selanjutnya LED akan
berkedip lebih cepat dengan durasi 1/10 detik sebanyak 10 kali. Perhatikan
program ini pada IDE Arduino yang ditunjukan pada gambar dibawah.

52
Gambar 5.5 Program 5 Penggunaan Logika WHILE Pada LED

Waktu_delay Pertama kita seting bernilai 1000, lalu pada While pertama
dinyatakan bahwa jika kondisi Waktu_delay > 0 maka pada saat itu kondisi terpenuhi
dan mengeksekusi Menyalakan dan mematikan LED dengan durasi 500ms (1/2 detik)
dan setiap kedipan terjadi maka nilai Waktu_delay dikurangi sebanyak 100 sehingga
LED akan berkedip dengan durasi 500ms sebanyak 10 kali (kedip ke-1 1000-100=900,
kedip ke-2 900-100=800,..., kedip ke-10 100- 100=0). Kemudian pada WHILE ke-2
terdapat kondisi dimana ketika Waktu_delay > dari 1000 maka blok program yang di
dalamnya akan dieksekusi yaitu led berkedip dengan durasi 100ms dan setiap kali
mengeksekusi nilai Waktu_delay akan ditambah 100 sehingga kedipan led berjumlah
10x (kedip pertama 0+100 = 100, kedip ke-2 100+100=200,…. Kedip ke-10
900+100=1000). Ingat bahwa blok program dalam While akan terus dieksekusi selama
kondisi dalam While terpenuhi dan jika sudah tidak terpenuhi maka barulah
mengeksekusi program yang lain.

53
Gambar 5.6 Bagian kondisi While dan Blok program While

5.1.4. Kondisi Atau Logika True dan False

Dalam bahasa pemrograman, kita nantinya akan mempelajari tentang perintah-


perintah yang berkaitan dengan kondisi (logika) True dan False. Perintah-perintah yang
berkaitan dengan logika yang umum digunakan misalnya IF dan IF-ELSE, dan WHILE
yang sudah kita pelajari sebelumnya.

Secara teori, True berarti 1 dan False berarti 0. Dalam pemrograman yang ini,
kondisi False memang selalu 0, tapi True tidak selalu 1. Kondisi True adalah selain 0,
ingat selain nol (0) akan dianggap True. Coba masukan program di bawah ini pada
rangkaian sebelumnya.

1. //Penggunaan Logika
2.
3. const int pinLED = 8; // Pin 8 untuk LED
4.
5. void setup()
6. {
7. pinMode(pinLED, OUTPUT); // pin LED sebagai output
8. }
9.

54
10. void loop()
11. {
12. while(1)
13. {
14. digitalWrite(pinLED, HIGH); //LED hidup dengan durasi 500 milisekon
15. delay(500);
16. digitalWrite(pinLED, LOW); //LED mati dengan durasi 500 milisekon
17. delay(500);
18. }
19. }

Dari program di atas perhatikan pada bagian while(1), karena While bernilai satu
maka akan dianggap sebagai True yang artinya blok program akan di eksekusi
terus. Lalu coba ubah dengan While(10) maka program juga akan terus mengeksekusi
karena while(10) Juga dianggap True, sedangkan jika kita ubah dengan nilai 0 menjadi
while(0) maka Led tidak akan berkedip karena “0” merupakan False atau tidak akan
dieksekusi.

5.1.5. Kombinasi Logika


Terkadang kondisi True atau False bisa terdiri dari beberapa kondisi. Misal, kita
ingin menentukan bilangan timeDelay sebagai angka positif tidak lebih dari
10. Maka kita tidak bisa hanya menggunakan satu kondisi. Kita harus menggunakan 2
kondisi, yaitu timeDelay harus lebih besar dari 0 dan timeDelay lebih kecil dari 10. Dalam
logika, kita bisa menuliskannya dengan cara :

1. if (timeDelay > 0) && (timeDelay < 10)


2. {
3. //blok program
4. }

Perhatikan disana ada tanda && yang berarti AND. Penambahan tanda kurung
untuk memperjelas bahwa ada dua kondisi yang berbeda dan dihubungkan oleh
operator &&. Silakan diingat kembali bahwa operator logika AND akan menghasilkan
nilai True jika semua kondisi bernilai True. Selain operator AND, ada juga operator OR
dan NOT.
Perhatikan tabel berikut:

OPERATOR CONTOH PENGGUNAAN ARTI DARI LOGIKA

&& (A < 10) && (B >10) Logika AND (dan) akan


menghasilkan
True apabila kondisi A dan B
sesuai (True), jika tidak, maka
False.

55
||
(A < 10) || (B >10) Logika OR akan menghasilkan True apabila
salah satu dari A, B, atau semuanya sesuai
(True), tapi jika keduanya False, maka akan
bernilai False
! (A < 10) Logika NOT akan menghasilkan True jika
!
kondisi tidak sesuai (False), sebab NOT
adalah kondisi sebaliknya.

5.1.6. Logika FOR


Berbeda dengan WHILE, dengan FOR kita bisa menentukan jumlah perulangan
dengan pasti. Pada Sketch 2.3, masing-masing WHILE akan melakukan perulangan
sebanyak 10 kali dengan cara mengurangi angka 1000 dengan 100 secara bertahap.
Jika menggunakan FOR, kita bisa melakukan perulangan tersebut lebih sederhana.
Format dasar dari FOR adalah :

1. for (statemen; kondisi; statemen;)


2. {
3. //program
4. }

Statement yang pertama berisi tentang kondisi awal, biasanya inisialisasi suatu
variabel atau data (misal, a=0). Sedangkan statement yang terakhir adalah perubahan
yang akan terjadi pada variabel pada statement awal (misal a=a+1). Sedangkan kondisi
merupakan kondisi dimana perulangan akan terjadi, ketika kondisi sudah tidak sesuai,
maka perulangan akan berhenti. untuk lebih jelasnya tentang FOR, berikut contoh
sederhananya :

Program Penggunaan Logika FOR

1. const int pinLED = 8; // Pin 8 untuk LED


2.
3. void setup()
4. {
5. pinMode(pinLED, OUTPUT);// pin LED sebagai output
6. }
7.
8. int timeDelay = 3000;// awal time delay 1000 | 1 detik
9.
10. void loop()
11. {
12. for(int i=1; i<=10; i++)
13. {
14. digitalWrite(pinLED, HIGH);// LED hidup mati dengan durasi 500 milisekon
15. delay(500);
16. digitalWrite(pinLED, LOW);
17. delay(500);
18. }
19. delay(timeDelay);// diam selama 3 detik
20. }

56
Ketika program tersebut diupload, maka LED akan berkedip dengan durasi
½ detik sebanyak 10 kali, kemudian LED akan diam (mati) selama 3 detik
(perhatikan, nilai timeDelay diganti 3000), dan akan berkedip lagi.

Gambar 5.7 Logika FOR

Pada gambar di atas menunjukkan FOR dengan kondisi nilai awal i=1, I akan
terus-menerus ditambah dengan 1 (i++) selama perulangan selama i <= 10.
Sederhananya, nilai i akan berubah dari 1, 2, 3, 4, … hingga 10. Bagian penting yang
perlu dipahami adalah i++, i++ memiliki arti
i = i + 1;
Selain i++, ada juga ++i, i--, dan --i. Penulisan i-- sama dengan i++, hanya saja i--
berarti i=i-1, atau i akan berkurang 1 terus-menerus selama perulangan.
Penempatan ++ di depan atau di belakang i berarti bahwa :
jika ++ nya ada di belang, maka proses penambahannya dilakukan setelah blok kode
dalam for dijalankan. Tapi jika ++ nya ada di depan, maka proses penambahan akan
dilakukan sebelum proses dijalankan.
Begini contohnya:

1. int i = 1;
2. int j = 3 * (i++); // j = 3 karena 3 * 1

57
3. // i = 2
4. int j = 3 * (++i); // j = 9 karena 3 * 3
5. // i sudah ditambah dengan 1 lagi (++i) sebelum dieksekusi

Perhatikan, pada baris ke-2, j bernilai 3 karena 3 dikali dengan nilai i = 1. maka nilai i
akan berubah menjadi 2 karena ada statement i++ (i = i+1). Sedangkan pada baris ke-4,
bernilai 9 (bukan 6) karena i tidak bernilai 2 lagi, tapi i bernilai 3 sebab sebelum baris
tersebut dieksekusi, i terlebih dahulu ditambahkan dengan 1 (++i). Jadi penambahan i
tidak dilakukan setelah eksekusi baris tersebut, tapi sebelum mengeksekusi baris
tersebut.
Untuk lebih memahami penggunaan logika-logika yang telah kita pelajari
sebelumnya, mari kita membuat project sederhana lainnya.

5.1.7. Animasi LED Dengan Logika Dasar


Untuk lebih memahami penggunaan logika-logika yang telah kita pelajari
sebelumnya, mari kita membuat project sederhana lainnya. Yaitu membuat animasi LED
dengan menggunakan logika For, If, Else If, dan Else.
Rangkaian Animasi LED Menggunakan Logika Dasar

Gambar 5.8 Rangkaian Animasi LED Menggunakan Logika Dasar


Buatlah rangkaian pada breadboard seperti pada gambar diatas dengan benar, lalu
upload program di bawah ini. Perhatikan ketika kita Copy program ini ada kemungkinan
nomor halaman juga ikut tercopy, sehingga pastikan hapus nomor halaman yang ikut
tercopy pada IDE Arduino.
Sketch Animasi LED Menggunakan Logika Dasar

1. // Inisialisasi Pin LED


2. const int pinLED1 = 8;
3. const int pinLED2 = 9;
4. const int pinLED3 = 10;

58
5. const int pinLED4 = 11;
6.
7. void setup()
8. {
9. // pin LED sebagai output
10. pinMode(pinLED1, OUTPUT);
11. pinMode(pinLED2, OUTPUT);
12. pinMode(pinLED3, OUTPUT);
13. pinMode(pinLED4, OUTPUT);
14. }
15.
16. void loop()
17. {
18. // perulangan sebanyak 5 kali
19. // dari i=0 hinga i=4 atau (i < 5)
20. for(int i=0; i<5; i++)
21. {
22. if(i==1)
23. {
24. // jika i=1, hidupkan led 1, led yang lain mati
25. digitalWrite(pinLED1, HIGH);
26. digitalWrite(pinLED2, LOW);
27. digitalWrite(pinLED3, LOW);
28. digitalWrite(pinLED4, LOW);
29. }
30. else if(i==2)
31. {
32. // jika i=2, hidupkan led 1 & 2, led 3 & 4 mati
33. digitalWrite(pinLED1, HIGH);
34. digitalWrite(pinLED2, HIGH);
35. digitalWrite(pinLED3, LOW);
36. digitalWrite(pinLED4, LOW);
37. }
38. else if(i==3)
39. {
40. // jika i=3, hidupkan led 1, 2, & 3, led 4 mati
41. digitalWrite(pinLED1, HIGH);
42. digitalWrite(pinLED2, HIGH);
43. digitalWrite(pinLED3, HIGH);
44. digitalWrite(pinLED4, LOW);
45. }
46. else if(i==4)
47. {
48. // jika i=4, hidupkan semua led
49. digitalWrite(pinLED1, HIGH);
50. digitalWrite(pinLED2, HIGH);
51. digitalWrite(pinLED3, HIGH);
52. digitalWrite(pinLED4, HIGH);
53. }
54. else// jika tidak, matikan semua led
55. {
56. digitalWrite(pinLED1, LOW);
57. digitalWrite(pinLED2, LOW);
58. digitalWrite(pinLED3, LOW);
59. digitalWrite(pinLED4, LOW);
60. }
61. // delai selama 5 detik
62. delay(5000);
63. }
64. }

Program di atas akan membuat LED menyala bergantian sebanyak 5 animasi


(perulangan sebanyak 5 kali). Pertama, semua LED. akan mati selama 5 detik. Kedua,
LED 1 akan menyala. Ketiga, LED 1 dan 2 akan menyala. Keempat, LED 1, 2, dan 3

59
akan menyala. Kelima, semua LED akan menyala. Animasi tersebut ditentukan
berdasarkan nilai i, nilai i diperiksa dengan perintah IF. Jika nilai i=0, maka semua LED
mati, jika i=1 maka satu LED nyala, dan seterusnya. Selain menggunakan IF, ada cara
lain yang lebih simpel untuk membuat animasi LED seperti program pada Sketch di
bawah.

1. // Inisialisasi Pin LED


2. const int pinLED1 = 8;
3. const int pinLED2 = 9;
4. const int pinLED3 = 10;
5. const int pinLED4 = 11;
6.
7. void setup()
8. {
9. // pin LED sebagai output
10. pinMode(pinLED1, OUTPUT);
11. pinMode(pinLED2, OUTPUT);
12. pinMode(pinLED3, OUTPUT);
13. pinMode(pinLED4, OUTPUT);
14. }
15.
16. void loop()
17. {
18. digitalWrite(pinLED1, LOW);
19. digitalWrite(pinLED2, LOW);
20. digitalWrite(pinLED3, LOW);
21. digitalWrite(pinLED4, LOW);
22. delay(1000);
23. digitalWrite(pinLED1, HIGH);
24. delay(1000);
25. digitalWrite(pinLED2, HIGH);
26. delay(1000);
27. digitalWrite(pinLED3, HIGH);
28. delay(1000);
29. digitalWrite(pinLED4, HIGH);
30. delay(1000);
31. }

Dengan memanfaatkan delay, program pada Sketch diatas lebih simple daripada
Sketch sebelumnya, dan adakah yang lebih simple lagi? Jawabannya adalah “Ada” yaitu
dengan menggunakan Array. Apa itu array? Mari kita pahami Array dan penggunaanya.

5.1.8. Pengenalan dan Pemahaman Mengenai Array


Array merupakan variabel yang bisa menampung banyak data, masing- masing
data bisa diambil dengan alamat indeks (posisi) data dalam Array tersebut. Alamat
indeks pada array standarnya adalah angka integer yang diawali dari angka 0. Jadi, jika
kita punya data 5 dalam variabel Array, maka data pertama pada alamat indeks ke-0,
data dua pada alamat indeks ke-1, dan data kelima pada alamat indeks ke-4. Untuk
lebih memahami tentang Array, program pada Sketch dibawah ini dengan menggunakan
rangkaian yang masih sama dengan gambar 5.7.

60
1. // Inisialisasi Jumlah LED
2. const int numLED = 4;
3. // LED 1,2,3,&4 jadi 1 varibel
4. // dengaan alamat index 0,1,2,3
5. const int pinLED[numLED] = {8,9,10,11};
6.
7. void setup()
8. {
9. // Inisialisasi semua pin LED sebagai OUTPUT
10. for(int i=0; i<4; i++)
11. {
12. pinMode(pinLED[i], OUTPUT);
13. }
14. }
15.
16. void loop()
17. {
18. // Matikan semua LED
19. for(int i=0; i<4; i++)
20. {
21. digitalWrite(pinLED[i], LOW);
22. }
23. delay(1000);
24. // Hidupkan semua LED bertahap dg jeda 1 detik
25. for(int i=0; i<4; i++)
26. {
27. digitalWrite(pinLED[i], HIGH);
28. delay(1000);
29. }
30. }

Pada Sketch diatas, keempat LED dimuat dalam satu variabel yaitu variable Array
pinLED. Masing-masing LED bisa diakses berdasarkan alamat indeks. Perhatikan
bagian program
const int pinLED[numLED] = {8,9,10,11};

Secara otomatis, alamat indeks untuk masing-masing LED tergantung pada urutan
pin tersebut. Pin 8 ada pada alamat indeks ke-0, pin 9 ada pada indeks ke 1, pin 10 ada
di indeks ke 2, dan pin 11 ada pada indeks ke 3. Sehingga untuk mengakses pin 8, kita
bisa menambahkan kurung siku dan alamat indeks ke-0, seperti berikut:
Pin8 = pinLED[0]

Karena indeks tertinggi adalah angka 3, maka di setiap perulangan LED tidak boleh
lebih dari 3 atau < 4, perhatikan perintah FOR berikut:
for(int i=0; i<4; i++){
Begitulah penjelasan atau pembahasan mengenai Array dan mungkin kita akan bahas
lebih mendalam lagi mengenai dasar pemrogaman array dan yang lainnya pada project

61
BAB 6
Membuat berbagai macam project dasar Input Digital dan Output PWM

Materi

6.1 Mengontrol LED dengan Push-Button

6.2 Membuat Fanding LED dengan Pin PWM

Lembar Informasi
Pada Bab ini kita akan mempelajari mengenai input digital dan juga output PWM.
Kedua program ini cukup penting karena pada saat sekarang ini telah banyak sensor
yang telah memiliki output (input untuk arduino) berupa logika digital. Sedangkan output
PWM juga sangat penting dalam pengontrolan beberapa actuator misalnya servo
ataupun motor DC dan masih banyak lagi.

62
6.1. Kontrol LED

6.1.1. Rangkaian Kontrol LED dengan Push-Button


Pada program ini kita akan mengontrol LED dengan Push-button, dimana LED
akan menyala jika hanya tombol ditekan dan sebaliknya. Pada sekect ini kita juga akan
mempelajari pemrograman menggunakan “if” dan “else” dengan adanya variable input
yaitu push-button.

Gambar 6.1 Rangkaian Project Kontrol LED dengan Push Button

6.1.2. Sketch Kontrol LED dengan Push-Button

1. /* PROGRAM MENJALANKAN 1 LED DENGAN 1 PUSHBUTTON


2. * by Monsterchip
3. *
4. * credit: arduino
5. *
6. * Pada program ini akan dijelaskan membuat program untuk menyalakan 1 led
7. * dengan 1 pushbutton * ketika pushbutton ditekan maka led akan menyala,
8. * namun ketika pushbutton dilepaskan/tidak ditekan maka led akan padam
9. *
10. */
11.
12. const int pushB = 2; //membuat variable pushB, dengan type data integer,
13. //dan mengisinya dengan nilai 2 (dalam hal ini kaki/pin
14. //yang akan digunakan untuk pushbutton)
15. const int led = 13; //membuat variable led, dengan type data integer,
16. //dan mengisinya dengan nilai 13 (dalam hal ini kaki/pin
17. //yang akan digunakan untuk led)
18. int nilaiPB = 0; //membuat variable pushB, dengan type data integer,
19. //dan mengisinya dengan nilai 0 (dalam hal ini dibuat
20. //untuk menampung nilai pembacaan dari pushbutton)
21.
22. void setup() {
23. pinMode(pushB, INPUT_PULLUP); //membuat kaki/pin (sesuai nilai) yg ada pada
24. //variable pushB sebagai INPUT
25. pinMode(led, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada pada variable
26. //led sebagai OUTPUT
27. }
28.
29. void loop() {

63
30. nilaiPB = digitalRead(pushB); //memasukan nilai pembacaan pada kaki/pin pushB
31. //ke variable nilaiPB (1/0)
32. if(nilaiPB == 0){ //jika nilai pada variable nilaiPB berisikan
33. //nilai 0, maka:
34. digitalWrite(led, 1); //menulis/memberikan nilai digital 1/HIGH pada
35. //kaki/pin led
36. }
37. else if(nilaiPB == 1){ //tetapi jika nilai pada variable nilaiPB
38. //berisikan nilai 1, maka:
39. digitalWrite(led, 0); //menulis/memberikan nilai digital 0/LOW pada
40. //kaki/pin led
41. }
42. }

Pada saat mengcopy program perhatikan setiap nomor halaman yang


biasanya ikut tercopy, sehingga periksa kembali jika pada saat mengupload

6.1.3. Analisis Sketch


Pertama kita perhatikan pada struktur Void Setup,

1. void setup() {
2. pinMode(pushB, INPUT_PULLUP); //membuat kaki/pin (sesuai nilai) yg ada pada
3. //variable pushB sebagai INPUT
4. pinMode(led, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada pada variable
5. //led sebagai OUTPUT
6. }

Jika selama pada sketch kita hanya menggunakan pin arduino sebagai output
untuk menyalakan LED maka pada sketch ini kita akan menggunakannya sebagai input
juga. Input berasal dari push button yang apabila ditekan ia akan memberi
input/masukan ke arduino sebesar 0V. untuk lebih jelasnya bisa kita pelajari pada
pembahasan analisis hardware setelah ini.

Untuk menjadikan pin digital dapat memproses inputan maka pada program kita
tulis (pushB, INPUT_PULLUP); dimana pushB merupakan nama dari pushbutton. Apabila hal
ini dapat dipahami maka kita lihat pada bagian Void loop.

1. void loop() {
2. nilaiPB = digitalRead(pushB); //memasukan nilai pembacaan pada kaki/pin pushB
3. //ke variable nilaiPB (1/0)
4. if(nilaiPB == 0){ //jika nilai pada variable nilaiPB berisikan
5. //nilai 0, maka:
6. digitalWrite(led, 1); //menulis/memberikan nilai digital 1/HIGH pada
7. //kaki/pin led
8. }
9. else if(nilaiPB == 1){ //tetapi jika nilai pada variable nilaiPB
10. //berisikan nilai 1, maka:
11. digitalWrite(led, 0); //menulis/memberikan nilai digital 0/LOW pada
12. //kaki/pin led
13. }
14. }

64
Pada sketch di atas, “nilaiPB = digitalRead(pushB);” digunakan untuk mengetahui nilai
di pin pushB dan nilainya disimpan pada variable “ nilaiPB ”. Nilainya bernilai LOW jika
tombol ditekan dan bernilai HIGH jika dilepas.

Gambar 6.2 Saat Push-Button Dilepas

Gambar 6.3 Saat Push-Button Ditekan


6.1.4. Analisis Hardware
Ada dua macam parameter input yang dapat didefinisikan di Arduino. Yang
pertama adalah INPUT, yang kedua adalah INPUT_PULLUP. Untuk pendefinisian mode
pin sebagai input digital, sintaksnya adalah sebagai berikut :

1. pinMode (no_pin, INPUT);


2. atau
3. pinMode (no_pin, INPUT_PULLUP);

Perbedaannya, jika Anda mendefinisikan pin digital sebagai ‘INPUT’ saja maka
Anda akan membutuhkan sebuah resistor pull-up/pull-down eksternal. Namun jika

65
didefinisikan sebagai ‘INPUT_PULLUP’ maka resistor pull-up eksternal tidak dibutuhkan
lagi karena resistor pull-up internal akan diaktifkan.

Gambar 6.4 Konfigurasi Pull down - Pull up

Kemudian, dari kedua definisi di atas, yang mana yang harus digunakan?
Tergantung dari aplikasi Anda, ingin mendeteksi input sebagai ‘active LOW‘ (aktivitas
dipicu oleh logika ‘0’) atau ‘active HIGH‘ (aktivitas dipicu oleh logika ‘1’). Jika sekiranya
aplikasi input membutuhkan resistor pull-up seperti pendeteksian tombol secara active
LOW sebaiknya menggunakan INPUT_PULLUP karena akan jauh menghemat jalur PCB
Anda.

6.2. Membuat Fanding LED dengan Pin PWM


Pada pembahasan sebelumnya kita telah belajar mengenai dasar dari LED, yaitu
bagaimana mengontrol nyala dan padamnya sebuah led dengan menggunakan pin
digital atau logika HIGH / LOW. Namun pada pembahasan kali ini kita akan membahas
bagaimana caranya untuk mengatur tingkat kecerahan LED dengan menggunakan
teknik PWM (Pulse Width Modulation). Pada dasarnya ada dua teknik untuk mengatur
tingkat kecerahan LED yaitu :
1. Mengatur Arus yang melewati LED dengan Resistor Variable (Resistor yang
hambatannya dapat di ubah-ubah) pada tegangan yang sama.
2. Mengatur Tegangan pada LED namun dengan resistansi yang sama

Untuk mengingat kembali teori dasar mengenai konsep tegangan, arus, dan
resistansi pada LED silahkan baca kembali mengenai analisis hardware pada BAB 4.
Jika kita perhatikan kedua cara tersebut tidak dapat dilakukan secara sederhana oleh
mikrokontroler, karena pada dasarnya mikrokontroler tidak dapat mengatur besar
kecilnya resistansi atau mengatur besarnya tegangan karena
mikrokontroler hanya dapat menghasilkan 0V dan 5V saja. Lalu bagaimana cara agar
mikrokontroler dapat menghasilkan output tegangan yang variable (dapat berubah-

66
ubah)? Jawabanya adalah dengan menggunakan teknik PWM (Pulse Width Modulation).
Lalu apa itu PWM?

PWM (Pulse Width Modulation) secara sederhana PWM terdiri dari tiga bagian
dasar kata, yaitu Pulse yang bisa dikatakan sinyal dalam hal ini pada mikrokontroler
adalah sinyal yang terdiri dari 5V dan sinyal 0V, kemudian Width dapat diartikan sebagai
lebar atau jarak dan yang terakhir adalah Modulation dapat diartikan sebagai
pengubahan atau pengaturan. Sehingga dapat dikatakan bahwa PWM adalah sebuah
teknik untuk mengatur lebar pulsa pada priode tertentu. Namun secara umum PWM
merupakan sebuah mekanisme untuk membangkitkan sinyal keluaran yang periodenya
berulang antara high dan low dimana kita dapat mengontrol durasi sinyal high dan low
sesuai dengan yang kita inginkan. Durasi perbandingan antara HIGH dan LOW dalam
elektronika disebut dengan Duty cycle yang dinyatakan dalam persentase (%).

Gambar 6.5 Penggambaran Duty Cicle pada PWM

Perhatikan pada gambar di atas ketika PWM diseting pada Duty cycle 0%
maka perbandingan antara sinyal HIGH dan LOW adalah 0% atau dapat
dikatakan bahwa nilai HIGH diabaikan dan didapatlah nilai rata-rata tegangan output
sebesar 0V sedangkan pada Duty cycle 50% perbandingan antara sinyal HIGH dan
LOW sebanding sehingga tegangan rata-rata output adalah 50% dari
5V sama dengan 2.5V.

67
Pada Arduino Nano dan Arduino UNO PIN yang dapat kita pakai untuk
menghasilkan PWM adalah pin digital 3 , 5, 6, 9, 10, dan 11 dengan perintah dasar
adalah analogWrite() dengan nilai 0 s/d 225 yang mewakili 0% s/d 100% atau 0V s/d 5V.

6.2.1. Rangkaian Kontrol LED dengan PWM

Gambar 6.6 Kontrol LED dengan PWM


Pada Gambar diatas Pin PWM yang digunakan adalah Pin 9 dengan resistor
sebagai penghambat arusnya adalah 220 Ohm sama dengan nilai resistor yang
sering kita gunakan pada percobaan-percobaan sebelumnya.

6.2.2. Sketch Kontrol LED dengan PWM

1. int led = 9; //LED pada Pin PWM digital 9


2.
3. void setup()
4. {
5. pinMode(led, OUTPUT); //seting LED sebagai output
6. }
7.
8. void loop()
9. {
10. analogWrite(led, 255); // nilai 225 mewakili duty cycle 100%
11. delay (1000);
12. analogWrite(led, 191); // nilai 191 mewakili duty cycle 75%
13. delay (1000);
14. analogWrite(led, 127); // nilai 127 mewakili duty cycle 50%
15. delay (1000);
16. analogWrite(led, 64); // nilai 64 mewakili duty cycle 25%
17. delay (1000);
18. analogWrite(led, 0); // nilai 0 mewakili duty cycle 0%
19. delay (1000);
20. }

Pada program di atas mula-mula LED akan menyala pada tingkat kecerahan
tertinggi kemudian kecerahannya menurun hingga pada akhirnya padam lalu kembali

68
pada tingkat kecerahan yang tinggi. Perhatikan penjelasan program pada komen-komen
yang terdapat di sampingnya.

Dengan rangkaian yang sama kita juga dapat membuat fading LED yang juga
menerapkan konsep PWM dengan metode pemrograman menggunakan logika yang
telah kita pelajari sebelumnya.

Berikut adalah program untuk Fading LED

1. int led = 9; // LED connected to digital pin 9


2.
3. void setup()
4. {
5. // nothing happens in setup
6. }
7.
8. void loop()
9. {
10. //ketika nilai analog =0 Kecerahan LED ditambah dengan nilai analog write
11. //ditambah 5 poin setiap 50ms hingga 255
12. for (int nilai_analog = 0 ; nilai_analog <= 255; nilai_analog += 5)
13. {
14. analogWrite(led, nilai_analog);
15. delay(50);
16. }
17.
18. //Ketika nilai analog =255 Kecerahan LED dikurang dengan nilai analog write
19. //dikurangi 5 poin setiap 50ms hingga bernilai 0
20. for (int nilai_analog = 255 ; nilai_analog >= 0; nilai_analog -= 5)
21. {
22. analogWrite(led, nilai_analog);
23. delay(50);
24. }
25. }

Pada program di atas nilai PWM ditambah secara bertahap sehingga mencapai
nilai puncak lalu kemudian dikurangi sehingga LED menjadi terang dan redup secara
bertahap pula.

69
BAB7 Komunikasi Serial

Materi

7.1. Pengenalan Tool dan struktur Program


untuk Komunikasi Serial
7.2. Analog Read Serial
7.3. Pengontrolan RGB Light Melalui
Serial Monitor

Lembar Informasi
Komunikasi serial merupakan komunikasi yang dipakai arduino dan komputer
dengan memanfaatkan port serial (via USB). Dalam hal ini, Arduino Uno selain dapat
membaca data dari komputer yang ada di port serial, juga dapat mengirimkan data ke
komputer. Dengan kata lain, komunikasi antara Arduino Uno dan komputer bersifat dua
arah. Nah pada BAB ini kita akan mempelajari berbagai macam sketch yang
menggunakan komunikasi serial, baik sketch untuk mengirim data dari Arduino ke
komputer maupun sebaliknya.

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
▪ Mampu memahami fungsi dari komunikasi serial
▪ Mengetahui struktur sketch serial monitor
▪ Membaca besaran sensor analog dan memberi perintah pada
mikrokontroler melalui serial monitor

70
7.1. Pengenalan Tool dan struktur Program untuk Komunikasi Serial
7.1.1. Tools Serial Monitor

Pada program Arduino telah disediakan fasilitas untuk komunikasi serial. Fasilitas
ini bisa kita buka pada bagian Tools yang terdapat pada program arduino atau juga dapat
diakses dengan menekan Ctrl+Shift+M.

Gambar 7.1 Cara Mengakses Jendela Serial Monitor


Setelah kita akses serial monitor tersebut maka akan keluar sebuah jendela atau
lembar kerja baru baru pada aplikasi Arduino Uno. Lembar kerja tersebut merupakan
fasilitas untuk melakukan komunikasi baik itu membaca data dari Arduino Uno, maupun
mengirim data atau perintah ke Arduino Uno dari komputer kita.
Catatan : Untuk dapat mengakses Serial Monitor kita harus terlebih dahulu
menghubungkan Arduino Uno dan komputer.

71
Gambar 7.2 Tampilan Jendela Serial Monitor

Apa saja aplikasi penggunaan serial komputer tersebut? Dengan serial monitor
kita bisa membuat perintah atau mengirim data ke Arduino Uno sehingga data tersebut
akan diproses sesuai dengan program yang kita buat, misalnya kita dapat membuat
sketch untuk menyalakan LED dengan printah yang kita ketik atau kita kirimkan melalui
serial monitor tersebut, contoh sederhana lainnya kita dapat menampilkan besaran
sensor yang terbaca oleh arduino tersebut. Untuk lebih memahaminya, kita akan
membuat berbagai macam program pada sub BAB setelah ini.

7.1.2. Struktur Program Serial Monitor

Untuk mempermudah memahami struktur pada sketch yang menggunakan


komunikasi serial, kita akan langsung mengaplikasikannya dalam salah satu contoh
sketch yang menggunakan hal tersebut. Di bawah ini adalah
contoh sederhana dari komunikasi serial yang digunakan untuk membaca input digital.

Terlebih dahulu mari kita buat rangkaian input digital dengan menggunakan salah
pushbutton pada Mini Monster Trainer Arduino Kit seperti pada gambar di bawah ini.

72
mbar 7.3 Interfeacing untuk Digital Read Serial

Setelah kita buat rangkaiannya maka tulislah sample program dibawah ini :

1. int pushButton = 2;
2.
3. void setup() {
4. // inisialisasi kecepatan komunikasi serial pada 9600 bits per second:
5. Serial.begin(9600);
6. // membuat input digital dengan pushbutton
7. pinMode(pushButton, INPUT);
8. }
9.
10. void loop() {
11. // membaca pin input
12. int buttonState = digitalRead(pushButton);
13. // menampilkan hasil pembacaan pada serial monitor
14. Serial.println(buttonState);
15. delay(1); // delay membuat delay sebelum melakukan pembacaan kembali
16. }

Setelah kita upload, maka kita baru bisa membuka jendela serial monitor pada
aplikasi IDE Arduino. Setelah terbuka tekanlah pushbutton yang kita pakai kemudian
disana akan terlihat hasil pembacaan dari input digital tersebut.

Pada sketch di atas terdapat program tambahan yaitu “ serial.begin(9600);” yang


berfungsi sebagai pengaturan kecepatan komunikasi serial yaitu sebesar 9600 bps.
Kecepatan hingga 115.200 bps juga didukung oleh Arduino Uno.

73
Selain serial.begin juga terdapat perintah Serial.println(buttonState); yang
berfungsi menampilkan data yang terbaca pada tool serial monitor. Untuk macam-
macam perintah pada komunikasi serial monitor akan ditunjukan pada table dibawah ini.

Table 5.1 Fungsi-fungsi untuk komunikasi serial


Serial.begin(kecepatan) Berguna untuk menentukan kecepatan pengiriman juga
penerimaan data melalui port serial. Kecepatan yang
umum digunakan adalah 9600, namun Arduino Uno
juga mendukung kecepatan hingga 115.200 bit per
detik.
Contoh: Serial.begin(9600);

Serial.end() Digunakan untuk menghentikan komunikasi serial


Serial.available() Berguna untuk menghasilkan jumlah byte di port
serial yang masih belum terbaca. Jika port serial
dalam keadaan kosong maka serial.available() akan
menghasilkan nilai nol.
Serial.red() Berguna untuk membaca satu byte data yang terdapat
di port serial. Setelah pemanggilan Serial.red(), maka
jumlah data di port serial berkurang satu. Sedangkan
untuk membaca seluruh data, kita perlu perintah
tambahan seperti dibawah ini
Int data;
While (serial.available)) { Data =
Serial.red();

}
Serial.print(data) Serial.print() berguna untuk mengirimkan data ke
Serial.print(data,format)
port serial. Apabila argumen format disertakan,
data yang dikirim akan disesuaikan dengan format
tersebut. Dalam hal ini, format
format yang digunakan bisa berupa
DEC (format desimal atau basis 10)
HEX (format heksadesimal atau basis 16)
OCT (format oktal atau basis 8)
BIN (format biner atau basis 2)
Jika argumen hanya satu, hasilnya dalam

74
bentuk string
Contoh :
Serial.print(65); //Menghasilkan 65
Serial.print(65, DEC); //Menghasilkan 65
Serial.print(65, HEX); //Menghasilkan 41
Serial.print(65, OCT); //Menghasilkan 101
Serial.print(65, BIN); //
Menghasilkan1000001
Untuk memahaminya kita perlu mempelajari
konversi bilangan pada digital.

Serial.prinln(data) Secara prinsip perintah ini sama dengan


Serial.println(data, format) Serial.print(). Bedanya, Serial.println()
menambahkan “r\n” (carriage return dan
linefeed) yang memberi efek perpindahan baris
dalam tampilannya Serial.print() memberikan
nilai balik berupa jumlah karakter yang dikirim.
Serial.flush() Sesungguhnya, data yang ada di port disimpan
di suatu penyangga (buffer) di Arduino Uno. Maka jika
ingin mengosongkan isi penyangga dan hendak
membaca data terbaru, perlu dilakukan pemanggilan
terlebih dahulu seperti berikut
Serial.flush();
Serial.parseFloat() Serial.parseFloat menghasilkan bilangan titik
mengambang (real) yang terdapat di port
serial.

7.2. Analog Read serial


Kebanyakan mungkin masih bingung dengan teori-teori yang telah disampaikan
di atas, dan sebagian mungkin belum begitu memahami dengan maksud penjelasan
mengenai teori dan kegunaan serial monitor, untuk itu maka pada sub bab ini akan diberi
beberapa contoh project penggunaan serial monitor ini. Beberapa project yang akan kita
buat diantaranya adalah pengendalian nyala LED, pendeteksi input, membaca besaran
sensor digital maupun analog, dan sebagainya. Seperti yang telah dijelaskan
sebelumnya, bahwa dengan serial monitor kita dapat menampilkan data di monitor PC

75
yang terbaca oleh mikrokontroler dan sebaliknya kita dapat memberi input atau perintah
dari PC pada mikrokontroler.
Pada skecth kali ini, kita akan membuat sekaligus memahami aplikasi
sederhana lainnya yaitu sketch analog read serial (membaca besaran analog dengan
melalui komunikasi serial). Meskipun sketch ini sangan sederhana, namun sketch ini
merupakan sebuah seketch yang sangat berguna, sebagai referensi pembacaan sensor
analog sebelum kita membuat project yang lebih besar.

7.2.1. Persiapan
Rangkaian Untuk Analog Read Serial

Gambar 7.4 Rangkaian Untuk Analog Read Serial


Sketch Analog Read Serial

1. void setup()
2. {
3. Serial.begin(9600); // menginisialisasi komunikasi serial pada 9600 bit per detik
4. }
5.
6. void loop()
7. {
8. int sensorValue = analogRead(A0); // membaca input pada pin analog A 0:
9. Serial.println(sensorValue); // mencetak data yang terbaca:
10. delay(1); // menambahkan delay agar pembacaan lebih sempurna
11. }

Setelah kita upload sketch tersebut langkah selanjutnya adalah membuka menu
tools pada IDE arduino lalu pilih serial monitor. Setelah terbuka maka kita akan
mendapatkan sebuah besaran dari input yang berasal dari potensio yang kita rangkai.
Besaran tersebut akan menampilkan angka-angka secara terus menerus, dan besaran
angkanya akan berubah apabila kita memutar potensio tersebut.

76
7.2.2. Analisis Hardware

Potensio merupakan sebuah komponen yang dapat kita jadikan sebagai sebuah
input analog sederhana. Input analog dari rangkaian sederhana dengan menggunakan
potensio ini bisa kita baca dan kita tampilkan pada layar PC melalui dengan
memanfaatkan fasilitas serial monitor pada program IDE Arduino. Skematik rangkaian
potensio ini dapat dilihat pada gambar 5.4.

Gambar 7.5 Skematik Analog Read Serial

7.2.3. Analisis Sketch

Seperti yang telah diuraikan sebelumnya, untuk menggunakan fungsi serial


monitor, kita harus menentukan kecepatan penerimaan atau pengiriman data melalui
port serial. Kecepatan yang umum di pakai adalah 9600 bit per detik. Perintah itu
ditunjukan pada bagian
Serial.begin(9600);

Pada bagian void loop barulah kita membuat program utama, yaitu program yang
memerintahkan arduino membaca input analog dari potensio yang kemudian dikirimkan
melalui port serial untuk kemudian ditampilkan pada jendela serial monitor.

1. void loop() {
2. // membaca input pada pin analog A 0:
3. int sensorValue = analogRead(A0);
4. // mencetak data yang terbaca:
5. Serial.println(sensorValue);
6. delay(1); // menambahkan delay agar pembacaan lebih sempurna
7. }

Dengan prinsip yang sama maka kita dapat menampilkan besaran sensor apapun yang
akan kita gunakan, baik itu sensor analog maupun sensor digital dengan catatan output
sensor yang dihasilkan berada pada range 0-5 V. lalu bagaimana jika kita menggunakan
sensor yang besaran outputnya terbilang kecil bahkan berukuran mili Volt? Untuk

77
mengetahui solusinya, kita akan bahas pada sketch selanjutnya, setelah sketch dasar
mengenai serial monitor kita pahami terlebih dahulu.

7.3. Pengontrolan RGB Light Melalui Serial Monitor.


Jika pada contoh di atas kita telah membuat dua buah sketch dengan
menggunakan serial monitor sebagai penampil data input yaitu input digital dan input
analog maka pada sketch yang akan kita buat kali ini kita akan memberi perintah melalui
serial monitor sehingga Arduino Uno dapat melakukan beberapa perintah yang telah kita
tentukan.
Dalam sketch ini kita akan mencoba agar Arduino Uno dapat melanyakan LED
RGB, yaitu tiga buah LED dengan warna dasar (merah, hijau, dan biru). Dengan cahaya
ketiga warna tersebut kita dapat membuat warna cahaya lainnya dengan mencampur
dua atau tiga dari warna tersebut untuk membuat warna lainnya. Salah satu contoh jika
kita ingin membuat warna cahaya ungu, maka cahaya yang perlu disatukan adalah
cahaya berwarna merah dan biru.

7.3.1. Persiapan
Rangkaian

Gambar 7.6 Interfeacing RGB light melalui serial monitor

78
Sketch Analog Read Serial

1. // Project RGB komunikasi dengan PC


2. char buffer[18];
3. int red, green, blue;
4. int B = 11;
5. int G = 10;
6. int R = 9;
7.
8. void setup()
9. {
10. Serial.begin(9600);
11. Serial.flush();
12. pinMode(R, OUTPUT);
13. pinMode(G, OUTPUT);
14. pinMode(B, OUTPUT);
15. }
16.
17. void loop()
18. {
19. if (Serial.available() > 0) {
20. int index=0;
21. delay(100); // let the buffer fill up
22. int numChar = Serial.available();
23. if (numChar>15) {
24. numChar=15;
25. }
26. while (numChar--) {
27. buffer[index++] = Serial.read();
28. }
29. splitString(buffer);
30. }
31. }
32.
33. void splitString(char* data) {
34. Serial.print("Data entered: ");
35. Serial.println(data);
36. char* parameter;
37. parameter = strtok (data, " ,");
38. while (parameter != NULL) {
39. setLED(parameter);
40. parameter = strtok (NULL, " ,");
41. }
42. // membersihkan text di serial dan buffer
43. for (int x=0; x<16; x++) {
44. buffer[x]='\0';
45. }
46. Serial.flush();
47. }
48.
49. void setLED(char* data) {
50. if ((data[0] == 'r') || (data[0] == 'R')) {
51. int Ans = strtol(data+1, NULL, 10);
52. Ans = constrain(Ans,0,255);
53. analogWrite(R, Ans);
54. Serial.print("Red is set to: ");
55. Serial.println(Ans);
56. }
57. if ((data[0] == 'g') || (data[0] == 'G')) {
58. int Ans = strtol(data+1, NULL, 10);
59. Ans = constrain(Ans,0,255);
60. analogWrite(G, Ans);
61. Serial.print("Green is set to: ");
62. Serial.println(Ans);
63. }
64. if ((data[0] == 'b') || (data[0] == 'B')) {
65. int Ans = strtol(data+1, NULL, 10);

79
66. Ans = constrain(Ans,0,255);
67. analogWrite(B, Ans);
68. Serial.print("Blue is set to: ");
69. Serial.println(Ans);
70. }
71. }

7.3.2. Analisis Sketch

Dalam sketch di atas printah yang paling utama adalah perintah yang terdapat
dalam “void settLED(char* data)” yang memungkinkan kita dapat membuat perintah
menyalakan dan mematikan LED yang kita inginkan dengan hanya mengetikan perintah
yang telah ditentukan. Perintah tersebut kita kirim melalui serial data yang kita tulis dalam
jendela serial monitor pada arduino. Pada sketch di atas perintah, perintah yang tersedia
adalah sebagai berikut.
• R0 : merupakan perintah untuk mematikan LED merah
• R255 : merupakan perintah untuk menyalakan LED merah dengan
intensitas cahaya yang maksimal
• B0 : merupakan perintah untuk mematikan LED biru
• B255 : merupakan perintah untuk menyalakan LED biru merah dengan
intensitas cahaya yang maksimal
• G0 : merupakan perintah untuk mematikan LED hijau
• dengan intensitas cahaya yang maksimal.

Untuk mendapatkan cahaya setengahnya atau seperempatnya dari cahaya maksimal


maka kita hanya perlu merubah bilangan pada angka setelah huruf. Misal kita akan
menyalakan LED merah dengan intensitas cahaya hanya setengahnya, maka perintah
yang ditulis adalah R125 dan jika hanya seperempatnya maka perintah yang ditulis R60
atau R65 ( kira-kira jumlah seperempat dari bilangan 255).

Contoh lainnya jika kita ingin membuat warna seperti di bawah ini,

maka perintah yang kita tulis adalah R255 G125 B0 lalu tekan enter.

80
BAB 8
PROGRAM DASAR DISPLAY

Materi

8.1. Sketch Dasar Penggunaan LCD


8.2. Sketch Dasar Penggunaan Modul LCD + I2C

Lembar Informasi

Pada BAB ini kita akan mulai mempelajari sketch yang lebih aplikatif namun tidak
terlalu rumit. Program aplikatif ini dapat kita aplikasikan secara real atau nyata dalam
kehidupan sehari-hari. Pada bab ini kita akan mulai menggunakan Mini Monster Trainer
Arduino Kit sebagai media pembuatan sketch atau project.

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
• Membuat sketch untuk menampilkan beberapa karakter dan tulisan pada LCD

81
8.1.Sketch Dasar Penggunaan Modul LCD (Liquid Cristal Display)
8.1.1. Pengenalan Modul LCD (Liquid Cristal Display)

LCD (Liquid Cristal Display) merupakan sebuah layar penampil data yang sangat
efektif dan efisien dalam penggunaannya. Namun untuk menampilkan sebuah karakter
pada layar LCD diperlukan beberapa rangakaian tambahan, oleh sebab itu untuk lebih
memudahkan para pengguna, maka beberapa perusahaan elektronik menciptakan
modul LCD. Salah satu modul LCD yang umum digunakan adalah modul LCD 16x2.
Adapun bentuk fisik dari modul LCD
16x2 adalah seperti yang ditunjukan pada Gambar 6.5.

Gambar 8.1Tampilan fisik modul LCD 2x16


Untuk dapat memahami cara penggunaan modul LCD terlebih dahulu kita harus
mengetahui fungsi dari pin-pin yang terdapat pada LCD. Sesuai dengan gambar di atas
modul LCD memiliki 16 pin yang diantaranya merupakan pin untuk jalur data sebanyak 8
buah, 3 pin sebagai jalur pengontrol sedangkan sisanya merupakan pin untuk
pengaturan dan catu daya. Secara ringkas fungsi dan letak dari pin-pin tersebut
dituliskan pada Tabel 8.1 dan Gambar 8.6.

82
Tabel 8.1 fungsi dan konfigurasi Pin modul LCD 16x2

Gambar 8.2 Letak dan Nama Pin Pada Modul LCD 16x2

83
Penjelasan secara umum mengenai Pin LCD ini adalah sebagai berikut :

Pin 1 dan 2
Merupakan sambungan catu daya, Vss dan Vdd. Pin Vdd dihubungkan dengan
tegangan positif catu daya, dan Vss pada 0V atau ground.
Pin 3
Pin 3 merupakan pin kontrol Vee, yang digunakan untuk mengatur kontras display.
Idealnya pin ini dihubungkan dengan tegangan yang bisa dirubah untuk
memungkinkan pengaturan terhadap tingkatan kontras display sesuai dengan
kebutuhan, pin ini dapat dihubungkan dengan variable resistor sebagai pengatur
kontras.
Pin 4
Pin 4 merupakan Register Select (RS), masukan yang pertama dari tiga command
control input. Dengan membuat RS menjadi high, data karakter dapat ditransfer dari
dan menuju modulnya.
Pin 5
Read/Write (R/W), untuk memfungsikan sebagai perintah write maka R/W low atau
menulis karakter ke modul. R/W high untuk membaca data karakter atau informasi
status dari register-nya.
Pin 6
Enable (E), input ini digunakan untuk transfer aktual dari perintah-perintah atau
karakter antara modul dengan hubungan data. Ketika menulis ke display, data
ditransfer hanya pada perpindahan high atau low. Tetapi ketika membaca dari
display, data akan menjadi lebih cepat tersedia setelah perpindahan dari low ke high
dan tetap tersedia hingga sinyal low lagi.
Pin 7-14
Pin 7 sampai 14 adalah delapan jalur data/data bus (D0 sampai D7) dimana data
dapat ditransfer ke dan dari display.
Pin 16
Pin 16 dihubungkan kedalam tegangan 5 Volt untuk memberi tegangan dan
menghidupkan lampu latar/Back Light LCD.

8.1.2. Konfigurasi Modul LCD Display dengan Arduino Uno

84
Dari 16 Pin pada Modul LCD display tidak digunakan seluruhnya ketika kita
mengkonfigurasikannya dengan Arduino Uno. Selain itu kita juga perlu sebuah
komponen tambahan sebagai pengaturan kontras yaitu sebuah Potensio meter. Untuk
lebih jelasnya berikut adalah gambar skematik konfigurasi modul LCD dan Arduino Uno,

Gambar 8.3 Interfeacing LCD dan Arduino Uno

8.1.3. Membuat Sketch Dasar LDC

Setelah kita mengenal modul LCD dan dapat mengetahui cara


mengkonfigurasinya maka kali ini kita akan mempelajari dasar-dasar pembuatan sketch-
nya. Untuk itu terlebih dahulu mari kita coba konfigurasikan LCD yang berada pada Mini
Monster Trainer Arduino Kit dengan Arduino Uno sesuai dengan konfigurasi yang telah
kita pelajari sebelumnya.

Untuk mencoba rangkaian yang telah kita susun maka selanjutnya kita dapat
memasukan beberapa sketch dasar di bawah ini.
Tabel 8.2 konfigurasi Pin LCD pada Mini Monster Trainer Arduino Kit dan Arduino Uno
No. Pin LCD pada Pin Arduino
Kit
Uno
1. Gn (Ground) GND (ground)

85
2. 5V 5V
3. RS (register Select) Digital 12
4. E (enable) Digital 11
(PWM)
5. D4 Digital 5
6. D5 Digital 4
7. D6 Digital 3
8. D7 Digital 2

Sketch Menampilkan Tulisan

1. #include <LiquidCrystal.h>
2. // initialize the library with the numbers of the interface pins
3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
4.
5. void setup()
6. {
7. lcd.begin(16, 2);
8. }
9.
10. void loop()
11. {
12. lcd.clear ();
13. lcd.print ("STORE");
14. lcd.setCursor(0,1);
15. lcd.print ("CHIP & CHEAP");
16. delay (3000);
17. lcd.clear ();
18. lcd.print ("STORE");
19. lcd.setCursor(0,1);
20. lcd.print ("ITU MURAH");
21. delay (3000);
22. }

Analisis Sketch

Untuk mengontrol sebuah LCD menggunakan Arduino Uno, maka kita harus
menggunakan sebuah pustaka (library) yang telah tersedia dalam aplikasi IDE Arduino.
Untuk memangil library tersebut sketch yang digunakan adalah

#include <LiquidCrystal.h>

Selain library kita juga perlu mendefinisikan konstanta pin-pin arduino yang
dipakai dalam rangkaian, dengan menuliskan deretan perintah sebagai berikut.

1. // initialize the library with the numbers of the interface pins


2. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Penjelasan mengenai hal ini telah kita dapat sebelumnya.

86
CATATAN Pin yang kita gunakan dalam rangkaian ini hanya menggunakan 4
buah pin data dari LCD dengan tujuan menghemat pin Arduino uno yang
jumlahnya terbatas. Artinya data dilewatkan per-4 bit (nibel). Kelemahan dari
rangkaian ini adalah pengiriman data ke LCD lebih lambat jika di bandinkan
dengan 8 bit.

Dalam fungsi void setup() {}, sketch :


lcd.begin(16, 2);

digunakan untuk menginstalasi LCD pada Arduino Uno yang memiliki 16 karakter
per-baris dengan jumlah baris sebanyak 2.
Selanjutnya, di dalam fungsi void loop() { terdapat sketch yang yang akan diulang
terus menerus. Berikut adalah penjelasan dari sketch pada fungsi tersebut
Lcd.clear ();
Memerintahkan untuk menghapus isi layar LCD. Dengan demikian perintah ini
akan menghapus seluruh tampilan dan data pada LCD dan kursor akan otomatis
akan diletakan pada kolom pertama dan baris pertama.
lcd.print ("Belajar Arduino");
Memerintahkan untuk menampilkan tulisan yang berada di antara dua
kutip ( “ ) yaitu STORE
lcd.setCursor (0,1);
Sketch ini digunakan untuk memerintahkan kursor pada kolom 0 (kolom pertama)
baris 1 (baris kedua). Perlu diketahui, sistem koordinat yang berlaku pada CD
ditunjukan pada gambar 6.10. pada LCD yang bertipe 6x2 terdapat 32 koordinat
yamh berarti dapat ditempati oleh 32 karakter. Karakter tersebut bisa berupa
sebuah angka, huruf, maupun simbol. Untuk lebih jelasnya perhatikan gambar
6.10 mengenai titik koordinat LCD 16x2.

Gambar 8.4 Sistem koordinat pada LCD 16x2

87
Perintah-perintah lainya secara umum sama seperti yang telah di jelaskan di
atas. Untuk contoh-contoh sketch yang lain mengenai lcd dapat dipelajari pada sample
program yang telah tersedia di aplikasi IDE Arduino Uno.

8.2. Sketch Dasar Penggunaan Modul LCD (Liquid Cristal Display) + I2C
8.2.1. Pengenalan Modul LCD (Liquid Cristal Display) + I2C
Sebelum hadirnya Serial I2C atau ada juga yang menyebut IIC, modul LCD I2C
dsb, kita terkadang mengalami kendala ketika menggunakan LCD sebagai output
tampilan untuk sistem yang kita buat. Salah satunya adalah penggunaan pin yang
banyak, merangkai resistor, dan trimer untuk mengatur kecerahan dan tampilan pada
layar. Dengan I2C kita hanya perlu menggunakan 2 PIN sajah yaitu SCL dan SDA yang
pada Arduino Uno, dan Arduino Nano adalah PIN A5 dan A4 sedangkan pada Arduino
Mega adalah PIN 20 (SDA) and 21 (SCL).
Kehebatan I2C lainnya yaitu kita dapat mengatur BackLight LCD melalui program
yang kita buat dengan mudah, kemudian kita dapat menyandingkan beberapa modul
yang menggunakan serial I2C secara bersamaan, contohnya I2C pada LCD dan I2C
pada RTC I2C, yang mana kita bisa menyatukan keduanya dengan cara pararel pada
PIN yang sama yaitu SDA dan SCL.

8.2.2. Konfigurasi Modul LCD Display + I2C dengan Arduino Uno

Biasanya sebuah LCD dikendalikan secara parallel baik untuk jalur data maupun
kontrolnya. Namun, cara mengakses LCD dengan teknik pararel akan banyak
menghabiskan jumlah pin, Setidaknya kita akan membutuhkan 6 Pin untuk
mengendalikan sebuah modul LCD. Sebagai contoh, sebuah Arduino Uno atau Arduino
Nano memiliki pin digital sebanyak 14 buah, jika kita gunakan 6 Pin untuk
mengendalikan LCD berarti Anda hanya punya alternatif sekitar 8 pin untuk
mengendalikan perangkat yang lain itu pun jika pin Rx dan Tx tidak kita gunakan untuk
berkomunikasi dengan PC atau laptop kita. Kendala lain dari merangkai LCD secara
pararel yaitu kita akan sedikit kerepotan dalam merangkainya dan tentu diperlukan
beberapa komponen tambahan seperti resistor dan Potensio meter untuk mengatur
kontras pada LCD. Untuk lebih meyederhanakan rangkaiaan dan juga mengurangi
penggunaan PIN maka LCD Plus I2C serial Interfeace ini adalah solusinya, dimana
dengan menggunakan komunikasi I2C kita hanya perlu menggunakan 2 Pin untuk serial
kumunikasi dan dua pin untuk Vcc dan Gnd.

88
Gambar 8.5 Interfeacing LCD + I2C dan Arduino

8.2.3. Membuat Sketch Dasar LDC


Sketch Menampilkan Tulisan

1. /* PROGRAM MENJALANKAN LCD + I2C


2. * by Monsterchip
3. *
4. * credit: arduino
5. *
6. * Program ini akan menjelaskan cara untuk menjalankan 1 buah LCD+I2C
7. *
8. */
9.
10. #include <LiquidCrystal_I2C.h> //memanggil library LCD+I2C
11. LiquidCrystal_I2C lcdku(0x27,16,2); //memberi nama pada lcd yg akan
12. //digunakan, dan setting alamat i2c
13. //lcd beserta jumlah kolom dan baris
14. //lcd
15.
16. void setup() {
17. lcdku.init(); //menginisiasi/memulai lcd
18. lcdku.backlight(); //mengaktifkan bakclight pada lcd
19. lcdku.setCursor(2,0); //set cursor tulisan yg akan ditampilkan,
20. //pada kolom ke berapa dan baris keberapa
21. lcdku.print("Hai.. Kamu.."); //tulisan yg akan ditampilkan pada set
22. //cursor diatas
23. lcdku.setCursor(0,1); //set cursor tulisan yg akan ditampilkan,
24. //pada kolom ke berapa dan baris keberapa
25. lcdku.print("Iyya.. Kamu.. :p");//tulisan yg akan ditampilkan pada set
26. //cursor diatas
27. delay(3000); //jeda selama 3000ms (3 detik)
28. }
29.

89
30. void loop() {
31. lcdku.clear(); //membersihkan memory lcd agar tidak
32. //menampilkan apapun
33. lcdku.setCursor(1,0); //set cursor tulisan yg akan ditampilkan,
34. //pada kolom ke berapa dan baris keberapa
35. lcdku.print("Jangan Sungkan"); //tulisan yg akan ditampilkan pada set
36. //cursor diatas
37. lcdku.setCursor(0,1); //set cursor tulisan yg akan ditampilkan,
38. //pada kolom ke berapa dan baris keberapa
39. lcdku.print("Coba Sendiri Aja");//tulisan yg akan ditampilkan pada set
40. //cursor diatas
41. delay(100); //jeda selama 100ms
42. }

Untuk analisis sketch silahkan dibaca pada kolom koment disebelah program
yang tertera diatas.

90
BAB 9
APLIKASI SENSOR

Materi

9.1. Aplikasi Sensor LDR


9.2. Aplikasi Sensor DHT-11
9.3. Aplikasi Sensor Jarak
9.4. Aplikasi Mengendalikan Servo

Lembar Informasi

Pada BAB ini kita akan membuat project dasar yang memakai beberapa jenis
sensor dasar seperti sensor cahaya (LDR), sensor suhu LM35, dan sensor gerak PIR
yang terdapat pada Mini Monster Trainer Arduino Kit.

Tujuan
Setelah membaca bab ini diharapkan agar kita dapat :
• Mengenal berbagai macam sensor analog dan linier
• Mampu membuat berbagai project menggunakan berbagai sensor
• Memahami prinsip kerja berbagai sensor dan cara merangkainya

91
9.1. Aplikasi Sensor LDR
Mini Monster Trainer Arduino Kit memiliki beberapa sensor yang dapat kita
gunakan untuk mempelajari pemrograman Arduino. Dalam bab ini kita akan mempelajari
dasar penggunaan LDR menggunakan sketch yang sederhana.

9.1.1. Persiapan Membuat Sketch Dasar Menggunakan Sensor Cahaya

Pada sketch ini kita akan membuat sebuah project menggunakan sensor cahaya
berupa LDR. Dimana jika LDR kita beri cahaya atau berada di tempat terang maka
buzzer akan berbunyi dan saalah satu LED menyala.
Interfacing Arduino pada Breadboard

Gambar 9.1 Rangkaian LDR (Light Defendent Resistor) pada Breadboard

Gambar 9.2 gambar Polaritas (+/-) Buzzer

92
Buatlah rangkaian seperti gambar 9.1 jika menggunakan breadboard dan
perhatikan untuk polaritas Buzzer, kaki (-) atau yang lebih pendek adalah yang
menyambung pada GND Arduino.

Sketch dasar aplikasi sensor cahaya

1. /* PROGRAM UNTUK MENJALANKAN 2 LED DAN 1 BUZZER/RELAY DENGAN LDR


2. * by Monsterchip
3. *
4. * credit:
5. *
6. * Pada program ini akan dijelaskan pemograman 2 led menggunakan LDR
7. * Jika LDR mendeteksi cahaya maka led1 dan buzzer/relay akan menyala,
8. * jika LDR tidak mendeteksi cahaya maka led2 akan menyala dan
9. * buzzer/relay padam
10. *
11. */
12.
13. int LDR = A0; //membuat variable LDR, dengan type data integer,
14. //dan mengisinya dengan nilai A0 (dalam hal ini
15. //kaki/pin yang akan digunakan untuk LDR)
16. int nilaiLDR = 0; //membuat variable nilaiLDR, dengan type data integer,
17. //dan mengisinya dengan nilai 0 (dalam hal ini
18. //dibuat untuk menampung nilai pembacaan dari LDR)
19. const int buzz = 10; //membuat variable buzz, dengan type data integer,
20. //dan mengisinya dengan nilai 10 (dalam hal ini
21. //kaki/pin yang akan digunakan untuk buzzer)
22. const int led1 = 11; //membuat variable led1, dengan type data integer,
23. //dan mengisinya dengan nilai 11 (dalam hal ini
24. //kaki/pin yang akan digunakan untuk led1)
25. const int led2 = 12; //membuat variable led2, dengan type data integer,
26. //dan mengisinya dengan nilai 12 (dalam hal ini
27. //kaki/pin yang akan digunakan untuk led2)
28.
29. void setup() {
30. pinMode(buzz, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada pada
31. //variable buzz sebagai OUTPUT
32. pinMode(led1, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada pada
33. //variable led1 sebagai OUTPUT
34. pinMode(led2, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada pada
35. //variable led2 sebagai OUTPUT
36. }
37.
38. void loop() {
39. nilaiLDR = analogRead(LDR); //memasukan nilai pembacaan pada kaki/pin LDR
40. //ke variable nilaiLDR
41. if(nilaiLDR <= 500){ //jika nilai pada variable nilaiLDR 'kurang
42. //dari sama dengan' 500, maka:
43. digitalWrite(buzz, 1); //menulis/memberikan nilai digital 1/HIGH
44. //pada kaki/pin buzz
45. digitalWrite(led1, 1); //menulis/memberikan nilai digital 1/HIGH
46. //pada kaki/pin led1
47. digitalWrite(led2, 0); //menulis/memberikan nilai digital 0/LOW
48. //pada kaki/pin led2
49. }
50. else if(nilaiLDR >= 501){ //tetapi jika nilai pada variable nilaiLDR
51. //'lebih dari sama dengan' 501, maka:
52. digitalWrite(buzz, 0); //menulis/memberikan nilai digital 0/LOW
53. //pada kaki/pin buzz
54. digitalWrite(led1, 0); //menulis/memberikan nilai digital 0/LOW
55. //pada kaki/pin led1
56. digitalWrite(led2, 1); //menulis/memberikan nilai digital 1/HIGH
57. //pada kaki/pin led2
58. }
59. }

93
9.1.2. Analisis Hardware

Pengenalan komponen LDR sebagai sensor cahaya


Sensor Cahaya LDR (Light Dependent Resistor) adalah salah satu jenis
resistor yang dapat mengalami perubahan resistansinya apabila mengalami perubahan
penerimaan cahaya. Besarnya nilai hambatan pada Sensor Cahaya LDR (Light
Dependent Resistor) tergantung pada besar kecilnya cahaya yang diterima oleh LDR
itu sendiri. LDR sering disebut dengan alat atau sensor yang berupa resistor yang peka
terhadap cahaya.
Resistansi LDR pada tempat yang gelap biasanya mencapai sekitar 10 MΩ, dan di
tempat terang LDR mempunyai resistansi yang turun menjadi sekitar 150
Ω. Seperti halnya resistor konvensional, pemasangan LDR dalam suatu rangkaian sama
persis seperti pemasangan resistor biasa.
Bagaimana cara agar LDR dapat dijadikan sebagai sensor cahaya? Bukankah
perubahan besaran pada LDR adalah perubahan resistansi, sedangkan besaran yang
dapat diproses oleh Arduino sendiri harus berupa besaran tegangan? Untuk
menjawab itu perhatikan gambar di bawah ini agar kita dapat lebih memahaminya.

V out
Gambar 9.3 Skematik LDR (Light Defendent Resistor) pada Mini Monster
Trainer Arduino Kit

Gambar di atas merupakan skematik rangkaian LDR pada Mini Monster Trainer
Arduino Kit. Prinsip dasar rangkaian tersebut adalah prinsip rangkaian pembagi
tegangan. Dengan berubahnya besaran resistansi pada LDR akibat pengaruh cahaya,
maka tegangan V out akan berubah pula. Perhitungan dari pembagi tegangan adalah
sebagai berikut,

94
Gambar 9.4 Driver tegangan (Pembagi tegangan)
Misalkan Vin adalah tegangan yang berasal dari Arduino sebesr 5V dan R1 adalah
resistor sebesar 1 kΩ (100Ω) sedangkan R2 adalah LDR yang kita letakkan pada tempat
redup sehingga resistansinya misalkan juga 1 kΩ sehingga perhitungannya sebagai
berikut

kemudian LDR kita beri pancaran cahaya maka besaran resistansi akan berkurang
misalkan 500Ω maka mari kita lihat perubahan tegangan outputnya.

dengan demikian terjawablah sudah kenapa LDR dapat kita jadikan sebagai sensor
cahaya. Dengan prinsip pembagi tegangan maka besaran dari LDR yang berupa
besaran resistansi diubah menjadi besaran tegangan analog yang dapat kita proses
pada arduino. Prinsip ini dapat kita pakai pada sensor analog apapun yang menghasilkan
besaran berupa resisitansi.

Pengenalan Komponen Buzzer


Buzzer merupakan tranduser yang dapat merubah arus listrik menjadi getaran
yang kemudian menghasilkan gelombang suara. Penggunaan buzzer pada rangkaian
elektronika sering dipakai sebagai indikator suara. Hanya dengan memberi tegangan DC
maka kita buzzer dapat menghasilkan suara dengan catatan bila kita menggunakan
buzzer 5V maka batas pemberian tegangan sebesar 5V dan tegangan tersebut adalah
tegangan terbesar untuk menghasilkan suara ternyaring pada buzzer, begitupun dengan
buzzer 12V atau 24V,
9.1.3. Analisis Sketch
Guna memahami fungsi setiap sketch yang telah kita buat maka setiap perintah
lihatlah komentar yang tertera

9.2. Aplikasi Sensor DHT11


Berbeda dengan percobaan sebelumnya yang menggunakan sensor analog yaitu
sensor cahaya, pada bab ini kita akan membuat project menggunakan sensor linier
berupa sensor suhu dan kelembaban DHT-11 yang hasil pengolahannya dapat kita
tampilkan dalam serial monitor.

95
Penggunaan sensor suhu linier akan sangat mempermudah kita dalam membuat
project. Selain proses kalibrasi yang lebih mudah, penggunaan sensor linier yang telah
berbentuk IC juga memiliki presisi yang tinggi dibanding penggunaan sensor analog
seperti LDR sebagai sensor cahaya maupun PTC/NTC sebagai sensor suhu. Sensor
suhu yang akan kita gunakan yaitu sensor suhu DHT-11 yang juga sekaligus
merupakan sensor kelembaban udara. Untuk lebih memahami cara dan prinsip
kerjakan, kita akan segera membuat skectnya.

9.2.1 Persiapan Membuat Project Menggunakan Sensor Suhu

Gambar 9.5 Interfeacing menggunakan breadboard

Sketch Sensor Suhu

1. /* PROGRAM UNTUK MENJALANKAN LCD DAN 1 BUZZER/RELAY DENGAN SENSOR DHT


2. * by Monsterchip
3. *
4. * credit:
5. *
6. * Pada program ini akan dijelaskan pemograman LCD menggunakan DHT
7. * Jika DHT mendeteksi suhu 'lebih dari sama dengan' 31°C, maka LCD
8. * menampilkan peringatan serta led1 dan buzzer/relay akan menyala,
9. * jika DHT mendeteksi suhu 'kurang dari sama dengan' 30°C cm, maka
10. * LCD menampilkan peringatan serta led2 akan menyala dan
11. * buzzer/relay padam
12. *
13. */
14.
15. #include "DHT.h" //memanggil library DHT
16. #define DHTPIN 2 //Mendefinisikan DHTPIN sebagai pin/kaki sensor
17. //DHT pada Arduino
18. //Hilangkan koment sesuai type DHT yg digunakan
19. #define DHTTYPE DHT11 // DHT 11

96
20. //#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
21. //#define DHTTYPE DHT21 // DHT 21 (AM2301)
22. DHT dht(DHTPIN, DHTTYPE); //memberi nama pada sensor DHT yg akandigunakan,
23. //dan setting kaki/pin sesuai yg telah dibuat
24.
25. #include <LiquidCrystal_I2C.h> //memanggil library LCD+I2C
26. LiquidCrystal_I2C lcdku(0x27,16,2); //memberi nama pada lcd yg akan
27. //digunakan, dan setting alamat i2c
28. //lcd beserta jumlah kolom dan baris
29. //lcd
30.
31. const int buzz = 10; //membuat variable buzz, dengan type data integer,
32. //dan mengisinya dengan nilai 10 (dalam hal ini
33. //kaki/pin yang akan digunakan untuk buzzer)
34. const int led1 = 11; //membuat variable led1, dengan type data integer,
35. //dan mengisinya dengan nilai 11 (dalam hal ini
36. //kaki/pin yang akan digunakan untuk led1)
37. const int led2 = 12; //membuat variable led2, dengan type data integer,
38. //dan mengisinya dengan nilai 12 (dalam hal ini
39. //kaki/pin yang akan digunakan untuk led2)
40.
41. void setup() {
42. pinMode(buzz, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada
43. //pada variable buzz sebagai OUTPUT
44. pinMode(led1, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada
45. //pada variable led1 sebagai OUTPUT
46. pinMode(led2, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada
47. //pada variable led2 sebagai OUTPUT
48. dht.begin(); //menginisiasi/memulai ssensor DHT
49. lcdku.init(); //menginisiasi/memulai lcd
50. lcdku.backlight(); //mengaktifkan bakclight pada lcd
51. lcdku.setCursor(2,0); //set cursor tulisan yg akan ditampilkan,
52. //pada kolom ke berapa dan baris ke berapa
53. lcdku.print("Hai.. Kamu.."); //tulisan yg akan ditampilkan pada
54. //set cursor diatas
55. lcdku.setCursor(0,1); //set cursor tulisan yg akan
56. //ditampilkan, pada kolom ke berapa
57. //dan baris ke berapa
58. lcdku.print("Iyya.. Kamu.. :p"); //tulisan yg akan ditampilkan pada
59. //set cursor diatas
60. delay(3000); //jeda selama 3000ms (3 detik)
61. }
62.
63. void loop() {
64. float h = dht.readHumidity(); //membuat variable h, dengan type
65. //data float, dan mengisinya
66. //dengan nilai pembacaan humidity
67. //sensor DHT
68. float c = dht.readTemperature(); //membuat variable c, dengan type
69. //data float, dan mengisinya
70. //dengan nilai pembacaan suhu
71. //sensor DHT dalam celcius
72. float f = dht.readTemperature(true); //membuat variable f, dengan type
73. //data float, dan mengisinya
74. //dengan nilai pembacaan suhu
75. //sensor DHT dalam fahrenheit
76. //(Fahrenheit = true)
77.
78. if(c >= 31){ //jika nilai pada variable c 'lebih dari
79. //sama dengan' 31°C, maka:
80. digitalWrite(buzz, 1); //menulis/memberikan nilai digital 1/HIGH
81. //pada kaki/pin buzz
82. digitalWrite(led1, 1); //menulis/memberikan nilai digital 1/HIGH
83. //pada kaki/pin led1
84. digitalWrite(led2, 0); //menulis/memberikan nilai digital 0/LOW
85. //pada kaki/pin led2
86. lcdku.clear(); //membersihkan memory lcd agar tidak
87. //menampilkan apapun
88. lcdku.setCursor(0,0); //set cursor tulisan yg akan ditampilkan,
89. //pada kolom ke berapa dan baris ke berapa

97
90. lcdku.print("Humidity : "); //tulisan yg akan ditampilkan pada set
91. //cursor diatas
92. lcdku.print(h); //tulisan yg akan ditampilkan pada set
93. //cursor diatas
94. lcdku.print(" %"); //tulisan yg akan ditampilkan pada set
95. //cursor diatas
96. lcdku.setCursor(0,1); //set cursor tulisan yg akan ditampilkan,
97. //pada kolom ke berapa dan baris ke berapa
98. lcdku.print("Suhu : "); //tulisan yg akan ditampilkan pada set
99. //cursor diatas
100. lcdku.print(c); //tulisan yg akan ditampilkan pada set
101. //cursor diatas
102. lcdku.print("°C"); //tulisan yg akan ditampilkan pada set
103. //cursor diatas
104. lcdku.print(f); //tulisan yg akan ditampilkan pada set
105. //cursor diatas
106. lcdku.print("°F"); //tulisan yg akan ditampilkan pada set
107. //cursor diatas
108. delay(100); //jeda selama 100ms
109. }
110. else if(c <= 30){ //tetapi jika nilai pada variable c 'kurang
111. //dari sama dengan' 30°C, maka:
112. digitalWrite(buzz, 0);
113. digitalWrite(led1, 0);
114. digitalWrite(led2, 1);
115. lcdku.clear();
116. lcdku.setCursor(0,0);
117. lcdku.print("Humidity : ");
118. lcdku.print(h);
119. lcdku.print(" %");
120. lcdku.setCursor(0,1);
121. lcdku.print("Suhu : ");
122. lcdku.print(c,0);
123. lcdku.print("°C ");
124. lcdku.print(f,0);
125. lcdku.print("°F");
126. delay(100); //jeda selama 100ms
127. }
128. }

Pada program tersebut terdapat library yang perlu kita tambahkan terlebih dahulu,
caranya adalah dengan mengcopy folder yang ditunjukan oleh gambar 9.6
(terdapat pada kaset) ke folder C:\Program Files (x86)\Arduino\libraries, lihat
gambar 9.7 maka program baru akan bias di upload.

Gambar 9.6 Folder Library DHT-11

98
Gambar 9.7 Tempat Folder Libraries Pada IDE Arduino
Setelah berhasil di upload silahkan buka serial monitor dan amati hasilnya, untuk
membuktikan bahwa sensor bekerja maka kita bisa menggunakan hairdryer yang
diarahkan pada sensor
9.2.2 Analisis Hardware

DHT-11 adalah chip tunggal kelembaban relatif dan multi sensor suhu yang
terdiri dari modul yang dikalibrasi keluaran digital. Pada pengukuran suhu data yang
dihasilkan 14 bit, sedangkan untuk kelembaban data yang dihasilkan
12 bit. Keluaran dari DHT-11 adalah digital sehingga untuk mengaksesnya
diperlukan pemrograman dan tidak diperlukan pengkondisi sinyal atau ADC
. DHT memiliki banyak varian, salah satunya yaitu DHT22 (AM2302) dengan bentuk
fisik seperti pada gambar

Gambar 9.8 Sensor Suhu dan Kelembaban

99
Sensor DHT-11 dipilih daripada sensor DHT-11 karena memiliki range
pengukuran yang luas yaitu 0 sampai 100% untuk kelembaban dan -40 derajatcelcius
sampai 125 derajat celcius untuk suhu. Sensor ini juga memiliki output digital
(single-bus) dengan akurasi yang tinggi. Sebagai reaksi dari sensor ini, saya
menggunakan fan DC yang akan berputar ketika level kelembaban mencapai 60%
atau ketika suhu lebih dari 40 derajat celcius, tetapi kita dapat mengganti nilainya pada
sketchnya. DHT-22 membutuhkan supply tegangan 2.4 dan 5.5 V. SCK (Serial Clock
Input) digunakan untuk mensinkronkan komunikasi antara mikrokontroler dengan DHT-
22, kemudian digunakan untuk transfer data dari dan ke DHT-22 .
Sistem sensor yang digunakan untuk mengukur suhu dan kelembaban
adalah DHT-11 dengan sumber tegangan 5 Volt dan komunikasi bidirectional 2- wire.
Sistem sensor ini mempunyai 1 jalur data yang digunakan untuk perintah pengalamatan
dan pembacaan data. Pengambilan data untuk masing-masing
pengukuran dilakukan dengan memberikan perintah pengalamatan oleh mikrokontroler.
Kaki serial Data yang terhubung dengan mikrokontroler memberikan perintah
pengalamatan pada pin Data DHT-22 “00000101” untuk mengukur kelembaban
relatif dan “00000011” untuk pengukuran temperatur. DHT-22 memberikan
keluaran data kelembaban dan temperatur pada pin Data secara bergantian sesuai
dengan clock yang diberikan mikrokontroler agar sensor dapat bekerja. Sensor DHT-22
memiliki ADC (Analog to Digital Converter) di dalamnya sehingga keluaran data DHT-
22 sudah terkonversi dalam bentuk data digital dan tidak memerlukan ADC eksternal
dalam pengolahan data pada mikrokontroler.

9.3. Sketch Pendeteksi Jarak Menggunakan Sensor Ultrasonic


Gelombang ultrasonik merupakan gelombang yang umum digunakan untuk radar
untuk mendeteksi keberadaan suatu benda dengan memperkirakan jarak antara sensor
dan benda tersebut. Dalam ebook ini, kita akan mempelajarinya dengan salah satu
sensor ultrasonik HC-SR04 sebab sensor ini juga relatif terjangkau untuk pembelajaran.
Bentuk fisik dari sensor ini tampak seperti gambar

100
Gambar 9.9 Sensor Jarak Ultrasonic HC-SR04
Sensor ultrasonik adalah sebuah sensor yang berfungsi untuk mengubah besaran
fisis (bunyi) menjadi besaran listrik dan sebaliknya. Cara kerja sensor ini didasarkan
pada prinsip dari pantulan suatu gelombang suara sehingga dapat dipakai untuk
menafsirkan eksistensi (jarak) suatu benda dengan frekuensi tertentu. Disebut sebagai
sensor ultrasonik karena sensor ini menggunakan gelombang ultrasonik (bunyi
ultrasonik). Gelombang ultrasonik adalah gelombang bunyi yang mempunyai frekuensi
sangat tinggi yaitu 20.000 Hz. Bunyi ultrasonik tidak dapat di dengar oleh telinga
manusia. Bunyi ultrasonik dapat didengar oleh anjing, kucing, kelelawar, dan lumba-
lumba. Bunyi ultrasonik bisa merambat melalui zat padat, cair dan gas. Reflektivitas
bunyi ultrasonik di permukaan zat padat hampir sama dengan reflektivitas bunyi
ultrasonik di permukaan zat cair. Akan tetapi, gelombang bunyi ultrasonik akan diserap
oleh tekstil dan busa

9.3.1 Cara Kerja Sensor Ultrasonik

Pada sensor ultrasonik, gelombang ultrasonik dibangkitkan melalui sebuah alat


yang disebut dengan piezoelektrik dengan frekuensi tertentu. Piezoelektrik ini akan
menghasilkan gelombang ultrasonik (umumnya berfrekuensi 40kHz) ketika sebuah
osilator diterapkan pada benda tersebut. Secara umum, alat ini akan menembakkan
gelombang ultrasonik menuju suatu area atau suatu target. Setelah gelombang
menyentuh permukaan target, maka target akan memantulkan kembali gelombang
tersebut. Gelombang pantulan dari target akan ditangkap oleh sensor, kemudian sensor
menghitung selisih antara waktu pengiriman gelombang dan waktu gelombang pantul
diterima

101
Gambar 9.10 Prinsip Kerja sensor Ultrasonic

Karena kecepatan bunyi di udara adalah 340 m/s, maka rumus untuk mencari
jarak berdasarkan ultrasonik adalah :

dimana S merupakan jarak antara sensor ultrasonik dengan benda (bidang


pantul), dan t adalah selisih antara waktu pemancaran gelombang oleh transmitter dan
waktu ketika gelombang pantul diterima receiver.
HC-SR04 merupakan sensor ultrasonik siap pakai, satu alat yang berfungsi
sebagai pengirim, penerima, dan pengontrol gelombang ultrasonik. Alat ini bisa
digunakan untuk mengukur jarak benda dari 2cm - 4m dengan akurasi 3mm. Dengan
demikian, untuk menghitung jarak yang hanya maksimal 4 m maka rumus di atas harus
dimodifikasi atau disesuaikan satuannya. Mikrokontroler bisa bekerja pada order
mikrosekon (1s = 1.000.000 µs) dan satuan jarak bisa kita ubah ke satuan cm (1m = 100
cm). Oleh sebab itu, rumus di atas bisa diupdate menjadi:

Alat ini memiliki 4 pin, pin Vcc, Gnd, Trigger, dan Echo. Pin Vcc untuk listrik positif
dan Gnd untuk ground-nya. Pin Trigger untuk trigger keluarnya sinyal dari sensor dan pin
Echo untuk menangkap sinyal pantul dari benda
Cara menggunakan alat ini yaitu :
- Ketika kita memberikan tegangan positif pada pin Trigger selama 10µS, maka
sensor akan mengirimkan 8 step sinyal ultrasonik dengan frekuensi
40kHz
- Selanjutnya, sinyal akan diterima pada pin Echo

102
- Untuk mengukur jarak benda yang memantulkan sinyal tersebut, selisih waktu
ketika mengirim dan menerima sinyal digunakan untuk menentukan jarak benda
tersebut
- Rumus untuk menghitung jaraknya adalah S = (0.034 *t) /2cm.
Berikut adalah visualisasi dari sinyal yang dikirimkan oleh sensor HC-SR04 :

Gambar 9.11 Prinsip Kerja sensor Ultrasonic

9.3.2 Persiapan Membuat Sketch Pengukuran Jarak


Rangkaian

Gambar 9.12 Rangkaian Sensor Ultrasonic


Sketch Pendeteksi Jarak

1. /* PROGRAM UNTUK MENJALANKAN LCD DAN 1 BUZZER/RELAY DENGAN


2. * SENSOR PING/ULTRASONIC
3. * by Monsterchip
4. *
5. * credit: arduino
6. *
7. * Pada program ini akan dijelaskan pemograman LCD menggunakan PING

103
8. * Jika PING mendeteksi jarak 'kurang dari sama dengan' 15 cm, maka
9. * LCD menampilkan peringatan serta led1 dan buzzer/relay akan menyala,
10. * jika PING mendeteksi jarak 'lebih dari sama dengan' 16 cm,
11. * maka LCD menampilkan peringatan serta led2 akan menyala dan
12. * buzzer/relay padam
13. *
14. */
15.
16. #include <NewPing.h> //memanggil library sensor PING
17. #define TRIGGER_PIN 12 //Mendefinisikan TRIGGER_PIN sebagai pin/kaki
18. //trigger sensor PING pada Arduino
19. #define ECHO_PIN 11 //Mendefinisikan ECHO_PIN sebagai pin/kaki
20. //trigger sensor PING pada Arduino
21. #define MAX_JARAK 200 //Maximum pembacaan sensor PING (dalam sentimeter)
22. //Maximum sensor antara 400-500cm.
23. NewPing PING(TRIGGER_PIN, ECHO_PIN, MAX_JARAK); //memberi nama pada sensor
24. //PING yg akan digunakan,
25. //dan setting kaki/pin
26. //sesuai yg telah dibuat
27. int nilaiPING = 0; //membuat variable nilaiPING, dengan type data
28. //integer, dan mengisinya dengan nilai 0
29. //(dalam hal ini dibuat untuk menampung nilai
30. //pembacaan dari PING)
31.
32. #include <LiquidCrystal_I2C.h> //memanggil library LCD+I2C
33. LiquidCrystal_I2C lcdku(0x27,16,2); //memberi nama pada lcd yg akan
34. //digunakan, dan setting alamat
35. //i2c lcd beserta jumlah kolom
36. //dan baris lcd
37.
38. const int buzz = 10; //membuat variable buzz, dengan type data integer,
39. //dan mengisinya dengan nilai 10 (dalam hal ini
40. //kaki/pin yang akan digunakan untuk buzzer)
41.
42. void setup() {
43. pinMode(buzz, OUTPUT); //membuat kaki/pin (sesuai nilai) yg ada
44. //pada variable buzz sebagai OUTPUT
45. lcdku.init(); //menginisiasi/memulai lcd
46. lcdku.backlight(); //mengaktifkan bakclight pada lcd
47. lcdku.setCursor(2,0); //set cursor tulisan yg akan ditampilkan,
48. //pada kolom ke berapa dan baris keberapa
49. lcdku.print("Hai.. Kamu.."); //tulisan yg akan ditampilkan pada set
50. //cursor diatas
51. lcdku.setCursor(0,1); //set cursor tulisan yg akan ditampilkan,
52. //pada kolom ke berapa dan baris keberapa
53. lcdku.print("Iyya.. Kamu.. :p");//tulisan yg akan ditampilkan pada set
54. //cursor diatas
55. delay(3000); //jeda selama 3000ms (3 detik)
56. }
57.
58. void loop() {
59. delay(50); //50ms (50 pings/sec). 29ms adalah delay
60. //terkecil.
61. nilaiPING = PING.ping_cm(); //memasukan nilai pembacaan sensor PING
62. //ke variable nilaiPING
63. if(nilaiPING <= 15){ //jika nilai pada variable nilaiPING
64. //'kurang dari sama dengan' 15 (cm), maka:
65. digitalWrite(buzz, 1); //menulis/memberikan nilai digital
66. //1/HIGH pada kaki/pin buzz
67. lcdku.clear(); //membersihkan memory lcd agar tidak
68. //menampilkan apapun
69. lcdku.setCursor(1,0); //set cursor tulisan yg akan ditampilkan,
70. //pada kolom ke berapa dan baris keberapa
71. lcdku.print("S E L AA M A T");//tulisan yg akan ditampilkan pada set
72. //cursor diatas
73. lcdku.setCursor(3,1); //set cursor tulisan yg akan ditampilkan,
74. //pada kolom ke berapa dan baris keberapa
75. lcdku.print("Jarak : "); //tulisan yg akan ditampilkan pada set
76. //cursor diatas

104
77. lcdku.print(nilaiPING); //tulisan yg akan ditampilkan pada set
78. //cursor diatas
79. lcdku.print(" cm"); //tulisan yg akan ditampilkan pada set
80. //cursor diatas
81. delay(100); //jeda selama 100ms
82. }
83. else if(nilaiPING >= 16){ //tetapi jika nilai pada variable nilaiPING
84. //'lebih dari sama dengan' 16, maka:
85. digitalWrite(buzz, 0);
86. lcdku.clear();
87. lcdku.setCursor(1,0);
88. lcdku.print("S E L AA M A T");
89. lcdku.setCursor(3,1);
90. lcdku.print("Jarak : ");
91. lcdku.print(nilaiPING);
92. lcdku.print(" cm");
93. delay(100);
94. }
95. }

9.4. Mengendalikan Servo

Pada umumnya motor servo sering digunakan pada system robotics untuk
mengendalikan arah dan pergerakan. Salah satu contoh dapat kita pakai untuk
menggerakan arah sebuah robot hingga dapat berbelok kekiri dan ke kanan.

Berbeda dengan motor DC biasa, motor servo hanya dapat berputar


sebanyak 1800 hingga 3600 selain itu. Motor servo tidak dapat berputar cepat namun
memiliki tenaga yang begitu besar sehingga sering di pakai untuk mengangkat,
memutar, dan membalikan lengan robot.

9.4.1. Persiapan Menbuat Sketch Pengendali Servo

Rangkaian pada Mini Monster Trainer Arduino Kit

Gambar 9.13 Rangkaian Pengendali Servo


Sketch Pengendali Servo

1. /* PROGRAM MENJALANKAN 1 MOTOR SERVO


2. * by Monsterchip
3. *

105
4. * credit:
5. *
6. * Program ini akan dijelaskan cara untuk menjalankan 1 buah servo
7. * servo akan berputar dari sudut 0 derajat menuju sudut 180 derajat
8. * kemudian akan berputar dari sudut 180 derajat menuju sudut 0 derajat
9. *
10. */
11.
12. #include <Servo.h> //memanggil library servo.h
13. Servo servoku; //memberi nama pada servo yg akan digunakan
14.
15. int posisi = 0; //membuat variable pos, dengan type data integer,
16. //dan diisi dengan nilai 0
17.
18. void setup() {
19. servoku.attach(9); //servo dipasangkan pada kaki/pin digital 9 (PWM)
20. }
21.
22. void loop() {
23. for (posisi = 0; posisi <= 180; posisi += 1) {//melakukan perualangan
24. //penambahan nilai pada
25. //variable posisi
26. //dan programnya dijalankan
27. //setiap penambahan (dalam
28. //hal ini setiap +1)
29. servoku.write(posisi); //membuat servo bergerak
30. //pada sudut sesuai nilai
31. //yg ada pada variable
32. //posisi
33. delay(15); //jeda 15ms untuk servo
34. //bergerak
35. }
36. for (posisi = 180; posisi >= 0; posisi -= 1) {//melakukan perualangan
37. //pengurangan nilai pada
38. //variable posisi
39. //dan programnya dijalankan
40. //setiap pengurangan (dalam
41. //hal ini setiap -1)
42. servoku.write(posisi); //membuat servo bergerak
43. //pada sudut sesuai nilai
44. //yg ada pada variable
45. //posisi
46. delay(15); //jeda 15ms untuk servo
47. //bergerak
48. }
49. }

9.4.2. Pembahasan Sketch dan Hardware

Pembahasan Sketch
Pembahasan sketch telah terurai pada komen yang tertulis di sketch yang akan kita
buat
Pembahasan Hardware
Seperti yang telah di jelaskan sebelumnya bahwa motor servo merupakan motor
yang pada umumnya hanya dapat berputar 1800 namun pada jenis tertentu juga ada
yang dapat bergerak hingga 3600 atau satu putaran penuh. Tidak seperti motor DC
biasa, motor servo memiliki putaran yang terbilang lambat namun stabil, selain itu
kekuatan putaran juga sangat besar hingga mampu memngangkat beban yang besar 5-
24 kg.

106
Jika kita perhatikan, sumber tegangan 5V pada Rangkaian kita ambi dari adaptaor.
Mengapa demikian? Hal ini kita lakukan karena meski kebutuhan tegangan motor
servo dapat kita dapatkan pada arduino yaitu 5V namun arduino tidak dapat
memenuhi kebutuhan arusnya. Dengan kata lain
kebutuhan arus motor servo sangatlah besar. Untuk itu kita memerlukan tegangan 5V
dari sumber lain yang memiliki arus maksimun yang besar.
Jika kita teliti mungkin kita akan bertanya kembali, bagaimana bisa kita
mendapatkan sumber tegangan 5V sedangkan adaptor yang kita gunakan adalah
Adaptor 12V? untuk menjawab itu sangatlah sederhana, yaitu pada Mini Monster
Trainer Arduino Kit telah terdapat rangkaian untuk mengkonversi tegangan 15V-12V
menjadi tegangan 5V.
Catatan : jika kita ingin menggunakan sumber tegangan dari luar, maka
ground yang harus kita satukan. Missal kita menggunakan adaptor 5V maka
ground (-) harus kita sambungkan pada ground Arduino Uno (pin Gnd). Jika tidak
maka rangkaian yang kita buat tak akan berjalan.

9.5. Mengendalikan Servo Dengan Potensio

Gambar 9.14 Rangkaian Pengendali Servo Dengan Potensio

Program Pengendali Servo dengan Potensio Meter

1. /* PROGRAM MENJALANKAN 1 MOTOR SERVO MENGGUNAKAN 1 POTENSIOMETER


2. * by Monsterchip
3. *
4. * credit:
5. *
6. * Program ini akan dijelaskan cara untuk menjalankan 1 buah servo dengan
7. * pengontrol 1 potensiometer
8. * servo akan berputar sesuai putaran pada potensiometer
9. *
10. */

107
11.
12. #include <Servo.h> //memanggil library servo.h
13. Servo servoku; //memberi nama pada servo yg akan digunakan
14. int posisi = 0; //membuat variable pos, dengan type data integer,
15. //dan diisi dengan nilai 0
16.
17. int potensio = A0; //membuat variable potensio, dengan type data integer,
18. //digunakan untuk potensio yg dipasangkan pada
19. //kaki/pin A0
20. int nilaipot; //membuat variable nilaipot, dengan type data integer,
21. //digunakan untuk menyimpan nilai pembacaan potensio
22.
23. void setup() {
24. servoku.attach(9); //servo dipasangkan pada kaki/pin digital 9 (PWM)
25. }
26.
27. void loop() {
28. nilaipot = analogRead(potensio); //variable nilaipot diisi oleh
29. //hasil pembacaan data analog
30. //pada pin/kaki variable
31. //potensio (nilainya dari 0
32. //sampai 1023)
33. posisi = map(nilaipot, 0, 1023, 0, 180);//variable posisi diisi dengan
34. //nilai dari hasil penskalaan
35. //nilai yg ada pada variable
36. //nilaipot, yaitu nilai dari
37. //0-1023 menjadi 0-180
38. servoku.write(posisi); //membuat servo bergerak pada
39. //sudut sesuai nilai yg ada
40. //pada variable posisi
41. delay(15); //jeda 15ms untuk servo bergerak
42. }

108
Daftar Pustaka

Andrianto, Heri. 2015. Arduino Belajar Cepat dan Pemrograman. Bandung :


INFORMATIKA

Arduino Nano “Dasar Teori Arduino Nano dan penerapan, perancangan serta
tutorial”http://www.hendriono.com/blog/post/mengenal-arduino-nano/ (Diakses
tanggal 13 Mei 2016)

Bishop, Owen. 2002. Dasar-Dasar Elektronika. Jakarta : ERLANGGA


Buzzer 5Volt “Pengenalan Dasar Teori Pengaplikasian Buzzer pada Rangkaian
Elektronika“http://www.abusemark.com/storage/image/buzzer.jpg/ (Diakses
tanggal 13 Mei 2016)

Kadir, Abdul. 2014. Buku Pintar Pemrograman Arduino Tutorial Mudah dan Praktis
Membuat Perangkat Elektronik Berbasis Arduino. Jakarta : PT Rangkaian
Arduino Nano ”Datasheet Arduino Nano” http://www.arduino.cc/ (Diakses
Tanggal 1 juni 2016)

Rangkaian Sensor Kompas HMC 5883L “Datasheet HMC5883L”


http://www.adafruit.com/ (Diakses tanggal 1 juni 2016)

Sakelar/Switch “Jenis-jenis Sakelar/Switch” http://www.klinikrobot.com/ (Diakses


Tanggal 13 Mei 2016)

Santoso, Hari. 2015. Panduan Praktis Arduino untuk Pemula. www.elangsakti.com:


Ebook Gratis

109

Anda mungkin juga menyukai