Modul Pelatihan Dasar Arduino
Modul Pelatihan Dasar Arduino
1.1. TUJUAN
Peserta Pelatihan dapat memahami, membedakan dan menjelaskan pin GPIO (General
Purpose Input Output Pins) Arduino.
1.2. TEORI DASAR
Dalam diskusi sehari-hari dan di forum internet, mikrokontroler sering dikenal dengan
sebutan µC, uC atau MCU. Terjemahan bebas dari pengertian tersebut, bisa dikatakan bahwa
mikrokontroler adalah komputer yang berukuran mikro dalam satu chip IC (Integrated Circuit)
yang terdiri dari prosesor, memori dan antarmuka yang bisa di program. Jadi disebut komputer
mikro karena IC atau chip mikrokontroler terdiri dari CPU, memori dan I/O yang bisa kita
kontrol dengan memprogramnya. I/O juga sering disebut dengan GPIO (General Purpose Input
Output Pins) yang berarti pin yang bisa kita program sebagai input atau sebagai outpuit sesuai
dengan kebutuhan.
secara otomatis. Cukup dengan menghubungkan Arduino dengan port USB di komputer/laptop
maka secara otomatis power supply bersumber dari port USB komputer/laptop. Untuk sumber
tegangan eksternal kita cukup dengan menghubungkan dengan jack DC. Tegangan yang
direkomendasikan adalah +7V s/d +12V.
2. Ekspresi Program
Dalam pemrograman Arduino, bilangan dapat diekspresikan dalam beberapa format:
Desimal : Ditulis biasa tanpa tambahan apapun.
Contoh: 234
Oktal : Ditulis dengan awalan angka “0” (nol) didepan angka tersebut.
Contoh: 0631
Biner : Penulisan diawali dengan huruf “B”. Contoh: B11100011
Heksadesimal : Diawali dengan “0x”. Contoh: 0x8C
3. Kontrol Program
Sebuah program yang kita buat membutuhkan suatu kontrol, misalnya pengujian kontrol,
melompat pada suatu perintah yang lain dan sebagainya.
if : Digunakan untuk menguji kondisi, jika kondisi tersebut benar, maka perintah
didalam if tersebut akan dieksekusi.
if(kondisi)
{
//pernyataan/perintah;
}
If – else : Hampir sama dengan if, hanya saja ada 2 pilihan pernyataan/perintah. Jika
kondisi benar maka perintah yang ada didalam blok if yang akan dieksekusi,
tetapi jika kondisi salah maka pernyataan didalam else yang akan dieksekusi.
if(kondisi)
{
//pernyataan/perintah 1;
}
else
{
//pernyataan/perintah 2;
}
Switch – : Seperti pernyataan if, digunakan untuk memilih kondisi yang sesuai untuk
case kemudian mengerjakan perintahnya. Bedanya adalah kondisi yang diuji
berupa nilai sebuah variabel.
switch(variabel)
{
case 1: //pernyataan/perintah 1;
break;
case 2: //pernyataan/perintah 2;
break;
case 3: //pernyataan/perintah 31;
break;
case n: //pernyataan/perintah n;
break;
default: //pernyataan/perintah
}
Jika variabel bernilai “1” maka pernyataan 1 yang akan dieksekusi. Perintah break
berfungsi untuk mengakhiri pernyataan/perintah pada setiap case. Default berfungsi jika
semua nilai didalam case tidak ada yang sama dengan nilai variabel tersebut.
4. Perulangan
while : Untuk membuat perulangan yang tidak terbatas selam kondisi di dalam while
bernilai benar.
while(kondisi)
{
//pernyataan/perintah;
}
for : Digunakan untuk perulangan yang terbatas, misalnya mengulang suatu
perintah sebanyak 10 kali perulangan.
for(inisialisasi; kondisi; step)
{
//pernyataan/perintah;
}
Catatan:
Inisialisasi: nilai awal dari variabel untuk proses perulangan.
Kondisi: kondisi yang menentukan proses perulangan, jika benar
perulangan dikerjakan.
Step: tahap perulangan, biasanya dalam bentuk penambahan atau
pengurangan.
Goto : Untuk melompat/menuju perintah yang telah diberi label.
while(1)
{
digitalWrite(ledPin1, HIGH);
delay(1000);
digitalWrite(ledPin1, LOW);
delay(1000);
if(digitalRead(inPin)==LOW)
{
goto keluar;
}
}
keluar:
return : Digunakan untuk memberikan nilai balik dari suatu fungsi.
int checkSensor()
{
if(analogRead(A0)>400)
{
return 1;
}
else
{
return 0;
}
}
continue : Untuk melewatkan perulangan yang tersisa dari struktur looping (while atau
for).
for(int i=0; i<255; i++)
{
int x;
if(x>40 && x<120)
{
continue;
digitalWrite(13, HIGH);
}
digitalWrite(13, LOW);
delay(1000);
}
break : Perintah keluat dari pernyataan perulangan while atau for. Juga digunakan
untuk mengakhiri pernyataan dalam switch – case.
5. Operator
Tabel 1.3. Operator Aritmatika
Operator Aritmatika Keterangan
= Pemberian nilai
+ Operasi penjumlahan
- Operasi pengurangan
* Operasi perkalian
/ Operasi pembagian
% Operasi sisa pembagian
Tabel 1.4. Operator Perbandingan
Operator
Keterangan
Perbandingan
== Operator persamaan, jika kedua nilai yang dibandingkan bernilai
sama, maka hasilnya “TRUE”.
!= Operator pertidaksamaan, jika kedua nilai yang dibandingkan tidak
sama nilainya, maka hasilnya “TRUE”.
> Operator lebih besar dari nilai 1 lebih besar dari nilai 2, maka
hasilnya “TRUE”.
< Operator lebih kecil, jika nilai 1 lebih kecil dari nilai 2, maka hasilnya
“TRUE”.
>= Operator lebih besar atau sama dengan, jika nilai 1 lebih besar atau
sama dengan nilai 2, maka hasilnya “TRUE”.
<= Operator lebih kecil atau sama dengan, jika nilai 1 lebih kecil atau
sama dengan nilai 2, maka hasilnya “TRUE”.
D1
LCD1
LM016L
D2
D3
VDD
VSS
VEE
RW
RS
D0
D1
D2
D3
D4
D5
D6
D7
E
D4
VCC
1
2
3
4
5
6
7
8
9
10
11
12
13
14
D5
GND
VCC
GND
VEE
RV1
D6
VCC
52%
VEE
D7
10k
U1
VCC
1
D8
GND
27.0
VCC
VOUT
2 RL1
5V
RV2
3 LM35
29%
DUINO1
Q1
50k
GND
2N2222
VCC
VCC
microcontrolandos.blogspot.com
GND
AREF AREF
13
PB5/SCK 13
12
GND
PB4/MISO 12
RESET 11
RESET ~PB3/MOSI/OC2A 11 U2
10
~ PB2/SS/OC1B 10
9 6 1
~ PB1/OC1A 9 SCL X1 LS1
8 5
PB0/ICP1/CLKO 8 SDA
ATMEGA328P-PU
1121
DIGITAL (~PWM)
7
ANALOG IN
PD7/AIN1 7
6 7
A0 ~ PD6/AIN0 6 SOUT
PC0/ADC0 5
A0 A1 ~ PD5/T1 5
PC1/ADC1 4 3 2 SPEAKER
A1 A2 PD4/T0/XCK 4 VBAT X2
PC2/ADC2 3
A2 A3 ~ PD3/INT1 3
PC3/ADC3 2 DS1307
GND
A3 A4 PD2/INT0 2 RXD
PC4/ADC4/SDA 1
A4 A5 TX PD1/TXD 1
PC5/ADC5/SCL 0
A5 RX PD0/RXD 0 TXD
RTS
ARDUINO UNO R3
GND
CTS
2.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar LED.
Peserta Pelatihan dapat membuat dan meodifikasi sketch Arduino untuk aplikasi
yang berhubungan dengan LED.
2.2. TEORI DASAR
LED merupakan kependekan dari Light Emitting Diode, yaitu dioda yang mampu
mengubah listrik menjadi cahaya. Sebagaimana sifat dioda, lampu LED memiliki kaki positif
dan negatif. Sehingga pemasangannya tidak boleh terbalik, jika dipasang terbalik maka akan
ada arus yang mengalir melalui LED dan LED pun tidak akan menyala.
Arduino bekerja pada tegangan 5V – 12V dengan arus yang relatif besar yang sanggup
memutuskan LED. Sehingga jika kita ingin menyambungkan LED, maka kita butuh tahanan
(resistor) untuk membatasi arus yang masuk ke LED. LED memiliki tegangan kerja yang
disebut dengan forward voltage (VF) yang mana tegangan ini adalah tegangan yang dibutuhkan
LED untuk bisa menyala dengan baik.
Ukuran resistor yang bisa dipakai adalah 100Ω - 1kΩ (dibaca ohm, satuan dari
resistansi/hambatan), makin besar nilai resistor maka nyala LED akan semakin redup. Pada
Arduino, tegangan yang keluar dari pin-pinnya adalah 0V – 5V. Sementara catu daya untuk
Arduino antara 5V – 12V. Oleh sebab itu, pemilihan resistor tergantung tegangan yang akan
kita gunakan.
D2
D3
CN6
D4
1
2
D5 3
4
5
D6 6
7
8
D7
D8
Fungsi pinMode, untuk menentukan apakah suatu pin dalam suatu Arduino
difungsikan sebagai port/terminal INPUT atau terminal OUTPUT.
Fungsi digitalWrite, untuk mengirimkan suatu data (tegangan 0V atau +5V)
kepada terminal/port atau pin2 - pin 9 Arduino, digitalWrite(LED[i], LOW) berarti
data yang dikirimkan melalui pin Arduino tersebut adalah tegangan 0V sedangkan
bila digitalWrite(LED[i], HIGH) maka data yang dikirimkan berupa tegangan
+5V. Hal ini dapat digambarkan dari mati/menyalanya lampu LED. HIGH (lampu
LED menyala) dan LOW (lampu LED mati).
Fungsi for, untuk melakukan suatu perulangan sesuai dengan nilai yang ditentukan
dalam suatu variabel yang disertakan dalam fungsi tersebut (misalnya variabel i,
contohnya for(int i=0; i<10; i++) ini artinya akan melakukan suatu perulangan
sebanyak 10 kali dengan nilai i dari 0 hingga 9 (atau i<10) dan setiap kali perulangan
nilai i akan bertambah 1 (i++ sama artinya dengan pernyataan i=i+1).
Fungsi delay, digunakan untuk menunda suatu eksekusi sebelum melanjutkan
eksekusi selanjutnya.
3. Latihan Soal:
Buatlah bentuk lain dari running LED dengan tidak merubah susunan LED tersebut!
Buatlah tampilan kombinasi LED berbentuk lingkaran, segitiga, persegi atau
berbentuk hati !
Dari soal nomor b, buatlah program Arduino untuk tampilan animasi dari kombinasi
LED tersebut!
3.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar pushbuton.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan pushbutton.
3.2. TEORI DASAR
Tombol pushbutton atau tombol push on. Ketika tombol ini ditekan, maka jalur akan
tertutup (ON), ketika dilepas jalur akan kembali terbuka (OFF). Tombol pushbutton banyak
digunakan untuk peralatan seperti remote, keypad, keyboard, atau tombol untuk pengaturan
TV dan sejenisnya.
{
for(temp=0; temp<8; temp++)
{
digitalWrite(LED[temp], LOW);
}
delay(500);
digitalWrite(LED[3-temp], LOW);
digitalWrite(LED[3+temp+1], LOW);
}
digitalWrite(pinButton1, HIGH);
Sutono, M.Kom Page 18
Pelatihan Arduino 2017
digitalWrite(pinButton2, HIGH);
digitalWrite(pinButton3, HIGH);
digitalWrite(pinButton4, HIGH);
temp2=digitalRead(pinButton2);
delay(120);
if(temp2==LOW)
{
pilih=2;
}
temp3=digitalRead(pinButton3);
delay(120);
if(temp3==LOW)
{
pilih=3;
}
temp4=digitalRead(pinButton4);
delay(120);
if(temp4==LOW)
{
pilih=4;
}
switch(pilih)
{
case 1: pilih_1();
break;
case 2: pilih_2();
break;
case 3: pilih_3();
break;
case 4: pilih_4();
Sutono, M.Kom Page 19
Pelatihan Arduino 2017
break;
default: pilih_0();
break;
}
}
Keterangan sketch Pushbutton:
Fungsi int const dalam suatu variabel merupakan suatu nilai yang tetap (konstan),
karena dalam hal ini variabel tersebut digunakan untuk menggantikan fungsi dari pin
Arduino, dimana pin Arduino merupakan suatu pin yang nilai tetap (sudah ditentukan,
pin digital 0 – 13 dan pin analog A0 – A5). Misalnya int const pinPushbutton=2, ini
artinya bahwa variabel atau tombol pinPushbutton menggantikan fungsi dari pin 2
Arduino, hal ini untuk memudahkan mengingat fungsi dari suatu tombol atau variabel,
terutama bila variabel yang digunakan lebih dari satu.
Variabel LED, merupakan variabel array dengan tipe data integer, yang merupakan
suatu variabel yang menggantikan fungsi pin 2 Arduino hingga pin 9 Arduino, variabel
tersebut dapat diakses melalui fungsi setup dan fungsi loop, karena variabel tersebut
bersifat global (dapat diakses diseluruh fungsi yang ada dalam sketch tersebut). LED[0]
menggantikan fungsi pin 2 Arduino, LED[1] menggantikan fungsi pin 3 Arduino dan
seterusnya hingga LED[8] menggantikan fungsi pin 9 Arduino.
Fungsi pinMode, untuk menentukan apakah suatu pin dalam suatu Arduino
difungsikan sebagai port/terminal INPUT atau terminal OUTPUT. Khusus untuk
pushbutton karena dalam hal ini langsung dihubungkan dengan terminal ground dan pin
Arduino, maka harus ada dua perintah yang digunakan: (1) pinMode untuk
menentukan bahwa pin tersebut digunakan sebagai pin INPUT dan yang ke (2)
digitalWrite dengan nilai HIGH untuk menentukan bahwa pin tersebut berfungsi
sebagai tombol pushbutton dengan nilai awal HIGH (tombol dalam kondisi terbuka)
dan nilai LOW (tombol dalam kondisi tertutup). Kedua fungsi tersebut harus dimasukan
kedalam fungsi setup.
Fungsi digitalRead, untuk membaca tombol pushbutton apakah tombol tersebut dalam
kondisi terbuka (tombol tidak ditekan) atau tertutup (tombol ditekan). Untuk
mengetahui hal tersebut digunakan fungsi if, contohnya
if(digitalRea(pinPushbutton)==LOW), bila dari kondisi tersebut bernilai TRUE maka
artinya bahwa tombol pushbutton dalam kondisi tertutup (tombol pushbutton ditekan)
dan sebaliknya bila kondisi tersebut bernilai FALSE artinya bahwa kondisi tombol
tersebut terbuka (tombol pushbutton tidak ditekan).
Fungsi digitalWrite, untuk mengirimkan suatu data (tegangan 0V atau +5V) kepada
terminal/port atau pin 2 Arduino hingga pin 9 Arduino, digitalWrite(LED[i], LOW)
berarti data yang dikirimkan melalui pin Arduino tersebut adalah tegangan 0V
sedangkan bila digitalWrite(LED[i], HIGH) maka data yang dikirimkan berupa
tegangan +5V. Hal ini dapat digambarkan dari mati/menyalanya lampu LED. HIGH
(lampu LED menyala) dan LOW (lampu LED mati).
Fungsi for, untuk melakukan suatu perulangan sesuai dengan nilai yang ditentukan
dalam suatu variabel yang disertakan dalam fungsi tersebut (misalnya variabel i,
contohnya for(int i=0; i<10; i++) ini artinya akan melakukan suatu perulangan sebanyak
10 kali dengan nilai i dari 0 hingga 9 (atau i<10) dan setiap kali perulangan nilai i akan
bertambah 1 (i++ sama artinya dengan pernyataan i=i+1).
Fungsi switch, case, default dan break, digunakan untuk mengetahui nilai dari suatu
tombol pertama atau tombol kedua dan seterusnya. Untuk membedakan tombol pertama
dengan yang lainnya digunakan suatu variabel (misalnya variabel pilih). Bila pilih
bernilai 1, maka artinya tombol pertama yang ditekan, bila variabel pilih bernilai 2
artinya tombol kedua yang ditekan dan seterusnya. Untuk mengeksekusi suatu tombol
yang ditekan maka digunakan fungsi case, bila tombol 1 yang ditekan maka seluruh
instruksi/perintah yang ada dalam pilihan case 1 yang akan dieksekusi kemudian harus
diakhiri dengan fungsi break yang berfungsi untuk keluar dari fungsi switch agar hanya
pilihan case 1 saja yang dieksekusi. Begitu juga dengan tombol yang kedua atau tombol
yang lainnya, maka hanya case 2 atau case yang berikutnya yang hanya dieksekusi
seluruh instruksi/perintahnya bila tombol tersebut ditekan. Fungsi default bersifat
optional artinya bila fungsi ini disertakan dalam fungsi switch dan ternyata tidak ada
pilihan yang sesuai dengan fungsi case, maka seluruh instruksi yang didalam fungsi
default-lah yang akan dieksekusi.
Fungsi delay, digunakan untuk menunda suatu eksekusi sebelum melanjutkan eksekusi
selanjutnyanya.
3. Soal latihan:
Buatlah program untuk pemilihan LED (berbentuk lingkaran, segitiga, persegi dan hati)
dengan menggunakan 1 atau 2 buah pushbutton!
Tandailah setiap pushbutton dengan gambar (lihat gambar 3.3), misalnya pushbutton
lingkaran untuk menyalakan LED berbentuk lingkaran, pushbutton segitiga untuk
menyalakan LED berbentuk segitiga, pushbutton persegi untuk menyalakan LED
berbentuk persegi dan pushbutton hati untuk menyalakan LED berbentuk hati!
4.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar 7 segmen.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan 7 segmen.
4.2. TEORI DASAR
7 segment dalam bahasa Indonesia disebut dengan layar 7 segmen adalah komponen
elektronika yang dapat menampilkan angka desimal melalui kombinasi-kombinasi segmennya.
7 segment display pada umumnya dipakai pada jam digital, kalkulator, penghitung atau counter
digital, multimeter digital dan juga panel display digital seperti pada microwave oven ataupun
pengatur suhu digital. 7 segment display pertama kali diperkenalkan dan dipatenkan pada tahun
1908 oleh Frank. W. Wood dan mulai dikenal luas pada tahun 1970-an setelah aplikasinya pada
LED (Light Emitting Diode).
maka display akan menampilkan angka atau digit yang diinginkan sesuai dengan kombinasu
yang diberikan.
Terdapat 2 jenis 7 segmen, diantaranya adalah LED 7 segment common cathode dan
LED 7 segment common anode.
1. LED 7 Segmen Tipe Common Cathode (Katoda)
Pada LED 7 segmen jenis common cathode, kaki katoda pada semua segmen LED
terhubung menjadi 1 pin, sedangkan kaki anoda akan menjadi input untuk masing-masing
segmen LED. Kaki katoda yang terhubung menjadi 1 pin ini merupakan terminal negatif (-)
atau ground sedangkan signal kendali (control signal) akan diberikan kepada masing-masing
kaki anoda segmen LED.
3&8
D1 D2 D3 D4 D5 D6 D7 D8
LED LED LED LED LED LED LED LED
10 9 7 5 4 2 1 6
D1 D2 D3 D4 D5 D6 D7 D8
LED LED LED LED LED LED LED LED
10 9 7 5 4 2 1 6
a a1 a2
2 b b1 1 9 b2 a
3 c c1 2 10 c2 b
Input 4 d d1 3 11 d2 c
1 5 e e1 4 12 e2 d
6 f f1 5 13 f2 e
7 g g1 6 14 g2 f
8 dp dp1 7 15 dp2 g
9 8 16 dp
Decoder Driv er 7 Segment
8 dp
7 g
6 f
5 e
4 d
3 c
2 b
C1
C2
C3
C4
1 a
CN4 BC557
4 X 330
+5V
1
2
3
4
byte segments[10]={
B00111111, // number 0
B00000110, // number 1
B01011011, // number 2
B01001111, // number 3
B01100110, // number 4
B01101101, // number 5
B01111101, // number 6
B00000111, // number 7
B01111111, // number 8
B01101111 // number 9
};
void Display(int number)
{
byte segs=~segments[number];
digitalWrite(segA, bitRead(segs, 0) );
digitalWrite(segB, bitRead(segs, 1) );
digitalWrite(segC, bitRead(segs, 2) );
digitalWrite(segD, bitRead(segs, 3) );
digitalWrite(segE, bitRead(segs, 4) );
digitalWrite(segF, bitRead(segs, 5) );
digitalWrite(segG, bitRead(segs, 6) );
};
void setup()
{
pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
//pinMode(segH,OUTPUT);
}
int tunda=1;
void loop()
{
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
{
for(int k=0; k<10; k++)
{
Sutono, M.Kom Page 26
Pelatihan Arduino 2017
digitalWrite(digit1, HIGH);
digitalWrite(digit2, LOW);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
Display(k);
delay(tunda);
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, LOW);
digitalWrite(digit4, HIGH);
Display(j);
delay(tunda);
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, LOW);
Display(i);
delay(tunda);
}
}
}
}
}
Keterangan aplikasi 7 segmen:
Fungsi define adalah perintah dalam bahasa C, yang akan membolehkan seorang
Programmer memberikan nama dan juga nilai pada sebuah konstanta sebelum
program dieksekusi. Mendefinisikan konstanta tidak akan memakan memori dari
mikrokontroler, tetapi kompiler akan mereferensikan konstanta ini dengan nilai yang
didefinisikan sebelumnya. Contoh #define digit1 10, kompiler akan menggantikan
segala sesuatu yang dinamakan digit1 dengan angka 10 (dalam hal in pin 10 Arduino).
Mengunakan variabel array dengan nama segments dan memiliki tipe data byte,
maksud dari penulisan B01111111 pada variabel arry dengan indeks 0 memiliki arti
yang telah dijelaskan pada tabel 4.1. Jadi pengertian dari B01111111 sama dengan
nilai segmen dp=0, g=1, f=1, e=1, d=1, c=1, b=1 dan a=1, bila dilihat dari bentuk 7
segmen maka kombinasi angka biner tersebut membentuk angka 0 pada 7 segmen
tersebut.
Untuk melakukan pembacaan data per bit pada variabel array dengan tipe data byte
maka digunakan fungsi bitRead. Contohnya: fungsi
digitalWrite(segA,bitRead(segs,0) memiliki arti bahwa nilai variabel dari
segA=bitRead(segs, 0). Bila nilai segs=0, artinya indeks ke 0 yang dimiliki oleh
variabel segments adalah B01111111, jadi maksud dari fungsi bitRead(segs, 0) adalah
membaca/mengambil satu bit dari B01111111, sehingga fungsi digitalWrite(segA,
bitRead(seg, 0) dapat disedernahakan menjadi digitalWrite(segA, 1), sehingga nilai
dari segA=1. Untuk lebih jelasnya lihat tabel 4.2.
Tabel 4.2. Bilangan Biner
Bilangan Biner Bit-7 Bit-6 Bit-5 Bit-4 Bit-3 Bit-2 Bit-1 Bit-0
0 1 1 1 1 1 1 1
01111111
segH segG segF segE segD segC segB segA
6. Soal Latihan:
Buatlah program/sketch Arduino counter 7 segment berbentuk tampilan jam digital!
Buatlah program/sketch Arduino untuk counter stopwatch!
buatlah program/sketch Arduino untuk counter yang digunakan saat ujian
brelangsung!
5.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar LCD 1602.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan LCD 1602.
5.2. TEORI DASAR
LCD merupakan singkatan dari Liquid Crystal Display, atau umumnya disebut dengan
LCD atau Display saja. Di pasaran beragam jenis LCD dan berbagai ukuran yang bisa Anda
gunakan. LCD bisa untuk menampilkan huruf dan angka, bahkan ada yang bisa untuk
menampilkan gambar.
LCD yang umum digunakan dan harganya juga relatif terjangkau. LCD ini berukuran
16x2 (16 kolom 2 baris) yang cukup menampilkan informasi suhu atau informasi yang tidak
terlalu panjang. LCD ini dikenal juga dengan sebuatan LCD 1602 dengan beberapa varian
seperti 1602A dan lain sebagainya.
LCD ini bisa bekerja pada tegangan +5 volt, sehingga Anda bisa menyambungkan
secara langsung ke pin VCC pada board Arduino. Perlu diperhatikan, jika Anda menggunakan
LCD jenis lainnya, ada juga jenis LCD yang bisa bekerja pada voltase yang berbeda. Sehingga
kesalahan pemasangan sumber tegangan bisa membuat LCD rusak.
+5V
(GND)
(VCC)
(VEE)
(RW)
(RS)
(D0)
(D1)
(D2)
(D3)
(D4)
(D5)
(D6)
(D7)
(E)
(A)
(K)
10
11
12
13
14
15
16
1
2
3
4
5
6
7
8
9
10K
1
2
3
4
5
6
CN3
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2);
String kata1="Belajar Arduino";
String kata2="U N I K O M ...!";
String kata3="SUTONO, M.KOM";
String kata4="ARDUINO UNO ...!";
void setup()
{
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print(kata1);
delay(2000);
lcd.setCursor(0,1);
lcd.print(kata2);
delay(2000);
}
void loop()
{
for(int i=0; i<16; i++)
{
lcd.scrollDisplayRight();
delay(500);
}
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(kata3);
delay(1000);
lcd.setCursor(0,1);
lcd.print(kata4);
delay(2000);
delay(500);
}
for(int i=0; i<32; i++)
{
lcd.scrollDisplayLeft();
delay(500);
}
lcd.setCursor(0,0);
lcd.print(kata1);
delay(1000);
lcd.setCursor(0,1);
lcd.print(kata2);
delay(2000);
}
Keterangan sketch LCD:
Fungsi library LCD yaitu LiquidCrystal.h digunakan untuk melakukan setting LCD
sesuai dengan library yang digunakan. Fungsi lcd() adalah inisialisasi dari class
LiquidCrystal yang memiliki parameter berturut-turut pin RS, E, D4, D4, D6 dan
D7, melalui fungsi misalnya LiquidCrystal lcd(7,6,5,4,3,2).
Fungsi lcd.begin(kolom, baris, charsize) memiliki 2 parameter wajib dan 1
parameter tambahan. Parameter wajib berisi informasi kolom dan informasi baris
pada LCD. Sedangkan informasi tambahan yaitu charsize merupakan mengatur
ukuran dari karakter yang akan ditampilkan dalam satuan pixel. Standar charsize
berukuran 5x8 pixel untuk setiap karakter, jika Anda memiliki LCD dengan pixel
yang berbeda, silahkan disesuaikan. Fungsi begin juga digunakan untuk
menginisialisasi jenis LCD yang akan digunakan. Mungkin ini mirip dengan
Serial.begin yang berfungsi untuk melakukan inisialisasi komunikasi serial dengan
parameter berupa baud rate yang akan digunakan.
Fungsi lcd.setCursor(kolom, baris) untuk memindahkan/menempatkan kursor aktif
sesuai dengan kolom dan baris yang telah ditentukan. Kolom ke 0 (nol) berarti kolom
ke 1 pada LCD (ingat, angka pertama dalam suatu array selalu dimulai dengan angka
0 bukan angka 1), sedangkan baris ke 1 berarti baris ke 2 pada LCD.
Fungsi lcd.print dan bukan fungsi lcd.println. Fungsi println dalam LCD maka akan
secara otomatis menambahkan 2 karakter tambahan untuk pindah baris (CR dan LF),
maka jika Anda menggunakan fungsi lcd.println, akan muncul 2 karakter aneh pada
LCD. Jadi gunakanlah fungsi lcd.print untuk menuliskan/mengirimkan data ke LCD.
Fungsi lcd.clear untuk menghapus seluruh tampilan LCD dan fungsi
lcd.scrollDisplayRight untuk menggeser setiap karakter yang ada di layar LCD
6.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar buzzer/speaker.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan buzzer/speaker.
6.2. TEORI DASAR
Pada bagian ini kita akan bermain-main dengan suara. Sehingga kita akan
membutuhkan speaker untuk menghasilkan suara dan nada musik sederhana. Pada dasarnya,
untuk membuat speaker berbunyi maka kita harus menghidupkan dan mematikan speaker
sesuai dengan frekuensi suara yang ingin kita bunyikan. Hidup-matinya speaker akan membuat
spool speaker bergetar (bergerak maju-mundur) dan menghasilkan suara dengan nada tertentu.
memainkan musik kelas A menengah, maka kita harus menyalakan dan mematikan speaker
sebanyak masing-masing 440 kali dalam waktu 1 detik.
Untuk menghidup-matikan speaker sebanyak masing-masing 440 kali, kita bisa
memanfaatkan fungsi delay. Cara menghitung delay yang kita butuhkan untuk mendapatkan
siklus 440Hz (nada 440Hz) yaitu dengan cara:
1 𝑑𝑒𝑡𝑖𝑘
𝑑𝑒𝑙𝑎𝑦 =
2 ∗ 𝑓𝑟𝑒𝑘𝑢𝑒𝑛𝑠𝑖_𝑛𝑎𝑑𝑎
1
𝑑𝑒𝑙𝑎𝑦 =
2 ∗ 440
𝑑𝑒𝑙𝑎𝑦 = 0.001136 𝑑𝑒𝑡𝑖𝑘 = 1136 𝜇𝑑𝑒𝑡𝑖𝑘
Kenapa frekuensi dikalikan 2 ? gelombang suara merupakan gelombang analog (sinyal
analog) yang merupakan gelombang sinus. Artinya, 1 siklus penuh adalah 1 tinggi/puncak dan
1 rendah/lembah. Kondisi tinggi adalah ketika speaker dinyalakan, sedangkan kondisi renda
ketika speaker dimatikan. Oleh sebab itu, kita membutuhkan 2 delay untuk 1Hz. Karena 440Hz
adalah 440 siklus, maka setiap siklus pada 440Hz dikalikan dengan 2.
1. Skema Rangkaian
Buatlah rangkaian seperti gambar diatas dengan speaker 8Ω atau 16Ω. Sepaker baru
atau speaker bekas radio yang masih berfungsi dengan baik bisa Anda gunakan. Anda bisa
menggunakan project board ataupun tanpa project board.
CN2 100
1
SPEAKER
NADA DO RE MI FA SOL LA SI DO
FREKUENSI 262 294 330 394 395 440 494 523
Jika tanpa menginputkan durasi, maka nada akan dibunyikan hingga nada selanjutnya
dijalankan atau ketika memberikan perintah noTone. Sehingga kita bisa memanfaatkan delay
untuk membuat nada yang panjang atau pendek.
Parameter durasi akan berguna ketika kita ingin membunyikan nada sambil
menjalankan perintah lainnya. Sebab jika kita menggunakan delay, maka kita harus menunggu
delay selesai dahulu untuk menjalankan perintah selanjutnya.
Perintah noTone berguna untuk menghentikan nada pada pin tersebut, sehingga kita
bisa menggunakan perintah ini dengan format:
noTone(pin);
Perintah noTone akan berguna ketika kita menggunakan banyak speaker yang dikontrol
oleh banyak pin. Sekedar catatan bahwa ketika kita menjalankan perintah tone, maka kita bisa
menggunakan fungsi PWM pada pin ~3, ~5, ~6, ~9, ~10 atau ~11.
Diawal program pada sketch diatas terdapat fungsi #define yang berguna untuk
menggantikan suatu variabel tertentu dengan nilai yang dituju. Misalnya variabel NOTE_C4
berarti isinya adalah angka 262 (nada DO).
/*
Judul Program : Melodi
Tanggal Pembuatan : 14 Februari 2017
Nama Programmer : Sutono, M.Kom
*/
#include <pitches.h>
int speakerPin=9;
int melody[]={
NOTE_C4_1,NOTE_C4, NOTE_D4, NOTE_C4,NOTE_F4,NOTE_E4,
NOTE_C4_1,NOTE_C4,NOTE_D4,NOTE_C4,NOTE_G4,NOTE_F4,
NOTE_C4_1,NOTE_C4,NOTE_C5,NOTE_A4,NOTE_F4,NOTE_E4,NOTE_D4,
NOTE_AS4,NOTE_AS4,NOTE_A4,NOTE_F4,NOTE_G4,NOTE_F4
};
int noteDurations[]={
6,6,3,3,3,3,
6,6,3,3,3,3,
6,6,3,3,3,3,3,
6,6,3,3,3,3
};
void setup()
{
pinMode(speakerPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
for(int thisNote=0; thisNote<26; thisNote++)
{
int noteDuration=1000/noteDurations[thisNote];
tone(speakerPin, melody[thisNote], noteDuration);
int pauseBetweenNotes=noteDuration+50;
Serial.println(melody[thisNote]);
delay(pauseBetweenNotes);
noTone(speakerPin);
}
}
4. Soal latihan
Buatlah sketch Arduino untuk memainkan beberapa lagu daerah!
Buatlah sketch Arduino untuk memainkan beberapa lagu wajib!
Buatlah sketch Arduino untuk memainkan beberapa lagu pilihan!
7.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar potensiometer.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan potensiometer.
7.2. TEORI DASAR
Setelah kita belajar mengatur running LED dengan pushbutton, kali ini kita akan
menggunakan potensiometer untuk mengatur intensitas cahaya. Kelebihan menggunakan
potensimeter yaitu kita lebih mudah mengatur intensitas cahaya LED, sebab kita hanya butuh
satu alat untuk membuat LED menjadi redup atau menjadi terang, yaitu potensiometer.
1. Skema Rangkaian
Pada rangkaian gambar 7.2 menggunakan potensiometer 50kΩ jenis potensiometer
putar. Anda juga bisa mencobanya dengan menggunakan potensiometer jenis trimmer.
+5V
CN8
1 50K
pinMode(pinPot, INPUT);
Serial.begin(9600);
}
void loop()
{
int temp=analogRead(pinPot);
analogWrite(pinLED, temp);
temp=map(temp,0,1023,0,254);
Serial.println(temp);
delay(100);
}
Potensiometer 2
/*
Judul Program : Potensiometer LED
Tanggal Pembuatan : 14 Februari 2017
Nama Programmer : Sutono, M.Kom.
*/
const int pinLED1=2;
const int pinLED2=3;
const int pinLED3=4;
const int pinLED4=5;
const int pinLED5=6;
const int pinLED6=7;
const int pinLED7=8;
const int pinLED8=9;
const int pinPot=A0;
void setup()
{
pinMode(pinLED1, OUTPUT);
pinMode(pinLED2, OUTPUT);
pinMode(pinLED3, OUTPUT);
pinMode(pinLED4, OUTPUT);
pinMode(pinLED5, OUTPUT);
pinMode(pinLED6, OUTPUT);
pinMode(pinLED7, OUTPUT);
pinMode(pinLED8, OUTPUT);
pinMode(pinPot, INPUT);
}
void loop()
{
int temp=analogRead(pinPot);
temp=map(temp,0,1023,0,254);
if(temp<=5)
{
digitalWrite(pinLED1, LOW);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>5)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, LOW);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>35)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, LOW);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>65)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, LOW);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>95)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, LOW);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
Sutono, M.Kom Page 43
Pelatihan Arduino 2017
}
if(temp>125)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, LOW);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>155)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, LOW);
digitalWrite(pinLED8, LOW);
}
if(temp>185)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, LOW);
}
if(temp>215)
{
digitalWrite(pinLED1, HIGH);
digitalWrite(pinLED2, HIGH);
digitalWrite(pinLED3, HIGH);
digitalWrite(pinLED4, HIGH);
digitalWrite(pinLED5, HIGH);
digitalWrite(pinLED6, HIGH);
digitalWrite(pinLED7, HIGH);
digitalWrite(pinLED8, HIGH);
}
delay(100);
}
Keterangan Sketch:
Ketika program/sketch di upload ke board Arduino, maka kita bisa mengatur brightness
dan hidup/mati LED dengan sempurna, berbeda dengan cara manual.
Variabel pinPot merupakan suatu variabel yang menggantikan fungsi dari pin analog A0
Arduino. Kita juga bisa menggunakan pin tersebut sebagai pin digital. Tetapi Anda tidak
bisa menggunakan pin digital sebagai pin analog. Jadi gunakanlah pin A0 – A5 jika kita
menghubungkannya dengan sensor analog.
Fungsi map digunakan untuk memetakan suatu nilai dari range tertentu ke range yang lain.
Map(value, from_min, from_max, to_min, to_max), misalnya map(temp, 0, 1023, 0,
254), artinya merubah nilai pinPot yang awalnya pada range 0 – 1023 menjadi nilai dengan
range 0 – 254. Jika pinPot bernilai 512 (anggap saja ½ dari 1024), maka nilai tersebut akan
dirubah menjadi 127 (anggap saja ½ dari 255).
3. Soal Latihan:
Gantilah LED dengan sebuah motor DC yang bekerja pada tegangan +5V, amati apa
yang terjadi saat kita memutar poros potensiometer kekiri dan kekanan!
Gantilah LED dengan sebuah sirkuit buzzer/speaker, amati sekali lagi apa yang terjadi
saat kita memutar poros potensiometer kekiri dan kekanan.
8.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar LM35.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan LM35.
8.2. TEORI DASAR
LM35 merupakan IC sensor suhu dengan bentuk yang mirip dengan transistor. Kaki IC
ini hanya ada tiga, yaitu VCC, Output dan GND (ground).
+5V
LM35 CN7
1 2
VS+ VOUT 1
GND
R21
R
3
C1
CAP
2. Sketch Arduino
Sebelum membuat sketch Arduino, kita akan menghitung bagaimana cara mengukur
dan mengkonversi output dari IC LM35 menjadi suhu. Kita akan mengkonversi voltase pada
kaki output IC LM35, kemudian menghitungnya berdasarkan tegangan referensi yang
digunakan, mengubahnya menjadi derajat celcius, lalu mengirimkannya ke komputer melalui
komunikasi serial.
Jika kita menggunakan tegangan referensi 5V, maka Arduino bisa mengukur
setidaknya hingga 5000mV. Padahal kemampuan IC LM35 hanya sebatas 150 oC atau
150x10mV=1500mv (1.5V). sehingga tegangan yang keluar dari kaki output IC LM35 tidak
akan mungkin melebihi 1.5V.
Berdasarkan persamaan sederhana, maka kita bisa menghitung suhu berdasarkan
perbandingan antara kapasitas voltase yang bisa dicacah oleh pin analog Arduino (1024) dan
kemampuan IC LM35 dalam mengukur suhu.
Suhu dalam voltase (T) = 0 – 1500
Cacahan voltase input (VIN) = 0 – 1023
0 0
=
500 1024
𝑇 𝑉𝐼𝑁
=
500 1024
𝑉𝐼𝑁 ∗ 500
𝑇=
1024
/*
Judul Program : LM35
Tanggal Pembuatan : 14 Februari 2017
Nama Programmer : Sutono, M.Kom.
*/
const int pinLM35=A0;
float hasil;
void setup()
{
Serial.begin(9600);
pinMode(pinLM35, INPUT);
}
void loop()
{
hasil=analogRead(pinLM35);
hasil=(hasil*500)/1024;
Serial.print("Suhu = ");
Serial.print(hasil);
Serial.println(" Derajat");
delay(1000);
}
Program pada sketch diatas akan membaca data dari sensor IC LM35 pada pin A0
Arduino kemudian mengkonversinya menjadi suhu. Informasi suhu akan dikirim ke komputer
melalui komunikasi serial dengan baudrate 9600 setiap 1000ms.
Variabel suhu dan hasil menggunakan float, yaitu tipe data yang memungkinkan
memuat angka desimal. Di sini menggunakan desimal karena adanya pembagian sehingga jika
kita menggunakan integer, maka hasil perhitungan kita kurang presisi karena hasil
pembagiannya akan selalu dibulatkan.
Fungsi analogRead digunakan untuk membaca masukan dari sensor IC LM35 yang
dihubungkan dengan pin analog Arduino (pin A0). Nilai dari analogRead ini berkisar antara 0
hingga 1023 berdasarkan kemampuan dari mikrokontroler Arduino dalam mencacah tegangan
dari 0V hingga 5V.
Untuk mendapatkan hasil pengukuran yang lebih presisi, maka kita bisa mengganti
tegangan referensi yang digunakan. Jika kita menggunakan tegangan referensi 5000mV, maka
space dari 1500mV hingga 5000mV tidak akan pernah terpakai. Oleh sebab itu, kita bisa
menggunakan tegangan referensi 1500mV (sesuai dengan output maksimal dari IC LM35) atau
menggunakan tegangan referensi yang lebih rendah, misalnya tegangan refrensi INTERNAL
yang nilainya adalah 1.1V. sebagai catatan, jika Anda menggunakan tegangan referensi 1.1V
(1100mV) maka batas maksimal suhu yang bisa dihitung adalah 110 oC.
3. Serial Monitor
Serial monitor bisa kita gunakan untuk men-debug secara software. Jika tanpa Serial
Monitor, kita tidak bisa melakukan debug untuk aplikasi yang kita buat sehingga untuk
menentukan lokasinya, kita harus men-debug dari sisi hardware. Misalnya ketika ada error,
kita akan mencoba dengan LED atau menambah/mengurangi rangkaian.
Tetapi jika kita menggunakan Serial Monitor, kita akan mengetahui error-nya melalui
data yang dikirimkan oleh Arduino. Misalnya ketika nyala LED terlalu lama atau terlalu
lambat, kita langsung bisa mengecek nilai/angka yang digunakan untuk delay dan semua isi
variabel dalam program yang kita buat. Sehingga kita bisa menelusuri logika dan algoritma
berdasarkan data-data yang dikirimkan tadi.
Perhatikan pada board Arduino terdapat pin 0 (RX) dan pin 1 (TX). Pin tersebut
berfungsi untuk menerima dan mengirimkan data melalui komunikasi serial dari Arduino ke
komputer melalui kabel USB. Untuk menggunakan komunikasi serial, kita tidak perlu
menambahkan komponen tambahan baru Arduino karena pada board tersebut sudah
disediakan. Kita cukup menghubungkan Arduino ke komputer dan bisa langsung membuat
program.
Fungsi Serial.begin(9600), ini artinya kita akan membuat koneksi serial dengan baud
rate 9600. Sederhananya, baud rate berkaitan dengan jumlah bit yang akan ditransfer setiap
detiknya. Nilai baud rate ini tergantung pada clock mikrokontroler. Arduino UNO sendiri
menggunakan clock sebesar 16MHz. Jika clock-nya makin rendah, maka baud rate harus kita
kurangi. Sebagai contoh, jika kita menggunakan mikrokontroler dengan clock 1MHz, maka
baud rate yang cocok adalah 4800. Jika clock 1MHz kita menggunakan baud rate 9600, maka
data yang dikirim ke komputer tidak akan terbaca. Pada Arduino IDE, nilai baud rate default
pada Serial Monitor adalah 9600. Silahkan Anda coba-coba dengan mengubah nilainya sesuai
pilihan yang ada.
9.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar Dot Matrix 5x7.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan Dot Matrix 5x7.
9.2. TEORI DASAR
Dot Matrix merupakan deretan LED yang membentuk array dengan jumlah kolom dan
baris tertentu, sehingga titik-titik yang menyala dapat membentuk suatu karakter angka, huruf,
tanda baca, dan lain sebagainya.
C0 C1 C2 C3 C4
B0 0 0 1 0 0
B1 0 1 1 0 0
B2 1 0 1 0 0
B3 0 0 1 0 0
B4 0 0 1 0 0
B5 0 0 1 0 0
B6 1 1 1 1 1
Gambar 9.2. Angka 1
Saat kolom pertama (scan kolom 1=1/HIGH/2.4V) maka bit yang diberikan pada baris
pertama “0010001”, sehingga jika bertemu 1 dengan 1 tidak ada arus yang mengalir, jadi
LED padam, jika 1 bertemu dengan 0, maka arus akan mengalir dan LED akan menyala.
Begitu juga untuk kolom kedua, ketika keduanya diberikan tegangan maka pada baris bit
yang diberikan akan menghasilkan “0100001”.
Dan seterusnya, ketika kolomnya mencapai ujung maka akan diulang kekolom pertama
kembali.
CN0
8 X 330
1
2
3 D1 D2 D3 D4 D5
4
5
6
7
8
D6 D7 D8 D9 D10
CN1
1
2
3
4
5
3. Soal Latihan:
Buatlah sketch Arduino untuk membuat karakter angka (0 – 9) !
Buatlah sketch Arduino untuk membuat karakter huruf (A – Z) !
Buatlah sketch Arduino untuk membuat karakter spesial/khusus, misalnya berbentuk
hati, smile dan lain sebagainya !
10.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar Real Time Clock.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan dengan Real Time Clock.
10.2. TEORI DASAR
RTC (Real Time Clock) merupakan komponen yang diperlukan untuk memberikan
informasi mengenai waktu. Waktu disini dapat berupa detik, menit, jam, hari, bulan dan tahu.
Arduin UNO tidak dilengkapi secara internal dengan RTC. Dengan demikian, untuk aplikasi
yang memerlukan pewaktuan, kita hanrus menyertakan secara tersendiri. Agar tetap dapat
bekerja, sebuah RTC dilengkapi dengan baterai, yang umumnya orang-orang menyebutnya
sebagai baterai CMOS. Pada kesempatan kali ini, kita akan menggunakan RTC dengan IC
DS1307. Selain IC tersebut masih ada IC lain seperti DS3232 dan DS1302.
2. Sketch Arduino
Sebelum kita membuat sketch/program Arduino, terlebih dahulu kita unduh library
untuk RTC. Jika sudah selesai mengunduhnya, import-lah library tersebut ke folder library
Arduino. Caranya, buka IDE Arduino, cari sketch – include library – import library.
Selanjutnya, ketiklah program untuk seting pertama kali RTC, seperti berikut.
/*
Judul Program : DS1307
Tanggal Pembuatan : 14 Februari 2017
Nama Programmer : Sutono, M.Kom.
*/
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
void setup()
{
tmElements_t tm;
RTC.read(tm);
RTC.set(tm.Hour &10);
RTC.set(tm.Minute &50);
RTC.set(tm.Second &0);
RTC.set(tm.Day &19);
RTC.set(tm.Month &7);
RTC.set(tm.Year &47);
RTC.write(tm);
}
void loop()
{
//
}
Seting cukup dilakukan hanya sekali. Selanjutnya, RTC kita siap digunakan sesuai
kebutuhan. Misalnya, kita gunakan untuk melihat hari dan waktu saat ini.
/*
Judul Program : TIMER
Tanggal Pembuatan : 14 Februari 2017
Nama Programmer : Sutono, M.Kom.
*/
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
void setup()
{
tmElements_t tm;
RTC.read(tm);
Serial.begin(9600);
}
void loop()
{
tmElements_t tm;
RTC.read(tm);
int jam=tm.Hour;
int menit=tm.Minute;
int detik=tm.Second;
int tgl=tm.Day;
int bln=tm.Month;
int thn=tm.Year;
tm.Hour=jam;
tm.Minute=menit;
tm.Second=detik;
tm.Day=tgl;
tm.Month=bln;
tm.Year=thn;
Serial.print("Waktu saat ini : ");
Serial.print(tm.Hour);
Serial.print(":");
Serial.print(tm.Minute);
Serial.print(":");
Serial.println(tmSecond);
Serial.print("Tanggal hari ini : ");
Serial.print(tm.Day);
Serial.print(" ");
Serial.print(tm.Month);
Serial.print(" ");
Serial.print(tm.Year);
Serial.print(" ");
Serial.println(tmYearToCalendar(tm.Year));
}
Hasilnya akan ditampilkan pada serial monitor, seperti gambar 10.3.
Gambar 10.4. Range Nilai untuk Waktu dan Tanggal IC RTC DS1307
3. Soal Latihan:
Buatlah rangkaian jam digital dengan tampilan 7 segmen yang disertai dengan
beberapa tombol/pushbutton untuk melakukan penyetingan waktu dan tanggal!
Buatlah rangkaian jam digital dengan tampilan LCD 1602 yang disertai dengan
beberapa tombol/pushbutton untuk melakukan penyetingan waktu dan tanggal!
Lengkapilah rangkaian jam digital tersebut dengan buzzer/speaker untuk
menghasilkan suara alarm yang akan menghasilkan peringatan untuk waktu-waktu
tertentu !
11.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar Relay..
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan Relay.
11.2. TEORI DASAR
Relay adalah salah satu komponen elektronika yang berfungsi sebagai saklar. Namun
bedanya dengan saklar yang biasa kita lihat adalah bahwa relay dapat mengendalikan banyak
saklar dalam satu waktu. Metode pengaktifan saklarnya pun berbeda dengan saklar biasa
(mechanical switch), jika pada saklar biasa kita cukup menekan atau memencet tombol supaya
rangkaian ON atau OFF, maka pada relay perlu ada arus yang mengalir melalui coil supaya
saklar bisa berpindah posisi dari OFF menjadi ON atau sebaliknya.
Selain itu seperti yang sudah disinggung sebelumnya, ada juga istilah Normally Open
(NO) dan Normally Close (NC). NO berarti dalam keadaan normal kumparan tidak diberi
tegangan kontak relay tersebut dalam keadaan terbuka (Open) dan itu berarti rangkaian yang
terhubung dengan relay juga menjadi terbuka (OFF). Sedangkan NC adalah keadaan relay
dimana ketika kumparan tidak diberikan tegangan listrik maka kontak dalam keadaan tertutup
(ON). Kedua keadaan ini akan berubah ketika kumparan relay diberikan sumber tegangan
listrik.
2. Rangkaian Dasar Relay
Transistor bekerja sebagai saklar yang mengalirkan arus lewat relay. Jika transistor
menghantar, ada arus yang melewati relay. Arus ini harus cukup besar agar relay dapat bekerja
dengan baik.
+5V
CN
RELAY 1
2
DIODE
CN10
1K
2N2222 1
𝑉𝐶𝐶 − 𝑉𝐵𝐸
𝑅=
𝐼𝐵
Jadi besarnya nilai resistansi dari R harus lebih kecil dari nilai resistansi hasil
I
pembagian resistansi relay dengan besarnya faktor penguatan h FE (≈ IC ).
B
if(hasil>=30)
{
digitalWrite(pinAlarm, HIGH);
Serial.println(hasil);
delay(2000);
}
else
{
digitalWrite(pinAlarm, LOW);
Serial.println(hasil);
}
}
4. Soal Latihan:
Gantilah sensor LM35 dengan sebuah potensiometer yang diterapkan sebagai sensor
untuk level ketinggian, misalnya monitoring ketinggian air !
Hubungkan relay dengan pompa air dan amati yang terjadi setelah air pada suatu
wadah penampungan telah mencapai level ketinggian yang telah ditentukan !
Bila sensor LM35 diganti dengan sensor cahaya, seperti misalnya LDR, perhatikan
sekali lagi apa manfaat dari rangkaian tersebut dan kira-kira dimana diterapkan
rangkaian tersebut!
12.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar Keypad 4X3..
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan Keypad 4X3.
12.2. TEORI DASAR
Keypad merupakan antarmuka antara komunikasi perangkat elektronik dengan manusia
yang disebut dengan istilah HMI (Human Machine Interface).
Keypad tersusun atas 12 buah push button yang dirangkai dengan konfigurasi dalam
bentuk matriks, sehingga memiliki indek baris dan kolom sehingga pin input ke Arduino dapat
dikurangi.
JP1 1 2 3
1
2
3
4
4 5 6
5
6
7
8
7 8 9
220R
* 0 #
LED
GND
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
void loop()
{
// put your main code here, to run repeatedly:
char tombol = keypad.getKey();
if(tombol != NO_KEY)
{
Serial.println(tombol);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
}
4. Soal Latihan:
Gantilah LED dengan sebuah buzzer yang diterapkan sebagai indikator suara bila ada
tombol – tombol keypad yang ditekan !
Buatlah program password dengan menggunakan keypad 4X3, bila password yang
dimasukkan benar, maka LED akan menyala dan bila password yang dimasukkan
salah maka buzzer akan berbunyi !
Buatlah program password dengan menggunakan keypad 4X3, bila password yang
dimasukkan salah maka LED akan menyala dan bila password yang dimasukkan benar
makan relay akan ON ! (gantilah rangkaian buzzer dengan modul relay 5V) dan
hubungkan modul relay tersebut dengan selenoid untuk mengunci dan membuka pintu
pagar !
13.1. TUJUAN
Peserta Pelatihan dapat membuat rangkaian dasar Dot Matrix 8X8.
Peserta Pelatihan dapat membuat dan memodifikasi sketch Arduino untuk
aplikasi yang berhubungan Dot Matrix 8X8.
13.2. TEORI DASAR
Modul LED DOT MATRIX 8X8 adalah modul display yang menggunakan kumpulan
– kumpulan LED yang dirangkaikan menjadi satu kesatuan dengan 8 baris dan 8 kolom. Modul
ini dikontrol dengan menggunakan IC MAX7219 sebagai komponen driver utamanya.
J1
VCC
1
2
3
4
5
6
7
8
D1 D2 D3 D4 D5 D6 D7 D8
J1
D1 D2 D3 D4 D5 D6 D7 D8
1
2
3
4
5
6
7
8
C1
C2
C3
C4
C5
C6
C7
C8
220R
VCC 18
ISET
14
SEGA 16
1nF SEGB 20
SEGC 21
SEGE 23
19 SEGD 15
VCC VCC SEGF
4 17
9 GND SEGG 22
GND SEGDP
MAX7219
};
byte rowPins[ROWS] = {3,4,5,6};
byte colPins[COLS] = {7,8,9};
void setup()
{
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(LED, OUTPUT);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
void loop()
{
// put your main code here, to run repeatedly:
char tombol = keypad.getKey();
if(tombol != NO_KEY)
{
Serial.println(tombol);
digitalWrite(LED, HIGH);
delay(500);
digitalWrite(LED, LOW);
}
}
4. Soal Latihan:
Gantilah LED dengan sebuah buzzer yang diterapkan sebagai indikator suara bila ada
tombol – tombol keypad yang ditekan !
Buatlah program password dengan menggunakan keypad 4X3, bila password yang
dimasukkan benar, maka LED akan menyala dan bila password yang dimasukkan
salah maka buzzer akan berbunyi !
Buatlah program password dengan menggunakan keypad 4X3, bila password yang
dimasukkan salah maka LED akan menyala dan bila password yang dimasukkan benar
makan relay akan ON ! (gantilah rangkaian buzzer dengan modul relay 5V) dan
hubungkan modul relay tersebut dengan selenoid untuk mengunci dan membuka pintu
pagar !