Anda di halaman 1dari 59

Modul Pelatihan Pemrograman Mikrokontroler Berbasis

Arduino

Disusun Oleh :
Rausan Fikri, S.Si
Herjuno Aji Prayogo, S.Kom
1

Modul 1

Pertemuan
Materi Deskripsi Materi
ke-
1 Mengenal Mikrokontroller Mikrokontroler dan Kegunaannya
Perbedaan antara Mikrokontroler
dengan Mikroprosesor
CISC & RISC
2 Arduino Apa Itu Arduino
Jenis-jenis Board Arduino
Teori Arduino Nano ATmega328
1 Konfigurasi Pin Arduino Nano
3 Pengenalan Bahasa C Struktur Penulisan Pemograman C
4 Penjelasan kaki led Anoda dan katoda pada LED
Penggunaan breadboard agar rangkaian
5 Penjelasan Jalur Breadboard berjalan dengan baik dan tidak terjadi
korslet.
1 Input Output Blinking Led
Praktik
Variabel, Tipe Data & #define

Copyright (c) 2016 Kedai Techno


2

Teori
1. Mengenal Mikrokontroller
1.1. Mikrokontroler dan Kegunaannya
Menurut Wikipedia yang namanya Mikrokontroler atau biasa disingkat MCU
(Microcontroller Unit) merupakan sebuah komputer kecil yang dikemas dalam satu
IC (Integrated Circuit) berisikan sebuah prosesor, memory dan peripherals
Input/Output yang terprogram.
Penggunaan teknologi mikrokontroler dapat kita temui pada peralatan
elektronik dirumah seperti remote televisi, telepon digital, mesin cuci dll.
Pengaplikasian teknologi mikrokontroler dapat digunakan pada bidang otomatisasi
industri, akuisi data, telekomunikasi dll.

1.2. Mikrokontroler & Mikroprosesor


Di dalam mikrokontroler terdapat mikroposesor.
Mikroprosesor tanpa RAM, ROM Timer, PORT I/O
Mikrokontroler ada mikroporesor, RAM, ROM, TIMER, Port I/O yang disusun
dalam sebuah IC

1.3. CISC & RISC


Berdasarkan desain CPU dan set Instruksi mikrokontroler dibedakan menjadi 2
yaitu Complex Instruction Set Computing (CISC) & Reduce Instruction Set Computing
(RISC). CISC memiliki set instruksi yang kompleks dengan tujuan untuk mengurangi
ukuran program yang telah terkompilasi sehingga model ini memiliki ukuran memori
utama sedikit, contoh mikrokontroler CISC intel 8051 (MCS51), motorola 68HC11 dll.
Sistem RISC lebih populer saat ini karena tingkat kinerjanya. sistem ini memiliki
jumlah instruksi lebih sedikit sehingga untuk pemrogramannya lebih mudah
menggunakan bahasa pemrograman tingkat tinggi, salah satunya bahasa C. Sistem ini
memiliki lebih banyak register. Selain itu eksekusi intruksi pada sistem RISC dilakukan
lebih cepat rata-rata satu clock per instruksi. Contoh mikrokontroler RISC yaitu AVR
keluaran ATMEL, PIC12/16XX dll.

Copyright (c) 2016 Kedai Techno


3

2. Arduino
2.1. Arduino dan Jenis Board
Arduino merupakan Open Board elektronik atau bisa disebut sebagai sistem
minimum board dari sebuah mikrokontroler yang sudah memiliki bootloader
sehingga pemrogramannya tidak menggunakan chip programer lagi melainkan hanya
melalui komunikasi serial. Arduino menjadi populer karena sangat mudah digunakan
bagi mereka yang tidak memiliki pengetahuan yang kuat tentang pemrograman
karena arduino sudah memiliki library yang banyak dan bersifat open source
sehingga sangat mudah digunakan.
Ada beberapa jenis produk development board & modul yang dikembangkan
oleh Arduino. Produk yang diberi nama Arduino dijual di USA saja sedangkan untuk
diluar USA diberi nama Genuino. Jenis produk Arduino dibedakan dalam beberapa
kategori yaitu Kategori Entry level, Enhanced Features, IoT (internet of Things),
Wearable & Retired.
Kategori Entry level Product diperuntukan bagi mereka yang ingin mulai belajar
pemrograman, mudah digunakan dan sangat cocok untuk project pertama anda.
Untuk kamu yang ingin melakukan project yang lebih complex dan memerlukan
board yang memiliki advanced functionalities dan performa yang cepat bisa memilih
kategori Enhanced features Product. Sedangkan bagi kamu yang ingin yang ingin
mengebangkan teknologi berbasis IoT bisa memilih IoT product. Info lebih lanjut
tentang produk Arduino bisa diliat disitus resminya (arduino.cc).

Copyright (c) 2016 Kedai Techno


4

Gambar 1. Arduino Entry Level Product (Sumber : www.Arduino.cc)

Setiap jenis Board arduino tidak memiliki mikrokontroler yang sama. Contohnya
pada Arduino Uno menggunakan chip ATmega328 yg merupakan mikrokontroler
keluaran ATMEL sedangkan pada Aduino 101 menggunakan chip Intel Curie besutan
Intel.

2.2. Arduino Nano 3.0


Berdasarkan chip mikrokontroler yang digunakan Arduino Nano dibedakan
menjadi dua yaitu Arduino Nano versi 2.x yang menggunakan chip mikrokontroler
ATmega168 dan Arduino Nano versi 3.x yang menggunakan ATmega328.

Gambar 2 Arduino Nano (sumber Arduino.cc)

Copyright (c) 2016 Kedai Techno


5

Spesifikasi dari Arduino Nano 3.0 dapat dilihat pada tabel 1 dibawah ini
(sumber :arduino.cc).
Tabel 1. spesifikasi Arduino Nano 3.0

Microcontroller ATmega328
Operating Voltage (logic
5V
level)
Input Voltage
7-12 V
(recommended)
Input Voltage (limits) 6-20 V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 8
DC Current per I/O Pin 40 mA
32 KB (ATmega328) of which 2 KB used by
Flash Memory
bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
Dimensions 0.73" x 1.70"
Length 45 mm
Width 18 mm
Weigth 5g

Copyright (c) 2016 Kedai Techno


6

Gambar 3 Konfigurasi Pin Arduino Nano 3.0

Copyright (c) 2016 Kedai Techno


7

3. Struktur Penulisan Program Arduino


Pemrograman mikrokontroler platform arduino bisa menggunakan program
Arduino IDE dan bahasa pemrogramannya menggunakan bahasa C/C++. struktur
penulisan program Arduino sama dengan penulisan program C dimana pada
hakekatnya sebuah program tersusun atas sejumlah blok fungsi. Sebuah fungsi
dibuat dengan beberapa pernyataan yang tujuannya untuk melaksanakan sebuah
tugas dan ada biasanya sebuah fungsi juga ada yang tidak mengandung pernyataan.
i. Pre-processor
Merupakan bagian dari program dalam bahasa c yang selalu dijalankan
pertama kali. Bagian ini juga melakukan proses tertentu. Banyak sekali syntax
dalam pre-processor. Namun setidaknya ada dua syntax yang akan sering kita
gunakan dalam latihan programming dasar, yaitu syntax #include dan #define.
#include: proses yang pertama kali dijalankan untuk memanggil
library/prototype fungsi yang ada di dalam header file.
#include <servo.h>

Berarti meng-include file servo.h. Dengan demikian berarti kita mempersiapkan,


fungsi-fungsi dan instruksi-instruksi yang dapat digunakan untuk mengontrol
servo seperti attach, detach, dan write.
#define: proses yang pertama kali dijalankan untuk mendefinisikan konstanta
dan macro. Nilai dari konstanta tidak akan berubah selama program
berlangsung.
#define pinServo 9
#define pinPotensio 0

Kita dapat juga membuat sebuah objek dan mendefinisikan variabel pada
pre-processor
Servo myservo;
int val;

myservo merupakan objek dari Servo, sedangkan val merupakan variabel yang
tipe datanya integer.

Copyright (c) 2016 Kedai Techno


8

ii. Fungsi Utama


Jika kita ingin menggunakan fasilitas atau fitur tertentu sebuah
mikrokontroler maka kode program yang dituliskan diletakkan pada fungsi
utama.
void(setup){
myservo.attach(pinServo);
}

iii. Fungsi Looping


Fungsi looping (perulangan) merupakan fungsi yang akan menjalankan perintah
yang kita buat dan terus menerus akan
dijalankan.
void(loop){
val = analogRead(pinPotensio);
val = map(val, 0, 1023, 0, 179);
myservo.write(val);
delay(15);
}

B. Tipe Data dan Variabel


Dalam pemrograman bahasa C juga dikenal banyak tipe data, namun kita akan
membahas beberapa yang paling sering digunakan dalam pemrograman dasar
arduino.
a) int (integer) = tipe data untuk menyimpan bilangan bulat
b) float = tipe data untuk menyimpan bilangan desimal
c) string = tipe data untuk menyimpan kata
selain tiga tipe data diatas, dapat di cek pada
https://www.arduino.cc/en/Reference/HomePage pada bagian Data Types. Tipe
data digunakan untuk menentukan tipe suatu variabel yang nantinya akan digunakan.
Variabel adalah suatu pengenal (identifier) yang mewakili nilai tertentu di dalam
proses suatu program. Berikut contoh penggunaan variabel dan inisialisasi nilainya
int val = 100;
float dec = 100.01;
string alpha = seratus;

Hal-hal yang perlu diperhatikan dalam Penulisan Bahasa C


Setiap akhir penulisan kode program diakhiri tanda titik koma (;) kecuali
penulisan sebuah fungsi & preprocessor.

Copyright (c) 2016 Kedai Techno


9

Besar kecilnya huruf harus diperhatikan, alias case-sensitive. Artinya jika ada
salah menuliskasama sekali. Berikut struktur penulisan program Arduino

4. Penjelasan Kaki pada LED

Gambar 4. Anoda dan katoda pada LED

LED (Light Emitting Diode) memiliki dua kaki, yaitu anoda dan katoda. Anoda adalah
kutub positif dan katoda adalah kutub negatif. Anoda biasanya yang berkaki panjang, dan
kepalanya yang kecil.
5. Penjelasan Penggunaan Breadboard

Penjelasan jalur breadboard/protoboard


1. Sisi dalam breadboard, a-b-c-d-e merupakan satu jalur, f-g-h-i-j merupakan satu
jalur, 1,2,3 dst berbeda jalur
2. Sisi tepi breadboard (jalur panjang) hanya memiliki 2 jalur,
biasanya digunakan untuk jalur + dan - .
Gambar 5. contoh pemasangan LED pada breadboard

Copyright (c) 2016 Kedai Techno


10

PRAKTIKUM 1

Job 1

Schematic

Cathode

Anode

Copyright (c) 2016 Kedai Techno


11

Anode

Cathode

ARDUINO LED
D13 - Resistor 220 ohm - Anoda
GND - Katoda

Kode Program

void setup() {
pinMode(13, OUTPUT); // menginstruksikan mode pin 13 sebagai OUTPUT
}
void loop() {
digitalWrite(13, HIGH); // menghidupkan LED, pin 13 diberi nilai HIGH
delay(1000); // delay 1 detik atau 1000 milisekon
digitalWrite(13, LOW); // mematikan LED, pin 13 diberi nilai LOW
delay(1000);
}

Copyright (c) 2016 Kedai Techno


12

Job 2

Schematic

D13 - R1 - LED1 - GND


D12 - R3 - LED2 - GND
D11 - R2 - LED3 - GND

TASK :

Rangkai 3 led
Hidup dan matikan 3 led secara bersamaan dengan delay 1 detik setiap hidup
dan mati
Hidup dan matikan 3 led secara bergantian dengan delay 500 milisekon
Gunakan #define atau tipe data integer untuk mendefinisikan pin

Copyright (c) 2016 Kedai Techno


13

Modul 2

Pertemuan
Materi Deskripsi Materi
ke-
Membandingkan dua nilai untuk
1 Operator Relasi
mengambil keputusan
Untuk menggabungkan banyak kondisi
2 Operator Logika
logika.
3 Pernyataan If Penjelasan dan penggunaan If
4 Pernyataan If - else Penjelasan dan penggunaan If - else
Teori
Pernyataan Nested If (if di Penjelasan dan penggunaan If di dalam
5
dalam if) if
2 Penjelasan dan penggunaan If - else if -
6 Pernyataan If - else if - else
else
Penjelasan dan penggunaan komunikasi
7 Komunikasi Serial
serial
Menghidupkan dan mematikan lampu
1 Digital Input Pull-Up
menggunakan pushbutton
Praktik Menghidupkan dan mematikan 2 lampu
2 Kendali 2 lampu secara bergantian menggunakan 1
pushbutton

Copyright (c) 2016 Kedai Techno


14

Pengambilan Keputusan

1. OPERATOR RELASI
Untuk membandingkan dua buah nilai kita bisa menggunakan operator relasi.
Adapun operator relasi dalam bahasa C dapat dilihat pada Tabel 1.

Tabel 1. Operator Relasi


Operator Keterangan
== Sama dengan
> Lebih dari
< Kurang dari
>= Lebih dari atau sama dengan
<= Kurang dari atau sama dengan
!= Tidak sama dengan

Contoh :
X adalah bernilai 2
X == 2 --> TRUE
X != 2 --> FALSE
X>1 --> TRUE
X<1 --> FALSE
X <= 2 --> TRUE
X != 5 --> TRUE

2. Operator Logika
Operator logika digunakan untuk menggabungkan banyak kondisi logika yaitu kondisi
TRUE dan kondisi FALSE. Operator logika dapat digunakan di dalam if jika
menggunakan 2 kondisi atau lebih.

Jenis operator logika dalam bahasa C adalah sebagai berikut:

Tabel 2. Operator Logika


contoh Nama Operator (simbol) Keterangan
x && y And (&&) True jika x dan y bernilai true
y || y Or (||) True jika salah satu dari x atau y bernilai true
!y Not (!) True jika nilai dari y adalah tidak true (bernilai
kebalikan atau merubah true menjadi false)

Contoh :
TRUE && TRUE --> TRUE
TRUE && FALSE --> FALSE
TRUE || FALSE --> TRUE
!(TRUE && TRUE) --> FALSE
FALSE || FALSE --> FALSE

Copyright (c) 2016 Kedai Techno


15

3. Pernyataan if
int val = 51;
If (val > 50){ // kondisi terpenuhi, perintah di dalam if di eksekusi
digitalWrite(12,HIGH);
}

If digunakan dalam pengambilan keputusan, jika kondisi yang diinginkan terpenuhi


maka perintah yang berada di dalam kurung kurawal akan dieksekusi. Pada contoh
diatas jika nilai dalam variabel val lebih besar daripada 50, maka pin D12 menjadi
HIGH

4. Pernyataan if-else
int val = 49;
if (val > 50){ //kondisi tidak terpenuhi
digitalWrite(12,HIGH);
}
else { // perintah di dalam else di eksekusi
digitalWrite(12,LOW);
}

If - else digunakan bila ada kondisi selain dari if, misalnya pada contoh diatas, jika
nilai dalam variabel val lebih besar daripada 50 makan pin D12 menjadi HIGH, lalu
untuk elsenya adalah kondisi selain if, jika nilai dalam variabel value lebih kecil atau
sama dengan 50 makan pin D12 menjadi LOW.

5. Pernyataan If di dalam if (nested if)


if (val > 50){
If (val2 < 90){
digitalWrite(12,HIGH);
}
}
else {
digitalWrite(12,LOW);

If di dalam if digunakan bila untuk mengecek / validasi berganda, atau untuk


mencapai 2 kondisi yang berbeda secara bertahap.
Contoh diatas adalah jika variabel val bernilai lebih dari 50, lalu melakukan if lagi, jika
val2 bernilai kurang dari 90, maka pin D12 menjadi HIGH. Jika kondisinya tidak
tepenuhi maka eksekusi else yaitu pin D12 menjadi LOW.

Copyright (c) 2016 Kedai Techno


16

6. Pernyataan If -else if - else

if (val >= 50 && val =< 100){


digitalWrite(12,HIGH);

}
else if (val < 50 && val > 0){
digitalWrite(13,HIGH)
}
else {
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}

If - else if - else digunakan jika terdapat banyak kondisi. Pada contoh diatas jika val
bernilai 50 sampai 100 maka pin 12 bernilai HIGH, jika val bernilai 1 sampai 49 maka
pin 13 bernilai HIGH, pada kondisi selain dari itu maka pin 12 dan 13 bernilai LOW.

7. Komunikasi Serial

Komunikasi serial digunakan untuk berkomunikasi dengan mikrokontroler,


komunikasi serial sangat berguna untuk memberikan informasi apa yang sedang
dikerjakan oleh mikrokontroler. Lewat komunikasi serial kita juga dapat memberikan
perintah kepada mikrokontroler pada saat beroperasi. Berikut contoh komunikasi
serial.

void setup() {
// memulai komunikasi serial dengan baud rate 9600
serial.begin(9600);
serial.print(Booting Arduino);
serial.print(...............);
delay(1000);
serial.println(booting selesai);

void loop() {
serial.println(looping);
delay(1000);
}

Penjelasan :
serial.begin(9600) : memulai komunikasi serial dengan baud rate 9600
serial.print : print / cetak tulisan yang diinginkan
serial.println : cetak tulisan sekaligus cetak enter setelah menulis tulisan

Setelah mengupload sketch diatas, buka serial monitor, icon pada pojok kanan atas
arduino IDE

Copyright (c) 2016 Kedai Techno


17

Gambar 1. Membuka Serial monitor

Setelah terbuka, pastikan baud ratenya sesuai dengan yang ada di sketch yang diupload

Copyright (c) 2016 Kedai Techno


18

Praktikum
Job 1
Digital Input Pullup
Schematic

D13 - resistor 220ohm - LED - GND


D2 - pushbutton - GND

Copyright (c) 2016 Kedai Techno


19

KODE PROGRAM

void setup() {

pinMode(2, INPUT_PULLUP); // setting sebagai pull up resistor


pinMode(13, OUTPUT); // pin LED, setting sebagai OUTPUT

void loop() {
int tombol= digitalRead(2);
delay(50);
//INPUT_PULLUP menjadikan kondisi awal pin menjadi HIGH
// jika tombol di tekan maka kondisi pin menjadi LOW
if (tombol== HIGH) { // jika tombol dilepas, lampu menjadi mati
digitalWrite(13, LOW);
} else { //jika tombol ditekan, lampu menjadi hidup
digitalWrite(13, HIGH);
}
}

Komunikasi serial
Serial print

void setup() {
Serial.begin(9600);
pinMode(2, INPUT_PULLUP); // setting sebagai pull up resistor
pinMode(13, OUTPUT);

void loop() {

int tombol= digitalRead(2);


delay(50);
if (tombol== HIGH) {
digitalWrite(13, LOW);
Serial.println("lampu mati");
delay(50);
} else {
digitalWrite(13, HIGH);
Serial.println("lampu Hidup");
delay(50);
}
}

Copyright (c) 2016 Kedai Techno


20

Job 2
Kendali 2 lampu
Skema

D5 - R1 - LED1 -GND
D6 - R2 - LED2 - GND

Copyright (c) 2016 Kedai Techno


21

Kode PROGRAM
int led1 = 13;
int val = 0;
void setup() {
//mulai komunikasi serial
Serial.begin(9600);

//jadikan pin2 sebagai pullup


pinMode(2, INPUT_PULLUP);
pinMode(led1, OUTPUT);
}

void loop() {
//baca nilai pushbutton
int sensorVal = digitalRead(2);

//print nilai sensorVal pada komunikasi serial


Serial.println(sensorVal);

// harus diingat, pada digitalpullup, logikanya terbalik


// ketika tombol ditekan maka bernilai LOW
// ketika tidak ditekan makan nilainya HIGH

if (sensorVal == LOW) {
if (val == 0){
digitalWrite(led1, HIGH);
Serial.println(lampu hidup);
}else if (val == 1){
digitalWrite(led1, LOW);
Serial.println(lampu mati);
}
val = val + 1;
if (val > 1) {
val = 0;
}
}
delay(500);
}

Tugas :

1. Gunakan 3 lampu LED


2. Hidupkan secara bergantian menggunakan pushbutton
a) Tekan 1 kali lampu 1 hidup
b) Tekan 2 kali lampu 2 hidup
c) Tekan 3 kali lampu 3 hidup
d) Tekan 4 kali semua lampu mati

Copyright (c) 2016 Kedai Techno


22

Modul 3

Pertemuan
Materi Deskripsi Materi
ke-
Analog Vs Digital
Analog Vs Digital, ADC dan
1 ADC (Analog Digital Converter)
PWM
Teori PWM (Pulse Width Modulation)
Looping For
3 2 Perulangan (Looping)
Looping While
1 ADC Memonitor nilai dari potensiometer
Praktik Mengontrol nyala led menggunakan
2 PWM
PWM, bisa terang, dan redup, atau mati

Copyright (c) 2016 Kedai Techno


23

4. Analog Vs Digital, ADC & PWM


1.4. Analog Vs Digital

1.5. Analog Digital Converter (ADC)


Analog Digital Converter (ADC) merupakan sistem pengubahan sinyal analog
menjadi sinyal digital. 2 karakter prinsip yang dimiliki ADC yaitu kecepatan sampling
dan kecepatan resolusi. pada Arduino Nano 3.0 yang menggunakan mikrokontroler
ATmega328 keluaran Atmel bisa menggunakan resolusi ADC 10 bit .
Cara konversi perhitungan nilai input tegangan ke bilangan biner dapat kita
gunakan persamaan 1.1 sebagai berikut :
Vin
x R (1.1)
Vref
dimana :
x=nilai input pin ADC yang terbaca
Vin = tegangan input
Vref = tegangan referensi
R= nilai resolusi dari ADC

Copyright (c) 2016 Kedai Techno


24

Sebagai contoh kita ingin mengetahui berapa nilai input pin adc yang terbaca jika Vin
sebesar 3 v dengan tegangan referensi sebesar 5 v dan nilai resolusi ADC 1023
(10bit).
Diketahui : Vin = 3v
Vref= 5v
R=1023
Nilai input pin ADC yang terbaca (x)?
Vin
x R
Vref
3
x x1023
5
x 614

Jika kita ingin mengubah nilai 614 (yang merupakan nilai desimal) menjadi nilai biner
maka cara perhitungannya.
614
307 sisa 0
2
307
153 sisa 1
2
153
76 sisa 1
2
76
38 sisa 0
2
38
19 sisa 0
2
19
9 sisa 1
2
9
4 sisa 1
2
4
2 sisa 0
2
2
1 sisa 0
2
1
0 sisa 1
2

Copyright (c) 2016 Kedai Techno


25

Jadi bilangan binernya 1001 1001 10

1.6. Pulse Width Modulation (PWM)


Seperti kita ketahui bahwa nilai tegangan output pada Arduino Nano 3.0 bisa
bernilai 5V (HIGH) atau 0v (Low). namun jika kita hendak mengatur besar nilai
tegangan output menjadi 1,2 atau 3v ( rentang nilai diantara 0-5 v ) maka kita bisa
menggunakan teknik PWM (Pulse Width Modulation). Parameter yang dapat diatur
pada PWM adalah periode & lebar pulsa, sedangkan untuk mengatur besarnya
tegangan yang diinginkan kita bisa mengatur besarnya duty cycle. duty cycle
merupakan persentase nilai lebar pulsa dalam satu periode gelombang.

Sedangkan untuk mencari nilai dari Duty Cycle kita bisa menggunakan
persamaan 1.2 dibawah ini
tHIGH
D 100% (1.2)
ttotal
Keterangan:
D = Duty cycle
tHIGH = waktu pada saat keadaan HIGH (lebar pulsa)
Ttotal = total waktu dalam satu gelombang (periode)

Untuk memahami lagi tentang duty cycle bisa kita lihat pada Gambar 2 dibawah
ini :

Copyright (c) 2016 Kedai Techno


26

Gambar 2 Ilustrasi duty cycle 0%, 100% & 50%


Pada gambar diatas terlihat jika duty cyclce 0% maka nilai tegangan yang keluar 0v
sedangkan pada duty cycle 100% tegangan keluarannya sebesar 5v (HIGH) dan jika
duty cycle sebesar 50% maka tegangan keluarannya sebesar 2,5v.

Copyright (c) 2016 Kedai Techno


27

5. Looping (perulangan) for & while


2.3. Looping for
For dalam bahasa C merupakan fungsi atau kontrol untuk pengulangan sampai
dengan batas yang ditentukan.

for ( init; condition; increment ) {


statement(s);
}
Keterangan kode:
Init : inisialisasi batas awal pengulangan
Condition : kondisi pengulangan yang akan ditentukan
Increment : pengaturan penambahan nilai pada variable
Lebih jelasnya dapat dilihat pada contih berikut ini.

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


Serial.println(i);
}
Pada contoh diatas, nilai i bernilai awal 0, dengan kondisi i<10 maka for akan
terus menjalankan fungsinya sampai dengan 9 dengan penambahan 1 setiap
pengulangannya. Output dari contoh kode diatas adalah

0
1
2
3
4
5
6
7
8
9

2.4. Looping while


Pada looping while, perulangan akan dilakukan selama kondisi yang diinginkan
masih bernilai benar (TRUE) dan akan berhenti jika kondisinya telah salah. Format
penulisan while dalam bahasa C adalah sebagai berikut :

while (kondisi){
Statement;
}

Copyright (c) 2016 Kedai Techno


28

Contoh penggunaan while

int i = 0;
while (i<10){
Serial.println(i);
i++;
}

Pertama variabel i diberi nilai 0, lalu while akan terus mengulang dengan kondisi i <
10. jika i telah = 10 maka while akan berhenti. Output dari contoh kode while adalah

0
1
2
3
4
5
6
7
8
9

Copyright (c) 2016 Kedai Techno


29

Job 1_ADC
Schematic

PINOUT POTENSIOMETER

Copyright (c) 2016 Kedai Techno


30

Kode Program

int analogPin = 0;

int nilai = 0;

void setup(){
Serial.begin(9600);
}

void loop()
{
nilai = analogRead(analogPin);
Serial.println(nilai);
delay(500);
}

TASK

Copyright (c) 2016 Kedai Techno


31

Rangkai dengan

Job 2 PWM

Schematic

Cathode

Anode
Anode

Cathode

Kode Program

Contoh 1

void setup() {
analogWrite(9, 255);
}

void loop() {

Copyright (c) 2016 Kedai Techno


32

Contoh 2

void setup() {
analogWrite(9, 50);
}
void loop() {

Contoh 3

void setup() {
analogWrite(9, 5);
}
void loop() {

Task :
- Gabungkan dengan potensiometer sehingga ketika potensiometer di putar maka akan
mengontrol nyala LED.
- kontrol PWM dengan menggunakan looping for & while

Copyright (c) 2016 Kedai Techno


33

Modul 4

Pertemuan
Materi Deskripsi Materi
ke-
1 Module Driver Motor L298N Fungsi dan pinout dari L298N
Teori
2 Modul Relay Fungsi dan cara kerja Relay
Menghidupkan dan mematikan lampu
4 1 L298N
menggunakan pushbutton
Praktik Menghidupkan dan mematikan 2 lampu
2 Relay secara bergantian menggunakan 1
pushbutton

Copyright (c) 2016 Kedai Techno


34

6. Module Driver L298N


Besar arus output yang dikeluarkan sebuah mikrokontroler sangatlah kecil
sehingga ketika kita ingin mengontrol sebuah motor DC maka kita memerlukan
sebuah driver. Salah satu yang dapat kita gunakan adalah modul driver L298N.
berikut

Output 1 Output 4

Output 3
Output 2

Vin
GND 5V

Keterangan Pinout dari modul driver l298N :


Vin = tegangan input untuk motor DC max 46V
GND = Ground

Copyright (c) 2016 Kedai Techno


35

5V = Tegangan untuk modul L298N


ENA = enable PWM out 1 & out 2
ENB = enable PWM Out 3 & Out 4

Fungsi pin in1, in2, in3, in4


In1(HIGH) = OUT1(HIGH)
In1(LOW) = OUT1(LOW)
In2(HIGH) = OUT2(HIGH)
In2(LOW) = OUT2(LOW)
In3(HIGH) = OUT3(HIGH)
In3(LOW) = OUT3(LOW)
In4(HIGH) = OUT4(HIGH)
In4(LOW) = OUT4(LOW)

7. Modul Relay
Bagaimana cara kita untuk mengontrol sebuah perangkat yang menggunakan
arus listrik AC (Alternate current) dengan mikrokontroler. Seperti yang kita ketahui
Output arus dari mikrokontroler menggunakan DC dan arusnya juga tidak besar
sehingga untuk mengontrol perangkat yang menggunakan Arus AC kita mesti
menggunakan sebuah saklar yang dapat dikontrol oleh mikrokontroler. Menurut
wikipdia Relai adalah suatu peranti yang menggunakan elektromagnet untuk
mengoperasikan seperangkat kontak sakelar.

Copyright (c) 2016 Kedai Techno


36

Berdasarkan cara Kerjanya relai dibedakan menjadi 4 yaitu


(https://id.wikipedia.org/wiki/Relai) :

1. Normal terbuka. Kontak sakelar tertutup hanya jika relai dihidupkan.


2. Normal tertutup. Kontak sakelar terbuka hanya jika relai dihidupkan.
3. Tukar-sambung. Kontak sakelar berpindah dari satu kutub ke kutub lain saat
relai dihidupkan.
4. Bila arus masuk Pada gulungan,maka seketika gulungan akan berubah menjadi
medan magnet. Gaya magnet inilah yang akan menarik luas sehingga saklar akan
bekerja

Copyright (c) 2016 Kedai Techno


37

Job 1
Skema

Konfigurasi pin:
in1 hubungkan ke pin D2
In2 hubungkan ke pin D3
EnA hubungkan ke D9

Kode Program
Contoh 1

void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);

Copyright (c) 2016 Kedai Techno


38

}
void loop() {
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(9, HIGH);

Contoh 2
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);

}
void loop() {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, HIGH);

}
Contoh 3
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(9, OUTPUT);

}
void loop() {
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(9, LOW);

TASK
Gunakan teknik pwm untuk mengatur kecepatan motor
Gunakan potensiometer untuk mengatur kecepatan motor dc

Copyright (c) 2016 Kedai Techno


39

Job 2 Relay
Skema
D2 - IN
5v - VCC
GND - GND

Task
1. Hidupkan LAMPU 220V (set pin D2 menjadi LOW)
2. Matikan LAMPU 220v (set pin D2 menjadi HIGH)

Copyright (c) 2016 Kedai Techno


40

Modul 5

Pertemuan
Materi Deskripsi Materi
ke-
Penjelasan Singkat tentang sensor
1 Sensor Ultrasonik
ultrasonik
Teori 2 LCD Penjelasan singkat LCD
Real Time Clock, modul jam untuk
3 RTC
arduino
5 Mendeteksi jarak menggunakan
1 Ultrasonik HC-SR04, ditampilkan pada serial
monitor
Praktik
2 LCD Menampilkan tulisan pada LCD
Mengambil data jam dari RTC,
3 RTC
ditampilkan pada serial monitor

Copyright (c) 2016 Kedai Techno


41

1. Sensor Ultrasonik
Sensor Ultrasonik adalah alat elektronika yang kemampuannya bisa mengubah
dari energy listrik menjadi energy mekanik dalam bentuk gelombang suara ultrasonik.
Sensor ini terdiri dari rangkaian pemancar Ultrasonik yang dinamakan transmitter
dan penerima ultrasonik yang disebut receiver. Alat ini digunakan untuk mengukur
gelombang ultrasonik.

Pada sensor ultrasonik HC-sr04 dapat dilihat transmitter (bulatan kiri) dan
receiver (bulatan kanan), terdapat juga 4 pin, yaitu untuk daya dan komunikasi
dengan mikrokontroler.
2. LCD (Liquid Crystal Display)

LCD 16x2 adalah salah satu lcd yang sering digunakan dalam berbagai project
arduino, karena mudah didapat dan mudah untuk diprogram dengan arduino.
Library untuk lcd ini juga sudah ada di arduino.

Copyright (c) 2016 Kedai Techno


42

3. Real Time Clock (RTC)


Real time clock (RTC) adalah modul yang dibuat untuk menyimpan data waktu
secara real time. Data waktu yang tersimpan dari detik sampai dengan tahun. Modul
ini sangat berguna untuk berbagai project, terutama yang membutuhkan untuk
menjalankan perintah berdasarkan waktu. Misalnya kontrol lampu hidup pada jam
enam sore, dan mati pada jam 6 pagi. Mikrokontroler sebenarnya bisa menyimpan
waktu, tapi ketika dimatikan maka waktunya akan mulai dari awal alias tidak
tersimpan atau tidak berjalan ketika si mikrokontroler dalam keadaan mati,
sedangkan dengan modul RTC waktu akan tersimpan walau mikrokontroler mati
karena RTC memiliki baterai sendiri.

Copyright (c) 2016 Kedai Techno


43

Praktikum

Job 1
Ultrasonik

Kode
Masukkan dulu library NewPingMaster pada masing-masing folder library
arduino. Defaultnya di folder Documents > Arduino > library.

Copyright (c) 2016 Kedai Techno


44

#include <NewPing.h>

#define TRIGGER_PIN 12 // pin D12 ke pin trigger


#define ECHO_PIN 11 // pin D11 ke ke pin echo
#define MAX_DISTANCE 200 // up to 400-500 cm
NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup
void setup() {
// komunikasi serial dengan baud rate 115200,
// buka serial monitor setelah upload
Serial.begin(115200);
}

void loop() {
delay(50); //tunggu 50 ms untuk mendeteksi jarak, minimal delay 29 ms
Serial.print("Ping: ");
// Kirim sinyal dan dapatkan jarak, bila 0 berarti diluar jarak maksimal atau eror
Serial.print(sonar.ping_cm());
Serial.println("cm");
}

Copyright (c) 2016 Kedai Techno


45

Job 2
LCD (Liquid Crystal Display)
Skema
sc

Rangkaian LCD
LCD RS pin ke digital pin 12
LCD Enable pin ke digital pin 11
LCD D4 pin ke digital pin 5
LCD D5 pin ke digital pin 4
LCD D6 pin ke digital pin 3
LCD D7 pin ke digital pin 2

Copyright (c) 2016 Kedai Techno


46

LCD R/W pin ke ground


VDD pin ke 5v
VSS pin ke ground
V pin ke resistor ke 5v (power backlight)
K pin ke ground (gnd backlight)
Rangkaian 10K resistor:
Vcc ke 5v
Gnd ke gnd
Wiper/sinyal ke LCD VO pin (kecerahan lcd)

Kode
#include <LiquidCrystal.h>

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

void setup() {
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("Kedai Techno");
lcd.setCursor(0, 1);
lcd.print("Arduino Nano v3");
}

void loop() {
}

Copyright (c) 2016 Kedai Techno


47

Job 3
RTC (Real Time Clock)

Rangkaian
VCC ke 5v
GND ke GND
SCL ke A5
SDA ke A4

Program
Pada Arduino IDE, buka example
File > Example > RTClib > ds3231
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"

RTC_DS3231 rtc;

Copyright (c) 2016 Kedai Techno


48

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday",


"Thursday", "Friday", "Saturday"};

void setup () {

#ifndef ESP8266
while (!Serial); // for Leonardo/Micro/Zero
#endif

Serial.begin(9600);

delay(3000); // wait for console opening

if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}

if (rtc.lostPower()) {
Serial.println("RTC lost power, lets set the time!");
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// This line sets the RTC with an explicit date & time, for example to set
// January 21, 2014 at 3am you would call:
// rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
}

void loop () {
DateTime now = rtc.now();

Copyright (c) 2016 Kedai Techno


49

Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();

Serial.print(" since midnight 1/1/1970 = ");


Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");

// calculate a date which is 7 days and 30 seconds into the future


DateTime future (now + TimeSpan(7,12,30,6));

Serial.print(" now + 7d + 30s: ");


Serial.print(future.year(), DEC);
Serial.print('/');
Serial.print(future.month(), DEC);
Serial.print('/');
Serial.print(future.day(), DEC);
Serial.print(' ');
Serial.print(future.hour(), DEC);

Copyright (c) 2016 Kedai Techno


50

Serial.print(':');
Serial.print(future.minute(), DEC);
Serial.print(':');
Serial.print(future.second(), DEC);
Serial.println();

Serial.println();
delay(3000);
}

Task :
1. Tampilkan jarak dari sensor ultrasonik ke LCD
2. Tampilkan jam dari rtc ke LCD
3. Tampilkan jarak dan jam ke LCD

Copyright (c) 2016 Kedai Techno


51

Modul 6

Pertemuan
Materi Deskripsi Materi
ke-
1 Interupsi Interupsi pada arduino
Teori 2 Komunikasi I2C I2C pada arduino
3 Array Array pada pemrograman Arduino (C)
3 Interupsi eksternal menggunakan
1 Interupsi
pushbutton
Praktik Mengkomunikasikan 2 arduino, 1
2 Komunikasi I2C
menjadi slave, 1 menjadi master
3 Array Contoh penggunaaan array

Copyright (c) 2016 Kedai Techno


52

1. Interupsi (Interrupts)

Pada tingkat sederhana, interupsi adalah sebuah sinyal yang mengiterupsi


proses yang sedang berlangsung pada prosesor. Interupsi dapat dipicu oleh
perubahan faktor eksternal (seperti perubahan status pada pin input) atau juga
faktor internal (seperti timer atau juga software signal). Pada saat dipicu, interupsi
menghentikan sementara proses yang sedang berlangsung dan menyebabkan
program untuk mengeksekusi perintah atau fungsi lain. Pada saat fungsinya selesai
dilakukan, maka program akan kembali bekerja seperti semula.

Pada Arduino Uno, Nano, Mini atau yang berbasis atmega328 pin interupsi
terdapat pada pin 2 dan 3. Untuk arduino yang lain, dapat kita lihat pada tabel
berikut.
Board Pin Interupsi
Uno, Nano, Mini, dan 328-based 2, 3
Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21
Micro, Leonardo, dan 32u4-based 0, 1, 2, 3, 7
Zero semua pin digital, kecuali 4
MKR1000 Rev.1 0, 1, 4, 5, 6, 7, 8, 9, A1, A2
Due Semua pin digital
101 Semua pin digital

Penjelasan sintaks lebih lanjut di


https://www.arduino.cc/en/Reference/AttachInterrupt
2. Komunikasi I2C

Inter-Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial
dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun
menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data)
yang membawa informasi data antara I2C dengan pengontrolnya. Piranti yang
dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai Master dan Slave.
Master adalah piranti yang memulai transfer data pada I2C Bus dengan membentuk
sinyal Start, mengakhiri transfer data dengan membentuk sinyal Stop, dan
membangkitkan sinyal clock. Slave adalah piranti yang dialamati master.

Sinyal Start merupakan sinyal untuk memulai semua perintah, didefinisikan


sebagai perubahan tegangan SDA dari 1 menjadi 0 pada saat SCL 1. Sinyal Stop
merupakan sinyal untuk mengakhiri semua perintah, didefinisikan sebagai
perubahan tegangan SDA dari 0 menjadi 1 pada saat SCL 1.

Sinyal dasar yang lain dalam I2C Bus adalah sinyal acknowledge yang
disimbolkan dengan ACK Setelah transfer data oleh master berhasil diterima slave,
slave akan menjawabnya dengan mengirim sinyal acknowledge, yaitu dengan
membuat SDA menjadi 0 selama siklus clock ke 9. Ini menunjukkan bahwa Slave
telah menerima 8 bit data dari Master.

Copyright (c) 2016 Kedai Techno


53

Pada arduino, komunikasi I2C telah dibuat library nya, yaitu Wire Library.
Library ini mampu membuat arduino berkomunikasi dengan perangkat I2C. Pada
arduino Uno dan Nano, pin I2C terdapat pada A4 (SDA) dan A5 (SCL)

3. Array

Array (larik) merupakan suatu variabel yang merepresentasikan daftar (list) atau
kumpulan data yang memiliki tipe data sama. Array merupakan konsep yang penting
dalam pemrograman, karna array memungkinkan kita untuk menyimpan data dalam
jumlah banyak dan terindeks.

Misalkan ada kumpulan data bertipe int yaitu angka 1, 2, 3, 4, dan 5. Kumpulan
data ini dapat disajikan dalam bentuk Array karena memiliki tipe data yang sama
yaitu Int. Misal kumpulan data tadi kita beri nama Angka sehingga jika disajikan
dalam bentuk array akan menjadi Int Angka[]={1, 2, 3, 4, 5} atau Int Angka[5]={1, 2, 3,
4, 5}. Pada sebuah array, index array dimulai dari indeks ke-0, sehingga pada array
Angka[], angka 1 berada di indeks ke-0 (Array[0]), angka 2 berada di indeks ke-1
(Array[1]), dan seterusnya. Sedangkan pada pendeklarasian Array, Int Angka [5]
berarti Array Angka dapat menampung 5 masukan nilai Int.

Tabel penjelasan array Angka[5] = {1,2,3,4,5}

Indeks array Nilai


Angka[0] (variabel Angka indeks ke 0) 1
Angka[1] (variabel Angka indeks ke 1) 2
Angka[2] (variabel Angka indeks ke 2) 3
Angka[3] (variabel Angka indeks ke 3) 4
Angka[4] (variabel Angka indeks ke 4) 5

Copyright (c) 2016 Kedai Techno


54

Praktikum
JOB 1 - Interupsi

Skema

Kode Program

const byte ledPin = 13; //pin 13 sebagai pinled


const byte interruptPin = 2; //pin 2 sebagai pin interup
volatile byte state = LOW;

void setup() {
pinMode(ledPin, OUTPUT);
// mode input pullup, pada saat terbuka (tombol tidak ditekan), bernilai HIGH,
pinMode(interruptPin, INPUT_PULLUP);
// pasang interup pada pin 2,
// pemicunya CHANGE yaitu perubahan nilai LOW/HIGH pada pin/tombol

Copyright (c) 2016 Kedai Techno


55

// lalu eksekusi fungsi blink ketika pemicu terjadi


attachInterrupt(digitalPinToInterrupt(interruptPin), blink, CHANGE);
}

void loop() {
digitalWrite(ledPin, state);
}

void blink() {
state = !state;
}

Task :
1. Ubah CHANGE menjadi FALLING, dan RISING
2. Tambahkan komunikasi serial, lalu berikan keterangan state lewat serial pada
saat state berubah

JOB 2 - I2C

Skema

Copyright (c) 2016 Kedai Techno


56

Kode Program untuk Master (Arduino 1)

// Wire Master Writer


// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library


// Writes data to an I2C/TWI slave device
// Refer to the "Wire Slave Receiver" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin(); // join i2c bus (address optional for master)
}

byte x = 0;

Copyright (c) 2016 Kedai Techno


57

void loop() {
Wire.beginTransmission(8); // transmit to device #8
Wire.write("suti"); // sends five bytes
//Wire.write(x); // sends one byte
Wire.endTransmission(); // stop transmitting

// x++;
delay(500);

Kode Program untuk Slave (Arduino 2)

// Wire Slave Receiver


// by Nicholas Zambetti <http://www.zambetti.com>

// Demonstrates use of the Wire library


// Receives data as an I2C/TWI slave device
// Refer to the "Wire Master Writer" example for use with this

// Created 29 March 2006

// This example code is in the public domain.

#include <Wire.h>

void setup() {
Wire.begin(8); // join i2c bus with address #8
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}

void loop() {
delay(100);
}

// function that executes whenever data is received from master


// this function is registered as an event, see setup()
void receiveEvent(int howMany) {
while (1 < Wire.available()) { // loop through all but the last
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // receive byte as an integer
Serial.println(x); // print the integer

JOB 3 - ARRAY

int angka[5] = {1, 2, 3, 4, 5};

Copyright (c) 2016 Kedai Techno


58

int i = 0;
void setup() {
Serial.begin(9600);
}

void loop() {

if (i < 5) {
Serial.print("Variabel angka indeks ke ");
Serial.print(i);
Serial.print(" adalah ");
Serial.println(angka[i]);
i++;
}

if (i == 5) {
i = 0;
}
delay(1000);
}

Task :
1. panggil urutan array secara berurutan mulai dari yang terbesar (indeks ke 4) ke
yang paling kecil (indeks 0)

Copyright (c) 2016 Kedai Techno

Anda mungkin juga menyukai