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
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.
Monsterchip
Daftar Isi
7.1. Pengenalan Tool dan struktur Program untuk Komunikasi Serial ........... 71
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
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
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
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.
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
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.
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.
6
BAB 2
Mini Monster Trainer Arduino Kit
Materi
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.
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.
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
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
11
Gambar 2.5 Instal File SETUP.EXE
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
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)
15
Lakukan proses Upload dengan menekan toolbar Upload yang dilingkari merah
pada gambar dibawah
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
2. Apakah ketika Arduino kita lepas dari kabel USB program yang telah dibuat
akan hilang?
Jawab :
18
BAB 3
PENGENALAN TOOLBAR IDE ARDUINO, DAN PENGENALAN
STRUKTUR SERTA SYNTAX BAHASA PROCESSING
Materi
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.
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.
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
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.
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.
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.1. Structure
1. void setup( )
2. {
3. // Statement;
4. }
5.
6. void loop( )
7. {
8. // Statement;
9. }
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
23
• void loop( ) { } : Fungsi ini akan dijalankan setelah setup (fungsi void setup)
selesai. Setelah dijalankan satu kali fungsi ini akan dijalankan lagi secara terus
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.
Kadang diperlukan untuk memberi catatan pada diri sendiri apa arti dari kode-
kode yang dituliskan. Cukup menuliskan dua buah garis miring dan apapun
Jika pembuat program memiliki banyak catatan, maka hal itu dapat dituliskan
pada beberapa baris sebagai komentar. Semua hal yang terletak diantara dua
; (titk koma)
Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma
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
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. }
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
Array
Array adalah kumpulan nilai yang dapat diakses dengan index number, nilai
yang terdapat dalam array dapat dipanggil dengan cara menuliskan nama
merupakan nilai pertama dari array. Array perlu dideklarasikan dan kalau
dan pembagian.
1. y = y + 3;
2. x = x - 8;
3. i = i * 5;
4. r = r / 9;
26
Compound Assignments
Statement ini membadingkan dua variable dan apabila terpenuhi akan bernilai 1
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
mengembalikan nilai balik benar atau salah tergantung dari operator yang
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
- True / False
1. if ( b == TRUE );
2. {
3. //doSomething
4. }
27
- High/Low
Konstanta ini mendifinisikan aktifitas pin HIGH atau LOW dan digunakan
//menghasilkan 5V
- Input/Output
- If
1. if ( someVariable ?? value )
2. {
3. //DoSomething;
4. }
- If... Else
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
- While
salah.
- Do... While
1. do
2. {
3. //doSomething;
4. }
5. while ( someVariable ?? value );
- Digital I/O
13, ada saat tertentu I/O 0 dan 1 tidak bisa digunakan karena dipakai untuk
- pinMode(pin, mode)
29
Digunakan dalam void setup() untuk mengkonfigurasi pin apakah sebagai
Input atau Output. Arduino digital pin secara default dikonfigurasi sebagai
pinMode(pin, mode).
- 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)
- Time
- delay(ms)
- millis()
- Math
- min(x,y)
kecil
value = min(value, 100); // set ‘value’ sebagai nilai yang paling
// kecil
- max(x,y)
30
Max merupakan kebalikan dari min.
- Random
- randomSeed(seed)
- random(min,max)
- Serial
Serial.begin(rate)
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
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
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.
32
BAB 4
MEMPELAJARI DASAR PEMROGRAMAN IPUT DAN OUTPUT
Materi
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
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
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
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
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.
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.
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. }
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?
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)
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.
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.
42
Gambar 4.8 Wiring /Rangkaian Traffic LED
Program (sketch) Traffic LED
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,
44
BAB 5
MEMPELAJARI perintah dasar dan fungsi-fungsi logika
Materi
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,
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.
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
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
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
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
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.
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:
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.
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 :
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.
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.
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. }
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.
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.
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
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
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. }
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.
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.
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.
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 (%).
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.
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.
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
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.
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.
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.
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.
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.
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
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.
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.1. Persiapan
Rangkaian
78
Sketch Analog Read Serial
79
66. Ans = constrain(Ans,0,255);
67. analogWrite(B, Ans);
68. Serial.print("Blue is set to: ");
69. Serial.println(Ans);
70. }
71. }
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.
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
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.
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.
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,
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
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.
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.
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.
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.
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
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
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.
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
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.
93
9.1.2. Analisis Hardware
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.
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.
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.
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
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.
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
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 :
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 :
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. }
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.
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. }
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.
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
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)
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)
109