2016
MIKROKONTROLER ATMEGA 328
MODUL I
ATMEGA 328
ATMega328 merupakan mikrokontroler keluarga AVR 8 bit. Beberapa tipe
mikrokontroler yang sama dengan ATMega8 ini antara lain ATMega8535, ATMega16,
ATMega32, ATMega328, yang membedakan antara mikrokontroler antara lain adalah ukuran
memori, banyaknya GPIO (pin input/output), peripheral (USART, timer, counter, dan lainlain). Dari segi ukuran fisik, ATMega38 memiliki ukuran fisik lebih kecil dibandingkan
dengan beberapa mikrokontroler diatas. Namun untuk segi memori dan periperal lainnya
ATMega328 tidak kalah dengan yang lainnya karena ukuran memori dan periperalnya relatif
sama dengan ATMega8535, ATMega32, hanya saja jumlah GPIO lebih sedikit dibandingkan
mikrokontroler diatas.
ATMega328 memiliki 3 buah PORT utama yaitu PORTB, PORTC, dan PORTD
dengan total pin input/output sebanyak 23 pin. PORT tersebut dapat difungsikan sebagai
input/otput atau difungsikan sebagai peripheral lainnya.
PORTB
PORTB merupakan jalur data 8 bit yang dapat difungsikan sebagai input/output. Selain
itu PORTB juga dapat memiliki fungsi alternatif seperti berikut :
ICP1 (PB0), berfungsi sebagai Timer Counter 1 input capture pin.
OC1A (PB1), OC1B (PB2) dan OC2 (PB3) dapat difungsikan sebagai PWM
(Pulse Width Modulation).
MOSI (PB3), MISO (PB4), SCK (PB5), SS (PB2) merupakan jalur komunikasi
SPI.
PELATIHAN MIKROKONTROLER ARDUINO
Page 1
MIKROKONTROLER ATMEGA 328
2016
TOSC1 (PB6), TOSC2 (PB7) dapat difungsikan sebagai sumber clock external
untuk timer.
XTAL1 (PB6) dan XTAL2 (PB7) merupakan sumber clock utama
mikrokontroler.
PORTC
PORTC merupakan jalur data 7 bit yang dapat difungsikan sebagai input/output digital.
Fungsi alternatif PORTC antara lain sebagai berikut :
ADC6 channel (PC0, PC1, PC2, PC3, PC4, PC5) dengan resolusi sebesar 10 bit.
ADC dapat digunakan untuk mengubah input yang berupa tegangan analog
menjadi data digital.
I2C (SDA dan SDL) merupakan salah satu fitur yang terdapat pada PORTC. I2C
digunakan untuk komunikasi dengan sensor atau device lain yang memiliki
komunikasi data tipe I2C seperti sensor kompas, accelerometer nunchuck.
PORTD
PORTD merupakan jalur data 8 bit yang masing-masing pin-nya juga dapat difungsikan
sebagai input/output. Sama seperti PORTB dan PORTC, PORTD juga memiliki fungsi
alternatif dibawah ini :
USART (TXD dan RXD) merupakan jalur komunikasi serial dengan level sinyal
TTL. Pin TXD berfungsi untuk mengirimkan data serial, sedangkan RXD
kebalikannya yaitu sebagai pin yang berfungsi untuk menerima data serial.
Interrupt (INT0 dan INT1) merupakan pin dengan fungsi khusus sebagai interupsi
hardware. Interupsi biasanya digunakan sebagai selaan dari program, misalkan
pada saat program berjalan kemudian terjadi interupsi hardware/software maka
program utama akan berhenti dan akan menjalankan program interupsi.
XCK dapat difungsikan sebagai sumber clock external untuk USART, namun kita
juga dapat memanfaatkan clock dari CPU, sehingga tidak perlu membutuhkan
external clock.
T0 dan T1 berfungsi sebagai masukan counter external untuk timer 1 dan timer 0.
AIN0 dan AIN1 keduanya merupakan masukan input untuk analog comparator.
Fitur ATMega328
ATMega328 adalah mikrokontroler keluaran dari atmel yang mempunyai arsitektur
RISC (Reduce Instruction Set Computer) yang mana setiap eksekusi data lebih cepat dari
pada arsitektur CISC (Completed Instruction Set Computer). Mikrokontroler ini memiliki
beberapa fitur antara lain :
PELATIHAN MIKROKONTROLER ARDUINO
Page 2
MIKROKONTROLER ATMEGA 328
2016
Memiliki EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar
1 KB sebagai tempat penyimpanan data semi permanen karena EEPROM tetap dapat
menyimpan data meskipun catu daya dimatikan.
Memiliki SRAM (Static Random Access Memory) sebesar 2 KB.
Memiliki pin I/O digital sebanyak 14 pin 6 diantaranya PWM (Pulse Width
Modulation) output.
32 x 8 bit regiser serbaguna.
Dengan clock 16 MHz kecepatan mencapai 16 MIPS.
32 KB Flash Memory dan pada Arduino memiliki bootloader yang menggunakan 2 KB
dari flash memori sebagai bootloader.
130 macam instruksi yang hampir semuanya dieksekusi dalam satu siklus clock.
PELATIHAN MIKROKONTROLER ARDUINO
Page 3
2016
MIKROKONTROLER ATMEGA 328
MODUL II
ARDUINO
Dengan mengambil contoh sebuah papan arduino tipe USB, bagian-bagiannya dapat
dijelaskan sebagai berikut:
14 pin input/ouput digital (0 13), berfungsi sebagai input atau output, dapat diatur
oleh program. Khusus untuk 6 buah pin 3, 5, 6, 9, 10 dan 11, dapat juga berfungsi
sebagai pin analog output dimana tegangan outputnya dapat diatur. Nilai sebuah pin
analog output dapat diprogram antara 0 254, dimana hal itu mewakili nilai tegangan 0
5 volt.
USB, berfungsi untuk: memuat program dari komputer ke dalam board arduino,
komunikasi serial antara board arduino dengan komputer, dan memberi daya listrik
kepada board arduino.
Sambungan SV1, sambungan atau jumper untuk memilih sumber daya board arduino,
apakah dari sumber eksternal atau menggunakan USB. Sambungan ini tidak diperlukan
lagi pada board arduino versi terakhir karena pemilihan sumber daya eksternal atau
USB dilakukan secara otomatis.
Q1 Kristal (quartz crystal oscillator), jika mikrokontroler dianggap sebagai otak,
maka kristal adalah jantungnya karena komponen ini menghasilkan detak-detak yang
dikirim kepada mikrokontroler agar melakukan sebuah operasi untuk setiap detaknya.
Kristal ini dipilih yang berdetak 16 juta kali per detik (16 MHz).
Tombol Reset S1, untuk mereset board arduino sehingga program akan mulai dari awal.
Perhatikan bahwa tombol reset ini bukan untuk menghapus program atau
mengosongkan mikrokontroler.
PELATIHAN MIKROKONTROLER ARDUINO
Page 4
MIKROKONTROLER ATMEGA 328
2016
In Circuit Serial Programming (ICSP), port ICSP memungkinkan pengguna untuk
memprogram mikrokontroler secara langsung, tanpa melalui bootloader. Umumnya
pengguna arduino tidak melakukan ini sehingga ICSP tidak terlalu dipakai walaupun
disediakan.
IC1 Mikrokontroler Atmega 328, komponen utama dari board arduino, di dalamnya
terdapat CPU, ROM dan RAM.
X1 Sumber Daya Eksternal. Jika dikehendaki disuplai dengan sumber daya eksternal,
board arduino dapat diberikan tegangan DC antara 9 12 volt.
6 pin input analog (0 5), pin ini sangat berguna untuk membaca tegangan yang
dihasilkan oleh sensor analog, seperti sensor suhu. Program adapat membaca nilai
sebuah pin input antara 0 1023, dimana hal itu mewakili nilai tegangan 0 5 volt.
Tanpa melakukan konfigurasi apapun, begitu sebuah board arduino dikeluarkan dari
kotak pembungkusnya ia dapat langsung disambungkan ke sebuah komputer melalui kabel
USB. Selain berfungsi sebagai penghubung untuk pertukaran data, kabel USB ini juga akan
mengalirkan arus DC 5 volt kepada board arduino sehingga praktis tidak diperlukan sumber
daya dari luar. Saat mendapat suplai daya, lampu LED indikator daya pada board arduino
akan menyala menandakan bahwa ia siap bekerja.
PELATIHAN MIKROKONTROLER ARDUINO
Page 5
MIKROKONTROLER ATMEGA 328
2016
Pada board arduino uno terdapat sebuah LED kecil yang terhubung ke pin no 13. LED
ini dapat digunakan sebagai output saat seoarang pengguna membuat sebuah program dan ia
membutuhkan sebuah penanda dari jalannya program tersebut. Ini adalah cara praktis saat
pengguna melakukan uji coba. Umumnya mikrokontroler pada board arduino telah memuat
sebuah program kecil yang akan menyalakan tersebut berkedip-kedip dalam jeda satu detik.
PELATIHAN MIKROKONTROLER ARDUINO
Page 6
MIKROKONTROLER ATMEGA 328
2016
Jadi sangat mudah untuk menguji apakah sebuah board arduino baru dalam kondisi baik atau
tidak, cukup sambungkan board itu dengan sebuah komputer dan perhatikan apakah LED
indikator daya menyala konstan dan LED dengan pin 13 itu menyala berkedip-kedip.
Blinking LED
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the Uno and
Leonardo, it is attached to digital pin 13. If you're unsure what
pin the on-board LED is connected to on your Arduino model, check
the documentation at [Link]
This example code is in the public domain.
modified 8 Des 2015
by Sutono, [Link].
*/
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, 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
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 7
MIKROKONTROLER ATMEGA 328
2016
Struktur, setiap program arduino (biasa disebut sketch) mempunyai dua buah fungsi
yang harus ada, yaitu:
Void setup() { ... } , semua kode didalam kurung kurawal akan dijalankan hanya satu
kali ketika program arduino dijalankan untuk pertama kalinya.
Void loop() { ... } , fungsi ini dijalankan setelah setup (fungsi void setup) selesai.
Setelah dijalankan satu kali fungsi ini akan dijalankan kembali, dan lagi secara terus
menerus samapi catu daya (power) dilepaskan.
Syntax, berikut ini adalah elemen bahasa c yang dibutuhkan untuk format penulisan :
// (komentar satu baris), kadang diperlukan untuk memberi catatan pada diri sendiri apa
arti dari kode-kode yang dituliskan. Cukup menuliskan dua buah garis miring dan
apapun yang kita ketikan dibelakangnya akan diabaikan oleh program.
/* (komentar banyak baris), jika Anda mempunyai banyak catatan, maka hal tersebut
dapat dituliskan pada beberapa baris sebagai komentar. Semua hal yang terletak di
anatara dua simbol tersebut akan diabaikan oleh program.
{ ... } atau kurung kurawal, digunakan untuk mendefinisikan kapan blok program mulai
dan berakhir (digunakan juga pada fungsi dan pengulangan).
; (titik koma), setiap barus 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 didefinikan sebagai instruksi untuk
memindahkan angka dengan cara yang cerdas. Variabel inilah yang digunakan untuk
memudahkannya.
Int (integer), digunakan untuk menyimpan angka dalam 2 byte (16 bit). Tidak
mempunyai angka desimal dan menyimpan nilai dari -23.768 s/d 32.767.
Long, digunakan ketika integer tidak mencukupi lagi. Memakai 4 byte (32 bit) dari
memori RAM dan mempunyai rentang nilai dari -2.147.648 s/d [Link].
Boolean, variabel sederhana yang digunakan untuk menyimpan nilai TRUE (benar)
atau FALSE (salah). Sangat berguna karena hanya menggunakan 1 bit dari RAM.
Float, digunakan untuk angka desimal (floating point). Memakai 4 byte (32 bit) dari
RAM dan mempunyai rentang nilai dari -3,4028235E+38 s/d 3,4028235E+38.
Char (character), menyimpan 1 karakter menggunakan kode ASCII (misalnya A =
65). Hanya memakai 1 byte (8 bit) dari RAM.
Operator Matematika, operator yang digunakan untuk memanipulasi angka (bekerja
seperti matematika yang sederhana).
= (sama dengan), membuat sesuatu menjadi sama dengan nilai yang lain (misalnya: x =
10 * 2, x = 20).
% (persen), menghasilkan sisa dari hasil pembagian suatu angka yang lain (misalnya :
12 % 10, ini akan menghasilkan ngka 2).
+ (plus), merupakan operasi penjumlahan.
- (minus), operasi pengurangan.
* (asteris), operasi perkalian.
/ (garis miring), operasi pembagian.
PELATIHAN MIKROKONTROLER ARDUINO
Page 8
MIKROKONTROLER ATMEGA 328
2016
Operator Pembanding, digunakan untuk mebandingkan nilai logika.
== (sama dengan), misalnya: 12 == 10 adalah FALSE (salah) atau 12 == 12 adalah
TRUE (benar).
!= (tidak sama dengan), misalnya: 12 != 10 adalah TRUE (benar) atau 12 != 12 adalah
FALSE (salah).
< (lebih kecil dari), misalnya: 12 < 10 adalah FALSE (salah) atau 12 < 12 adalah
FALSE (salah) atau 12 < 14 adalah TRUE (benar).
> (lebih besar dari), misalnya: 12 > 10 adalah TRUE (benar) atau 12 > 12 adalah
FALSE (salah) atau 12 > 14 adalah FALSE (salah).
Struktur Pengaturan, program sangat tergantung pada pengaturan apa yang akan
dijalankan berikutnya. Berikut ini adalah elemen dasar pengaturan.
If ... else, dengan format seperti berikut ini:
If(kondisi) { ... }
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.
For, dengan format penulisan sebagai berikut:
For(int i = 0; i < #pengulangan; i++) { ... }
Digunakan bila Anda ingin melakukan pengulangan kode program di dalam kurung
kurawal beberapa kali, ganti #pengulangan dengan jumlah pengulangan yang
diinginkan. Melakukan perhitungan ke atas (++) atau ke bawah (--).
Digital
pinMode(pin, mode), digunakan untuk menetapkan mode dari suatu pin, pin adalah
nomor pin yang akan digunakan sebagai port dari 0 s/d 19 (pin analog 0 s/d 5 adalah 14
s/d 19). Mode yang bisa digunakan adalah INPUT atau OUTPUT.
digitalWrite(pin, value), ketika sebuah pin ditetapkan sebagai OUTPUT, pin tersebut
dapat dijadikan HIGH (+5 volt) atau LOW (ground).
digitalRead(pin), ketika sebuah pin ditetapkan sebagai INPUT, maka Anda dapat
menggunakan kode ini untuk mendapatkan nilai pin tersebut apakah HIGH (+5 volt)
atau LOW (ground).
Analog, arduino adalah mesin digital tetapi mempunyai kemampuan untuk beroperasi
di dalam analog.
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 ~ 0 volt)
dan 255 (100% duty cycle ~ 5 volt).
analogRead(pin), ketika pin analog ditetapkan sebagai INPUT Anda dapat membaca
keluaran voltase-nya. Keluarannya berupa angka antara 0 (untuk 0 volt) dan 1024
(untuk 5 volt).
PELATIHAN MIKROKONTROLER ARDUINO
Page 9
2016
MIKROKONTROLER ATMEGA 328
MODUL III
PROTEUS
Proteus merupakan salah satu aplikasi simulasi dalam mendesain perangkat
elektronik, baik yang Non Programmable maupun yang Programmable. Dalam simulasi
arduino dibutuhkan Library Arduino, yang dapat di unduh secara gratis. Kelebihan dari
simulasi proteus dan arduino ini adalah dalam hal hasil simulasi yang mendekati hasil
sebenarnya, sehingga software ini cocok digunakan dalam perancangan Mikrokontroler
sebelum dicoba ke dalam Trainer Board Mikrokontroler. Dalam mendesain aplikasi
Mikrokontroler menggunakan Proteus, kita harus mendesain rangkaian secara detail apa yang
akan dibuat. Untuk simulasi Mikrokontroler Arduino ini, kita tidak perlu membuat rangkaian
minimum Arduino, Library Arduino yang telah kita unduh telah menyertakan Board Arduino
secara utuh seperti aslinya.
RESET
R1
10K
C1
10uF
RESET
RESET
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PB5/SCK
PB4/MISO
~PB3/MOSI/OC2A
~ PB2/SS/OC1B
~ PB1/OC1A
PB0/ICP1/CLKO
DIGITAL (~PWM)
A0
A1
A2
A3
A4
A5
ANALOG IN
GND
A0
A1
A2
A3
A4
A5
AREF
1121
ATMEGA328P-PU
[Link]
VCC
PD7/AIN1
~ PD6/AIN0
PD5/T1
~
PD4/T0/XCK
~ PD3/INT1
PD2/INT0
TX PD1/TXD
RX PD0/RXD
AREF
13
12
11
10
9
8
7
6
5
4
3
2
1
0
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Yang perlu diperhatikan dalam mendesain rangkaian Mikrokontroler Arduino adalah :
Supply, VCC dan Ground (GND) untuk semua sumber seperti gambar diatas.
Reset, sebagai media interrupt reset ketika terjadi hang atau kesalahan program,
sehingga perlu di reset ke alamat awal dari program (program dijalankan ulang seperti
proses startup).
Pin, 6 pin analog dan 14 pin digital untuk Port yang akan digunakan sesuai dengan
kebutuhan sistem.
PELATIHAN MIKROKONTROLER ARDUINO
Page 10
MIKROKONTROLER ATMEGA 328
2016
Langkah-langkah membuat simulasi proteus:
Buka Program Proteus 7 Profesional.
Buat skema rangkaian berikut
PELATIHAN MIKROKONTROLER ARDUINO
Page 11
MIKROKONTROLER ATMEGA 328
2016
Buat program Running LED dengan software Arduino IDE :
void setup() {
pinMode(0,OUTPUT); //LED 1
pinMode(1,OUTPUT); //LED 2
pinMode(2,OUTPUT); //LED 3
pinMode(3,OUTPUT); //LED 4
}
void loop() {
digitalWrite(0,HIGH);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
delay(1000);
digitalWrite(0,LOW);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
digitalWrite(3,LOW);
delay(1000);
digitalWrite(0,LOW);
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
digitalWrite(3,LOW);
delay(1000);
digitalWrite(0,LOW);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
PELATIHAN MIKROKONTROLER ARDUINO
Page 12
MIKROKONTROLER ATMEGA 328
2016
digitalWrite(3,HIGH);
delay(1000);
}
Simpan programnya kemudian klik Verify. Pastikan tidak ada error. Perhatikan baris di
bagian bawah muncul keterangan lokasi program yang sudah di compile. Silahkan di
blok kemudian copy (Ctrl + C).
Kembali ke Proteus. Kita masukkan programnya ke Arduino, cukup klik 2x sehingga
muncul dialog box Edit Komponen. Pada bagian Program File, Paste (Ctrl + V) maka
akan tertulis lokasi program Arduino yang sudah dibuat sebelumnya.
PELATIHAN MIKROKONTROLER ARDUINO
Page 13
MIKROKONTROLER ATMEGA 328
2016
Silahkan dicoba. Klik Play dan amati hasilnya, LED akan menyala secara bergantian
bergantian.
PELATIHAN MIKROKONTROLER ARDUINO
Page 14
MIKROKONTROLER ATMEGA 328
PELATIHAN MIKROKONTROLER ARDUINO
2016
Page 15
2016
MIKROKONTROLER ATMEGA 328
MODUL IV
CHIP PENDUKUNG
Tentunya Anda sudah menyadari ketergantungan Arduino terhadap jumlah pin yang
tersedia untuk berinteraksi dengan perangkat lain. Setiap perangkat yang kita hubungkan
akan menggunakan paling sedikit satu buah pin. Karena jumlah pin terbatas, seringkali kita
kehabisan pin saat kita harus menghubungkan cukup banyak perangkat.
Terdapat beberapa cara untuk menambahkan pin ke arduino. Salah satunya adalah
dengan menggunakan chip tambahan seperti 74HC5959 dan MAX7219.
Tentu saja ada keterbatasan dalam penambahan pin output menggunakan chip
tambahan ini, keterbatasan utama adalah pin output tambahan ini hanyalah pin digital, yang
hanya bisa mengeluarkan nilai digital (LOW/HIGH). Jadi jangan berharap bisa menggunakan
PWM.
74HC595
IC 74HC595 merupakan jenis shift register yang memiliki 3 input, dan 8 output.
Dengan kemampuan dan fungsi dari shift register ini maka IC 74HC595 banyak
dimanfaatkan dalam aplikasi Running LED, dan tampilan berbasis 7 segment maupun Dot
Matrix.
PELATIHAN MIKROKONTROLER ARDUINO
Page 16
MIKROKONTROLER ATMEGA 328
2016
Cara menghubungkan chip 74HC595 ke sistem Arduino :
Hubungkan pin VCC (pin 16) ke sumber tegangan +5V.
Hubungan pin GND (pin 8) ke ground.
ubungan pin (pin 13) ke ground bila chip 4 C5 5 yang bersangkutan untuk selalu
aktif/terpilih setiap saat, atau hubungan ke pin digital Arduino untuk mengaktifkan chip
yang bersangkutan hanya pada saat-saat tertentu, dan tidak aktif di saat lain.
Hubungan pin (pin 1 ) ke sumber tegangan 5V bila Anda tidak butuh fitur master
reset, atau ke salah satu pin digital Arduino bila Anda butuh fitur master reset. Bila
Anda gunakan pilihan terakhir, selalu set nilai pin Arduino yang bersangkutan ke
HIGH, kecuali saat Anda ingin seluruh pin output 74HC595 di reset jadi 0.
Hubungan pin DS (pin 14) ke pin digital Arduino yang akan menyediakan data nilainilai yang harus dikeluarkan oleh pin Q0 Q7.
Hubungkan pin SH_CP (pin 11) ke pin digital Arduino yang akan menyediakan sinyal
clock.
Hubungkan pin ST_CP (pin 12) ke pin Arduino yang akan mengatur pembukaan latch
register untuk memindahkan data serial yang sudah lengkap diberikan ke pin-pin
output.
Pin Q0 hingga Q7 akan menjadi pin tambahan bagi sistem Arduino. Jadi hubungkan
pin-pin ini ke perangkat yang Anda ingin kontrol. Perlakukan pin-pin ini lazimnya pin
PELATIHAN MIKROKONTROLER ARDUINO
Page 17
MIKROKONTROLER ATMEGA 328
2016
digital biasa. Tentu saja kita tidak bisa langsung menggunakan fungsi digitalWrite()
bawaan Arduino.
ubungkan pin ke pin S chip 4 C5 5 lain jika Anda ingin menambahkan lebih
banyak lagi pin output tambahan.
Jadi pada kondisi paling minimal (tidak menggunakan pin MR dan OE), dengan
74HC595 kita dapat menambahkan 8 pin digital dengan hanya mengkonsumsi 3 buah pin
Arduino. Dan tidak sampai disini saja, Anda dapat menambahkan pin digital sebanyakbanyaknya dengan tetap hanya mengkonsumsi 3 pin digital yang sama, dengan
menghubungkan beberapa chip 74HC595 secara berantai dengan menghubungkan pin DS
chip 74HC595 yang satu dengan 74HC595 berikutnya.
MAX7219
MAX7219 merupakan IC shift register yang dikeluarkan oleh Maxim yang mampu
mengontrol hinggga 8 digit 7 segment atau 1 buah dot matrix 8X8 hanya dengan
menggunakan 3 pin digital output dari Arduino.
PELATIHAN MIKROKONTROLER ARDUINO
Page 18
MIKROKONTROLER ATMEGA 328
PELATIHAN MIKROKONTROLER ARDUINO
2016
Page 19
2016
MIKROKONTROLER ATMEGA 328
PIN
1
NAME
DIN
1, 3, 58,10, 11
DIG.0DIG.7
4, 9
12
GND
LOAD
(MAX7219)
(MAX7221)
13
CLK
14 17,
20 23
SEG A SEG G,
DP
18
ISET
19
24
V+
DOUT
FUNCTION
Serial-Data Input is loaded into the internal 16-bit shift
register on CLKs rising edge.
Eight-Digit Drive Lines that sink current from the display
common cathode. The MAX7219 pulls the digit outputs to
V+ when turned off. The MAX 21 s digit drivers are
high-impedance when turned off.
Ground (both GND pins must be connected).
Load-Data Input. The last 16 bits of serial data are latched
on LOA s rising edge.
Chip-Select Input. Serial data is loaded into the shift
register while is low. The last 16 bits of serial data are
latched on s rising edge.
Serial-Clock Input. 1 M z maximum rate. On CLKs
rising edge, data is shifted into the internal shift register. On
CLKs failling edge data is clocked out of OUT. On the
MAX7221, the CLK input is active only while is low.
Seven Segment Drive and Decimal Point Drive that source
current tio the display. On the MAX7219, when a segment
driver is turned off it is pulled to GND. The MAX7221
segment drivers are high-impedance when turned off.
Connect to VDD through a resistor (RSET) to set the peak
segment current (Refer to Selecting RSET Resistor section)
Positive Supply Voltage. Connect to +5V.
Serial-Data Output. The data inyo DIN is valid at DOUT
16,5 clock cycles later. This pin is used to daisy-chain
several MAX7219/MAX7221 and is never high-impedance.
Cara menghubungkan chip MAX7219 ke sistem Arduino :
Hubungkan pin VCC (pin 19) ke sumber tegangan +5V.
Hubungan pin GND (pin 4 dan pin 9) ke ground.
Hubungan pin DIN (pin 1) ke pin digital Arduino yang akan menyediakan data nilainilai yang harus dikeluarkan oleh pin-pin output (pin DIG 0 DIG 7 dan pin SEG A
SEG G), yang merupakan array atau alamat baris dan kolom (8X8).
Hubungkan pin CLK (pin 13) ke pin digital Arduino yang akan menyediakan sinyal
clock.
Hubungkan pin LOAD (pin 12) ke pin Arduino yang akan mengatur dan untuk
memindahkan data serial yang sudah lengkap diberikan ke pin-pin output.
Hubungkan pin DOUT (pin 24, IC MAX7219 pertama) ke pin DIN (pin 1, IC
MAX7219 kedua dan seterusnya), bila ingin menggunakan IC Max7219 lebih dari satu
buah.
Jadi pada kondisi paling maksimal kita dapat menambahkan 64 pin digital dengan
hanya mengkonsumsi 3 buah pin Arduino. Dan tidak sampai disini saja, Anda dapat
menambahkan pin digital sebanyak-banyaknya dengan tetap hanya mengkonsumsi 3 pin
digital yang sama, dengan menghubungkan beberapa chip MAX7219 secara berantai dengan
menghubungkan pin DOUT chip MAX7219 yang satu dengan MAX7219 berikutnya.
PELATIHAN MIKROKONTROLER ARDUINO
Page 20
MIKROKONTROLER ATMEGA 328
2016
MODUL V
PRAKTEK MIKROKONTROLER ARDUINO
Setelah mempelajari bahasa pemrograman Arduino, tiba saatnya menguji rangkaian
yang telah dibuat sebelumnya mulai dari yang mudah dan sederhana terlebih dahulu, jangan
terburu-buru. Dalam praktek akan ditemukan berbagai kondisi yang tidak menyenangkan
karena berbeda dengan teori. Coba periksa kembali segala kemungkinan kesalahan baik
secara hardware maupun secara software.
Hardware :
Periksa tegangan VCC dan Gnd pada tiap-tiap komponen yang terhubung dengan catu
daya.
Periksa hubungan (koneksi) antar komponen, jangan ada yang konsleting.
Pelajari datasheet komponen dan periksa kembali multitester terutama periksa tegangan
pada pin-pin chip mikrokontroler sesuai dengan kondisi program.
Software :
Periksa kembali alur program yang telah dibuat.
Uji per bagian program yang dianggap trouble dengan membuat program khusus
tersendiri untuk menguji bagian tersebut.
Cocokan dengan datasheet chip mikrokontroler yang digunakan.
Peralatan yang dibutuhkan :
Arduino UNO.
PELATIHAN MIKROKONTROLER ARDUINO
Page 21
MIKROKONTROLER ATMEGA 328
2016
Arduino Uno adalah board mikrokontroler berbasis ATMega328. Memiliki 14 pin
Input/Output Digital dimana 6 pin tersebut digunakan sebagai Output PWM, 5 pin
Input/Output Analog dimana 2 pin tersebut digunakan sebagai SCL dan SDA, Osilator
Kristal 16MHz, Koneksi USB, Jack Power, ICSP Header, dan Tombol Reset. Untuk
mendukung mikrokontroler agar dapat digunakan, cukup hanya menghubungkan board
Arduino Uno ke komputer dengan menggunakan kabel USB, power supply atau baterai
untuk menjalankannya.
Arduino Uno berbeda dengan semua board sebelumnya dalam hal koneksi USB to
serial yaitu menggunakan fitur ATMega8U2 yang diprogram sebagai konverter USB to
serial berbeda dengan board sebelumnya yang menggunakan chip FTDI driver USB to
serial.
Nama Uno berarti satu dalam bahasa Italia, untuk menandai peluncuran Arduino 1.0.
Uno dan versi 1.0 akan menjadi versi referensi dari Arduino. Uno adalah yang terbaru
dalam serangkaian board USB Arduino, dan sebagai model referensi untuk platform
Arduino, untuk perbandingan dengan versi sebelumnya.
Catu Daya:
Arduino Uno dapat diaktifkan melalui koneksi USB atau dengan catu daya eksternal.
Kisaran kebutuhan daya yang disarankan untuk board Arduino Uno adalah +7VDC
sampai dengan +12VDC, jika diberi daya kurang dari +7VDC kemungkinan pin +5V
Arduino Uno dapat beroperasi tetapi tidak stabil kemudian jika diberi daya lebih dari
+12VDC, regulator tegangan bisa panas dan dapat merusak board Arduino Uno.
VIN
5V
3V3
GN
: Tegangan input kepada board Arduino ketika menggunakan sumber daya
eksternal (sebagai pengganti dari +5V koneksi USB atau sumber daya
lainnya).
: Catu daya digunakan untuk daya mikrokontroler dan komponen lainnya.
: Sebuah pasokan +3,3V dihasilkan oleh regulator on-board.
: Pin ground
Memori:
ATMega328 memiliki 32KB (0,5KB digunakan untuk bootloader), 2KB untuk SRAM
dan 1KB untuk EEPROM (yang dapat dibaca dan ditulis dengan EEPROM library).
Input/Output:
Masing-masing dari 14 pin digital di Uno dapat digunakan sebagai input dan output,
dengan menggunakan fungsi pinMode(), digitalWire(), dan digitalRead(), beroperasi
dengan daya +5V. Setiap pin dapat memberikan atau menerima maksimum 40mA dan
memiliki internal pull-up resistor (secara default terputus) dari 20 5 k. Selain itu,
beberapa pin memiliki fungsi khusus:
PELATIHAN MIKROKONTROLER ARDUINO
Page 22
2016
MIKROKONTROLER ATMEGA 328
Serial
Interrupt eksternal
PWM
SPI
LED
Analog
Aref
Reset
: Pin 0 (RX) dan pin 1 (TX), digunakan untuk menerima (RX)
dan mengirimkan (RX) TTL data serial. Pin ini dihbungkan
ke pin yang berkaitan dengan chip serial ATMega8U2 USB
to TTL.
: Pin 2 dan pin 3 ini dapat dikonfigurasikan untuk memicu
interrupt pada nilai yang rendah, dengan batasan tepi naik
atau turun, atau perubahan nilai.
: Pin 3, 5, 6, 9, 10, dan 11 menyediakan output PWM 8 bit
dengan fungsi analogWrite().
: Pin 10 (SS), pin 11 (MOSI), pin 12 (MISO), pin 13 (SCK)
mendukung komunikasi SPI menggunakan SPI Library.
: Built in LED terhubung ke pin 13, ketika pin ini bernilai
HIGH, LED akan ON dan ketika pin ini bernilai LOW,
LED akan OFF.
: Arduino Uno memiliki 6 pin Analog (A0 A5) yang
masing-masing menyediakan 10 bit dengan resolusi 1024
nilai yang bebeda (0 -1023). Selain itu beberapa pin
memiliki fungsi khusus (I2C) : pin A4 (SDA) dan pin A5
(SCL). Dukungan I2C (TWI) komunikasi menggunakan
library
Wire.
: Tegangan referensi (0 5V) untuk input analog.
Digunakan dengan fungsi analogReference().
: Nilai LOW untuk mereset mikrokontroler Arduino Uno.
Komunikasi:
Arduino Uno memiliki sejumlah fasilitas untuk berkomunikasi dengan komputer,
Arduino lain, atau mikrokontroler lainnya. ATMega328 menyediakan UART TTL
(+5V) untuk komuniksi serial, yang tersedia di pin digital 0 (RX) dan pin (TX). Sebuah
ATMega8U2 sebagai saluran komunikasi serial melalui USB dan sebagai port virtual
com untuk perangkat lunak pada komputer. Firmware ATMega8U2 menggunakan
driver USB standar COM, dan tidak ada driver eksternal yang diperlukan. Namun, pada
windows diperlukan, sebuah file INF. Perangkat lunak Arduino terdapat monitor serial
yang memungkinkan digunakan memonitor data tekstual sederhana yang akan dikirim
ke atau dari board Arduino. LED RX dan TX di board Arduino akan berkedip ketika
data sedang dikirim melalui chip USB to serial dengan koneksi USB ke komputer
(tetapi tidak untuk komunikasi serial pada pin 0 dan pin 1).
Sebuah software serial library memungkinkan untuk berkomunikasi secara serial pada
salah satu pin. ATMega328 juga mendukung I2C (TWI) dan komunikasi SPI.
Pemrograman:
Arduino Uno dapat diprogram dengan menggunakan software Arduino.
Board
Serial Port
Programmer
: Arduino Uno
: COM5
: AVRISP mkII
PELATIHAN MIKROKONTROLER ARDUINO
Page 23
MIKROKONTROLER ATMEGA 328
PELATIHAN MIKROKONTROLER ARDUINO
2016
Page 24
MIKROKONTROLER ATMEGA 328
PELATIHAN MIKROKONTROLER ARDUINO
2016
Page 25
MIKROKONTROLER ATMEGA 328
2016
Alat Peraga:
Keterangan:
Proto Board :
LED
Push Button :
Seven
Segment
Untuk merakit rangkaian mikrokontroler.
Dibutuhkan beberapa kabel jumper untuk menghubungkan
beberapa komponen yang diletakkan di atas Proto Board.
Komponen dioda yang dapat memancarkan cahaya.
Kaki Anoda lebih panjang dari kaki Katoda.
Dioda LED akan ON jika Anoda HIGH dan Katoda LOW.
Saklar Normally OFF.
Ada yang 2 kaki dan ada juga yang 4 kaki.
Ketika tidak ditekan / terbuka saklar dalam kondisi OFF.
Komponen display yang terdiri dari 7 segmen LED yang
membentuk angka 8, ditambah 1 LED untuk titik (dot).
Ada yang single dan ada juga yang double, Common Katode
(CK), dan Common Andoda (CA).
7 Segmen akan ON jika CK LOW dan Anoda Segmen HIGH.
7 Segmen akan ON jika CA HIGH dan Anoda Segmen LOW.
PELATIHAN MIKROKONTROLER ARDUINO
Page 26
2016
MIKROKONTROLER ATMEGA 328
Keypad
Motor DC
kecil
LM35
LCD 16X2
Komponen yang tersusun dari beberapa push button yang
membentuk matrik (baris x kolom).
Scanning pembacaan pin baris / kolom dengan mengendalikan
Output pin baris / kolom secara bergantian.
Motor arus searah dengan daya kecil (dinamo mobil-mobilan),
+5V/20mA atau lebih kecil.
Tidak ada polaritas beri LOW dan HIGH kedua input motor,
penempatan LOW dan HIGH berpengaruh pada arah putar
motor, kecepatan motor tergantung pada supply tegangan yang
diberikan.
Merupakan komponen aktif yang difungsikan untuk mengukur
tempatur disekitarnya.
Perubahan tegangan 10mV/1oC. Output LM35 akan
mengeluarkan tegangan sebesar VO = Suhu sekitar (Celcius) x
10mV. Misalkan suhu sekitar sensor LM35 sebesar 25OC,
maka besarnya VO = 25 x 10mV = 250mV.
Alat display yang dibuat pabrik yang sudah standar yang dapat
menampilkan karakter dua baris, dengan setiap baris terdiri dari
16 karakter.
Karena LCD sudah dilengkapi perangkat pengontrol tersendiri
yang menyatu dengan LCD, maka kita tinggal mengikuti aturan
standar yang telah ditetapkan.
Pin
1
2
3
4
Symbol
VSS
VCC
VEE
RS
I/O
I
5
6
7
8
9
10
11
12
13
14
R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
I
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
I/O
Description
Ground.
+5V power supply.
Power supply to control contrast.
RS=0 to select command register, RS=1 to select data
register.
R/W=0 for write, R/W=1 for read.
Enable.
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
The 8 bit data bus
PELATIHAN MIKROKONTROLER ARDUINO
Page 27
MIKROKONTROLER ATMEGA 328
2016
Sketch
Running LED
int pinData = 7;
int pinLatch = 8;
int pinClock = 9;
void setup()
{
pinMode(pinData, OUTPUT);
pinMode(pinLatch, OUTPUT);
pinMode(pinClock, OUTPUT);
}
void loop()
{
digitalWrite(pinData, HIGH);
for(int i=0; i<24; i++)
{
digitalWrite(pinLatch, HIGH);
delay(100);
digitalWrite(pinLatch, LOW);
delay(100);
digitalWrite(pinClock, HIGH);
delay(100);
digitalWrite(pinClock, LOW);
delay(100);
digitalWrite(pinData, LOW);
}
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 28
MIKROKONTROLER ATMEGA 328
2016
Traffig Light
const int LED[]={2,3,4,5,6,7,8,9,10,11,12,13};
const int H1=0; const int K1=1; const int M1=2;
const int H2=3; const int K2=4; const int M2=5;
const int H3=6; const int K3=7; const int M3=8;
const int H4=9; const int K4=10; const int M4=11;
void setup()
{
for(int i=0; i<12; i++)
{
pinMode(LED[i], OUTPUT);
}
for(int i=0;i<12;i++)
{
digitalWrite(LED[i],HIGH);
}
}
void loop()
{
//Lampu H1,M2,M3,M4 = ON
//Lampu K1,M1,H2,K2,H3,K3,H4,K4 = OFF
digitalWrite(LED[H1],LOW);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],HIGH);
digitalWrite(LED[H2],HIGH);
PELATIHAN MIKROKONTROLER ARDUINO
Page 29
MIKROKONTROLER ATMEGA 328
2016
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(3000);
//Lampu K1,M2,M3,M4 = ON
//Lampu H1,M1,H2,K2,H3,K3,H4,K4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],LOW);
digitalWrite(LED[M1],HIGH);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(500);
//Lampu M1,H2,M3,M4 = ON
//Lampu H1,K1,K2,M2,H3,K3,H4,K4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],LOW);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],HIGH);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(3000);
//Lampu M1,K2,M3,M4 = ON
//Lampu H1,K1,H2,M2,H3,K3,H4,K4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],LOW);
digitalWrite(LED[M2],HIGH);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
PELATIHAN MIKROKONTROLER ARDUINO
Page 30
MIKROKONTROLER ATMEGA 328
2016
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(500);
//Lampu M1,M2,H3,M4 = ON
//Lampu H1,K1,H2,K2,K3,M3,H4,K4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],LOW);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],HIGH);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(3000);
//Lampu M1,M2,K3,M4 = ON
//Lampu H1,K1,H2,K2,H3,M3,H4,K4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],LOW);
digitalWrite(LED[M3],HIGH);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],HIGH);
digitalWrite(LED[M4],LOW);
delay(500);
//Lampu M1,M2,M3,H4 = ON
//Lampu H1,K1,H2,K2,H3,K3,K4,M4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],LOW);
digitalWrite(LED[K4],HIGH);
PELATIHAN MIKROKONTROLER ARDUINO
Page 31
MIKROKONTROLER ATMEGA 328
2016
digitalWrite(LED[M4],HIGH);
delay(3000);
//Lampu M1,M2,M3,K4 = ON
//Lampu H1,K1,H2,K2,H3,K3,H4,M4 = OFF
digitalWrite(LED[H1],HIGH);
digitalWrite(LED[K1],HIGH);
digitalWrite(LED[M1],LOW);
digitalWrite(LED[H2],HIGH);
digitalWrite(LED[K2],HIGH);
digitalWrite(LED[M2],LOW);
digitalWrite(LED[H3],HIGH);
digitalWrite(LED[K3],HIGH);
digitalWrite(LED[M3],LOW);
digitalWrite(LED[H4],HIGH);
digitalWrite(LED[K4],LOW);
digitalWrite(LED[M4],HIGH);
delay(500);
}
Keypad
#include <Keypad.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
PELATIHAN MIKROKONTROLER ARDUINO
Page 32
MIKROKONTROLER ATMEGA 328
2016
{'*','0','#'}
};
byte rowPins[ROWS] = {7, 6, 1, 0}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {10, 9, 8}; //connect to the column pinouts of the keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
// [Link](9600);
[Link](16, 2);
[Link](0, 0);
[Link]("Anda Menekan");
[Link](0, 1);
[Link]("Tombol : ");
}
void loop()
{
char key = [Link]();
if (key){
// [Link](key);
[Link](9, 1);
[Link](key);
}
}
LCD 16x2
#include <LiquidCrystal.h>
PELATIHAN MIKROKONTROLER ARDUINO
Page 33
MIKROKONTROLER ATMEGA 328
2016
String kata1 = "Belajar Arduino";
String kata2 = "U N I K O M ...!";
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
[Link](16, 2);
[Link](0,0);
[Link](kata1);
delay(100);
[Link](0,1);
[Link](kata2);
delay(100);
}
void loop()
{
for(int i = 0; i < 15; i++)
{
[Link]();
delay(100);
}
for(int i = 0; i < 15; i++)
{
[Link]();
delay(100);
}
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 34
MIKROKONTROLER ATMEGA 328
2016
DOT Matrix 8x8
#include <Sprite.h> // Sprite before Matrix
#include <Matrix.h>
//
DIN,CLK,LOAD,#chips
Matrix myLeds = Matrix(2, 4, 3, 5);
Sprite letter_U = Sprite(6, 8,
B110010,
B110010,
B110010,
B110010,
B110010,
B110010,
B110010,
B011100
);
Sprite letter_N = Sprite(6, 8,
B110010,
B110010,
B111010,
B110110,
B110010,
B110010,
B110010,
B110010
);
Sprite letter_I = Sprite(7, 8,
B1111110,
PELATIHAN MIKROKONTROLER ARDUINO
Page 35
MIKROKONTROLER ATMEGA 328
2016
B0011000,
B0011000,
B0011000,
B0011000,
B0011000,
B0011000,
B1111110
);
Sprite letter_K = Sprite(8, 8,
B11000100,
B11001000,
B11010000,
B11100000,
B11100000,
B11010000,
B11001000,
B11000100
);
Sprite letter_O = Sprite(6, 8,
B011100,
B110010,
B110010,
B110010,
B110010,
B110010,
B110010,
B011100
);
Sprite letter_M = Sprite(7, 8,
B1100010,
B1110110,
B1101010,
B1100010,
B1100010,
B1100010,
B1100010,
B1100010
);
void setup() {
[Link]();
[Link](4);
delay(500);
}
void loop() {
for(int i=40;i>-40;i--) {
[Link](i,0,letter_U);
PELATIHAN MIKROKONTROLER ARDUINO
Page 36
MIKROKONTROLER ATMEGA 328
2016
[Link](i+6,0,letter_N);
[Link](i+12,0,letter_I);
[Link](i+19,0,letter_K);
[Link](i+26,0,letter_O);
[Link](i+32,0,letter_M);
delay(100);
}
}
Termometer Digital
#include <LiquidCrystal.h>
long A; int B;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup(){
[Link](16,2);
[Link]("THERMO METER");
pinMode(A5,INPUT); }
void loop() {
A=analogRead(A0);
B=map(A,0,1023,0,500);
[Link](0,0);
[Link]("TEMPERATURE: ");
[Link](0,1);
[Link](B);
[Link]("'C ");
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 37
MIKROKONTROLER ATMEGA 328
2016
Jam Digital
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <LedControl.h>
const int TMenit=5;
const int TJam=6;
int jam,jam1,jam2,menit,menit1,menit2,detik,detik1,detik2;
char minus;
LedControl lc=LedControl(2,4,3,1);
void setup()
{
pinMode(TMenit, INPUT);
pinMode(TJam, INPUT);
[Link](0,false);
[Link](0,10);
[Link](0);
}
void loop()
{
tmElements_t tm;
[Link](tm);
jam=[Link];
menit=[Link];
detik=[Link];
PELATIHAN MIKROKONTROLER ARDUINO
Page 38
MIKROKONTROLER ATMEGA 328
2016
if(digitalRead(TMenit)==LOW)
{
menit=menit+1;
if(menit>59)
{
menit=0;
}
[Link]=jam;
[Link]=menit;
[Link]=detik;
[Link](tm);
}
delay(50);
if(digitalRead(TJam)==LOW)
{
jam=jam+1;
if(jam>23)
{
jam=0;
}
[Link]=jam;
[Link]=menit;
[Link]=detik;
[Link](tm);
}
delay(50);
jam2=jam/10;
jam1=jam-(jam2*10);
menit2=menit/10;
menit1=menit-(menit2*10);
detik2=detik/10;
detik1=detik-(detik2*10);
minus='-';
[Link](0,7,jam2,false);
[Link](0,6,jam1,false);
[Link](0,5,minus,false);
[Link](0,4,menit2,false);
[Link](0,3,menit1,false);
[Link](0,2,minus,false);
[Link](0,1,detik2,false);
[Link](0,0,detik1,false);
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 39
MIKROKONTROLER ATMEGA 328
2016
Parking Lot
/*[Link]
[Link] 08 JUL 2012
Code used in the production of the Youtube material.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
#define ServoM 12
//Connected to the servo motor.
#define Bright 11
//servo library disable PWM on pins 9 and 10.
#define Exit
9
//Pin connected to the EXIT button.
#define In
8
//Pin connected to the IN button.
#define BarLow 177
//Low position of the barrier.
#define BarUp 95
//Up position of the barrier.
#define CAPACITY 9
//Capacity of the parking lot.
#define INTEN 80
//Display intensity %
//Pins conections to segments (cathodes).
#define segA 0
#define segB 1
#define segC 2
#define segD 3
#define segE 4
#define segF 5
#define segG 6
//Array with the segments to represent the decimal numbers (0-9).
byte segments[10] = {
PELATIHAN MIKROKONTROLER ARDUINO
Page 40
2016
MIKROKONTROLER ATMEGA 328
// pgfedcba <--- segments
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 setup(){
[Link](ServoM);
// attaches the servo.
pinMode(Exit, INPUT);
// set "EXIT" button pin to input
pinMode(In, INPUT);
// set "IN" button pin to input
digitalWrite(Exit, HIGH);
// Connect Pull-Up resistor.
digitalWrite(In, HIGH);
// Connect Pull-Up resistor.
pinMode(segA,OUTPUT);
pinMode(segB,OUTPUT);
pinMode(segC,OUTPUT);
pinMode(segD,OUTPUT);
pinMode(segE,OUTPUT);
pinMode(segF,OUTPUT);
pinMode(segG,OUTPUT);
pinMode(Bright,OUTPUT);
analogWrite(Bright,255*INTEN/100);
[Link](BarLow);
//Barrier in the low position
// delay(1000);
}
int Available= 9;
// Number of places available.
//=============================================================
===
void loop(){
Display(Available);
if(digitalRead(In)==0)
{
if(Available != 0){
Available--;
[Link](BarUp);
delay(1000);
[Link](BarLow);
}
}
if(digitalRead(Exit)==0)
{
PELATIHAN MIKROKONTROLER ARDUINO
Page 41
MIKROKONTROLER ATMEGA 328
2016
if(Available != CAPACITY){
Available++;
[Link](BarUp);
delay(1000);
[Link](BarLow);
}
}
}
/*------------------------------------------------------------------Put the segments according to the number.
--------------------------------------------------------------------*/
void Display(int number){
byte segs = ~segments[number];
//"~" is used for commom anode.
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) );
}
Line Follower
#define lmotorf 9
#define lmotorb 8
#define rmotorf 10
#define rmotorb 11
//HIGH white
PELATIHAN MIKROKONTROLER ARDUINO
Page 42
MIKROKONTROLER ATMEGA 328
2016
//LOW black
void setup() {
pinMode(lmotorf,OUTPUT);
pinMode(rmotorf,OUTPUT);
pinMode(lmotorb,OUTPUT);
pinMode(rmotorb,OUTPUT);
pinMode(6,INPUT);
pinMode(7,INPUT);
}
void loop() {
// dynamic line follower code
// if the sensor is on white it returns LOW value to the Arduino
// if it is on black it returns a HIGH value to the Arduino
int lsensor=digitalRead(6);
int rsensor=digitalRead(7);
if((lsensor==HIGH)&&(rsensor==HIGH))
{
//both sensors on white
// go forward
digitalWrite(lmotorf,HIGH);
digitalWrite(rmotorf,HIGH);
digitalWrite(lmotorb,LOW);
digitalWrite(rmotorb,LOW);
}
else if((lsensor==HIGH)&& (rsensor==LOW))
{
//right sensor on black line
// turn right
digitalWrite(lmotorf,HIGH);
digitalWrite(rmotorf,LOW);
digitalWrite(lmotorb,LOW);
digitalWrite(rmotorb,HIGH);
}
else if((lsensor==LOW)&&(rsensor==HIGH))
{
//left sensor on black line
// turn left
digitalWrite(lmotorf,LOW);
digitalWrite(rmotorf,HIGH);
digitalWrite(lmotorb,HIGH);
digitalWrite(rmotorb,LOW);
}
else
{
digitalWrite(lmotorf,LOW);
digitalWrite(rmotorf,LOW);
digitalWrite(lmotorb,LOW);
digitalWrite(rmotorb,LOW);
PELATIHAN MIKROKONTROLER ARDUINO
Page 43
MIKROKONTROLER ATMEGA 328
2016
}
}
Robot Android + Bluetooth
Kode Perintah:
70 : (Maju)
66 : (Mundur)
76 : (Kiri)
82 : (Kanan)
49 : (Maju ke kiri)
50 : (Maju ke kanan)
51 : (Mundur ke kiri)
52 : (Mundur ke kanan)
Sketch:
/*
Pelatihan Robotika
Pusat Pelatihan Mikrokontroler Arduino "PUSLIMIK"
Judul Program : Robot Tank
Penulis
: Sutono, [Link].
Tgl
: 8 Juli 2015
Driver Motor : TB6612FNG
*/
#define Siaga 12
/*
Pin Digital Arduino (Pin 12),
digunakan untuk posisi startup driver motor Robot Tank Shield
Siaga = HIGH, posisi aktif (siap diberi perintah)
Siaga = LOW, posisi non aktif (tidak dapat merespon perintah
atau menjalankan motor baik maju ataupun mundur)
*/
#define PWM_Kiri 11
/*
Pin Digital Arduino (Pin ~11 atau PWM),
digunakan untuk mengatur kecepatan motor kiri
Nilai PWM berkisar 0 s/d 255, 255 berarti putaran motor kiri
mencapai putaran maksimum
PELATIHAN MIKROKONTROLER ARDUINO
Page 44
MIKROKONTROLER ATMEGA 328
2016
*/
#define PWM_Kanan 10
/*
Pin Digital Arduino (Pin ~10 atau PWM),
digunakan untuk mengatur kecepatan motor kanan
Nilai PWM berkisar 0 s/d 255, 255 berarti putaran motor kanan
mencapai putaran maksimum
*/
#define Mundur_Kiri 8
/*
Pin Digital Arduino (Pin 8)
digunakan untuk menggerakan motor kiri berputar searah
dengan putaran jarum jam
Nilai HIGH, berarti motor berputar searah dengan putaran
jarum jam
dengan kecepatan putaran motor kiri
tergantung dari nilai PWM kiri
*/
#define Maju_Kiri 7
/*
Pin Digital Arduino (Pin 7)
digunakan untuk menggerakan motor kiri berputar berlawanan arah
dengan putaran jarum jam
Nilai HIGH, berarti motor berputar berlawanan arah
dengan putaran jarum jam
dengan kecepatan putaran motor kiri
tergantung dari nilai PWM kiri
*/
#define Mundur_Kanan 3
/*
Pin Digital Arduino (Pin 3)
digunakan untuk menggerakan motor kiri berputar berlawanan arah
dengan putaran jarum jam
Nilai HIGH, berarti motor berputar berlawanan arah
dengan putaran jarum jam
dengan kecepatan putaran motor kanan
tergantung dari nilai PWM kanan
*/
#define Maju_Kanan 2
/*
Pin Digital Arduino (Pin 2)
digunakan untuk menggerakan motor kiri berputar searah
dengan putaran jarum jam
Nilai HIGH, berarti motor berputar searah
dengan putaran jarum jam
PELATIHAN MIKROKONTROLER ARDUINO
Page 45
MIKROKONTROLER ATMEGA 328
2016
dengan kecepatan putaran motor kanan
tergantung dari nilai PWM kanan
*/
unsigned char kode;
/*
merupakan variabel yng digunakan untuk membaca nilai/perintah
dari bluetooth yang dikirimkan via smartphone
*/
void setup()
/*
fasilitas ini digunakan untuk melakukan inisialisasi awal
seperti menentukan pin mana yang digunakan sebagai input
maupun output, dan lain-lain
*/
{
Inisialisasi();
// menjalankan Prosedur Inisialisasi
}
void loop()
{
if([Link]())
{
/*
mengecek apakah ada perintah dari smartphone
via bluetooth atau tidak
*/
kode = [Link]();
/*
Nilai kode = nilai perintah yang dikirimkan oleh
smartphone via bluetooth
*/
delay(200);
/*
menudah waktu selama 200ms, tujuannya adalah
agar semua printah yang dikirimkan via smartphone
dapat direspon dengan baik melalui bluetoorh
}
if(kode == 70)
{
// mengecek nilai kode apakah sama dengan 70 (arah maju)
Arah_Maju();
// mengerakkan Robot Tank bergerah maju
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
PELATIHAN MIKROKONTROLER ARDUINO
Page 46
MIKROKONTROLER ATMEGA 328
2016
menghentikan robot tank setelah bergerak maju
selama 100ms
*/
}
if(kode == 76)
{
// mengecek nilai kode apakah sama dengan 76 (arah belok kiri)
Arah_Belok_Kiri();
// mengerakkan Robot Tank bergerah ke arah belok kiri
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak kearah
belok kiri selama 100ms
*/
}
if(kode == 82)
{
// mengecek nilai kode apakah sama dengan 82 (arah belok kanan)
Arah_Belok_Kanan();
// mengerakkan Robot Tank bergerah ke arah belok kanan
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak kearah
belok kanan selama 100ms
*/
}
if(kode == 66)
{
// mengecek nilai kode apakah sama dengan 66 (arah mundur)
Arah_Mundur();
// mengerakkan Robot Tank bergerah ke mundur
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak mundur
selama 100ms
*/
}
if(kode == 49)
{
// mengecek nilai kode apakah sama dengan 49 (arah serong ke kiri)
PELATIHAN MIKROKONTROLER ARDUINO
Page 47
MIKROKONTROLER ATMEGA 328
2016
Arah_Serong_Kiri();
// mengerakkan Robot Tank bergerah ke arah serong ke kiri
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak ke arah serong ke kiri
selama 100ms
*/
}
if(kode == 50)
{
// mengecek nilai kode apakah sama dengan 50 (arah serong ke kanan)
Arah_Serong_Kanan();
// mengerakkan Robot Tank bergerah ke arah serong ke kanan
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak ke arah serong ke kanan
selama 100ms
*/
}
if(kode == 51)
{
// mengecek nilai kode apakah sama dengan 51 (arah mundur ke kiri)
Arah_Mundur_Kiri();
// mengerakkan Robot Tank bergerah ke arah mundur ke kiri
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak ke arah mundur ke kiri
selama 100ms
*/
}
if(kode == 52)
{
// mengecek nilai kode apakah sama dengan 52 (arah mundur ke kanan)
Arah_Mundur_Kanan();
// mengerakkan Robot Tank bergerah ke arah mundur ke kanan
delay(100);
// menunda waktu selama 100ms
Arah_Berhenti();
/*
menghentikan robot tank setelah bergerak ke arah mundur ke kanan
selama 100ms
PELATIHAN MIKROKONTROLER ARDUINO
Page 48
MIKROKONTROLER ATMEGA 328
2016
*/
}
if(kode == 75)
{
// mengecek nilai kode apakah sama dengan 75 (berhenti)
Arah_Berhenti();
/*
menghentikan gerakan robot setelah menerima perintah dari
smartphone via bluetooth
*/
}
}
void Arah_Maju()
{
// Prosedur Arah_Maju
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, HIGH);
digitalWrite(Mundur_Kiri, LOW);
digitalWrite(Maju_Kanan, HIGH);
digitalWrite(Mundur_Kanan, LOW);
}
void Arah_Belok_Kiri()
{
// Prosedure Arah Belok_Kiri
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, LOW);
digitalWrite(Mundur_Kiri, HIGH);
digitalWrite(Maju_Kanan, HIGH);
digitalWrite(Mundur_Kanan, LOW);
}
void Arah_Belok_Kanan()
{
// Prosedur Arah_Belok_Kanan
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, HIGH);
digitalWrite(Mundur_Kiri, LOW);
digitalWrite(Maju_Kanan, LOW);
digitalWrite(Mundur_Kanan, HIGH);
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 49
MIKROKONTROLER ATMEGA 328
2016
void Arah_Mundur()
{
// Prosedur Arah_Mundur
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, LOW);
digitalWrite(Mundur_Kiri, HIGH);
digitalWrite(Maju_Kanan, LOW);
digitalWrite(Mundur_Kanan, HIGH);
}
void Arah_Serong_Kiri()
{
// Prosedur Arah_Serong_Kiri
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 200);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, HIGH);
digitalWrite(Mundur_Kiri, LOW);
digitalWrite(Maju_Kanan, HIGH);
digitalWrite(Mundur_Kanan, LOW);
}
void Arah_Serong_Kanan()
{
// Prosedur Arah_Serong_Kanan
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 200);
digitalWrite(Maju_Kiri, HIGH);
digitalWrite(Mundur_Kiri, LOW);
digitalWrite(Maju_Kanan, HIGH);
digitalWrite(Mundur_Kanan, LOW);
}
void Arah_Mundur_Kiri()
{
// Prosedur Arah_Mundur_Kiri
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 200);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, LOW);
digitalWrite(Mundur_Kiri, HIGH);
digitalWrite(Maju_Kanan, LOW);
digitalWrite(Mundur_Kanan, HIGH);
}
void Arah_Mundur_Kanan()
{
PELATIHAN MIKROKONTROLER ARDUINO
Page 50
MIKROKONTROLER ATMEGA 328
2016
// Prosedur Arah_Maju_Kanan
digitalWrite(Siaga, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 200);
digitalWrite(Maju_Kiri, LOW);
digitalWrite(Mundur_Kiri, HIGH);
digitalWrite(Maju_Kanan, LOW);
digitalWrite(Mundur_Kanan, HIGH);
}
void Arah_Berhenti()
{
// Prosedur Arah_Berhenti
digitalWrite(Siaga, LOW);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
digitalWrite(Maju_Kiri, LOW);
digitalWrite(Mundur_Kiri, LOW);
digitalWrite(Maju_Kanan, LOW);
digitalWrite(Mundur_Kanan, LOW);
}
void Inisialisasi()
{
// Prosedur Inisialisasi
pinMode(Siaga, OUTPUT);
pinMode(PWM_Kiri, OUTPUT);
pinMode(PWM_Kanan, OUTPUT);
pinMode(Mundur_Kiri, OUTPUT);
pinMode(Maju_Kiri, OUTPUT);
pinMode(Mundur_Kanan, OUTPUT);
pinMode(Maju_Kanan, OUTPUT);
digitalWrite(Siaga, LOW);
digitalWrite(Maju_Kiri, HIGH);
digitalWrite(Maju_Kiri, HIGH);
analogWrite(PWM_Kiri, 255);
analogWrite(PWM_Kanan, 255);
[Link](9600);
/*
Mengaktifkan komunikasi via serial
yang digunakan oleh bluetooth dengan baudrate 9600
*/
delay(250);
/*
menunda waktu selama 250ms,
digunakan untuk memberikan kesempatan kepada
mikrokontroler arduino untuk membaca seluruh perintah
PELATIHAN MIKROKONTROLER ARDUINO
Page 51
MIKROKONTROLER ATMEGA 328
2016
yang dikirimkan via smartphone melalui bluetooth via serial
port pin 0 dan pin 1 (RX - TX) atau (D0 dan D1)
*/
}
PELATIHAN MIKROKONTROLER ARDUINO
Page 52