Anda di halaman 1dari 30

1

1.Pengenalan Arduino
1.1 Sejarah Singkat
Arduino bermula pada tahun 2005, sebagai sebuah project bagi para pelajar di
Interaction Design Institute Ivrea di Ivrea, Italia. Pada saat itu para pelajar
menggubakan BASIC Stamp yang cukup mahal bagi pelajar. Adalah Massimo Banzi,
salah satu pendiri Arduino, yang sekaligus mengajar di Ivrea, mencoba
menyelesaikan persoalan tersebut. Asal mula nama Arduino berasal dari nama
sebuah bar yang ada di Ivrea, dimana para pendiri Arduino biasa berkumpul disana.
Untuk hardware wiring awal dirancang oleh Hernando Barragan. Bersama dengan
David Cuartielles, mulai memperkenalkan Arduino.
1.2 Tentang Arduino
Arduino adalah pengendali mikro single-board yang bersifat open-source,
diturunkan dari Wiring platform, dirancang untuk memudahkan penggunaan
elektronik dalam berbagai bidang. Hardwarenya memiliki prosesor Atmel AVR dan
softwarenya memiliki bahasa pemrograman sendiri. Saat ini Arduino sangat populer
di seluruh dunia. Banyak pemula yang belajar mengenal robotika dan elektronika
lewat Arduino karena mudah dipelajari. Tapi tidak hanya pemula, para hobbyist atau
profesional pun ikut senang mengembangkan aplikasi elektronik menggunakan
Arduino. Bahasa yang dipakai dalam Arduino bukan assembler yang relatif sulit,
tetapi bahasa C yang disederhanakan dengan bantuan pustaka-pustaka (libraries)
Arduino. Arduino juga menyederhanakan proses bekerja dengan mikrokontroler,
sekaligus menawarkan berbagai macam kelebihan antara lain:
* Murah Papan (perangkat keras) Arduino biasanya dijual relatif murah (antara
125ribu hingga 400ribuan rupiah saja) dibandingkan dengan platform
mikrokontroler pro lainnya. Jika ingin lebih murah lagi, tentu bisa dibuat sendiri dan
itu sangat mungkin sekali karena semua sumber daya untuk membuat sendiri
Arduino tersedia lengkap di website Arduino bahkan di website-website komunitas
Arduino lainnya. Tidak hanya cocok untuk Windows, namun juga cocok bekerja di
Linux.
* Sederhana dan mudah pemrogramannya Perlu diketahui bahwa lingkungan
pemrograman di Arduino mudah digunakan untuk pemula, dan cukup fleksibel bagi
mereka yang sudah tingkat lanjut. Untuk guru/dosen, Arduino berbasis pada
lingkungan pemrograman Processing, sehingga jika mahasiswa atau murid-murid
terbiasa menggunakan Processing tentu saja akan mudah menggunakan Arduino.
* Perangkat lunaknya Open Source Perangkat lunak Arduino IDE dipublikasikan
sebagai Open Source, tersedia bagi para pemrogram berpengalaman untuk

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

2
pengembangan lebih lanjut. Bahasanya bisa dikembangkan lebih lanjut melalui
pustaka-pustaka C++ yang berbasis pada Bahasa C untuk AVR.
* Perangkat kerasnya Open Source Perangkat keras Arduino berbasis
mikrokontroler ATMEGA8, ATMEGA168, ATMEGA328 dan ATMEGA1280 (yang terbaru
ATMEGA2560). Dengan demikian siapa saja bisa membuatnya (dan kemudian bisa
menjualnya) perangkat keras Arduino ini, apalagi bootloader tersedia langsung dari
perangkat lunak Arduino IDE-nya. Bisa juga menggunakan breadoard untuk
membuat perangkat Arduino beserta periferal-periferal lain yang dibutuhkan.

1.3 Feature Kelebihan


Arduino dapat digunakan untuk mengembangkan suatu sistem interaktif, yang
menerima input dari bermacam switch atau sensor, dan mengendalikan bermacam
hal semisal lampu, motor, dan output lainnya. Ada berbagai macam jenis
microcontroller dan platform yang tersedia untuk keperluan komputasi fisik. Arduino
dirancang secara sederhana dan mudah dipelajari, dikembangkan untuk keperluan
project tugas sekolah, kuliah, ataupun tugas akhir. Adapun kelebihan yang coba
ditawarkan Arduino antara lain.
Relatif murah

Bersifat cross-platform dapat dijalankan di berbagai operating system seperti


Windows,
Macintosh OSX, dan Linux

Sederhana, dengan programming environment turunan dari bahasa


pemrograman C yang
mudah dimengerti
Baik hardware maupun software bersifat open source

2.Bahasa Pemrograman dan Struktur


Pemrograman
Arduino menggunakan pemrograman dengan bahasa C. Berikut ini adalah sedikit
penjelasan yang ditujukan kepada anda yang hanya mempunyai sedikit
pengalaman pemrograman dan membutuhkan penjelasan singkat mengenai
karakter bahasa C dan software Arduino. Untuk penjelasan yang lebih mendalam,
web Arduino.cc adalah sumber yang lengkap.

2.1 Struktur
Setiap program Arduino (biasa disebut sketch) mempunyai dua buah fungsi yang harus ada.

void setup( ) { }
o Semua kode didalam kurung kurawal akan dijalankan hanya satu kali ketika
program Arduino dijalankan untuk pertama kalinya.

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

void loop( ) { }
o Fungsi ini akan dijalankan setelah setup (fungsi void setup) selesai. Setelah
dijalankan satu kali fungsi ini akan dijalankan lagi, dan lagi secara terus menerus
sampai catu daya (power) dilepaskan.

Syntax
Berikut ini adalah elemen bahasa C yang dibutuhkan untuk format penulisan.

//(komentar satu baris)


o Kadang diperlukan untuk memberi catatan pada diri sendiri apa arti dari kodekode yang dituliskan. Cukup menuliskan dua buah garis miring dan apapun yang
kita ketikkan dibelakangnya akan diabaikan oleh program.

/* */(komentar banyak baris)


o Jika anda punya banyak catatan, maka hal itu dapat dituliskan pada beberapa baris
sebagai komentar. Semua hal yang terletak di antara dua simbol tersebut akan
diabaikan oleh program.

{ }(kurung kurawal)
o Digunakan untuk mendefinisikan kapan blok program mulai dan berakhir
(digunakan juga pada fungsi dan pengulangan).

;(titk koma)
o Setiap baris kode harus diakhiri dengan tanda titik koma (jika ada titik koma yang
hilang maka program tidak akan bisa dijalankan).

Variabel
Sebuah program secara garis besar dapat didefinisikan sebagai instruksi untuk memindahkan
angka dengan cara yang cerdas. Variabel inilah yang digunakan untuk memindahkannya.

int (integer)
o Digunakan untuk menyimpan angka dalam 2 byte (16 bit). Tidak mempunyai
angka desimal dan menyimpan nilai dari -32,768 dan 32,767.

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

long (long)
o Digunakan ketika integer tidak mencukupi lagi. Memakai 4 byte (32 bit) dari
memori (RAM) dan mempunyai rentang dari -2,147,483,648 dan 2,147,483,647.

boolean (boolean)
o Variabel sederhana yang digunakan untuk menyimpan nilai TRUE (benar) atau
FALSE (salah). Sangat berguna karena hanya menggunakan 1 bit dari RAM.

float (float)
o Digunakan untuk angka desimal (floating point). Memakai 4 byte (32 bit) dari
RAM dan mempunyai rentang dari -3.4028235E+38 dan 3.4028235E+38.

char (character)
o Menyimpan 1 karakter menggunakan kode ASCII (misalnya A = 65). Hanya
memakai 1 byte (8 bit) dari RAM.

2.2 Operator Matematika


Operator yang digunakan untuk memanipulasi angka (bekerja seperti matematika yang
sederhana).

=
o Membuat sesuatu menjadi sama dengan nilai yang lain (misalnya: x = 10 * 2, x
sekarang sama dengan 20).

%
o Menghasilkan sisa dari hasil pembagian suatu angka dengan angka yang lain
(misalnya: 12 % 10, ini akan menghasilkan angka 2).

+
o Penjumlahan

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

o Pengurangan

*
o Perkalian

/
o Pembagian

2.3 Operator Pembanding


Digunakan untuk membandingkan nilai logika.

==
o Sama dengan (misalnya: 12 == 10 adalah FALSE (salah) atau 12 == 12 adalah
TRUE (benar))

!=
o Tidak sama dengan (misalnya: 12 != 10 adalah TRUE (benar) atau 12 != 12
adalah FALSE (salah))

<
o Lebih kecil dari (misalnya: 12 < 10 adalah FALSE (salah) atau 12 < 12 adalah
FALSE (salah) atau 12 < 14 adalah TRUE (benar))

>
o Lebih besar dari (misalnya: 12 > 10 adalah TRUE (benar) atau 12 > 12 adalah
FALSE (salah) atau 12 > 14 adalah FALSE (salah))

2.4 Struktur Pengaturan


Program sangat tergantung pada pengaturan apa yang akan dijalankan berikutnya, berikut ini
adalah elemen dasar pengaturan (banyak lagi yang lain dan bisa dicari di internet).
1. if..else, dengan format seperti berikut ini:
if (kondisi) { }
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

else if (kondisi) { }
else { }
Dengan struktur seperti diatas program akan menjalankan kode yang ada di dalam kurung
kurawal jika kondisinya TRUE, dan jika tidak (FALSE) maka akan diperiksa apakah kondisi
pada else if dan jika kondisinya FALSE maka kode pada else yang akan dijalankan.
2. for, dengan format seperti berikut ini:
for (int i = 0; i < #pengulangan; i++) { }
Digunakan bila anda ingin melakukan pengulangan kode di dalam kurung kurawal beberapa kali,
ganti #pengulangan dengan jumlah pengulangan yang diinginkan. Melakukan penghitungan ke
atas dengan i++ atau ke bawah dengan i.
2.5 Digital
1. pinMode(pin, mode)
Digunakan untuk menetapkan mode dari suatu pin, pin adalah nomor pin yang akan digunakan
dari 0-19 (pin analog 0-5 adalah 14-19). Mode yang bisa digunakan adalah INPUT atau
OUTPUT.
2. digitalWrite(pin, value)
Ketika sebuah pin ditetapkan sebagai OUTPUT, pin tersebut dapat dijadikan HIGH (ditarik
menjadi 5 volts) atau LOW (diturunkan menjadi ground).
3. digitalRead(pin)
Ketika sebuah pin ditetapkan sebagai INPUT maka anda dapat menggunakan kode ini untuk
mendapatkan nilai pin tersebut apakah HIGH (ditarik menjadi 5 volts) atau LOW (diturunkan
menjadi ground).
2.6 Analog
Arduino adalah mesin digital tetapi mempunyai kemampuan untuk beroperasi di dalam alam
analog (menggunakan trik). Berikut ini cara untuk menghadapi hal yang bukan digital.
1. analogWrite(pin, value)
Beberapa pin pada Arduino mendukung PWM (pulse width modulation) yaitu pin 3, 5, 6, 9, 10,
11. Ini dapat merubah pin hidup (on)atau mati (off) dengan sangat cepat sehingga membuatnya
dapat berfungsi layaknya keluaran analog. Value (nilai) pada format kode tersebut adalah angka
antara 0 ( 0% duty cycle ~ 0V) dan 255 (100% duty cycle ~ 5V).
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

2. analogRead(pin)
Ketika pin analog ditetapkan sebagai INPUT anda dapat membaca keluaran voltase-nya.
Keluarannya berupa angka antara 0 (untuk 0 volts) dan 1024 (untuk 5 volts).
Contoh Program Sederhana:
void setup() {
pinMode(13, OUTPUT); // initialize digital pin 13 as an output.
}
// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000);
// wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000);
// wait for a second
}

3.Fungsi Pin dan GUI aplikasi Arduino

c
h
f
d

a. Tombol Reset
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

8
Tombol ini berfungsi untuk mengeksekusi program menjadi nilai awal kembali .
nilai interrupt dari reset adal paling pertama sehingga jika tombol ini ditekan
program yang berjalan akan kembali pada saat mikro kembali dijalankan.
b. PIN Digital(PWM)
Pin ini memungkinkan Anda untuk menghubungkan hardware eksternal untuk
Arduino Anda. Pin ini merupakan kunci untuk memperluas kemampuan
komputasi dari Arduino ke dunia nyata . Cukup pasang perangkat Anda dan
sensor ke dalam soket yang sesuai dengan masing-masing pin ini dan Anda baik
untuk pergi .
c. PORT USB
Sebuah antarmuka USB yang mudah . Chip di papan colokan langsung ke port
USB Anda dan register pada komputer Anda sebagai port serial virtual. Hal ini
memungkinkan Anda untuk berinteraksi dengan itu melalui itu adalah perangkat
serial . Manfaat dari setup ini adalah bahwa komunikasi serial adalah sangat
mudah ( dan waktu - diuji ) protokol , dan USB membuat menghubungkannya ke
komputer modern benar-benar nyaman .

d. External Power Socket


Manajemen daya yang sangat nyaman dan pengaturan tegangan built -in . Anda dapat
menghubungkan sumber daya eksternal hingga 12v dan akan mengatur untuk kedua 5V dan
3.3V . Hal ini juga dapat diaktifkan langsung dari port USB tanpa daya eksternal .
e. POWER PORT
f.

Chip Atmega328

g. Analog Port
h. ICSP Port
Konektor ICSP untuk melewati port USB dan interfacing Arduino langsung
sebagai perangkat serial . Port ini perlu kembali bootload chip jika merusak dan
tidak bisa lagi berbicara dengan komputer Anda .

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

4. Arduino IDE
Sebelum Anda dapat mulai melakukan sesuatu dengan Arduino , Anda perlu mendownload dan menginstal Arduino IDE ( integrated development environment ) .
Dari titik ini kita akan mengacu pada Arduino IDE sebagai Arduino Programmer .
Arduino Programmer didasarkan pada IDE Pengolahan dan menggunakan variasi
dari ++ bahasa pemrograman C.

5.RTC
RTC (Real time clock) adalah jam elektronik berupa chip yang dapat menghitung
waktu (mulai detik hingga tahun) dengan akurat dan menjaga/menyimpan data
waktu tersebut secara real time. Karena jam tersebut bekerja real time, maka
setelah proses hitung waktu dilakukan output datanya langsung disimpan atau
dikirim ke device lain melalui sistem antarmuka.
Chip RTC sering dijumpai pada motherboard PC (biasanya terletak dekat chip BIOS).
Semua komputer menggunakan RTC karena berfungsi menyimpan informasi jam
terkini dari komputer yang bersangkutan. RTC dilengkapi dengan baterai sebagai
pensuplai daya pada chip, sehingga jam akan tetap up-to-date walaupun komputer
dimatikan. RTC dinilai cukup akurat sebagai pewaktu (timer) karena menggunakan
osilator kristal.

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

10

Banyak contoh chip RTC yang ada di pasaran (pasar genteng, dll) seperti DS12C887,
DS1307, DS1302, DS3234.

DS1307
Salah satu chip RTC yang mudah digunakan adalah DS1307. Pin out chip seperti
gambar di bawah.

DS1307 memiliki akurasi (kadaluarsa) hingga tahun 2100. lihat datasheet. Sistem RTC
DS1307 memerlukan baterai eksternal 3 volt yang terhubung ke pin Vbat dan ground.
Pin X1 dan X2 dihubungkan dengan kristal osilator 32,768 KHz. Sedangkan pin SCL,
SDA, dan SQW/OUT dipull-up dengan resistor (nilainya 1k s.d 10k) ke vcc. Skema
lengkapnya:

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

11

6.LCD

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

12
Lcd (Liquid Crystal Display) adalah suatu jenis media tampilan yang
menggunakan kristal cair sebagai penampil utama. LCD sudah digunakan di
berbagai bidang misalnya dalam alat-alat elektronik seperti televisi, kalkulator
ataupun layar komputer. Kini LCD mendominasi jenis tampilan untuk komputer meja
maupun notebook karena membutuhkan daya listrik yang rendah, bentuknya tipis,
mengeluarkan sedikit panas, dan memiliki resolusi tinggi. Pada LCD berwarna
semacam monitor, terdapat banyak sekali titik cahaya (piksel) yang terdiri dari satu
buah kristal cair sebagai sebuah titik cahaya. Walau disebut sebagai titik cahaya,

kristal cair ini tidak memancarkan cahaya sendiri. Sumber cahaya di dalam sebuah perangkat
LCD adalah lampu neon berwarna putih di bagian belakang susunan kristal cair.Titik cahaya
yang jumlahnya puluhan ribu bahkan jutaan inilah yang membentuk tampilan citra.
Kutub kristal cair yang dilewati arus listrik akan berubah karena pengaruh polarisasi
medan magnetik yang timbul dan oleh karenanya akan hanya membiarkan
beberapa warna diteruskan sedangkan warna lainnya tersaring.
Untuk membuat Project sederhana LCD 16x2 di Arduino anda dapat
menggunakan wiring berikut ini:

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

13

Dan dengan listing Program berikut ini:


/*
LiquidCrystal Library - Hello World
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
// include the library code:
#include <LiquidCrystal.h>

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

14
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
lcd.print("hello, world!");
}
void loop() {
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis()/1000);
}

7. ADC

Microcontroller memiliki kemampuan untuk menerima, mengolah, dan memberikan


output signal digital. Sebagai contoh bila microcontroller dengan catu daya 5 volt,
microcontroller tersebut dapat mengenali tegangan sebesar 0 volt sebagai signal
digital low, atau tegangan 5 volt sebagai signal digital high. Sedangkan untuk
mengenali nilai tegangan antara 0 volt hingga 5 volt, diperlukan feature khusus,
yakni Analog to Digital Converter. Analog-to-Digital Converter atau biasa disebut
ADC, memungkinkan microcontroller untuk mengenali suatu nilai analog melalui
suatu pendekatan digital. Saat ini banyak microcontroller, termasuk Arduino telah

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

15
dilengkapi

dengan

feature

AD

yang

terintegrasi.

Tapi tidak semua pin Arduino dapat digunakan untuk mengolah signal analog. Pada
board Arduino Uno, terdapat enam pin analog, yakni mulai dari A0 hingga A5. Huruf
A pada awal nama pin Arduino menandakan pin tersebut dapat digunakan untuk
mengolah signal analog. Seberapa tepat nilai signal analog yang dipetakan secara
digital, ditentukan oleh seberapa besar resolusi ADC. Semakin besar resolusi ADC,
maka semakin mendekati nilai analog dari signal tersebut. Untuk resolusi ADC pada
board Arduino Uno ialah 10 bit, yang berarti mampu memetakan hingga 1024
discrete analog level. Beberapa jenis microcontroller lain memiliki resolusi 8 bit, 256
discrete analog level, bahkan ada yang memiliki resolusi 16 bit, 65536 discrete
analog
level.
7.1 Kaitan Nilai ADC dengan Tegangan
nilai ADC terukur ialah nilai ADC maximum dikalikan tegangan terbaca, kemudian
dibagi dengan nilai tegangan sumber. Nilai ADC tergantung dengan tegangan yang
menjadi catu daya sistem microcontroller. Untuk board Arduino biasa menggunakan
sumber tegangan 5 volt. Berikut adalah cara mencari nilai ADC, dengan
menerapkan persamaan yang ada dan tegangan terbaca sebesar 2,12 volt pada
board Arduino Uno.

Board Arduino Uno memiliki resolusi 10 bit, dengan nilai terbesar 1023

Tegangan sumber 5 volt dan tegangan terbaca ialah 2,12 volt

Nilai ADC terukur ialah nilai ADC maximum dikalikan tegangan terbaca,
kemudian dibagi dengan nilai tegangan sumber
Sehingga diperoleh nilai ADC sebesar 434
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

16
Dengan demikian diperoleh nilai ADC sebesar 434 dari tegangan terukur 2,12 volt.
Untuk setiap unit ADC tersebut memiliki perbandingan tegangan sebesar 4,9 mV.
Selain dipengaruhi oleh besarnya nilai resolusi ADC, tepat tidaknya pengukuran nilai
ADC juga dipengaruhi oleh clock speed ADC tersebut. Untuk board Arduino Uno
sendiri clock speed ADC maximum yang disarankan ialah 200 kHz. Nilai clock speed
200 kHz tersebut berdasarkan spesifikasi internal DAC (Digital to Analog Converter)
pada rangkaian pengubahnya. Meski demikian, penggunaan clock speed pada 1
MHz mesalnya, tidak mengurangi kualitas resolusi ADC tersebut.
7.2 Sketch Membaca ADC
Tutorial sederhana untuk belajar membaca nilai ADC dapat dilakukan dengan
menggunakan potentiometer. Potentiometer bekerja dengan prinsip pembagi
tegangan, dimana terdapat kaki untuk sumber tegangan dihubungkan ke Vcc 5 volt
Arduino, ground dihubungkan ke ground Arduino, dan data tegangan dihubungkan
ke
pin
analog
A3
Arduino.

Berikut ini adalah sedikit tutorial source code (sketch) untuk membaca nilai ADC
pada board Arduino Uno dan menampilkannya melalui jalur serial, dan dapat
diamati menggunakan Serial Monitor yang ada pada Arduino IDE.
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

17

/*
Program membaca nilai ADC
dengan serial
Loki Lang
*/
int analogPin = A3;
int lang = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
lang = analogRead(analogPin);
delay(100);
Serial.println(lang);
}

Berikut ini adalah penjelasan untuk source code (sketch) program tersebut.

Untuk pin analog yang digunakan ialah A3, yang terhubung dengan data
analog dari potentiometer
Untuk variable lang dengan (jenis data integer) digunakan untuk menyimpan
nilai pembacaan ADC sebelum ditampilkan, dan diberikan nilai awal 0
Proses inisialisasi setup dengan menentukan baud rate yang digunakan untuk
jalur serial, yakni 9600
Untuk program utama berisi function analogRead() yang digunakan untuk
membaca nilai ADC pada analogPin, yakni pin Arduino A3
Pemberian delay() ditujukan agar pembacaan nilai ADC stabil
Baris program selanjutnya untuk menampilkan data nilai ADC pada serial
monitor

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

18

Setelah programnya selesai ditulis , sekarang upload dan putar potensiometernya. Saya
menampilkan hasil dengan hyperterminal seperti dibawah ini:

8. PWM ( Pulse Widht Modulation )


Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

19

Pulse Width Modulation (PWM) merupakan suatu teknik untuk mendapatkan hasil
output analog dengan pendekatan secara digital. Teknik PWM ini mengendalikan
lebar pulsa berdasarkan modulator. Meski bapat diterapkan dalam penyandian
informasi komunikasi, penerapan utamanya lebih pada kendali daya perangkat
listrik, semisal motor. Kendali digital digunakan untuk membentuk sebuah
gelombang kotak (square wave), sebuah gelombang signal untuk switch antara
kondisi on dengan off. Pola kondisi on dan off tersebut merepresentasikan suatu
nilai full on pada Arduino (5 volt) dan kondisi off (0 volt) dengan mengubah
perbandingan ratio antara waktu kondisi on dengan kondisi off dalam satu periode.
Durasi waktu on disebut dengan istilah lebar pulsa, pulse width. Untuk
mendapatkan suatu variasi hasil output nilai analog, dapat dilakukan dengan
mengubah lebar pulsa tersebut. Perbandingan antara waktu signal on dengan
waktu satu periode disebut dengan duty cycle.

9. Duty Cycle

Duty cycle dapat diartikan sebagai perbandingan antara waktu signal on dengan
waktu keseluruhan untuk satu periode. Besarnya nilai duty cycle dinyatakan dalam
percent. Nilai duty cycle dapat bervariasi mulai dari 0% tidak ada signal on, hingga
100% tidak ada signal off, atau selalu dalam kondisi signal on. Sebagai contoh duty
cycle 60% dengan durasi 1000 ms. Maka waktu saat signal on ialah 60% dari 1000
ms, yakni 600 ms. Sedangkan untuk waktu signal off ialah selisih antara durasi
keseluruhan dengan waktu signal on, yakni 400 ms.
9.1 Implementasi

Dengan melakukan pengulangan pola duty cycle tersebut terus-menerus


secara cepat pada sebuah LED, dapat digunakan untuk mengatur nyala terangnya.
Pengulangan pola duty
cycle tersebut seolah-olah membuat LED menyala dengan
nilai tegangan yang tetap
(steady) antara 0 volt hingga 5 volt. Padahal
sebenarnya terjadi kondisi perubahan signal on-off secara cepat. Bila digunakan
pada motor DC, semakin besar nilai PWM maka semakin cepat laju putaran motor
DC tersebut, dan demikian sebaliknya. Nilai rata-rata tegangan dan juga arus yang
diberikan ke rangkaian beban dikendalikan melalui duty cycle tersebut.
Semakin besar duty cycle (semakin lama waktu signal on) maka semakin
besar nilai daya
yang diberikan ke rangkaian beban. Penerapan PWM dalam
Arduino Uno dapat dilakukan
dengan menggunakan analogWrite() dengan nilai
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

20
antara 0 hingga 255, resolusi ADC 8 bit.
Dimana analogWrite(255) memiliki
nilai duty cycle 100% atau selalu menyala, analogWrite(127) memiliki nilai duty
cycle 50%, dan lain sebagainya. Untuk pin pada board
Arduino Uno yang dapat
digunakan menghasilkan output PWM ialah pin 3, 5, 6, 9, 10, dan
11.

Lampiran
Project 1
int led = 13,waktu=1000;
// mendeklarasikan pin 13 sebagai variable LED dan
memberi nilai tunda pada variable waktu.
void setup() {
// Setup Function
pinMode(led, OUTPUT); // menginisialisasi led sebagai Output
}
void loop() {
// Loop Function
digitalWrite(led, HIGH);
// memberi nilai HIGH atau 5v pada pin LED
delay(waktu);
// menunggu waktu tunda yang telah diset
digitalWrite(led, LOW);
delay(waktu);
}

Project 2.a
void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}
void loop() {
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(0, LOW);
digitalWrite(1, LOW);

digitalWrite(2, LOW);
digitalWrite(3, LOW);
delay(2000);
}

Project 2.b
delay(2000);
delay(2000);
delay(2000);
delay(2000);

void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
}
void loop() {
for (int Pin = 0; Pin < 4; Pin++) {

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

21
digitalWrite(Pin, HIGH);delay(500);
}
for (int Pin = 0; Pin < 4; Pin++) {
digitalWrite(Pin, LOW);

}
delay(2000);
}

Project 3
void setup() {
pinMode(0, OUTPUT);digitalWrite(0,
LOW);
pinMode(1, OUTPUT);digitalWrite(1,
LOW);
pinMode(2, OUTPUT);digitalWrite(2,
LOW);
pinMode(3, OUTPUT);digitalWrite(3,
LOW);
pinMode(A1, INPUT);pinMode(A2,
INPUT);pinMode(A3,
INPUT);pinMode(A4, INPUT);
}
void loop() {
if (digitalRead(A4)==LOW){
digitalWrite(3, HIGH);
}
else{
digitalWrite(3, LOW);
}

if (digitalRead(A3)==LOW){
digitalWrite(2, HIGH);
}
else{
digitalWrite(2, LOW);
}
if (digitalRead(A2)==LOW){
digitalWrite(1, HIGH);
}
else{
digitalWrite(1, LOW);
}
if (digitalRead(A1)==LOW){
digitalWrite(0, HIGH);
}
else{
digitalWrite(0, LOW);
}
}

Project 4
const int analogInPin = A0;
//Mendeklarasikan PIN A0 Sebagai Variabel
analogPIN
int sensorValue = 0,waktu=2;
//Mendeklarasikan nilai sensor dan variable waktu
tunda
void setup() {
//Function Setup
Serial.begin(9600);
//Inisialisasi Fungsi Komunikasi Serial dengan Nilai Baud
Rate = 9600
}
Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika
Terapan D3 Teknik Elektro ITS

22
void loop() {
//Function Loop
SensorValue =analogRead(analogInPin); //Memberi nilai Sensor sama dengan nilai
Analog dari PIN
Serial.print("sensor = " );
//Mencetak kata sensor= pada layar monitor
serial
Serial.println(sensorValue);
//Mencetak nilai sensor pada layar monitor
serial lalu membuat line baru
delay(waktu);
//Memberi waktu tunda sebelum fungsi loop
kembali di awal
}

Project 5
int ledPin = 3;
//Mendeklarasikan PIN 3 Sebagai
Variabel LedPin
void setup() {
}
void loop() {
for (int fadeValue = 0 ; fadeValue <=
255; fadeValue += 5) {
analogWrite(ledPin, fadeValue);

delay(30);
}
for (int fadeValue = 255 ; fadeValue
>= 0; fadeValue -= 5) {
analogWrite(ledPin, fadeValue);
delay(30);
}
}

Project 6
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 3); // initialize the library with the numbers of the
interface pins
void setup() {
lcd.clear();
lcd.begin(16, 2);
// set up the LCD's number of columns and rows:
lcd.print("hello, world!");// Print a message to the LCD.
delay(3000);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0);lcd.print(" Selamat Datang ");
delay(3000);
}

Project 7
#include <LiquidCrystal.h> // initialize
the library with the numbers of the
interface pins
LiquidCrystal lcd(9, 8, 7, 6, 5, 3);
byte senyum[8] = {

0b00000,
0b00000,
0b11011,
0b11011,
0b00100,

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

23
0b00100,
0b10001,
0b01110,
};
void setup() {
lcd.clear();
lcd.begin(16, 2);
lcd.createChar(2, senyum);
lcd.setCursor(0,1);lcd.print("hello,
world!");

delay(3000);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0);lcd.print(" Selamat
Datang ");
lcd.setCursor(0,1);lcd.write(2);
delay(3000);
}

Project 8
#include <Wire.h>
const int DS1307 = 0x68; // Address of
DS1307 see data sheets
const char* days[] =
{"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday",
"Saturday"};
const char* months[] =
{"January", "February", "March",
"April", "May", "June", "July",
"August","September", "October",
"November", "December"};
byte second = 0;minute = 0;hour =
0;weekday = 0;monthday = 0;month
= 0;year = 0;
void setup() {
Wire.begin();
Serial.begin(9600);
delay(2000); // This delay allows the
MCU to read the current date and
time.

Serial.print("The current date and


time is: ");printTime();
Serial.println("Please change to
newline ending the settings on the
lower right of the Serial Monitor");
Serial.println("Would you like to set
the date and time now? Y/N");
while (!Serial.available()) delay(10);
if (Serial.read() == 'y' || Serial.read()
== 'Y')
// This set of functions allows the user
to change the date and time
{
Serial.read();
setTime();
Serial.print("The current date and
time is now: ");
printTime();
}

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

24
Serial.println("Thank you.");
}
// Continuous function for converting
bytes to decimals and vice versa
void loop() {
}
byte decToBcd(byte val) {
return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
return ((val/16*10) + (val%16));
}
// This set of codes is allows input of
data
void setTime() {
Serial.print("Please enter the current
year, 00-99. - ");
year = readByte();
Serial.println(year);
Serial.print("Please enter the current
month, 1-12. - ");
month = readByte();
Serial.println(months[month-1]);
Serial.print("Please enter the current
day of the month, 1-31. - ");
monthday = readByte();
Serial.println(monthday);
Serial.println("Please enter the
current day of the week, 1-7.");
Serial.print("1 Sun | 2 Mon | 3 Tues |
4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
weekday = readByte();
Serial.println(days[weekday-1]);
Serial.print("Please enter the current
hour in 24hr format, 0-23. - ");
hour = readByte();
Serial.println(hour);
Serial.print("Please enter the current
minute, 0-59. - ");
minute = readByte();
Serial.println(minute);
second = 0;
Serial.println("The data has been
entered.");
// The following codes transmits the
data to the RTC
Wire.beginTransmission(DS1307);
Wire.write(byte(0));
Wire.write(decToBcd(second));

Wire.write(decToBcd(minute));
Wire.write(decToBcd(hour));
Wire.write(decToBcd(weekday));
Wire.write(decToBcd(monthday));
Wire.write(decToBcd(month));
Wire.write(decToBcd(year));
Wire.write(byte(0));
Wire.endTransmission();
// Ends transmission of data
}
byte readByte() {
while (!Serial.available()) delay(10);
byte reading = 0;
byte incomingByte = Serial.read();
while (incomingByte != '\n') {
if (incomingByte >= '0' &&
incomingByte <= '9')
reading = reading * 10 +
(incomingByte - '0');
else;
incomingByte = Serial.read();
}
Serial.flush();
return reading;
}
void printTime() {
char buffer[3];
const char* AMPM = 0;
readTime();
Serial.print(days[weekday-1]);
Serial.print(" ");
Serial.print(months[month-1]);
Serial.print(" ");
Serial.print(monthday);
Serial.print(", 20");
Serial.print(year);
Serial.print(" ");
if (hour > 12) {
hour -= 12;
AMPM = " PM";
}
else AMPM = " AM";
Serial.print(hour);
Serial.print(":");
sprintf(buffer, "%02d", minute);
Serial.print(buffer);
Serial.println(AMPM);
}
void readTime() {
Wire.beginTransmission(DS1307);

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

25
Wire.write(byte(0));
Wire.endTransmission();
Wire.requestFrom(DS1307, 7);
second = bcdToDec(Wire.read());
minute = bcdToDec(Wire.read());
hour = bcdToDec(Wire.read());

weekday = bcdToDec(Wire.read());
monthday = bcdToDec(Wire.read());
month = bcdToDec(Wire.read());
year = bcdToDec(Wire.read());
}

Project 9
#include <Wire.h>
#include <RealTimeClockDS1307.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(9, 8, 7, 6, 5, 3);
#define
Display_Clock_Every_N_Seconds 10
#define
Display_ShortHelp_Every_N_Seconds
60
String tz;
int hours = 0,minutes = 0,seconds =
0,dates = 0,months = 0,years = 0,ap
= 0;
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
pinMode(A3,
OUTPUT);digitalWrite(A3, HIGH);
pinMode(A2,
OUTPUT);digitalWrite(A2, LOW);
}
void loop() {
RTC.readClock();
if(ap == 1){

tz = "PM";
}
else{
tz ="AM";
}
lcd.home();
hours = RTC.getHours();minutes =
RTC.getMinutes();seconds =
RTC.getSeconds();ap =
RTC.isPM();dates =
RTC.getDate();months =
RTC.getMonth();years = RTC.getYear();
lcd.print(hours);lcd.print(":");
lcd.print(minutes);lcd.print(":");
lcd.print(seconds); lcd.print("
");lcd.print(tz);
lcd.setCursor(0,
1);lcd.print(dates);lcd.print(":");lcd.prin
t(months);lcd.print(":");lcd.print(years)
;
delay(250);lcd.clear();
lcd.home();
lcd.print(hours);lcd.print("
");lcd.print(minutes);lcd.print("

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

26
");lcd.print(seconds);lcd.print("
");lcd.print(tz);
lcd.setCursor(0,
1);lcd.print(dates);lcd.print("

");lcd.print(months);lcd.print("
");lcd.print(years);
delay(250);
lcd.clear();
}

Jawaban Test Problem(buat asisten)


TEST PROBLEM
1.
int i=0,statuse=0;

void setup() {
pinMode(0, OUTPUT);digitalWrite(0, LOW);
pinMode(1, OUTPUT);digitalWrite(1, LOW);
pinMode(2, OUTPUT);digitalWrite(2, LOW);
pinMode(3, OUTPUT);digitalWrite(3, LOW);
pinMode(A1, INPUT);pinMode(A4, INPUT);
}
void led(){
digitalWrite(i,HIGH); delay(50);
digitalWrite(i,LOW);
i = i + 1;
if (i>=4){

i=0;
}
}
void loop() {
if (digitalRead(A1)==LOW){
statuse=1;
}
if (digitalRead(A4)==LOW){
statuse=0;
}
if(statuse==1){
led();
}
}

2.
int i=0,waktu;
void setup() {
waktu =70;
pinMode(0, OUTPUT);digitalWrite(0, LOW);
pinMode(1, OUTPUT);digitalWrite(1, LOW);

pinMode(2, OUTPUT);digitalWrite(2, LOW);


pinMode(3, OUTPUT);digitalWrite(3, LOW);
pinMode(A1, INPUT);pinMode(A4, INPUT);
}
void loop() {

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

27
digitalWrite(i,HIGH); delay(waktu);
digitalWrite(i,LOW);
i = i + 1;
if (digitalRead(A1)==LOW){
waktu=waktu+10;
}
if (digitalRead(A4)==LOW){

waktu=waktu-10;
}
if (i>=4){
i=0;
}
}

3.
int nilai=0;

digitalWrite(thisPin, LOW);
}

void setup() {
pinMode(0, OUTPUT);digitalWrite(0, LOW);
pinMode(1, OUTPUT);digitalWrite(1, LOW);
pinMode(2, OUTPUT);digitalWrite(2, LOW);
pinMode(3, OUTPUT);digitalWrite(3, LOW);
pinMode(A1, INPUT);pinMode(A4, INPUT);
}
void loop() {
for (int thisPin = 0; thisPin < nilai; thisPin++) {
// turn the pin on:
digitalWrite(thisPin, HIGH);
delay(1);
// turn the pin off:

if (digitalRead(A4)==LOW){
nilai=nilai-1;
delay(100);
}
if (digitalRead(A1)==LOW){
nilai=nilai+1;
delay(100);
}

Handbook Pelatihan Arduino 2015 by 2ndProElectronics dan Lab Elektronika


Terapan D3 Teknik Elektro ITS

TEST PROBLEM 2
const int analogInPin = A0;
//Mendeklarasikan PIN A0 Sebagai Variabel analogPIN
long int sensorValue=0,waktu=2,volt=0;
//Mendeklarasikan nilai sensor dan variable
waktu tunda
void setup() {
//Function Setup
Serial.begin(9600);
//Inisialisasi Fungsi Komunikasi Serial dengan Nilai Baud Rate
= 9600
pinMode(3, OUTPUT);digitalWrite(3, LOW);
}
void loop() {
//Function Loop
sensorValue =analogRead(analogInPin);//Memberi nilai Sensor sama dengan nilai Analog dari PIN
Serial.print("sensor = " );
//Mencetak kata sensor= pada layar monitor serial
volt=((sensorValue*100)/1023)*5;
Serial.println(volt);
//Mencetak nilai sensor pada layar monitor serial lalu membuat line
baru
delay(waktu);
//Memberi waktu tunda sebelum fungsi loop kembali di awal
if (volt>=450){
digitalWrite(3,HIGH);
delay(600-volt);
digitalWrite(3, LOW);
}
}

TEST PROBLEM 3
int ledPin = 3,analogInPin=A0;
int sensorValue,nilai;
void setup() {
}
void loop() {
sensorValue =analogRead(analogInPin);
nilai=sensorValue/4;
analogWrite(ledPin, nilai);
}

//Mendeklarasikan PIN 3 Sebagai Variabel LedPin

TEST PROBLEM 4
1.

#include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins
LiquidCrystal lcd(9, 8, 7, 6, 5, 3);
byte senyum[8] = {
0b11011,
0b11011,
0b00000,
0b00100,
0b00100,
0b00000,
0b10001,
0b01110,
};
byte datar[8] = {
0b11011,
0b11011,
0b00000,
0b00100,
0b00100,
0b00000,
0b11111,
0b00000,
};
byte tawa[8] = {
0b11011,
0b11011,
0b00000,
0b00100,
0b00100,
0b00000,
0b11111,
0b01110,
};
void setup() {
lcd.clear();
lcd.begin(16, 2); // set up the LCD's number of columns and rows:
lcd.createChar(2, senyum); lcd.createChar(3, datar); lcd.createChar(4, tawa);
lcd.setCursor(0,1);lcd.print("hello, world!"); // Print a message to the LCD.
pinMode(A1, INPUT);pinMode(A2, INPUT);pinMode(A3, INPUT);
delay(3000);
}
void loop() {
lcd.clear();
lcd.setCursor(0,0);lcd.print(" Selamat Datang ");
if (digitalRead(A1)==LOW){
lcd.setCursor(0,1);lcd.write(2);
}
if (digitalRead(A2)==LOW){
lcd.setCursor(0,1);lcd.write(3);
}
if (digitalRead(A3)==LOW){
lcd.setCursor(0,1);lcd.write(4);
}

delay(500);
}

Anda mungkin juga menyukai