Anda di halaman 1dari 117

BAB I : TEORI MIKROKONTROLER ARDUINO UNO

Tujuan :
1. Mahasiswa mampu memahami board mikrokontroler Arduino
2. Mahasiswa mampu memprogram mikrokontroler Arduino
3. Mahasiswa mampu membuat aplikasi dengan mikrokontroler Arduino

Teori Dasar
Arduino Uno R3 dengan ATmega328P mempunyai 14 digital input/output (6 di antaranya dapat
digunakan untuk PWM output), 6 analog input, 16 Mhz crystal oscillator, USB connection, power jack,
ICSP header, dan reset button. Skema Arduino Uno R3 didasarkan pada blog diagram dari mikrokontroler
jenis AVR ATmega328. Komponen utama di dalam papan Arduino adalah sebuah mikrokontroler 8 bit
dengan merek ATmega yang dibuat oleh perusahaan Atmel Corporation. Skema Arduino Uno R3 dapat
dilihat pada gambar 1.1. dibawah ini.

Gambar 1.1. Skema Arduino Uno R3

Untuk memahami Arduino, terlebih dahulu kita harus memahami terlebih dahulu apa yang
dimaksud dengan physical computing. Physical computing adalah membuat sebuah sistem atau
perangkat fisik dengan menggunakan software dan hardware yang sifatnya interaktif yaitu dapat

MIKROKONTROLER 1
menerima rangsangan dari lingkungan dan merespon balik. Physical computing adalah sebuah konsep
untuk memahami hubungan yang manusiawi antara lingkungan yang sifat alaminya adalah analog
dengan dunia digital. Pada prakteknya konsep ini diaplikasikan dalam desaindesain alat atau projek-
projek yang menggunakan sensor dan microcontroller untuk menerjemahkan input analog ke dalam
sistem software untuk mengontrol gerakan alat-alat elektro-mekanik seperti lampu, motor dan
sebagainya.
Pembuatan prototype atau prototyping adalah kegiatan yang sangat penting di dalam proses
physical computing karena pada tahap inilah seorang perancang melakukan eksperimen dan uji coba
dari berbagai jenis komponen, ukuran, parameter, program komputer dan sebagainya berulang-ulang
kali sampai diperoleh kombinasi yang paling tepat. Dalam hal ini perhitungan angka-angka dan rumus
yang akurat bukanlah satu-satunya faktor yang menjadi kunci sukses di dalam mendesain sebuah alat
karena ada banyak faktor eksternal yang turut berperan, sehingga proses mencoba dan
menemukan/mengoreksi kesalahan perlu melibatkan hal-hal yang sifatnya non-eksakta. Prototyping
adalah gabungan antara akurasi perhitungan dan seni.
Proses prototyping bisa menjadi sebuah kegiatan yang menyenangkan atau menyebalkan, itu
tergantung bagaimana kita melakukannya. Misalnya jika untuk mengganti sebuah komponen, merubah
ukurannya atau merombak kerja sebuah prototype dibutuhkan usaha yang besar dan waktu yang lama,
mungkin prototyping akan sangat melelahkan karena pekerjaan ini dapat dilakukan berulang-ulang
sampai puluhan kali bayangkan betapa frustasinya perancang yang harus melakukan itu. Idealnya
sebuah prototype adalah sebuah sistem yang fleksibel dimana perancang bisa dengan mudah dan cepat
melakukan perubahan-perubahan dan mencobanya lagi sehingga tenaga dan waktu tidak menjadi
kendala berarti. Dengan demikian harus ada sebuah alat pengembangan yang membuat proses
prototyping menjadi mudah.
Pada masa lalu (dan masih terjadi hingga hari ini) bekerja dengan hardware berarti membuat
rangkaian menggunakan berbagai komponen elektronik seperti resistor, kapasitor, transistor dan
sebagainya. Setiap komponen disambungkan secara fisik dengan kabel atau jalur tembaga yang disebut
dengan istilah hard wired sehingga untuk merubah rangkaian maka sambungansambungan itu harus
diputuskan dan disambung kembali. Dengan hadirnya teknologi digital dan microprocessor fungsi yang
sebelumnya dilakukan dengan hired wired digantikan dengan program-program software. Ini adalah
sebuah revolusi di dalam proses prototyping. Software lebih mudah diubah dibandingkan hardware,
dengan beberapa penekanan tombol kita dapat merubah logika alat secara radikal dan mencoba versi
ke-dua, ke-tiga dan seterusnya dengan cepat tanpa harus mengubah pengkabelan dari rangkaian.
Arduino dikatakan sebagai sebuah platform dari physical computing yang bersifat open source.
Pertama-tama perlu dipahami bahwa kata platform di sini adalah sebuah pilihan kata yang tepat.
Arduino tidak hanya sekedar sebuah alat pengembangan, tetapi ia adalah kombinasi dari hardware,
bahasa pemrograman dan Integrated Development Environment (IDE) yang canggih. IDE adalah
sebuah software yang sangat berperan untuk menulis program, meng-compile menjadi kode biner dan
meng- upload ke dalam memory microcontroller. Ada banyak projek dan alat-alat
dikembangkan oleh
MIKROKONTROLER 2
akademisi dan profesional dengan menggunakan Arduino, selain itu juga ada banyak modul-modul
pendukung (sensor, tampilan, penggerak dan sebagainya) yang dibuat oleh pihak lain untuk bisa
disambungkan dengan Arduino. Arduino berevolusi menjadi sebuah platform karena ia menjadi pilihan
dan acuan bagi banyak praktisi. Salah satu yang membuat Arduino memikat hati banyak orang adalah
karena sifatnya yang open source, baik untuk hardware maupun software-nya. Diagram rangkaian
elektronik Arduino digratiskan kepada semua orang. Anda bisa bebas men-download gambarnya,
membeli komponen-komponennya, membuat PCB-nya dan merangkainya sendiri tanpa harus
membayar kepada para pembuat Arduino. Sama halnya dengan IDE Arduino yang bisa di-download dan
diinstal pada komputer secara gratis. Kita patut berterima kasih kepada tim Arduino yang sangat
dermawan membagi-bagikan kemewahan hasil kerja keras mereka kepada semua orang. Kita betul-betul
kagum dengan desain hardware, bahasa pemrograman dan IDE Arduino yang berkualitas tinggi dan
sangat berkelas. Arduino dikembangkan oleh sebuah tim yang beranggotakan orang-orang dari berbagai
belahan dunia. Anggota inti dari tim ini adalah:

Massimo Banzi Milano, Italy


David Cuartielles Malmoe, Sweden
Tom Igoe New York, US
Gianluca Martino Torino, Italy
David A. Mellis Boston, MA, USA

Profil mengenai anggota tim tersebut dan kontribusinya bisa diakses pada situs web
http://www.arduino.cc/playground/Main/People.
Saat ini komunitas Arduino berkembang dengan pesat dan dinamis di berbagai belahan dunia.
Bermacam-macam kegiatan yang berkaitan dengan projek-projek Arduino bermunculan dimanamana,
termasuk di Indonesia. Yang membuat Arduino dengan cepat diterima oleh orang-orang adalah karena:
Harganya akan lebih murah dibandingkan dengan modul yang lain, mudah pengoperasiannya, library
cukup banyak diinternet karena bersifat open source, dan koneksi dengan devais yang lain cukup mudah.
Dibawah ini adalah modul Arduino Uno R3.

Gambar 1.2. Modul Arduino Tampak Depan dan Belakang

Secara umum Arduino terdiri dari dua bagian, yaitu:

MIKROKONTROLER 3
1. Hardware _ papan input/output (I/O)
2. Software _ Software Arduino meliputi IDE untuk menulis program, driver untuk koneksi dengan
komputer, contoh program dan library untuk pengembangan program.
Selanjutnya kita akan mengenal masing-masing bagian ini lebih jauh.

1. Hardware
Komponen utama di dalam papan Arduino adalah sebuah microcontroller 8 bit dengan merk ATmega
yang dibuat oleh perusahaan Atmel Corporation. Berbagai papan Arduino menggunakan tipe ATmega
yang berbeda-beda tergantung dari spesifikasinya, sebagai contoh Arduino Uno menggunakan
ATmega328 sedangkan Arduino Mega 2560 yang lebih canggih menggunakan ATmega2560.
Untuk memberikan gambaran mengenai apa saja yang terdapat di dalam sebuah microcontroller, pada
gambar berikut ini diperlihatkan contoh diagram blok sederhana dari microcontroller ATmega328
(dipakai pada Arduino Uno).

Gambar 1.3. Arsitektur Arduino Uno R3

Spesifikasi Arduino Uno R3


Microcontroller ATmega328
Operating Voltage 5V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-20V
Digital I/O Pins 14 (of which 6 provide PWM output)
Analog Input Pins 6
DC Current per I/O Pin 40 mA
DC Current for 3.3V Pin 50 mA

MIKROKONTROLER 4
Flash Memory 32 KB (ATmega328) of which 0.5 KB used by bootloader
SRAM 2 KB (ATmega328)
EEPROM 1 KB (ATmega328)
Clock Speed 16 MHz
Length 68.6 mm
Width 53.4 mm
Weight 25 g

Blok-blok di atas dijelaskan sebagai berikut:


Universal Asynchronous Receiver/Transmitter (UART) adalah antar muka yang digunakan untuk
komunikasi serial seperti pada RS-232, RS-422 dan RS-485.
2KB RAM pada memory kerja bersifat volatile (hilang saat daya dimatikan), digunakan oleh
variable-variabel di dalam program.
32KB RAM flash memory bersifat non-volatile, digunakan untuk menyimpan program yang
dimuat dari komputer. Selain program, flash memory juga menyimpan bootloader.
Bootloader adalah program inisiasi yang ukurannya kecil, dijalankan oleh CPU saat daya
dihidupkan. Setelah bootloader selesai dijalankan, berikutnya program di dalam RAM akan
dieksekusi.
1KB EEPROM bersifat non-volatile, digunakan untuk menyimpan data yang tidak boleh hilang
saat daya dimatikan. Tidak digunakan pada papan Arduino.
Central Processing Unit (CPU), bagian dari microcontroller untuk menjalankan setiap instruksi
dari program.
Port input/output, pin-pin untuk menerima data (input) digital atau analog, dan mengeluarkan
data (output) digital atau analog.

Setelah mengenal bagian-bagian utama dari microcontroller ATmega sebagai komponen utama,
selanjutnya kita akan mengenal bagian-bagian dari papan Arduino itu sendiri.

MIKROKONTROLER 5
Gambar 1.4. Bagian-bagian Utama Arduino

14 pin input/output 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 output-nya dapat
diatur. Nilai sebuah pin output analog dapat diprogram antara 0 255, dimana hal itu mewakili nilai
tegangan 0 5V.

USB
Berfungsi untuk:
Memuat program dari komputer ke dalam papan
Komunikasi serial antara papan dan komputer
Memberi daya listrik kepada papan

Sambungan SV1
Sambungan atau jumper untuk memilih sumber daya papan, apakah dari sumber eksternal atau
menggunakan USB. Sambungan ini tidak diperlukan lagi pada papan Arduino versi terakhir karena
pemilihan sumber daya eksternal atau USB dilakukan secara otomatis.

Q1 Kristal (quartz crystal oscillator)


Jika microcontroller dianggap sebagai sebuah otak, maka kristal adalah jantung-nya karena komponen
ini menghasilkan detak-detak yang dikirim kepada microcontroller agar melakukan sebuah operasi
untuk setiap detak-nya. Kristal ini dipilih yang berdetak 16 juta kali per detik (16MHz).

Tombol Reset S1
Untuk me-reset papan sehingga program akan mulai lagi dari awal. Perhatikan bahwa tombol reset ini
bukan untuk menghapus program atau mengosongkan microcontroller.

In-Circuit Serial Programming (ICSP)


Port ICSP memungkinkan pengguna untuk memprogram microcontroller secara langsung, tanpa melalui
bootloader. Umumnya pengguna Arduino tidak melakukan ini sehingga ICSP tidak terlalu dipakai
walaupun disediakan.

IC 1 Microcontroller Atmega
Komponen utama dari papan Arduino, di dalamnya terdapat CPU, ROM dan RAM.

MIKROKONTROLER 6
X1 sumber daya eksternal
Jika hendak disuplai dengan sumber daya eksternal, papan Arduino dapat diberikan tegangan DC
antara 9-12V.

6 pin input analog (0-5)


Pin ini sangat berguna untuk membaca tegangan yang dihasilkan oleh sensor analog, seperti sensor suhu.
Program dapat membaca nilai sebuah pin input antara 0 1023, dimana hal itu mewakili nilai tegangan
0 5V.

2. Software
Sekalipun sebuah papan Arduino dapat bekerja dengan mendapat asupan daya dari sebuah
komputer, namun hal itu tidak berarti ia dapat berkomunikasi dengan komputer tersebut. Untuk
memastikan Arduino telah terpasang dengan benar dan dapat berkomuniasi dengan interaktif maka ia
perlu diuji.
a. Jalankan IDE Arduino dengan menjalankan sebuah file bernama arduino.exe pada lokasi
software Arduino.

Walaupun tampak seperti program Windows pada umumnya, namun sebetulnya program ini
adalah sebuah program Java. Jika Anda menemukan sebuah pesan kesalahan kemungkinan besar
pada komputer belum terinstal Java Runtime Environment (JRE) atau Java Development Kit (JDK).
Untuk mendapatkan salah satu software tersebut, silakan men-download-nya dari situs web
http://www.oracle.com.

b. Jalankan menu Tools Board kemudian pilih tipe papan yang sesuai.

MIKROKONTROLER 7
c. Jalankan menu File Examples 1.Basic Blink. Ini adalah program sederhana yang
fungsinya adalah membuat lampu LED menyala berkedip-kedip seperti yang telah dijelaskan
sebelumnya.

/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
d. Pada toolbar klik tombol Upload untuk memuat sketch tersebut ke dalam papan Arduino.

MIKROKONTROLER 8
e. Jika berhasil akan memberikan informasi sebagai berikut

Bahasa Pemrograman Arduino


Bahasapemrograman mikrokontroller Arduino, seperti bahasapemrogramantingkatmenegahpadaumumnya. Arduino
punsamamemilikialuralgoritmayangmiripdanyangbedaadalahcarapenulisansintaknya.

Struktur dasardaribahasapemrogramanarduinoitusederhanahanyaterdiridariduabagian.

void setup()
{
// Statement;
}

void loop()
{
// Statement;
}

Dimana setup( ) bagian untuk inisialisasi yang hanya dijalankan sekali di awal program, sedangkan loop() untuk
mengeksekusibagianprogramyangakandijalankanberulang-ulanguntukselamanya.

setup()
Fungsi setup() hanyadipanggilsatukali ketika programpertama kali di jalankan. Ini digunakanuntukpendefinisianmode
pin atau memulai komunikasi serial. Fungsi setup() harus di ikut sertakan dalam program walaupun tidak ada statement
yangdijalankan.

void setup()

MIKROKONTROLER 9
{
pinMode(13,OUTPUT);// mengset pin 13 sebagai output
}

Loop
Setelah melakukan fungsi setup() maka secara langsung akan melakukan fungsi loop() secara berurutan dan
melakukaninstruksi-instruksi yangadadalamfungsiloop().

void loop()
{
digitalWrite(13, HIGH); // nyalakan pin 13
delay(1000); // pause selama 1 detik
digitalWrite(13, LOW); // matikan pin 13
delay(1000); // pause selama 1 detik
}

Function
Function (fungsi) adalah blok pemrograman yang mempunyai nama dan mempunyai statement yang akan di eksekusi
ketika function dipanggil. Fungsivoidsetup() danvoidloop() telah dibahas diatas danpembuatanfungsiyanglainakandi
bahasselanjutnya.

Carapendeklarasianfunction

type functionName(parameters)
{
// Statement;
}
Contoh:
int delayVal()
{
int v; // membuat variable v bertipe integer
v =analogRead(pot); // baca harga potentiometer
v/=4; // konversi 0-1023 ke 0-255
return v; // return nilai v
}

Padacontohdiatasfungsitersebutmemilikinilaibalikint (integer), karenakalautidakmenghendakiadanyanilaibalikmaka


typefunctionharusvoid.

{ } curly braces
Curly brace mendefinisikan awal dan akhir dari sebuah blok fungsi. Apabila ketika memprogram dan progremer lupa
membericurlybracetutupmakaketikadicompileakanterdapatlaporanerror.

; Semicolon
Semicolonharusdiberikanpadasetiapstatementprogramyangkitabuatinimerupakanpembatassetiapstatementprogram
yangdibuat.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 10


/**/ blok comment
Semua statement yang di tulis dalam block comments tidak akan di eksekusi dan tidak akan di compile sehingga tidak
mempengaruhibesarprogramyangdibuatuntukdimasukandalamboardarduino.

//Line Comments
Samahalnyadenganblockcomments, linecomentspunsamahanyasajayangdijadikankomenadalhperbaris..

Variable
Variable adalah sebuah penyimpan nilai yang dapat di gunakan dalam program.Variable dapat di rubah sesuai dengan
instruksi yangkitabuat.Ketikamendeklarisikanvariableharusdiikutsertakantypevariablesertanilaiawalvariable.

Type variableName = 0;

Contoh
Int inputVariable = 0;//mendefinisikan sebuah variable bernama inputVariable dengan
nilai awal 0
inputVariable = analogRead(2);// menyimpan nilai yang ada di analog pin 2 ke
inputVariable
Variable scope
Sebuahvariabledapatdideklarasikan pada awal program sebelum void setup(), secara local didalamsebuah function, dan
terkadang di dalam sebuah block statement pengulangan. Sebuah variable global hanya satu dan dapat di gunakan pada
semua block function dan statement di dalam program. Variable global di deklarasikan pada awal program sebelum
fungstion setup(). Sebuah variable local dideklarasikan di setiap block function ataudisetiap blockstatementpengulangan
danhanyadapatdigunakanpadablockyangbersangkutansaja.
Contohpenggunaan:

int value; //valueadalah variable global dan dapat di gunakan pada semua block
function
void setup()
{
// no setup needed
}
void loop()
{
for (int i=0; i<20;) // 'i' hanya dapat di gunakan dalam pengulangan saja
{
i++;
}
float f; // 'f' sebagai variable local
}

Tipe Data

Byte
typebytedapatmenyimpan 8-bitnilaiangkabilanganaslitanapakoma. Bytememilikirange 0 255.
Byte biteVariable = 180; // mendeklarasikan biteVariable sebagai type byte

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 11


Integer
Integer adalah tipe data yang utama untuk menyimpan nilai bilangan bulat tanpa koma.Penyimpanan integer sebesar 16-
bitdenganrange 32.767 sampai-32.768.

Int integerVariable = 1600;//mendeklarasikanintegerVariable


sebagai type integer

Long Integer
Perluasan ukuran untuk long integer, penyimpanan long integer sebesar 32-bit dengan range 2.147.483.647 sampai -
2.147.483.648

Long longVariable = 500000; // mendeklarasikan longVariable sebagai type long

Float
Float adalah tipe datayangdapatmenampung nilai decimal, floatmerupakanpenyimpanyanglebihbesardariintegerdan
dapatmenyimpansebesar 32-bitdenganrange 3.4028235E+38 sampai-3.4028235E+38

Float floatVariable = 3.14; // mendeklarasikan floatVariable sebagai type float

Array
Array adalah kumpulan nilai yang dapat di akses dengan index number, nilai yang terdapat dalam array dapat di panggil
dengan cara menuliskan nama array dan index number. Array dengan index 0 merupakan nilai pertama dari array.Array
perludideklarasikandankalauperludiberinilaisebelumdigunakan.

Int arraysName[] = {nilai0, nilai1, nilai2 . . . }

Contohpenggunaanarray:

Int arraySaya[] = {2,4,6,8,10}


x = arraySaya[5]; // x sekarang sama dengan 10

Operator Aritmatika
Operatoraritmatikterdiridaripenjumlahan, pengurangan, pengkalian, danpembagian.

y = y + 3;
x = x - 8;
i = i * 5;
r = r / 9;

dalammenggunakanoperanaritmatikharus hati-hati dalammenentukantipedatayangdigunakanjangansampaiterjadi


overflowrangedata.

Compound Assignments
Compound assignments merupakan kombinasi dari aritmatic dengan sebuah variable.Ini biasanya dipakai pada
pengulangan.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 12


x ++; // sama seperti x = x + 1 atau menaikan nilai x sebesar 1
x --; // sama seperti x = x - 1 atau mengurangi nilai x sebesar 1
x += y; // sama seperti x = x + y
x -= y; // sama seperti x = x y
x *= y; // sama seperti x = x * y
x /= y; // sama seperti x = x / y

Comparison
Statementinimembadingkanduavariabledanapabilaterpenuhiakanbernilai 1 atautrue. Statementinibanyakdigunakan
dalamoperatorbersyarat.

x == y; // x sama dengan y
x != y; // x tidak sama dengan y
x < y; // x leboh kecil dari y
x > y; // x lebih besar dari y
x <= y; // x lebih kecil dari sama dengan y
x >= y; // x lebih besar dari sama dengan y

logic Operator
operator logical digunakan untuk membandingkan 2 expresi dan mengembalikan nilai balik benar atau salah tergantung
darioperatoryangdigunakan. Terdapat 3 operatorlogical AND,OR, dan NOT, yangbiasanyadigunakanpadaifstatement.

Contohpenggunaan:

Logical AND
If ( x> 0 && x < 5) // bernilai benar apabila kedua operator pembanding terpenuhi

Logical OR
If ( x> 0 || y > 0)// bernilai benar apabila salah satu dari operator pembanding
terpenuhi
Logical NOT
If ( !x > 0 )// benilai benar apabila ekspresi operator salah

Konstanta
Arduino mempunyai beberapa variable yang sudah di kenal yang kita sebut konstanta.Ini membuat memprogram lebih
mudahuntukdibaca.Konstantadikelasifikasiberdasarkangroup.

True/False
Merupakankonstanta Booleanyangmendifinisikanlogiclevel.Falsemendifinisikan 0 dan Truemendifinisikan 1.

If ( b == TRUE );
{
//doSomething
}

HIGH/ LOW
Konstantainimendifinisikanaktifitaspin HIGHatau LOWdandigunakanketikamembacadanmenuliskedigitalpin.
HIGHdidefinisikansebagai 1 sedangkan LOWsebagai 0.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 13


digitalWrite( 13, HIGH );

Input/Output
KonstantainidigunakandenganfungsipinMode() untukmendifinisikammodepindigital, sebagaiinputatauoutput

pinMode( 13, OUTPUT );

Flow Control
If
If Operator if menguji sebuah kondisi seperti nilai analog sudah berada di bawah nilai yang kita kehendaki atau belum,
apabila terpenuhi maka akan mengeksekusi baris program yang ada dalam brackets kalau tidak terpenuhi maka akan
mengabaikanbarisprogramyangadadalambrackets.

If ( someVariable ?? value )
{
//DoSomething;
}

IfElse
Operatorifelsemengtestsebuahkondisiapabilatidaksesuaidengankondisiyangpertamamakaakanmengeksekusibaris
programyangadadielse.

If ( inputPin == HIGH )
{
//Laksanakan rencana A;
}
Else
{
//Laksanakan rencana B;
}

For
Operatorfordigunakandalamblokpengulangantertutup.

For ( initialization; condition; expression )


{
//doSomethig;
}

While
Operatorwhileakanterusmengulangbarisperintahyangadadalambracketsampaiekspresisebagaikondisipengulangan
benilai salah.

While ( someVariable ?? value )


{
//doSomething;
}

DoWhile
Sama halnya dengan while() hanya saja pada operator Dowhile tidak melakukan pengecekan pada awal tapi di akhir,
sehinggaotomatisakanmelakukansatukalibarisperintahwalaupunpadaawalnyasudahterpenuhi.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 14


Do
{
//doSomething;
}
While ( someVariable ?? value );

Digital I/O
Input / Output Digital pada breadboard arduino ada 14, pengalamatnya 0 - 13, ada saat tertentu I/O 0 dan 1 tidak bisa di
gunakankarenadipakaiuntukkomunikasiserial, sehinggaharushati-hatidalampengalokasian I/O.

PinMode(pin,Mode)
Digunakan dalam void setup() untuk mengkonfigurasi pin apakah sebagai Input atau Output. Arduino digital pins secara
defaultdikonfigurasisebagaiinputsehinggauntukmerubahnyaharusmenggunakanoperatorpinMode(pin, mode).

pinMode (pin, OUTPUT); // mengset pin sebagai output


digitalWrite(pin, HIGH); // pin sebagai source voltage

digitalRead(pin)
membacanilaidaripinyangkitakehendakidenganhasil HIGHatau LOW.

Value = digitalRead(pin);// mengset value sama dengan pin

digitalWrite(pin, value)
digunakanuntukmengsetpindigital. Pindigitalarduinomempunyai 14 ( 0 13 ).
digitalWrite ( pin, HIGH ); // set pin to HIGH

Analog I/O
Input/ Ouputanalogpadabreadboardarduinoada 6 pengalamatnya 0 5

analogRead(pin)
Membaca nilai pin analog yang memiliki resolusi 10-bit. Fungsi ini hanya dapat bekerja pada analog pin (0-5). Hasil dari
pembacaanberupanilaiintegerdenganrange 0 sampai 1023.

Value = analogRead(pin); // mengset value sama dengan nilai analog pin

analogWrite(pin,value)
mengirimkannilaianalogpadapinanalog.

analogWrite(pin, value); // menulis ke pin analog

Time
delay(ms)
Menghentikanprogramuntuksesaatsesuaidenganyangdikehendaki, satuanyadalammillisecond.

Delay(1000);// menunggu selama satu detik

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 15


millis()
Mengembalikannilaidalammilliseconddihitungsejakarduinoboardmenyala. Penapungnyaharuslonginteger.

Value = millis();// set value equal to millis()


Math

Min(x,y)
Membadingkan 2 variabledanakanmengembalikannilaiyangpalingkecil.
value = min(value, 100);// set value sebagai nilai yang paling kecil dari kedua
nilai
max(x,y)
Maxmerupakankebalikandarimin.
value = max(value, 100);//set value sebagai nilai yang paling besar dari kedua nilai

Serial.begin(rate)
Statementinidigunakanuntukmengaktifkankomunikasiserialdanmengsetbaudrate.

void setup()
{
Serial.begin(9600);//open serial port and set baudrate 9600 bps
}

Serial.prinln(data)
Mengirimkandatakeserialport

Serial.println(100); // mengirimkan 100

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 16


BAB II : PERCOBAAN LED

TUJUAN:
1. Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.
2. Mahasiswa dapat memahami program Arduino untuk menghidupkan dan mematikan LED.
3. Mahasiswa memahami struktur program Arduino, void setup dan void loop.
4. Mahasiswa memahami beberapa instruksi Arduino dasar pinMode dan digitalWrite.
5. Mahasiswa memahami pembuatan instruksi waktu tunda, delay.

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
LED (Light Emitting Dioda) adalah dioda yang dapat memancarkan cahaya pada saat mendapat arus bias
maju (forward bias). LED (Light Emitting Dioda) dapat memancarkan cahaya karena menggunakan
dopping galium, arsenic dan phosporus. Jenis doping yang berbeda diata dapat menhasilkan cahaya
dengan warna yang berbeda. LED (Light Emitting Dioda) merupakann salah satu jenis dioda, sehingga
hanya akan mengalirkan arus listrik satu arah saja. LED akan memancarkan cahaya apabil diberikan
tegangan listrik dengan konfigurasi forward bias. Berbeda dengan dioda pada umumnya, kemampuan
mengalirkan arus pada LED (Light Emitting Dioda) cukup rendah yaitu maksimal 20 mA. Apabila LED
(Light Emitting Dioda) dialiri arus lebih besar dari 20 mA maka LED akan rusak, sehingga pada
rangkaian LED dipasang sebuah resistor sebgai pembatas arus. Simbol dan bentuk fisik dari LED (Light
Emitting Dioda) dapat dilihat pada gambar berikut. Simbol Dan Bentuk Fisik LED.

Gambar 2.1. Simbol LED

Dari gambar diatas dapat kita ketahui bahwa LED memiliki kaki 2 buah seperti dengan dioda yaitu kaki
anoda dan kaki katoda. Pada gambar diatas kaki anoda memiliki ciri fisik lebih panjang dari kaki katoda
pada saat masih baru, kemudian kaki katoda pada LED (Light Emitting Dioda) ditandai dengan bagian
body LED yang di papas rata. Kaki anoda dan kaki katoda pada LED (Light Emitting Dioda) disimbolkan

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 17


seperti pada gambar diatas. Pemasangan LED (Light Emitting Dioda) agar dapat menyala adalah dengan
memberikan tegangan bias maju yaitu dengan memberikan tegangan positif ke kaki anoda dan tegangan
negatif ke kaki katoda. Konsep pembatas arus pada dioda adalah dengan memasangkan resistor secara
seri pada salah satu kaki LED (Light Emitting Dioda). Rangkaian dasar untuk menyalakan LED (Light
Emitting Dioda) membutuhkan sumber tegangan LED dan resistor sebgai pembatas arus seperti pada
rangkaian berikut.

Rangkaian Dasar Menyalakan LED (Light Emitting Dioda)

Gambar 2.2. Rangkaian Dasar LED

Besarnya arus maksimum pada LED (Light Emitting Dioda) adalah 20 mA, sehingga nilai resistor harus
ditentukan. Dimana besarnya nilai resistor berbanding lurus dengan besarnya tegangan sumber yang
digunakan. Secara matematis besarnya nilai resistor pembatas arus LED (Light Emitting Dioda) dapat
ditentukan menggunakan persamaan berikut.

Dimana :
R = resistor pembatas arus (Ohm)
Vs = tegangan sumber yang digunakan untuk mensupply tegangan ke LED (volt)
2 volt = tegangan LED (volt)
0,02 A = arus maksimal LED (20 mA)

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 18


Gambar 2.3. Rangkaian Modul LED

Percobaan 1.

Percobaan led berkdip dan led berjalan (running led) yang dihubungkan pada Input/0utput board
Arduino diperlihatkan pada gambar 4 dan gambar 5. Led akan menyala bila dikirimkan data HIGH (1)
pada pin 10, karena anoda dari led mendapatkan level tegangan mendekati 5V sedangkan katodanya
dihubungkan ke ground (0V).

Gambar 2.4. Rangkaian Percobaan LED Blink

Tuliskan program dibawah ini :


//LED BERKEDIP
intledPin = 10;

void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(1000);
digitalWrite(ledPin, LOW);
delay(1000);
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 19


Percobaan 2.
Untuk aplikasi menggeser LED diperlukan beberapa LED untuk dihubungkan dengan pin
mikrokontroler. Rangkaian menggunakan common Katoda, sehingga untuk menyalakan LED
membutuhkan nilai logika 1, sedangkan kalo ingin mematikan diberika nilai logika sebsar 0. Rangkailah
rangkaian LED 4 bit seperti dibawah ini untuk mengaplikasikan LED bergeser dari kiri ke kanan atau
dari kanan ke kiri.

Gambar 2.5. Rangkaian 4 Bit LED

Berikut ini program untuk LED Bergeser


//Running LED
int ledPin1 = 10;
int ledPin2 = 11;
int ledPin3= 12;
int ledPin4 = 13;

void setup() {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
pinMode(ledPin4, OUTPUT);
}
void loop() {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2 LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);
delay(1000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, LOW);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 20


delay(1000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
digitalWrite(ledPin4, LOW);
delay(1000);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
digitalWrite(ledPin4, HIGH);
delay(1000);
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 21


BAB III : PERCOBAAN PUSH BUTTON

TUJUAN:
1 Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar.
2. Mahasiswa dapat memahami program Arduino untuk mengambil data saklar dan mengeluarkan data
ke LED.
3. Mahasiswa memahami beberapa instruksi Arduino dasar, digitalRead, if, dan for.

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR

Anda mungkin akrab dengan switch, salah satu jenis saklar yang Anda gunakan setiap hari
adalah lampu. Sebuah lampu adalah perangkat sederhana dengan dua posisi, dan mematikan. Ketika
di, dua kawat yang terhubung di dalam, yang memungkinkan arus mengalir. Ketika off, dua kabel
yang terputus.

Gambar 3.1. Fungsi Saklar

Di sebelah kiri, saklar terbuka dan tidak ada arus mengalir. Di sebelah kanan, saklar ditutup, arus dan
lampu menyala.

Push Button adalah saklar tekan yang berfungsi untuk menghubungkan atau memisahkan
bagian bagian dari suatu instalasi listrik satu sama lain (suatu sistem saklar tekan push button terdiri
dari saklar tekan start. Pada dasarnya, terdapat 2 jenis Push-Button di pasaran: Push-On dan Push-
Off. Tetapi yang kita gunakan pada tutorial ini adalah yang berjenis Push-On, yaitu komponen yang
terdiri atas dua kutub yang saling terpisah / tidak terhubung, dan sebuah tombol yang ketika ditekan
akan menghubungkan kedua kutub tersebut sehingga akan mengalirkan arus listrik dari satu sisi
kutub ke sisi kutub berikutnya (Lihat gambar 3.2).

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 22


Gambar 3.2. Simbol dan Komponen Push Button

Percobaan 3.

Percobaan untuk membaca masukan data digital dilakukan dengan menggunakan saklar push botton.
Rangkaian percobaan diperlihatkan pada gambar

Gambar 3.3. Rangkaian Saklar dan LED

Tuliskan program dibawah ini untuk menguji rangkaian diatas


const int ledPin = 13; const int inputPin = 5; void setup() {
pinMode(ledPin, OUTPUT);
pinMode(inputPin, INPUT);
}
void loop()
{
int val = digitalRead(inputPin);
if (val == HIGH) {
digitalWrite(ledPin, LOW);
}
else
{
digitalWrite(ledPin, HIGH);
}
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 23


Percobaan 4.

Rangkaialah 4 buah LED dan 4 buah saklar push button untuk aplikasi penekanan tombol dan
menyalakan lampu LED maupun menggeser lampu LED. Mula-mula mikrokontroler membaca kondisi
saklar kemudian memprosesnya untuk diteruskan ke pin output berupa LED sesuai dengan program
yang diberikan.

Gambar 3.4. Saklar Push Button dan LED 4 bit

Tuliskan program dibawah ini untuk menguji rangkaian diatas


unsigned int inputPin[] = {2,3,4,5};
unsigned int ledPin[] = {10,11,12,13};
void setup()
{
for(int indeks = 0; indeks < 4; indeks++)
{
//declare LED as output
pinMode(ledPin[indeks], OUTPUT);
pinMode(inputPin[indeks], INPUT);
//mengaktif resistor Pull-Up
digitalWrite(inputPin[indeks],HIGH);
}
}
void loop()
{
for(int indeks = 0; indeks < 4; indeks++)
{
// read input value
int val = digitalRead(inputPin[indeks]);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 24


if (val == LOW) // cek switch ditekan
{
// switch ditekan LED on
digitalWrite(ledPin[indeks], HIGH);
}
else
{
//LED off
digitalWrite(ledPin[indeks], LOW);
}
}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 25


BAB IV : PERCOBAAN SEVEN SEGMEN

TUJUAN :
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke 7 segment
3. Mahasiswa memahami beberapa instruksi Arduino dasar, array data dan bitRead.

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Seven segment merupakan segment-segment yang digunakan untuk menampilkan angka-angka atau
huruf. Seven segment ini tersusun atas 7 buah LED yang membentuk membentuk angka atau
huruf dimana penyusunnya menggunakan label dari a sampai g dan satu lagi untuk dot point
(DP). Salah satu terminal LED dihubungkan menjadi satu sebagai kaki common (biasanya pin-nya berada
ditengah)

Gambar 4.1. Skematik Sebuah Seven Segment

Pin 3 dan 8 = untuk mengaktifkan seven segment diberikan logika high (common anode) dan logika low
(common cathode). Jenis-jenis Seven Segment:
1. Common Anoda
Semua anoda dari LED dalam seven segment disatukan secara parallel dan semua itu
dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan pembatas arus keluar
dari penggerak LED. Karena dihubungkan ke VCC, maka COMMON ANODA ini berada pada
kondisi AKTIF LOW (led akan menyala/aktif bila diberi logika 0).
2. Common Katoda

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 26


Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara parallel dan
dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke GROUND, maka COMMON
KATODA ini berada pada kondisi AKTIF HIGH (led akan menyala/aktif bila diberi logika 1).

Gambar 4.2. Bentuk Fisik Seven Segment CC dan CA

Prinsip Kerja :
Prinsip kerja seven segment ialah input biner pada switch dikonversikan masuk ke dalam decoder, baru
kemudian decoder mengkonversi bilangan biner tersebut menjadi decimal, yang nantinya akan
ditampilkan pada seven segment.
Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter tertentu melalui
kombinasi aktif atau tidaknya LED dalam seven segment. Untuk memudahkan penggunaan seven
segment, umumnya digunakan sebuah decoder( mengubah/ mengkoversi input bilangan biner menjadi
decimal) atau seven segment driver yang akan mengatur aktif tidaknya led-led dalam seven segment
sesuai dengan nilai biner yang diberikan.
Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit dan memberikan
keluaran yang melewatkan arus melalui segmen untuk menampilkan angka desimal. Jenis dekoder BCD
ke seven segment ada dua macam yaitu dekoder yang berfungsi untuk menyalakan seven segment mode
common anoda dan dekoder yang berfungsi untuk menyalakan seven segment mode common katoda.

Percobaan 5.
Buatlah rangkaian seperti dibawah ini untuk sebuah seven segment

Gambar 4.3. Rangkaian Ekivalen Seven Segment

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 27


Ketik program berikut dikomputer kemudian lakukan upload pada mikrokontroler
const byte numeral[10] = {
//ABCDEFG /dp
B11111100, // 0
B01100000, // 1
B11011010, // 2
B11110010, // 3
B01100110, // 4
B10110110, // 5
B00111110, // 6
B11100000, // 7
B11111110, // 8
B11100110, // 9 };
// pins segment dp,G,F,E,D,C,B,A
const int segmentPins[8] = { 5,9,8,7,6,4,3,2};
void setup(){
for(int i=0; i < 8; i++){
pinMode(segmentPins[i], OUTPUT); }
}
void loop(){
for(int i=0; i <= 10; i++){
showDigit(i);
delay(1000);
}
delay(2000);
}
void showDigit( int number){
boolean isBitSet;
for(int segment = 1; segment < 8; segment++){
if( number < 0 || number > 9){
isBitSet = 0; // turn off all segments }
else{
// isBitSet will be true if given bit is 1
isBitSet = bitRead(numeral[number], segment);}
isBitSet = !isBitSet; //
digitalWrite( segmentPins[segment], isBitSet);
}
}

Percobaan 6.
Untuk percobaan berikut ini hubungkan rangkaian seven segment 4 bit dengan pin mikrokontroler.
Sambungkan C1 dengan dengan pin 11, C2 dengan pin 10, C3 dengan pin 9, dan C4 dengan pin 6,
sedangkan datanya pada masing-masing segmen dihubungkan seperti dibawah ini :
Pin pada seven segmen = pin di Arduino
segA = A1; //Display pin 14
segB = 3; //Display pin 16
segC = 4; //Display pin 13
segD = 5; //Display pin 3
segE = A0; //Display pin 5
segF = 7; //Display pin 11
segG = 8; //Display pin 15

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 28


Gambar 4.4. Rangkaian Seven Segment 4 bit

Ketiklah program dibawah ini kemudian lakukan upload pada mikrokontroler :

int digit1 = 11; //PWM Display pin 1


int digit2 = 10; //PWM Display pin 2
int digit3 = 9; //PWM Display pin 6
int digit4 = 6; //PWM Display pin 8

int segA = A1; //Display pin 14


int segB = 3; //Display pin 16
int segC = 4; //Display pin 13
int segD = 5; //Display pin 3
int segE = A0; //Display pin 5
int segF = 7; //Display pin 11
int segG = 8; //Display pin 15

void setup() {
pinMode(segA, OUTPUT);
pinMode(segB, OUTPUT);
pinMode(segC, OUTPUT);
pinMode(segD, OUTPUT);
pinMode(segE, OUTPUT);
pinMode(segF, OUTPUT);
pinMode(segG, OUTPUT);

pinMode(digit1, OUTPUT);
pinMode(digit2, OUTPUT);
pinMode(digit3, OUTPUT);
pinMode(digit4, OUTPUT);

pinMode(13, OUTPUT);
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 29


void loop() {

displayNumber(millis()/1000);

void displayNumber(int toDisplay) {


#define DISPLAY_BRIGHTNESS 500

#define DIGIT_ON HIGH


#define DIGIT_OFF LOW

long beginTime = millis();

for(int digit = 4 ; digit > 0 ; digit--) {

//Turn on a digit for a short amount of time


switch(digit) {
case 1:
digitalWrite(digit1, DIGIT_ON);
break;
case 2:
digitalWrite(digit2, DIGIT_ON);
break;
case 3:
digitalWrite(digit3, DIGIT_ON);
break;
case 4:
digitalWrite(digit4, DIGIT_ON);
break;
}

//Turn on the right segments for this digit


lightNumber(toDisplay % 10);
toDisplay /= 10;

delayMicroseconds(DISPLAY_BRIGHTNESS);
//Display digit for fraction of a second (1us to 5000us, 500 is pretty
good)

//Turn off all segments


lightNumber(10);

//Turn off all digits


digitalWrite(digit1, DIGIT_OFF);
digitalWrite(digit2, DIGIT_OFF);
digitalWrite(digit3, DIGIT_OFF);
digitalWrite(digit4, DIGIT_OFF);
}

while( (millis() - beginTime) < 10) ;


//Wait for 20ms to pass before we paint the display again
}

//Given a number, turns on those segments


//If number == 10, then turn off number
void lightNumber(int numberToDisplay) {

#define SEGMENT_ON LOW


#define SEGMENT_OFF HIGH

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 30


switch (numberToDisplay){

case 0:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_OFF);
break;

case 1:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 2:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 3:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_ON);
break;

case 4:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 5:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 31


case 6:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 7:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;

case 8:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_ON);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 9:
digitalWrite(segA, SEGMENT_ON);
digitalWrite(segB, SEGMENT_ON);
digitalWrite(segC, SEGMENT_ON);
digitalWrite(segD, SEGMENT_ON);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_ON);
digitalWrite(segG, SEGMENT_ON);
break;

case 10:
digitalWrite(segA, SEGMENT_OFF);
digitalWrite(segB, SEGMENT_OFF);
digitalWrite(segC, SEGMENT_OFF);
digitalWrite(segD, SEGMENT_OFF);
digitalWrite(segE, SEGMENT_OFF);
digitalWrite(segF, SEGMENT_OFF);
digitalWrite(segG, SEGMENT_OFF);
break;
}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 32


6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 33


BAB V : PERCOBAAN LCD TEXT

TUJUAN:
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16
2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke LCD Karakter
2 x 16
3. Mahasiswa memahami beberapa instruksi pada library header liquidcrystal
4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

DASAR TEORI
Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti Arduino Uno
R3. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut
sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut:

Gambar 5.1. Modul LCD Karakter 2x16

Display karakter pada LCD diatur oleh pin EN, RS dan RW:

Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda sedang
mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus dibuat
logika low 0 dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur yang lain telah siap,
set EN dengan logika 1 dan tunggu untuk sejumlah waktu tertentu (sesuai dengan datasheet dari LCD
tersebut ) dan berikutnya set EN ke logika low 0 lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low 0, data akan dianggap sebagai sebuah
perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS berlogika high 1, data
yang dikirim adalah data text yang akan ditampilkan pada display LCD. Sebagai contoh, untuk
menampilkan huruf T pada layar LCD maka RS harus diset logika high 1.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 34


Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data
akan dituliskan pada layar LCD. Ketika RW berlogika high 1, maka program akan melakukan
pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low 0.

Tabel 5.1. Pin LCD dan Fungsi

Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih oleh user
). Pada kasus bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7.

Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,

Function Set
Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 35


CATATAN:
X : Dont care
DL: Mengatur lebar data
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
N=1, Display dua baris
N=0, Display satu baris

Entry Mode Set


Mengatur increment/ decrement dan mode geser

Catatan:
I/D: Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke DDRAM.
I/D = 0, decrement
I/D= 1, increment
S: Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser

Display On/ Off Cursor


Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink

D : Mengatur display
D = 1, Display is ON
D = 0, Display is OFF
Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali
secara langsung dengan mengatur D=1.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 36


C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink

Clear Display
Perintah ini hapus layar

Geser Kursor dan Display


Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display.
Fungsi ini digunakan untuk koreksi atau pencarian display

Catatan : x = Dont care

Memori LCD
1. DDRAM ( Display Data RAM )
Memori DDRAM digunakan untuk menyimpan karakter yang akan ditampilkan. Semua teks yang
kita tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD secara berturutan
membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 37


Pada peta memori tersebut, daerah yang berwarna kuning ( 00 s/d 0F dan 40 s/d 4F ) adalah display yang
tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan dua baris.
Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari layar. Demikianlah
karakter pertama di sudut kiri atas adalah menempati alamat 00h. Posisi karakter berikutnya adalah
alamat 01h dan seterusnya. Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan
pada peta memori adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah perintah ke
LCD untuk mangatur letak posisi kursor pada baris dan kolom tertentu.

Instruksi Set Posisi Kursor adalah 80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita
berharap untuk menempatkan kursor.Sebagai contoh, kita ingin menampilkan kata World pada baris
ke dua pada posisi kolom ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari baris ke
dua, mempunyai alamat 4Ah, sehingga sebelum kita tulis kata World pada LCD, kita harus mengirim
instruksi set posisi kursor, dan perintah untuk instruksi ini adalah 80h ditambah dengan alamat 80h+4Ah
=0Cah. Sehingga dengan mengirim perintah Cah ke LCD, akan menempatkan kursor pada baris kedua
dan kolom ke 11 dari DDRAM.

CGROM ( Character Generator ROM )


Sebuah peta karakter yang dapat ditampilkan, sesuai dengan lokasi dari masing-masing
karakter.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 38


LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 39
Percobaan 7.
Hubungkan Pin LCD dengan pin Mikrokontroler seperti ditunjukkan pada gambar dibawah ini.

Gambar 5.2. Hubungan Pin LCD dan pin Mikrokontroler Arduino

Ketik Program dibawah ini dan lihat hasilnya pada LCD 2X16
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
lcd.begin(16,2);

lcd.setCursor(0,0);
lcd.print("Hello World!");

lcd.setCursor(0,1);
lcd.print("FasilkomNarotama");
}

void loop() {
}

Menampilkan angka dalam kisaran 0-9 dari samping yang berlawanan (di baris kiri atas). Selanjutnya,
menampilkan nomor yang sama di baris bawah, tapi mulai dari kanan.
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16,2);
}

void loop() {
// set the cursor to (0,0):

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 40


lcd.setCursor(0, 0);
// print from 0 to 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}

// set the cursor to (16,1):


lcd.setCursor(16,1);
// set the display to automatically scroll:
lcd.autoscroll();
// print from 0 to 9:
for (int thisChar = 0; thisChar < 10; thisChar++) {
lcd.print(thisChar);
delay(500);
}
// turn off automatic scrolling
lcd.noAutoscroll();

// clear screen for the next loop:


lcd.clear();
}

Ketik program dibawah ini untuk menampilkan I Fasilkom


#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins


LiquidCrystal lcd(8,9,4,5,6,7);

// make some custom characters:


byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};

byte smiley[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b10001,
0b01110,
0b00000
};

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 41


byte frownie[8] = {
0b00000,
0b00000,
0b01010,
0b00000,
0b00000,
0b00000,
0b01110,
0b10001
};

byte armsDown[8] = {
0b00100,
0b01010,
0b00100,
0b00100,
0b01110,
0b10101,
0b00100,
0b01010
};

byte armsUp[8] = {
0b00100,
0b01010,
0b00100,
0b10101,
0b01110,
0b00100,
0b00100,
0b01010
};
void setup() {
// create a new character
lcd.createChar(1, heart);
// create a new character
lcd.createChar(2, smiley);
// create a new character
lcd.createChar(3, frownie);
// create a new character
lcd.createChar(4, armsDown);
// create a new character
lcd.createChar(5, armsUp);

// set up the lcd's number of columns and rows:


lcd.begin(16, 2);

// Print a message to the lcd.


lcd.print("I ");
lcd.write(1);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 42


lcd.print(" Fasilkom ");
lcd.write(2);

void loop() {
lcd.setCursor(4, 1);
lcd.write(4); // draw the little man, arms down:
lcd.setCursor(4, 1);
delay(400); // wait 400ms
lcd.write(5); // draw the little man, arms up:
delay(400); // wait 400ms
}

Contoh sederhana untuk menampilkan symbol hati

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

byte heart[8] = {
0b00000,
0b01010,
0b11111,
0b11111,
0b11111,
0b01110,
0b00100,
0b00000
};

void setup() {
lcd.createChar(1, heart);
lcd.write(1);
}

Teks muncul, program akan menunggu setengah detik, dan teks menghilang. Setelah itu, loop seluruh
program.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 43


#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
lcd.begin(16, 2); // set up the LCD's number of columns
and rows

lcd.setCursor(0,0); // First line


lcd.print("Blinking");

lcd.setCursor(0,1); // Second line


lcd.print(" sentence :)");
}

void loop() {
lcd.noDisplay(); // Turn OFF the display
delay(500); // Wait 500 ms
lcd.display(); // Turn ON the display
delay(500); // Wait 500 ms
}

Teks "Hello world!" Ditampilkan, yang dipindahkan antara tepi layar, dari kanan ke kiri.
#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

void setup() {
lcd.begin(16, 2);
lcd.print("Hello, world!");
delay(1000);
}

void loop() {
// scroll 13 positions (string length) to the left
// to move it offscreen left:
for (int positionCounter = 0; positionCounter < 13;
positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}

// scroll 29 positions (string length + display length) to the


right
// to move it offscreen right:
for (int positionCounter = 0; positionCounter < 29;
positionCounter++) {
// scroll one position right:
lcd.scrollDisplayRight();

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 44


// wait a bit:
delay(150);
}

// scroll 16 positions (display length + string length) to the


left
// to move it back to center:
for (int positionCounter = 0; positionCounter < 16;
positionCounter++) {
// scroll one position left:
lcd.scrollDisplayLeft();
// wait a bit:
delay(150);
}

// delay at the end of the full loop:


delay(1000);

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 45


BAB VI : PERCOBAAN KEYPAD

TUJUAN:
1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller
2. Mahasiswa memahami library Arduino untuk pengambilan data keypad
3. Mahasiswa memahami library Arduino untuk pengambilan data keypad dan mengeluarkan ke LCD
Karakter

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

DASAR TEORI
Keypad sering digunakan sebagai suatu input pada beberapa peralatan yang berbasis mikroprosessor
atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang terhubung sebagai baris
dan kolom dengan susuan seperti yang ditunjukkan pada gambar 6.1. Agar mikrokontroller dapat
melakukan scan keypad, maka port mengeluarkan salah satu bit dari 4 bit yang terhubung pada kolom
dengan logika low 0 dan selanjutnya membaca 4 bit pada baris untuk menguji jika ada tombol yang
ditekan pada kolom tersebut. Sebagai konsekuensi, selama tidak ada tombol yang ditekan, maka
mikrokontroller akan melihat sebagai logika high 1 pada setiap pin yang terhubung ke baris.

Gambar 6.1. Skema Keypad 4X4

Konstruksi matrix keypad 44 diatas cukup sederhana, yaitu terdiri dari 4 baris dan 4 kolom dengan
keypad berupas saklar push buton yang diletakan disetiap persilangan kolom dan barisnya. Rangkaian
matrix keypad diatas terdiri dari 16 saklar push buton dengan konfigurasi 4 baris dan 4 kolom. 8 line
yang terdiri dari 4 baris dan 4 kolom tersebut dihubungkan dengan port mikrokontroler 8 bit. Sisi baris
dari matrix keypad ditandai dengan nama Row1, Row2, Row3 dan Row4 kemudian sisi kolom ditandai

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 46


dengan nama Col1, Col2, Col3 dan Col4. Sisi input atau output dari matrix keypad 44 ini tidak mengikat,
dapat dikonfigurasikan kolom sebagi input dan baris sebagai output atau sebaliknya tergantung
programernya.

Proses Scaning Matrix Keypad 44 Untuk Mikrokontroler Proses scaning untuk membaca penekanan
tombol pada matrix keypad 44 untuk mikrokontroler diatas dilakukan secara bertahap kolom demi
kolom dari kolom pertama sampai kolom ke 4 dan baris pertama hingga baris ke 4. Program untuk
scaning matrix keypad 44 dapat bermacam-macam, tapi pada intinya sama. Misal kita asumsikan
keyapad aktif LOW (semua line kolom dan baris dipasang resistor pull-up) dan dihubungkan ke port
mikrokontrolr dengan jalur kolom adalah jalur input dan jalur baris adalah jalur output maka proses
scaning matrix keypad 44 diatas dapat dituliskan sebagai berikut. Mengirimkan logika Low untuk kolom
1 (Col1) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal tombol SW1
ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau
tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011,
atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka
data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di tekan maka data
pembacaan baris akan 1111. Mengirimkan logika Low untuk kolom 2 (Col2) dan logika HIGH untuk
kolom yang lain kemudian membaca data baris, misal tombol SW1 ditekan maka data baris pertama
(Row1) akan LOW sehingga data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5
maka data pada baris ke 2 akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan
sehingga data yang terbaca 1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110
dan atau tidak ada tombol pada kolom pertama yang di tekan maka data pembacaan baris akan 1111.
Mengirimkan logika Low untuk kolom 3 (Col3) dan logika HIGH untuk kolom yang lain kemudian
membaca data baris, misal tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga
data baris yang dibaca adalah 0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2
akan LOW sehingga data yang terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca
1101, atau tombol SW13 yang ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol
pada kolom pertama yang di tekan maka data pembacaan baris akan 1111. Mengirimkan logika Low
untuk kolom 4 (Col4) dan logika HIGH untuk kolom yang lain kemudian membaca data baris, misal
tombol SW1 ditekan maka data baris pertama (Row1) akan LOW sehingga data baris yang dibaca adalah
0111, atau tombol yang ditekan tombol SW5 maka data pada baris ke 2 akan LOW sehingga data yang
terbaca 1011, atau tombol SW9 yang ditekan sehingga data yang terbaca 1101, atau tombol SW13 yang
ditekan maka data yang dibaca adalah 1110 dan atau tidak ada tombol pada kolom pertama yang di
tekan maka data pembacaan baris akan 1111. Kemudian data pembacaan baris ini diolah sebagai

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 47


pembacaan data penekanan tombol keypad. Sehingga tiap tombol pada matrix keypad 44 diatas dengan
teknik scaning tersebut akan menghasilkan data penekanan tiap-tiap tombol sebagai berikut.

SW1 = 0111 0111 SW9 = 0111 1101


SW2 = 1011 0111 SW10 = 1011 1101
SW3 = 1101 0111 SW11 = 1101 1101
SW4 = 1110 0111 SW12 = 1110 1101
SW5 = 0111 1011 SW13 = 0111 1110
SW6 = 1011 1011 SW14 = 1011 1110
SW7 = 1101 1011 SW15 = 1101 1110
SW8 = 1110 1011 SW16 = 1110 1110
Data port mikrokontroler, misalkan pada SW2 = 1011 0111 tersebut terbagi dalam nible atas dan nible
bawah dimana data nible atas (1011) merupakan data yang kita kirimkan sedangkan data nible bawah
(0111) adalah data hasil pembacaan penekanan tombol keypad SW2 pada proses scaning matrix keypad
44 diatas.

Gambar 6.2. Interfacing Keypad 4X4 ke Mikrokontroler

Percobaan 8
Untuk memahami prinsip kerja dari sebuah keypad dengan program Arduino dapat dicoba untuk
program dibawah ini.
#include <Keypad.h>

const byte ROWS = 4; //four rows


const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3', 'A'},

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 48


{'4','5','6', 'B'},
{'7','8','9', 'C'},
{'*','0','#', 'D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

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

void loop(){
char key = keypad.getKey();

if (key){
Serial.println(key);
}
}

Untuk contoh program yang kedua dapat diketikkan program berikut ini.

#include <Keypad.h>

const byte ROWS = 4; //four rows


const byte COLS = 4; // four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

unsigned long loopCount = 0;


unsigned long timer_t = 0;

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

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 49


// Try playing with different debounceTime settings to see how it affects
// the number of times per second your loop will run. The library prevents
// setting it to anything below 1 millisecond.
kpd.setDebounceTime(10); // setDebounceTime(mS)
}

void loop(){
char key = kpd.getKey();

// Report the number of times through the loop in 1 second. This will give
// you a relative idea of just how much the debounceTime has changed the
// speed of your code. If you set a high debounceTime your loopCount will
// look good but your keypresses will start to feel sluggish.
if ((millis() - timer_t) > 1000) {
Serial.print("Your loop code ran ");
Serial.print(loopCount);
Serial.println(" times over the last second");
loopCount = 0;
timer_t = millis();
}
loopCount++;
if(key)
Serial.println(key);
}

Berikut ini contoh untuk multi key dari sebuah keypad


#include <Keypad.h>

const byte ROWS = 4; //four rows


const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the kpd
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the kpd

Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );

unsigned long loopCount;


unsigned long startTime;
String msg;

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 50


void setup() {
Serial.begin(9600);
loopCount = 0;
startTime = millis();
msg = "";
}

void loop() {
loopCount++;
if ( (millis()-startTime)>5000 ) {
Serial.print("Average loops per second = ");
Serial.println(loopCount/5);
startTime = millis();
loopCount = 0;
}

// Fills kpd.key[ ] array with up-to 10 active keys.


// Returns true if there are ANY active keys.
if (kpd.getKeys())
{
for (int i=0; i<LIST_MAX; i++) // Scan the whole key list.
{
if ( kpd.key[i].stateChanged ) // Only find keys that have changed state.
{
switch (kpd.key[i].kstate) { // Report active key state : IDLE, PRESSED, HOLD, or
RELEASED
case PRESSED:
msg = " PRESSED.";
break;
case HOLD:
msg = " HOLD.";
break;
case RELEASED:
msg = " RELEASED.";
break;
case IDLE:
msg = " IDLE.";
}
Serial.print("Key ");
Serial.print(kpd.key[i].kchar);
Serial.println(msg);
}
}
}
} // End loop
LANGKAH-LANGKAH PERCOBAAN

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 51


1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 52


BAB VII : PERCOBAAN ANALOG TO DIGITAL, DIGITAL TO ANALOG
CONVERTER

TUJUAN
1. Mahasiswa memahami input analaog pada mikrokontroller Arduino
2. Mahasiswa memahami perhitungan tegangan resolusi ADC mikrokontroler Arduino
3. Mahasiswa memahami perintah input analog, analogRead(), analogReference(parameter)
4. Mahasiswa dapat memahami program Arduino untuk menampilkan data input analog
5. Mahasiswa dapat memahami output analog dan PWM (Pulse Width Modulation)
6. Mahasiswa memahami perintah output analog, analogWrite()

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
ADC (Analog to Digital Converter)
Arduino khusus menyediakan 6 kanal (8 kanal pada model Uno, Mini dan Nano, dan 16 pada model
Mega) untuk difungsikan sebagai analog input. Analog ke digital converternya menggunakan resolusi 10
bit yang berarti range nilai analog dari 0 volt sampai 5 volt akan dirubah kenilai integer 0 sampai 1023,
atau resolusinya adalah 5 volt/1024=4,9mV per unit dimana itu berarti nilai digital yang dihasilkan akan
berubah setiap perubahan 4,9mV dari tegangan input analognya. Akan tetapi range input analog dan
resolusi tersebut dapat dirubah dengan fungsi analogReference().

Perintah yang digunakan untuk fungsi analog input ini adalah:


1. analogRead(pin): berfungsi untuk membaca nilai analog pada input pin yang akan
menghasilkan nilai integer antara 0-1023.
2. analogReference(parameter): berfungsi untuk menentukan referensi yang digunakan.
Parameternya meliputi:
DEFAULT: default analog reference yaitu 5V (pada board Arduino 5V) atau 3,3 volt (pada
board Arduino 3,3 V)
INTERNAL: built-in referensi internal tergantung pada jenis mikrokontroler yang
terpasang pada board Arduino, 1.1 volt pada ATmega168 atau ATmega328 dan 2.56 volt
pada ATmega8.
INTERNAL1V1: a built-in referensi internal 1.1V (khusus Arduino Mega)
INTERNAL2V56: a built-in referensi internal 2,56V (khusus Arduino Mega)
EXTERNAL: pilihan referensi yang tergantung pada tegangan yang diberikan pada pin
AREF(hanya dengan range tegangan 0 sampai 5V).

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 53


Perlu untuk diperhatikan, jangan menggunakan referensi dibawah 0 volt atau lebih dari 5 volt dan
pastikan memilih referensi external sebelum perintah analogRead() jika menghubungkan pin AREF
dengan referensi eksternal karena jika tidak akan bisa merusak mikrokontrol.

Gambar 7.1. Rangkaian Input Analog dengan potensiometer

DAC (Digital to Analog Converter)

Percobaan 9
Input analog
Menunjukkan input analog dengan membaca sensor analog pada analog pin 0 dan menghidupkan
serta mematikan LED yang terhubung ke pin digital 13. Jumlah waktu LED akan on dan off tergantung
pada nilai yang diperoleh oleh analogRead ().

Komponen Rangkaian:
* Potensiometer dihubungkan ke analog input 0
* Pin tengah dari potensiometer ke pin analog Mikrokontroler Arduino
* Satu sisi pin (salah satu) ke ground
* Pin sisi lain untuk 5 V
* LED anoda (kaki panjang) yang melekat pada keluaran digital 13
* LED katoda (kaki pendek) yang melekat pada ground

* Catatan: karena sebagian Arduinos memiliki built-in LED yang terpasang


untuk pin 13 di papan, LED adalah opsional.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 54


int sensorPin = A0; // select the input pin for the potentiometer
int ledPin = 13; // select the pin for the LED
int sensorValue = 0; // variable to store the value coming from the sensor

void setup() {
// declare the ledPin as an OUTPUT:
pinMode(ledPin, OUTPUT);
}

void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
// turn the ledPin on
digitalWrite(ledPin, HIGH);
// stop the program for <sensorValue> milliseconds:
delay(sensorValue);
// turn the ledPin off:
digitalWrite(ledPin, LOW);
// stop the program for for <sensorValue> milliseconds:
delay(sensorValue);
}

Input analog yang ditampilkan secara serial lewat komponen serial monitor pada software editing
Arduino
const int analogInPin = A0; // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0; // value read from the pot


int outputValue = 0; // value output to the PWM (analog out)

void setup() {
// initialize serial communications at 9600 bps:
Serial.begin(9600);
}

void loop() {
// read the analog in value:
sensorValue = analogRead(analogInPin);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 55


// map it to the range of the analog out:
outputValue = map(sensorValue, 0, 1023, 0, 255);
// change the analog out value:
analogWrite(analogOutPin, outputValue);

// print the results to the serial monitor:


Serial.print("sensor = " );
Serial.print(sensorValue);
Serial.print("\t output = ");
Serial.println(outputValue);

// wait 2 milliseconds before the next loop


// for the analog-to-digital converter to settle
// after the last reading:
delay(2);
}

Pada percobaan ADC ini dapat juga digabungkan dengan output analog yang berupa PWM (Pulse Width
Modulation), kasus ini akan mengatur terang dan redupnya lampu LED yang terhubung pada pin 13 dari
mikrokontroler Arduino.

int ledPin = 9; // LED connected to digital pin 9


void setup() {
// nothing happens in setup
}

void loop() {
// fade in from min to max in increments of 5 points:
for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
// sets the value (range from 0 to 255):
analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}

// fade out from max to min in increments of 5 points:


for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {
// sets the value (range from 0 to 255):

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 56


analogWrite(ledPin, fadeValue);
// wait for 30 milliseconds to see the dimming effect
delay(30);
}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 57


BAB VIII : PERCOBAAN LCD GRAFIK

Tujuan :
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD grafik 128X64
2. Mahasiswa dapat memahami program Arduino untuk menampilkan grafik ke LCD grafik 128X64
3. Mahasiswa memahami beberapa instruksi pada library header u8glib
4. Mahasiswa memahami koordinat untuk menampilkan tulisan atau gambar pada LCD

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

Teori Dasar
Display elektronik adalah salah satu komponen elektronika yang berfungsi sebagai tampilan suatu data,
baik karakter, huruf ataupun grafik. LCD (Liquid Cristal Display) adalah salah satu jenis display
elektronik yang dibuat dengan teknologi CMOS logic yang bekerja dengan tidak menghasilkan cahaya
tetapi memantulkan cahaya yang ada di sekelilingnya terhadap front-lit atau mentransmisikan cahaya
dari back-lit. LCD (Liquid Cristal Display) berfungsi sebagai penampil data baik dalam bentuk karakter,
huruf, angka ataupun grafik.

Material LCD (Liquid Cristal Display)


LCD adalah lapisan dari campuran organik antara lapisan kaca bening dengan elektroda transparan
indium oksida dalam bentuk tampilan seven-segment dan lapisan elektroda pada kaca belakang. Ketika
elektroda diaktifkan dengan medan listrik (tegangan), molekul organik yang panjang dan silindris
menyesuaikan diri dengan elektroda dari segmen. Lapisan sandwich memiliki polarizer cahaya vertikal
depan dan polarizer cahaya horisontal belakang yang diikuti dengan lapisan reflektor. Cahaya yang
dipantulkan tidak dapat melewati molekul-molekul yang telah menyesuaikan diri dan segmen yang
diaktifkan terlihat menjadi gelap dan membentuk karakter data yang ingin ditampilkan.

Dalam modul LCD (Liquid Cristal Display) terdapat microcontroller yang berfungsi sebagai pengendali
tampilan karakter LCD (Liquid Cristal Display). Microntroller pada suatu LCD (Liquid Cristal Display)
dilengkapi dengan memori dan register. Memori yang digunakan microcontroler internal LCD adalah :
DDRAM (Display Data Random Access Memory) merupakan memori tempat karakter yang akan
ditampilkan berada.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 58


CGRAM (Character Generator Random Access Memory) merupakan memori untuk
menggambarkan pola sebuah karakter dimana bentuk dari karakter dapat diubah-ubah sesuai
dengan keinginan.
CGROM (Character Generator Read Only Memory) merupakan memori untuk menggambarkan
pola sebuah karakter dimana pola tersebut merupakan karakter dasar yang sudah ditentukan
secara permanen oleh pabrikan pembuat LCD (Liquid Cristal Display) tersebut sehingga
pengguna tinggal mangambilnya sesuai alamat memorinya dan tidak dapat merubah karakter
dasar yang ada dalam CGROM.

Register control yang terdapat dalam suatu LCD diantaranya adalah.

Register perintah yaitu register yang berisi perintah-perintah dari mikrokontroler ke panel LCD
(Liquid Cristal Display) pada saat proses penulisan data atau tempat status dari panel LCD (Liquid
Cristal Display) dapat dibaca pada saat pembacaan data.
Register data yaitu register untuk menuliskan atau membaca data dari atau keDDRAM. Penulisan
data pada register akan menempatkan data tersebut keDDRAM sesuai dengan alamat yang telah
diatur sebelumnya.

Pin, kaki atau jalur input dan kontrol dalam suatu LCD (Liquid Cristal Display) diantaranya adalah :
Pin data adalah jalur untuk memberikan data karakter yang ingin ditampilkan menggunakan
LCD (Liquid Cristal Display) dapat dihubungkan dengan bus data dari rangkaian lain seperti
mikrokontroler dengan lebar data 8 bit.
Pin RS (Register Select) berfungsi sebagai indikator atau yang menentukan jenis data yang masuk,
apakah data atau perintah. Logika low menunjukan yang masuk adalah perintah, sedangkan
logika high menunjukan data.
Pin R/W (Read Write) berfungsi sebagai instruksi pada modul jika low tulis data, sedangkan high
baca data.
Pin E (Enable) digunakan untuk memegang data baik masuk atau keluar.

Pin VLCD berfungsi mengatur kecerahan tampilan (kontras) dimana pin ini dihubungkan dengan
trimpot 5 Kohm, jika tidak digunakan dihubungkan ke ground, sedangkan tegangan catu daya ke LCD
sebesar 5 Volt.

GLCD (Graphic Liquid Crystal Display) 128 x 64 pixel adalah perangkat penampil berbahan kristal cair
yang dapat memendarkan cahaya berupa titik titik cahaya(pixel) tersusun secara matriks berjumlah
128 x 64 pixel. GLCD dapat menampilkan gambar (bitmap), angka, huruf dan simbol-simbol tertentu.
WG12864C-TMI VN adalah modul dengan tampilan grafik 128 x 64 pixel tipe STN Negative
Transmissive Blue dengan white led backlight

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 59


Gambar 8.1. Bentuk Fisik LCD Grafik 128X64

Modul GLCD ini dilengkapi dengan mikroprosesor KS0107-KS0108 buatan Samsung sebagai driver
64 channel output pada penampil matriksGLCD. Perangkat ini terdiri dari display RAM
( Random Access Memmory)kapasitas 512 bytes, 64 bit data lacth 64 bit drivers dan decoder logic.
GLCD128 x 64 memerlukan program (library) khusus untuk mikroprosesor KS0108 agar dapat
berkomunikasi dengan mikrokontroler.

Percobaan 10
Menghubungkan arduino dengan LCD grafik menggunakan serial programming interface seperti
terlihat pada tabel dibawah ini
Pin LCD Fungsi Arduino
1 GND GND
2 VCC VCC 5 Volt
3 VO (adjustable) Potensio adjustable
4 RS PIN 4
5 RW PIN 5
6 Enable PIN 6
15 Comunikasi Paralel (HIGH) / Serial (LOW) GND
17 Reset PIN 7
19 Backlight + 3.3 V atau 5 Volt
20 Backlight - GND

#include "U8glib.h"

U8GLIB_ST7920_128X64_1X u8g(6, 5, 4 ,7); //Enable, RW, RS, RESET


int display = 1;

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 60


void u8g_prepare()
{
u8g.setFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
}

void u8g_Tela1() //Tela 1


{
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 11, 35, "FASILKOM SBY");
u8g.drawStr( 12, 35, "FASILKOM SBY");
u8g.drawFrame(0,0,128,64);
u8g.drawFrame(2,2,124,60);
}

void u8g_Tela2() //Tela 2


{
u8g.drawRFrame(0,0,128,64,3);
u8g.drawStr( 3, 10, "Waktu:13:00");
u8g.drawStr( 3, 25, "Temp: 27");
char s[2] = " ";
s[0] = 176;
u8g.drawStr(51, 25, s);
u8g.drawStr( 3, 40, "Lembab: 25%");
u8g.drawCircle(95,32,28);
u8g.drawCircle(95,32,29);
u8g.drawLine(95, 9, 95, 4);
u8g.drawLine(123, 32, 118, 32);
u8g.drawLine(95, 55, 95, 60);
u8g.drawLine(67, 32, 72, 32);
u8g.drawLine(95, 32, 95, 12);
u8g.drawLine(95, 32, 100.8, 21.87 );
u8g.setFont(u8g_font_04b_03);
u8g.drawStr(89,43, "Jam");
u8g.drawStr(85,50, "Menit");
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 61


void u8g_Tela3() //Tela 3
{
char s[2] = " ";
u8g.drawStr( 0, 0, "ASCII page 1");
for(int y = 0; y < 6; y++ )
{
for(int x = 0; x < 16; x++ )
{
s[0] = y*16 + x + 32;
u8g.drawStr(x*7, y*10+10, s);
}
}
}

void u8g_Tela4() //Tela 3


{
char s[2] = " ";
uint8_t x, y;
u8g.drawStr( 0, 0, "ASCII page 2");
for( y = 0; y < 6; y++ )
{
for( x = 0; x < 16; x++ )
{
s[0] = y*16 + x + 160;
u8g.drawStr(x*7, y*10+10, s);
}
}
}

void u8g_Tela5() //Tela 5


{
u8g.setFont(u8g_font_unifont);
u8g.drawBox(0,0,128,64);
u8g.drawBox(2,2,124,60);
u8g.setColorIndex(0);
u8g.drawStr( 11, 35, "FASILKOM Sby");
u8g.drawStr( 12, 35, "FASILKOM Sby");

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 62


u8g.drawFrame(2,2,124,60);
}

void u8g_Tela6() //Tela 6


{
u8g.setFont(u8g_font_helvB08);
u8g.drawStr(50,31, " Siskom");
u8g.drawStr90(50,31, " Sby");
u8g.drawStr270(50,31, " ***.");
}

void u8g_Tela7() //Tela 7


{
u8g.setFont(u8g_font_robot_de_niro);
u8g.drawStr(5,13, "FASILKOM Sby !");
u8g.setFont(u8g_font_helvB08);
u8g.drawStr(5,25, "FASILKOM Sby !");
u8g.drawBox(5,31, 118,11);
u8g.setColorIndex(0);
u8g.setFont(u8g_font_8x13);
u8g.drawStr(5,41, "FASILKOM Sby !");
u8g.setColorIndex(1);
u8g.setFont(u8g_font_ncenB10);
u8g.drawStr(5,60, "FASILKOM Sby !");
}

void draw()
{
u8g_prepare();
switch(display)
{
case 1:
u8g_Tela1();
break;
case 2:
u8g_Tela2();
break;
case 3:

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 63


u8g_Tela3();
break;
case 4:
u8g_Tela4();
break;
case 5:
u8g_Tela5();
break;
case 6:
u8g_Tela6();
break;
case 7:
u8g_Tela7();
break;
}
}

void setup()
{

if ( u8g.getMode() == U8G_MODE_R3G3B2 )
u8g.setColorIndex(255); // white
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
u8g.setColorIndex(1); // max intensity
else if ( u8g.getMode() == U8G_MODE_BW )
u8g.setColorIndex(1); // pixel on

//u8g.setContrast(0x30);
}

void loop()
{
// picture loop
for (display =1; display < 8; display++)
{
u8g.firstPage();
do
{

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 64


draw();
}
while( u8g.nextPage() );
delay(3000);
}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 65


BAB IX : PERCOBAAN SENSOR LDR, LM35, DAN NTC

TUJUAN:
1. Mahasiswa mengenal beberapa sensor cahaya dan sensor suhu
2. Mahasiswa mampu memprogram aplikasi untuk sensor-sensor tersebut
3. Mahasiswa mampu menghitung konversi ADC ke dalam bentuk besaran yang terukur

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Light Dependent Resistor atau yang biasa disebut LDR adalah jenis resistor yang nilainya berubah seiring
intensitas cahaya yang diterima oleh komponen tersebut. Biasa digunakan sebagai detektor cahaya atau
pengukur besaran konversi cahaya.Light Dependent Resistor, terdiri dari sebuah cakram
semikonduktor yang mempunyai dua buah elektroda pada permukaannya.Pada saat gelap atau cahaya
redup, bahan dari cakram tersebut menghasilkan elektron bebas dengan jumlah yang relatif
kecil.Sehingga hanya ada sedikit elektron untuk mengangkut muatan elektrik.Artinya pada saat cahaya
redup LDR menjadi konduktor yang buruk, atau bisa disebut juga LDR memiliki resistansi yang besar
pada saat gelap atau cahaya redup.Pada saat cahaya terang, ada lebih banyak elektron yang lepas dari
atom bahan semikonduktor tersebut. Sehingga akan ada lebih banyak elektron untuk mengangkut
muatan elektrik. Artinya pada saat cahaya terang LDR menjadi konduktor yang baik, atau bisa disebut
juga LDR memiliki resistansi yangkecil pada saat cahaya terang.

Prinsip Kerja LDR


Pada sisi bagian atas LDR terdapat suatu garis atau jalur melengkung yang menyerupai bentuk
kurva.Jalur tersebut terbuat dari bahan cadmium sulphida yang sangat sensitiv terhadap pengaruh dari
cahaya.Jalur cadmium sulphida yang terdapat pada LDR.Jalur cadmium sulphida dibuat melengkung
menyerupai kurva agar jalur tersebut dapat dibuat panjang dalam ruang (area) yang sempit. Cadmium
sulphida (CdS) merupakan bahan semi-konduktor yang memiliki gap energi antara elektron konduksi
dan elektron valensi. Ketika cahaya mengenai cadmium sulphida, maka energi proton dari cahaya akan
diserap sehingga terjadi perpindahan dari band valensi ke band konduksi. Akibat perpindahan elektron
tersebut mengakibatkan hambatan dari cadmium sulphida berkurang dengan hubungan kebalikan dari
intensitas cahaya yang mengenai LDR.Lihat gambar dibawah ini.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 66


Gambar 9.1. Bentuk Fisik LDR

Karakteristik LDR
A. Laju Recovery
Bila sebuah LDR dibawa dari suatu ruangan dengan level kekuatan cahayatertentu kedalam suatu
ruangan yang gelap sekali, maka bisa kita amati bahwa nilai resistansi dari LDR tidak akan segera
berubah resistansinya pada keadaan ruangan gelap tersebut. Namun LDR tersebut hanya akan bisa
mencapai harga dikegelapan setelah mengalami selang waktu tertentu. dan suatu kenaikan nilai
resistansi dalam waktu tertentu. Harga ini ditulis dalam K /detik. untuk LDR type arus harganya lebih
besar dari 200 K /detik (selama 20 menitpertama mulai dari level cahaya 100 lux), kecepatan tersebut
akan lebih tinggi pada arahsebaliknya, yaitu pindah dari tempat gelap ke tempat terang yang
memerlukan waktukurang dari 10 ms untuk mencapai resistansi yang sesuai dengan level cahaya 400
lux.

B. Respon Spektral
LDR tidak mempunyai sensitivitas yang sama untuk setiap panjang gelombang cahaya yang jatuh
padanya (yaitu warna). Bahan yang biasa digunakan sebagai penghantar arus listrik yaitu tembaga,
alumunium, baja, emas, dan perak.Dari kelima bahan tersebut tembaga merupakan penghantar yang
paling banyak digunakan karena mempunyai daya hantar yang baik.Sensor ini sebagai pengindera yang
merupakan eleman yang pertama tama menerima energi dari media untuk memberi keluaran
berupa perubahan energi.Sensor terdiri berbagai macam jenis serta media yang digunakan untuk
melakukan perubahan. Media yang digunakan misalnya: panas, cahaya, air, angin, tekanan, dan lain
sebagainya. Sedangkan pada rangkaian ini menggunakan sensor LDR yang menggunakan intensitas
cahaya, selain LDR dioda foto juga menggunakan intensitas cahaya atau yang peka terhadap cahaya
(photo conductivecell).Pada rangkaian elektronika, sensor harus dapat mengubah bentuk bentuk energi
cahaya ke energi listrik, sinyal listrik ini harus sebanding dengan besar energi sumbernya. Gambar
dibawah ini merupakan karakteristik dari sensor LDR .

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 67


9.2. Kurva LDR

Pada karakteristik diatas dapat dilihat bila cahaya mengenai sensor itu maka harga tahanan akan
berkurang. Perubahan yang dihasilkan ini tergantung dari bahan yang digunakan serta dari cahaya yang
mengenainya.

LM35
Untuk mendeteksi suhu digunakan sebuah sensor suhu LM 35 yang dapat dikalibrasikan langsung
dalam , LM 35 ini difungsikan sebagai basic temperature sensor seperti pada gambar 9.3

Gambar 9.3. Skematik Sensor LM35

IC LM 35 sebagai sensor suhu yang teliti dan terkemas dalam bentuk Integrated Circuit (IC), dimana
output tegangan keluaran sangat linear berpadanan dengan perubahan suhu. Sensor ini berfungsi
sebagai pengubah dari besaran fisis suhu ke besaran tegangan yang memiliki koefisien sebesar 10 mV
/C yang berarti bahwa kenaikan suhu 1 C maka akan terjadi kenaikan tegangan sebesar 10 mV.

IC LM 35 ini tidak memerlukan pengkalibrasian atau penyetelan dari luar karena ketelitiannya sampai
lebih kurang seperempat derajat celcius pada temperature ruang. Jangka sensor mulai dari 55C sampai
dengan 150C, IC LM35 penggunaannya sangat mudah, difungsikan sebagai kontrol dari indicator
tampilan catu daya terbelah. IC LM 35 dapat dialiri arus 60 m A dari supplay sehingga panas
yang ditimbulkan sendiri sangat rendah kurang dari 0 C di dalam suhu ruangan.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 68


Gambar 9.4. Mengukur Suhu LM35

LM 35 ialah sensor temperatur paling banyak digunakan untuk praktek, karena selain harganya cukup
murah, linearitasnya juga lumayan bagus. LM35 tidak membutuhkan kalibrasi eksternal yang
menyediakan akurasi C pada temperatur ruangan dan C pada kisaran -55 C to +150
C. LM35 dimaksudkan untuk beroperasi pada -55 C hingga +150 C, sedangkan LM35C pada -40 C
hingga +110 C, dan LM35D pada kisran 0-100C. LM35D juga tersedia pada paket 8 kaki dan paket
TO-220. Sensor LM35 umunya akan naik sebesar 10mV setiap kenaikan 1C (300mV pada 30 C).

Gambar 9.5. Bentuk Fisik Sensor Suhu LM35

Sensor suhu LM35 berfungsi untuk mengubah besaran fisis yang berupa suhu menjadi besaran elektri
tegangan. Sensor ini memiliki parameter bahwa setiap kenaikan 1C tegangan keluarannya naik sebesar
10mV dengan batas maksimal keluaran sensor adalah 1,5V pada suhu 150C. Pada perancangan kita
tentukan keluaran ADC mencapai full scale pada saat suhu 100C, sehingga tegangan keluaran tranduser
(10mV/C x 100C) = 1V.

Pengukuran secara langsung saat suhu ruang, keluaran LM35 adalah 0,3V (300mV). Tengan ini diolah
dengan mengunakan rangkaian pengkondisi sinyal agar sesuai dangan tahapan masukan ADC. LM35
memiliki kelibihan kelebihan sebagai berikut:

1. Di kalibrasi langsung dalam celsius


2. Memiliki faktor skala linear + 10.0 mV/C
3. Memiliki ketetapan 0,5C pada suhu 25C
4. Jangkauan maksimal suhu antara -55C sampai 150C
5. Cocok untuk applikasi jarak jauh

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 69


6. Harganya cukup murah
7. Bekerja pada tegangan catu daya 4 sampai 30Volt
8. Memiliki arus drain kurang dari 60 uAmp
9. Pemanasan sendiri yang lambat ( low self-heating)
10. 0,08C diudara diam
11. Ketidak linearanya hanya sekitar C
12. Memiliki Impedansi keluaran yang kecil yaitu 0,1 watt untuk beban 1 mAmp.

Sensor suhu tipe LM35 merupakan IC sensor temperatur yang akurat yang tegangan keluarannya linear
dalam satuan celcius. Jadi LM35 memilik kelebihan dibandingkan sensor temperatur linear dalam satuan
kelvin, karena tidak memerlukan pembagian dengan konstanta tegangan yang besar dan keluarannya
untuk mendapatkan nilai dalam satuan celcius yang tepat. LM35 memiliki impedansi keluaran yang
rendah, keluaran yang linear, dan sifat ketepatan dalam pengujian membuat proses interface untuk
membaca atau mengotrol sirkuit lebuh mudah. Pin V+ dari LM35 dihubungkan kecatu daya, pin GND
dihubungkan ke Ground dan pin Vout- yang menghasilkan tegangan analog hasil pengindera suhu
dihubungkan ke pin analog Arduino.

NTC
Sensor adalah komponen yang dapat digunakan untuk mengkonversi suatu besaran tertentu menjadi
satuan analog sehingga dapat dibaca oleh suatu rangkaian elektronik. Sensor merupakan komponen
utama dari suatu tranduser, sedangkan tranduser merupakan sistem yang melengkapi agar sensor
tersebut mempunyai keluaran sesuai yang kita inginkan dan dapat langsung dibaca pada keluarannya.
Suhu adalah salah satu gejala alam yang diukur dalam sebuah sistemkontrol. Derajat atau tingkat
kepanasan sesuatu atau obyek yang diukur. Sehingga Sensor suhu adalah alat yang digunakan untuk
merubah besaran panas menjadi besaran listrik yang dapat dengan mudah dianalisis besarnya. Ada
beberapa metode yang digunakan untuk membuat sensor ini, salah satunya dengan cara menggunakan
material yang berubah hambatannya terhadap arus listrik sesuai dengan suhunya. Sensor adalah alat
yang digunakan untuk mengubah besaran mekanis, magnetis, panas, sinar, dan kimia menjadi tegangan
dan arus listrik. Sensor sering digunakan untuk pendeteksian pada saat melakukan pengukuran atau
pengendalian. Sensor suhu adalah alat atau komponen atau sensor elektronika yang dipakai untuk
mengukur suhu. Pada percobaan ini kita menggunakan sensor suhu yang menggunakan termistor atau
yang menggunakan resistor NTC atau PTC.

Prinsip dasar dari termistor adalah perubahan nilai tahanan (atau hambatan atau werstan atau
resistance) jika suhu atau temperatur yang mengenai termistor ini berubah. Termistor ini merupakan
gabungan antara kata termo (suhu) dan resistor (alat pengukur tahanan). Sensor suhu termistor

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 70


ditemukan oleh Samuel Ruben pada tahun 1930, dan mendapat hak paten di Amerika Serikat dengan
nomor #2.021.491. Ada dua macam termistor secara umum: Posistor atau PTC (Positive Temperature
Coefficient), dan NTC (Negative Temperature Coefficien). Nilai tahanan pada PTC akan naik jika suhunya
naik, sementara NTC justru kebalikannya. Termistor adalah salah satu jenis sensor suhu yang mempunyai
koefisien temperatur yang tinggi.dimana komponen ini dapat mengubah nilai resistansi karena adanya
perubahan temperatur. Dengan demikian dapat memudahkan kita untuk dijadikan sebagai mengubah
energi panas menjadi energi listrik.termistor dibedakan dalam 3 jenis,yaitu termistor yang mempunyai
koefisien negatif, yang disebut NTC ( Negative temperature Coefisient), temistor yang mempunyai
koefisien positif, yang disebut PTC (positive Temperature Coefisient) dan termistor yang mempunyai
tahanan kritis, yaitu CTR ( Critical Temperature Resistance).

Metode Pembuatan Sensor Suhu

1. Menggunakan Bahan Logam


Logam akan bertambah besar hambatannya terhadap arus listrik jika panasnya bertambah. Hal
ini dapat dijelaskan dari sisi komponen penyusun logam. Logam dapat dikatakan sebagai muatan
positif yang berada di dalam elektron yang bergerak bebas. Jika suhu bertambah, elektron-
elektron tersebut akan bergetar dan getarannya semakin besar seiring dengan naiknya suhu.
Dengan besarnya getaran tersebut, maka gerakan elektron akan terhambat dan menyebabkan
nilai hambatan dari logam tersebut bertambah.
2. Menggunakan Bahan Semi Konduktor
Bahan semikonduktor mempunyai sifat terbalik dari logam, semakin besar suhu, nilai hambatan
akan semakin turun. Hal ini dikarenakan pada suhu yang semakin tinggi, elektron dari
semikonduktor akan berpindah ke tingkat yang paling atas dan dapat bergerak dengan bebas.
Seiring dengan kenaikan suhu, semakin banyak elektron dari semikonduktor tersebut yang
bergerak bebas, sehingga nilai hambatan tersebut berkurang. Untuk mendapatkan sinyal listrik
yang baik dengan sedikit kegaduhan, dapat digunakan jembatan Wheatstone dan rangkaian Lock
in Amplifier.
NTC (Negative Temperature Coeficient ) adalah jenis resistor non linier yang nilai hambatannya
terpengaruh oleh perubahan suhu. Makin tinggi suhu yang mempengaruhi makin kecil nilai
hambatannya. NTC, termistor yang mempunyai koefisient negatif yang tinggi, termistor jenis ini
dibuat dari oksida logam yang terdapat dar golongan transisi, seperti ZrO2 - Y2P3 NiAI2O3
Mg(Al, Cr,Fe). oksida-oksida ini sebenarnya mempunyai resistansi yang sangat tingg, tetapi dapat

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 71


diubah menjadi bahan semikonduktor dengan menambahkan beberapa ion lain yang
mempunyai valensi yang berbeda disebut dengan doping. dan pengaruh dari resistansinya
dipengaruhi perubahan temperatur yang diberikan.

Gambar 9.6. Bentuk Fisik dan Simbol NTC

Percobaan 11.A

LDR (light Dependent Resistor) adalah suatu resistor yang nilai resistansinya bergantung pada cahaya
(Jika mendapat cahaya terang, nilai resistansi kecil sekitar puluhan s/d ratusan Ohm, jika kondisi gelap
nilai resistansi akan besar bisa mencapai puluhan-ratusan KOhm bahkan bisa mencapai MOhm),
umumnya LDR digunakan sebagai sensor cahaya. sensor LDR merupakan sensor yang cukup murah dan
mudah digunakan.

Rangkaianlah rangkaian percobaan seperti pada gambar dibawah ini.

Untuk program uji coba dari rangkaian diatas dapat dituliskan program berikut ini

int LDR_Pin = A0; //analog pin 0


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

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 72


void loop(){
int LDRReading = analogRead(LDR_Pin);

Serial.println(LDRReading);
delay(250); //just here to slow down the output for easier reading
}

Contoh lain untuk aplikasi LDR sebagai berikut

#include <LiquidCrystal.h>
int led7 = 7;
int led6 = 6;
int led5 = 5;
int led4 = 4;
int led3 = 3;
int led2 = 2;
int led1 = 1;
int led0 = 0;
LiquidCrystal lcd(13,12,11,10,9,8);
void setup() {
lcd.begin(16,2);

pinMode(led0, OUTPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 73


pinMode(led4, OUTPUT);
pinMode(led5, OUTPUT);
pinMode(led6, OUTPUT);
pinMode(led7, OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
int LDR= analogRead(A0);
int temp=map(LDR,0,1023,0,255);
lcd.setCursor(0,0);
lcd.print("Nilai data ADC :");
lcd.setCursor(0,1);
lcd.print(temp);
delay(10);
lcd.clear();

if(temp==0){
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
digitalWrite(led5, LOW);
digitalWrite(led6, LOW);
digitalWrite(led7, LOW);
}
if(temp>0){
digitalWrite(led7, HIGH);
}
if(temp>32){
digitalWrite(led6, HIGH);
}
if(temp>64){
digitalWrite(led5, HIGH);
}
if(temp>96){
digitalWrite(led4, HIGH);
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 74


if(temp>128){
digitalWrite(led3, HIGH);
}
if(temp>160){
digitalWrite(led2, HIGH);
}
if(temp>192){
digitalWrite(led1, HIGH);
}
if(temp>224){
digitalWrite(led0, HIGH);
}
////////////////////////////////
if(temp<0){
digitalWrite(led7, LOW);
}
if(temp<32){
digitalWrite(led6, LOW);
}
if(temp<64){
digitalWrite(led5, LOW);
}
if(temp<96){
digitalWrite(led4, LOW);
}
if(temp<128){
digitalWrite(led3, LOW);
}
if(temp<160){
digitalWrite(led2, LOW);
}
if(temp<192){
digitalWrite(led1, LOW);
}
if(temp<224){
digitalWrite(led0, LOW);
}
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 75


Percobaan 11B

Seri sensor suhu LM35 memiliki keluaran tegangan (Vout) yang linearly proportionalterhadap suhu
Celcius (Centigrade); faktor skala-nya +10mV/derajat Celcius. Kenaikan Vout 10mV menunjukkan ada
kenaikan suhu sebesar 1 derajat Celcius.
Menghitung Vout:

Vout dalam milivolt = sensorValue * (5 * 1000/1024)

1024 adalah resolusi ADC: 10bit. 5 adalah Analog Reference (ARef); dalam milivolt menjadi: 5 * 1000.
Default library arduino menggunakan resolusi ADC 10bit dan ARef = Vcc (+5V pada Sasakala-M328).

Menghitung Suhu (Celcius):

suhuCelcius = Vout dalam miliVolt / 10 = sensorValue * (500/1024)

void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
int sensorValue = analogRead(A0);
float volt = sensorValue/1024.0 * 5;
float suhu = 100 * volt;

Serial.print("Sensor Value : "); Serial.println(sensorValue);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 76


Serial.print("Input Volt : "); Serial.println(volt);
Serial.print("Suhu : "); Serial.println(suhu);
delay(1000);
}

Percobaan 11C

Thermistor NTC-3950 dengan nilai hambatan 100 K ini


berpresisi tinggi (nilai toleransi hanya 1%), dengan rentang suhu
operasional yang lebar antara -45C hingga +395C ideal untuk
digunakan sebagai sensor temperatur pada sistem injeksi plastik
semacam 3D Reprap Printer.
NTC atau Negative-Temperature-Coefficient Thermistor adalah
komponen elektronika yang termasuk dalam kelompok resistive
transducer, di mana nilai hambatan dari termistor ini menurun
sesuai dengan perubahan suhu. Artinya semakin panas
temperatur yang terpapar pada komponen sensor ini, semakin
kecil hambatan dan semakin besar arus yang dapat melewatinya. Perubahan ini juga dapat dibaca sebagai
perubahan tegangan dengan memasangkan termistor dalam sirkuit pembagi tegangan (voltage divider
circuit).

Thermistor ini berukuran sangat kecil dengan lebar hanya 0,8 mm dan panjang 1,5 mm sehingga
fleksibel untuk ditempatkan pada ruang terbatas, misalnya pada sisi injector nozzle. Angka "3950"
merupakan konstanta thermistor (istilahnya "B-Constant" atau sering juga direferensikan sebagai "B-
Value") yang merupakan fungsi thermistor terhadap temperatur absolut, yang dapat digunakan pada
perhitungan berdasarkan rumus sbb.:

R = R0 x exp(B) x ( 1/T - 1/T0 )


R adalah nilai resistansi yang terukur / terdeteksi saat sensor ini difungsikan.
R0 (dalam ) adalah resistansi pada suhu T0 (dalam Kelvin).

Thermistor ini memiliki nilai R0 = 100K pada T0 = 25C + 298 = 323K. dengan B25/50 = 3950K. Dengan
demikian, rumus tersebut dapat diturunkan dan disederhanakan menjadi (T dalam Kelvin):

T = 3950 / ln( R / { 100000 x e(-3950 / 323) } )

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 77


Untuk mendapatkan suhu dalam Celcius, cukup kurangkan nilai T di atas dengan 298.
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
}

void loop() {
// put your main code here, to run repeatedly:
int sensorValue = analogRead(A2);
float volt = sensorValue/1024.0 * 5;
float suhu = 100 * volt;

Serial.print("Sensor Value : "); Serial.println(sensorValue);


Serial.print("Input Volt : "); Serial.println(volt);
Serial.print("Suhu : "); Serial.println(suhu);
delay(1000);
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 78


BAB X : PERCOBAAN MOTOR DC DAN SERVO

TUJUAN
1. Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor DC dan motor
Servo
2. Mahasiswa memahami rangkaian driver motor DC L293D
3. Mahasiswa memahami program Arduino untuk mengatur arah putaran motor DC
4. Mahasiswa memahami program Arduino untuk mengatur arah sudut putaran motor Servo
5. Mahasiswa memahami program Arduino untuk mengatur arah kecepatan motor DC

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
MOTOR DC
Motor DC merupakan jenis motor yang menggunakan tegangan searah sebagai sumber tenaganya.
Dengan memberikan beda tegangan pada kedua terminal tersebut, motor akan berputar pada satu arah,
dan bila polaritas dari tegangan tersebut dibalik maka arah putaran motor akan terbalik pula seperti
pada gambar 10.1. Polaritas dari tegangan yang diberikan pada dua terminal menentukan arah putaran
motor sedangkan besar dari beda tegangan pada kedua terminal menentukan kecepatan motor

Gambar 10.1. Konstruksi motor DC

Konstruksi motor DC pada gambar 10.1 memiliki 2 bagian dasar,yaitu :


1. Bagian yang tetap/stasioner yang disebut stator. Stator ini menghasilkan medan magnet, baik yang
dibangkitkan dari sebuah koil (elektro magnet) ataupun magnet permanen.
2. Bagian yang berputar disebut rotor. Rotor ini berupa sebuah koil dimana arus listrik mengalir.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 79


Gaya elektromagnet pada motor DC timbul saat ada arus yang mengalir pada penghantar yang berada
dalam medan magnet. Medan magnet itu sendiri ditimbulkan oleh megnet permanen. Garis-garis gaya
magnet mengalir diantara dua kutub magnet dari kutub utara ke kutub selatan. Menurut hukum gaya
Lourentz, arus yang mengalir pada penghantar yang terletak dalam medan magnet akan menimbulkan
gaya. Gaya F, timbul tergantung pada arah arus I, dan arah medan magnet B.

Driver Motor DC dengan IC L293D


Pada dasarnya beberapa aplikasi yang menggunakan motor DC harus dapat mengatur kecepatan dan
arah putar dari motor DC itu sendiri. Untuk dapat melakukan pengaturan kecepatan motor DC dapat
menggunakan metode PWM (Pulse Width Modulation) sedangkan untuk mengatur arah putarannya
dapat menggunakan rangkaian H-bridge yang tersusun dari 4 buah transistor. Tetapi dipasaran telah
disediakan IC L293D sebagai driver motor DC yang dapat mengatur arah putar dan disediakan pin
untuk input yang berasal dari PWM untuk mengatur kecepatan motor DC. Untuk lebih memahami
tentang membangkitkan sinyal PWM menggunakan fitur Timer pada mikrokontroler AVR dapat
membacanya pada postingan tutorial AVR tentang PWM. Sebelum membahas tentang IC L293D,
alangkah baiknya jika kita membahas driver motor DC menggunakan rangkaian analog terlebih dahulu.
Jika diinginkan sebuah motor DC yang dapat diatur kecepatannya tanpa dapat mengatur arah putarnya,
maka kita dapat menggunakan sebuah transistor sebagai driver. Untuk mengatur kecepatan putar motor
DC digunakan PWM yang dibangkitkan melalui fitur Timer pada mikrokontroler. Sebagian besar power
supply untuk motor DC adalah sebesar 12 V, sedangkan output PWM dari mikrokontroler maksimal
sebesar 5 V. Oleh karena itu digunakan transistor sebagai penguat tegangan. Dibawah ini
adalah gambar driver motor DC menggunakan transistor. Salah satu jenis motor yang sering digunakan
dalam bidang kontrol yaitu Motor DC. Motor DC akan berputar jika dialiri tegangan dan arus DC.
Berikut gambar 10.2 adalah motor DC dan jembatan H yang digunakan pada rancangan alat ini:

Gambar 10.2. Rangkaian Jembatan H

Sistem pengaturan motor DC yang sering digunakan pada sistem kontrol seperti pada gambar 10.2 yaitu
dengan H-Bridge yang pada pada dasarnya adalah 4 buah transistor yang difungsikan sebagai saklar.
Pengaturan motor DC yaitu meliputi kecepatan dan arah. Pengaturan arah yaitu dengan cara membalik

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 80


tegangan logika masukan H-bridge. Sedangkan sistem pengendalian kecepatan motor DC digunakan
prinsip PWM (Pulse Width Modulator) yaitu suatu metode pengaturan kecepatan putaran motor DC
dengan mengatur lamanya waktu pensaklaran aktif (Duty Cycle). Motor DC merupakan sebuah
komponen yang memerlukan arus yang cukup besar untuk menggerakannya. Oleh karena itu motor DC
biasanya memiliki penggerak tersendiri. Pada tugas akhir ini motor DC akan digerakkan dengan
menggunakan PWM yang telah terintegrasi dengan rangkaian HBridge. Dengan rangkaian H-Bridge
yang memiliki input PWM ini, maka selain arah kita juga bisa mengendalikan kecepatan putar motor DC
tersebut.

Motor Servo
Motor servo adalah motor yang mampu bekerja dua arah (clockwise dan counter clockwise), dengan
arah dan sudut pergerakan rotornya dapat dikontrol hanya dengan memberikan sinyal PWM pada
bagian pin kontrolnya. Motor Servo merupakan sebuah motor DC yang memiliki rangkaian kontrol
elektronika dan internal gear, untuk mengontrol pergerakan serta sudut angularnya. Motor servo dapat
berputar dengan lambat, yang biasanya ditunjukkan oleh rate putarannya yang lambat. Akan tetapi,
motor servo memiliki torsi yang kuat karena internal gear nya.
Motor servo mempunyai beberapa ukuran dan tipe yang dapat digunakan untuk segala kebutuhan mulai
dari mesin fotokopi, model pesawat terbang, dan model mobil. Aplikasi terbaru dari motor servo yaitu
digunakan untuk aplikasi pembuatan robot. Motor servo pada awalnya dibuat untuk dioperasikan
melewati saluran radio kontrol dan biasanya mengacu pada radio kontrol. Motor servo tersebut bergerak
dengan sinyal yang berasal dari penerima. Adapun jenis-jenis motor servo yaitu :
a) Motor Servo Standar 180
Motor servo jenis ini mampu bergerak dua arah (clockwise dan counter - clockwise) dengan defleksi
masing-masing sudut mencapai 90, sehingga total defleksi sudut dari kanan-tengah-kiri adalah
180.
b) Motor Servo Continuous
Motor servo jenis ini mampu bergerak dua arah (clockwise dan counter - clockwise) tanpa batasan
defleksi sudut putar (dapat berputar secara kontinu). Untuk beroperasi, motor servo membutuhkan
catu daya 5V DC. Kabel merah dihubungkan ke Vdd (+), kabel hitam dihubungksn ke Vss (ground),
dan sinyal kontrol PWM dihubungkan dengan kabel putih. Pada Gambar 10.3 dan Gambar 10.4
menunjukkan bentuk beserta koneksi kabel motor servo.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 81


Gambar 10.3. Komponen Motor Servo Gambar 10.4. Skema Motor Servo

Secara umum, motor servo terdiri atas sebuah rangkaian pengontrol, sebuah potensiometer, dan sejumlah
gear untuk memperbesar torsi. Motor dan potensiometer dihubungkan ke rangkaian pengontrol dan
ketiganya membentuk sistem loop tertutup. Untuk mengaktifkan motor, sebuah sinyal digital dikirim ke
rangkaian pengontrol. Potensiometer ini bertugas memonitor sudut poros motor
servo. Motor akan berputar ke arah sudut yang diinginkan sampai sudut poros motor servo sesuai dengan
yang diinginkan, kemudian motor akan berhenti bergerak. Pada umumnya motor servo didesain untuk
rotasi yang terbatas yaitu berkisar antara 0 sampai 180. Sebuah motor servo yang normal tidak dapat
berputar lebih jauh, dikarenakan sebuah penghalang mekanik yang diselipkan
pada roda gigi keluaran utama. Motor servo dapat berotasi secara penuh dengan melakukan suatu
modifikasi.

Gambar 10.5. Bagian dari Motor Servo

Gambar 10.5. adalah bagian dalam motor servo yang memperlihatkan poros motor servo yang
terhubung dengan potensiometer. Gear di tengah digunakan sebagai penghubung antara gear poros
motor servo, dan gear potensiometer. Setiap perubahan sudut poros motor servo akan mengubah posisi
potensiometer. Hal ini membuat posisi poros motor servo dapat diketahui dengan tepat. Besar daya yang
dibutuhkan motor servo sebanding dengan sudut yang perlu ditempuh poros. Motor servo menerapkan
sistem kontrol proporsional. Jika poros perlu berputar jauh maka poros akan bergerak dengan kecepatan
penuh, namun jika sudut tempuh poros dekat maka poros akan bergerak perlahan.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 82


Untuk mendapatkan sudut yang diinginkan maka motor servo harus mendapatkan input lebar
pulsa yang tepat. Motor Servo diharapkan menerima pulsa setiap 20 milidetik. Sudut keluaran motor
servo ditentukan oleh lebar pulsa yang diterima motor servo. Misalnya untuk menghasilkan sudut 90 O
(posisi netral) maka motor servo perlu menerima pilsa setiap 20 milidetik dengan masing-masing lebar
pulsa sebesar 1,5 milidetik. Jika pulsa yang diterima kurang dari 1,5 milidetik maka poros akan berputar
ke arah 0. Sebaliknya, jika pulsa yang diterima motor servo lebih dari 1,5 milidetik maka poros akan
berputar ke arah kiri.

Gambar 10.6. Lebar Pulsa

Gambar 10.6 adalah sinyal untuk mengontrol sudut motor servo. Sinyal ini berupa sinyal persegi (square)
dengan lebar pulsa high berkisar antara 0,6 milidetik sampai 2,4 milidetik. Pulsa dengan pulsa high
sebesar 0,6 milidetik akan membuat poros motor servo berada pada posisi 0. Pulsa dengan pulsa high
sebesar 1,5 milidetik akan membuat poros motor servo berada pada posisi 90 dan pulsa dengan pulsa
high sebesar 2,4 milidetik akan membuat poros motor servo berada pada posisi 180. Poros motor servo
dapat menduduki posisi lainnya dengan memberikan lebar pulsa high dengan perbandingan perubahan
satu derajat poros setiap perubahan sepuluh mikrodetik pulsa high.

Percobaan 12

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 83


int switchPin = 2; // switch input
int motor1Pin1 = 3; // pin 2 on L293D
int motor1Pin2 = 4; // pin 7 on L293D
int enablePin = 9; // pin 1 on L293D
void setup() {
// set the switch as an input:
pinMode(switchPin, INPUT);
// set all the other pins you're using as outputs:
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// set enablePin high so that motor can turn on:
digitalWrite(enablePin, HIGH);
}
void loop() {
// if the switch is high, motor will turn on one direction:
if (digitalRead(switchPin) == HIGH) {
digitalWrite(motor1Pin1, LOW); // set pin 2 on L293D low
digitalWrite(motor1Pin2, HIGH); //set pin 7 on L293D high
}
//if the switch is low,motor will turn inthe opposite direction:
else {
digitalWrite(motor1Pin1, HIGH); //set pin 2 on L293D high
digitalWrite(motor1Pin2, LOW); // set pin 7 on L293D low
}
}

Percobaan 13
Mengontrol motor servo langsung dari Arduino cukup mudah. Berikut ini contoh menggunakan servo
ukuran standar (tanpa beban) didukung langsung dari Arduino via USB.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 84


#include <Servo.h>
// membuat nama objek servo untuk pengontrolan servo
Servo myservo;
// variable untuk menyimpan posisi servo
int pos = 0;
void setup()
{
// objek servo diletakan pada pin 9
myservo.attach(9);
}
void loop()
{
// start dari 0 derajar sampai 180 derajat
for(pos = 0; pos < 180; pos += 1)
{
// pada posisi 1 derajat
// memberitahu servo untuk pergi ke posisi 'pos'
myservo.write(pos);
// tunggu 15ms untuk pencapaian posisi servo
delay(15);
}
// start dari 180 derajat ke 0 derajat
for(pos = 180; pos>=1; pos-=1)
{
// memberitahu servo untuk pergi ke
posisi 'pos'
myservo.write(pos);
// tunggu 15ms untuk pencapaian posisi servo
delay(15);
}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 85


BAB XI : PERCOBAAN REMOTE CONTROL
TUJUAN :
1. Mahasiswa mampu memahami rangkaian interface Infra merah
2. Mahasiswa mampu mengenali berbagai macam remote control
3. Mahasiswa mampu memprogram mikrokontroler untuk membaca kode remote control
4. Mahasiswa mampu mengendalikan devias dari jarak jauh

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Cahaya Infra Merah
Infra Merah sebenarnya cahaya normal dengan warna tertentu. Kita tidak bisa melihat warna ini karena
panjang gelombang 950 nm nya di bawah spektrum cahaya tampak. Itulah salah satu alasan mengapa
IR dipilih untuk tujuan remote control, kita ingin menggunakannya, tapi kita tidak tertarik melihatnya.
Meskipun kita tidak dapat melihat cahaya Infra Merah yang dipancarkan dari remote control bukan
berarti kita tidak dapat membuatnya terlihat.
Sebuah kamera video atau kamera foto digital dapat membuat kita melihat cahaya Infra Merah. Cukup
arahkan remote ke kamera tersebut, tekan sembarang tombol maka kita akan melihat kedipan

LED Infra Merah.

Gambar 11.1. Remote Control

Matahari adalah sumber cahaya dan memancar cahaya infra merah. Beberapa sumber cahaya lain misal
bola lampu, lilin, sumber pemanas dan bahkan tubuh kita memancarkan cahaya Infra Merah serta segala
sesuatu yang memancarkan panas juga memancarkan cahaya Infra Merah.
Oleh karena itu harus diambil beberapa tindakan sebagai pencegahan untuk menjamin bahwa pesan IR
yang akan dikirim ke penerima tidak mengalami error dikarenakan banyak sumber cahaya infra merah
disekitar kita sehingga mempengaruhi data yang dikirim melalui Remote Control Infra Merah.
Tindakan yang dilakukan untuk mencegah pengaruh cahaya infra merah dari sumber lain beberapa
vendor menggunakan protokol komunikasi data untuk Remote Control Infra Merah yakni dengan cara

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 86


memodulasi dengan frekuensi tertentu pada data dijital (berbentuk kedipan) sehingga dengan menset
protokol yang sama antara Transmitter dan Receiver maka sumber cahaya infra merah yang lain tidak
dapat mempengaruhi data yang dikirim.
Modulasi

Gambar 11.2 Modulasi Data

Pada gambar di atas sinyal termodulasi mengendalikan IR LED dari pemancar sinyal ke penerima. Dalam
komunikasi data dijital kita mengenal kondisi 1 dan 0 dimana 1 mewakili on(lampu menyala) dan 0
mewakili off (lampu mati). Sinyal 1 dan 0 ini dimodulasi dengan ferekunsi antara 30kHz dan 60kHz.

Transmitter

Gambar 11.3. Pemancar Remote Control

Gambar diatas merupakan contoh umum pemancar (transmitter) pada Remote Control Infra Merah.
Masukan pada basis transistor merupakan data digital yang sudah termodulasi dengan frekuensi
tertentu dari mikrokontroller.

Receiver

Gambar 11.4. Penerima Remote Control


Pada gambar di atas merupakan diagram blok dari penerima IR dan semuanya dibangun dalam satu
rangkaian terpadu.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 87


Sinyal yang diterima IR deteksi photo dioda penerima. Sinyal ini diperkuat dan dibatasi oleh pertama 2
tahap. Limiter bertindak sebagai rangkaian AGC untuk mendapatkan tingkat pulsa konstan. Sinyal
gelomang kotak dikirim ke Band Pass Filter. Band Pass Filter diset pada frekuensi modulasi unit penerima
dan umumnya Frekuensi berkisar antara 30kHz sampai 60kHz.
Tahap berikutnya adalah detektor, integrator dan komparator. Tujuan dari tiga blok adalah untuk
mendeteksi keberadaan frekuensi modulasi.

Percobaan 14
Ketiklah program dibawah ini untuk menangkap sinyal infra merah dari remote control dan selanjutnya
memproses menjadi kode hexadecimal dan ditampilkan pada layar serial monitor

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
}

Percobaan 15
Ketik Program dibawah ini untuk latihan mengenali tombol-tombol remote control merk Sony dan
Chung He dan hasilnya ditampilkan dalam sebuah led pada pin 13 dari mikrokontroler Arduino

#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);

decode_results results;

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 88


long data;
char alamat, remote;

void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
pinMode(2,INPUT_PULLUP);
pinMode(3,INPUT_PULLUP);
pinMode(4,INPUT_PULLUP);
pinMode(5,INPUT_PULLUP);
pinMode(13,OUTPUT);
}

void baca_dip_switch()
{
if ((digitalRead(2) == LOW)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == LOW))
{alamat = '0';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == LOW))
{alamat = '1';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == LOW))
{alamat = '2';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == LOW))
{alamat = '3';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == LOW))
{alamat = '4';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == LOW))
{alamat = '5';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == LOW))
{alamat = '6';}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 89


if ((digitalRead(2) == HIGH)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == LOW))
{alamat = '7';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == HIGH))
{alamat = '8';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == HIGH))
{alamat = '9';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == HIGH))
{alamat = 'A';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
LOW)&&(digitalRead(5) == HIGH))
{alamat = 'B';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == HIGH))
{alamat = 'C';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == LOW)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == HIGH))
{alamat = 'D';}
if ((digitalRead(2) == LOW)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == HIGH))
{alamat = 'E';}
if ((digitalRead(2) == HIGH)&&(digitalRead(3) == HIGH)&&(digitalRead(4) ==
HIGH)&&(digitalRead(5) == HIGH))
{alamat = 'F';}
}

void banding()
{
baca_dip_switch();
if (remote == alamat)
digitalWrite(13,HIGH);
if (remote == 'X')
digitalWrite(13,LOW);
}
void RC_Sony_RM827S()

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 90


{
//---------------------------------
//Remote Sony RM-827S
//---------------------------------
if (results.value == 0x10){
Serial.println('1');
remote = '1';}
else if (results.value == 0x810) {
Serial.println('2');
remote = '2';}
else if (results.value == 0x410) {
Serial.println('3');
remote = '3';}
else if (results.value == 0xC10) {
Serial.println('4');
remote = '4';}
else if (results.value == 0x210) {
Serial.println('5');
remote = '5';}
else if (results.value == 0xA10) {
Serial.println('6');
remote = '6';}
else if (results.value == 0x610) {
Serial.println('7');
remote = '7';}
else if (results.value == 0xE10) {
Serial.println('8');
remote = '8';}
else if (results.value == 0x110) {
Serial.println('9');
remote = '9';}
else if (results.value == 0x910) {
Serial.println('0');
remote = '0';}
else if (results.value == 0x310) {
Serial.println('A');
remote = 'A';}
else if (results.value == 0xB10) {

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 91


Serial.println('B');
remote = 'B';}
else if (results.value == 0x490) {
Serial.println('C');
remote = 'C';}
else if (results.value == 0xC90) {
Serial.println('D');
remote = 'D';}
else if (results.value == 0x90) {
Serial.println('E');
remote = 'E';}
else if (results.value == 0x890) {
Serial.println('F');
remote = 'F';}
else if (results.value == 0xA90) {
Serial.println('X');
remote = 'X';}
else Serial.print(' ');
}

void RC_chung_he_SMG1()
{
//---------------------------------
//Remote CHUNG HE SMG-1 D024 01 A-0028B
//---------------------------------
if (results.value == 0xE13DDA28){
Serial.println('1');
remote = '1';}
else if (results.value == 0xAD586662) {
Serial.println('2');
remote = '2';}
else if (results.value == 0x273009C4) {
Serial.println('3');
remote = '3';}
else if (results.value == 0xF5999288) {
Serial.println('4');
remote = '4';}
else if (results.value == 0x731A3E02) {

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 92


Serial.println('5');
remote = '5';}
else if (results.value == 0x2C452C6C) {
Serial.println('6');
remote = '6';}
else if (results.value == 0x4592E14C) {
Serial.println('7');
remote = '7';}
else if (results.value == 0x6825E53E) {
Serial.println('8');
remote = '8';}
else if (results.value == 0x8B8510E8) {
Serial.println('9');
remote = '9';}
else if (results.value == 0xB9F56762) {
Serial.println('0');
remote = '0';}
else if (results.value == 0x52A5A66) {
Serial.println('A');
remote = 'A';}
else if (results.value == 0xCA8CBCC6) {
Serial.println('B');
remote = 'B';}
else if (results.value == 0x83B19366) {
Serial.println('C');
remote = 'C';}
else if (results.value == 0x68733A46) {
Serial.println('D');
remote = 'D';}
else if (results.value == 0x189D7928) {
Serial.println('E');
remote = 'E';}
else if (results.value == 0x5F12E8C4) {
Serial.println('F');
remote = 'F';}
else if (results.value == 0xF4BA2988) {
Serial.println('X');
remote = 'X';}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 93


else Serial.print(' ');
}
void loop() {
if (irrecv.decode(&results))
{
//data = results.value;
RC_Sony_RM827S();
RC_chung_he_SMG1();
irrecv.resume(); // Receive the next value
}
banding();
// Serial.print(alamat);
delay(500);
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 94


BAB XII : PERCOBAAN MOTOR STEPPER
TUJUAN
1. Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor stepper
2. Mahasiswa memahami rangkaian driver motor stepper ULN2003
3. Mahasiswa memahami bahasa C Arduino untuk mengatur arah putaran motor stepper
4. Mahasiswa memahami bahasa C Arduino untuk mengatur arah putaran motor stepper
dengan menggunakan saklar.

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Motor stepper adalah perangkat elektromekanis yang bekerja dengan mengubah pulsa elektronis
menjadi gerakan mekanis diskrit. Motor stepper bergerak berdasarkan urutan pulsa yang diberikan
kepada motor. Karena itu, untuk menggerakkan motor stepper diperlukan pengendali motor stepper yang
membangkitkan pulsa-pulsa periodik. Penggunaan motor stepper memiliki beberapa keunggulan
dibandingkan dengan penggunaan motor DC biasa.
Keunggulannya antara lain adalah :
Sudut rotasi motor proporsional dengan pulsa masukan sehingga lebih mudah diatur.
Motor dapat langsung memberikan torsi penuh pada saat mulai bergerak
Posisi dan pergerakan repetisinya dapat ditentukan secara presisi
Memiliki respon yang sangat baik terhadap mulai, stop dan berbalik (perputaran)
Sangat realibel karena tidak adanya sikat yang bersentuhan dengan rotor seperti pada motor DC
Dapat menghasilkan perputaran yang lambat sehingga beban dapat dikopel langsung ke porosnya
Frekuensi perputaran dapat ditentukan secara bebas dan mudah pada range yang luas.

Pada dasaranya terdapat 3 tipe motor stepper yaitu:


1. Motor stepper tipe Variable reluctance (VR)
Motor stepper jenis ini telah lama ada dan merupakan jenis motor yang secara struktural paling mudah
untuk dipahami. Motor ini terdiri atas sebuah rotor besi lunak dengan beberapa gerigi dan sebuah lilitan
stator. Ketika lilitan stator diberi energi dengan arus DC, kutub-kutubnya menjadi termagnetasi.
Perputaran terjadi ketika gigi-gigi rotor tertarik oleh kutub-kutub stator. Berikut ini adalah penampang
melintang dari motor stepper tipe variable reluctance (VR):

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 95


Gambar 12.1. Penampang melintang dari motor stepper tipe variable reluctance (VR)

2. Motor stepper tipe Permanent Magnet (PM)


Motor stepper jenis ini memiliki rotor yang berbentuk seperti kaleng bundar (tin can) yang terdiri atas
lapisan magnet permanen yang diselang-seling dengan kutub yang berlawanan (perhatikan gambar
12.2). Dengan adanya magnet permanen, maka intensitas fluks magnet dalam motor ini akan
meningkat sehingga dapat menghasilkan torsi yang lebih besar. Motor jenis ini biasanya memiliki
resolusi langkah (step) yang rendah yaitu antara 7,50 hingga 150 per langkah atau 48 hingga 24
langkah setiap putarannya. Berikut ini adalah ilustrasi sederhana dari motor stepper tipe permanent
magnet:

Gambar 12.2. Ilustrasi sederhana dari motor stepper tipe permanent magnet (PM)

3. Motor stepper tipe Hybrid (HB)


Motor stepper tipe hibrid memiliki struktur yang merupakan kombinasi dari kedua tipe motor stepper
sebelumnya. Motor stepper tipe hibrid memiliki gigi-gigi seperti pada motor tipe VR dan juga memiliki
magnet permanen yang tersusun secara aksial pada batang porosnya seperti motor tipe PM. Motor tipe
ini paling banyak digunkan dalam berbagai aplikasi karena kinerja lebih baik. Motor tipe hibrid dapat
menghasilkan resolusi langkah yang tinggi yaitu antara 3,60 hingga 0,90 per langkah atau 100-400

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 96


langkah setiap putarannya. Berikut ini adalah penampang melintang dari motor stepper tipe hibrid:

Gambar 12.3. Penampang melintang dari motor stepper tipe hybrid

Berdasarkan metode perancangan rangkain pengendalinya, motor stepper dapat dibagi menjadi jenis
unipolar dan bipolar. Rangkaian pengendali motor stepper unipolar lebih mudah dirancang karena
hanya memerlukan satu switch / transistor setiap lilitannya. Untuk menjalankan dan menghentikan
motor ini cukup dengan menerapkan pulsa digital yang hanya terdiri atas tegangan positif dan nol
(ground) pada salah satu terminal lilitan (wound) motor sementara terminal lainnya dicatu dengan
tegangan positif konstan (VM) pada bagian tengah (center tap) dari lilitan (perhatikan gambar 12.4).

Gambar 12.4. Motor stepper dengan lilitan unipolar

Untuk motor stepper dengan lilitan bipolar, diperlukan sinyal pulsa yang berubah-ubah dari positif ke
negatif dan sebaliknya. Jadi pada setiap terminal lilitan (A & B) harus dihubungkan dengan sinyal yang
mengayun dari positif ke negatif dan sebaliknya (perhatikan gambar 12.5). Karena itu dibutuhkan
rangkaian pengendali yang agak lebih kompleks daripada rangkaian pengendali untuk motor unipolar.
Motor stepper bipolar memiliki keunggulan dibandingkan dengan motor stepper unipolar dalam hal torsi
yang lebih besar untuk ukuran yang sama.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 97


Gambar 12.5. Motor stepper dengan lilitanbipolar

Berikut ini adalah ilustrasi struktur motor stepper sederhana dan pulasa yang dibutuhkan untuk
menggerakkannya:

.Gambar 12.6. (a) bentuk pulsa keluaran dari pengendali motor stepper (b) penerapan pulsa
pengendali pada motor stepper dan arah putaran yang bersesuaian

Percobaan 16
Mengatur kecepatan motor stepper dengan potensio meter (VR), yaitu potensio mengatur besar tegangan
(0-5 volt) yang jadi inputan port ADC Arduino. Pada saat potensio diputar ke kanan maka tegangan
keluaran potensio meningkat mendekati 5 volt dan bila diputar ke kiri tegangan keluaran potensio
semakin kecil mendekati 0 volt. Sehingga kecepatan putar motor stepper berbanding lurus dengan
tegangan input analog dari potensio. Motor stepper merupakan motor dengan sinyal DC yang diatur arah
putaran dan kecepatannya dengan pengaturan sinyal yang diberikan. Berikut gambar skematik diagram
motor stepper unipolar 4 phase dengan 8 dan 6 kabel output.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 98


Gambar 12.7. Lilitan Motor Stepper

Komponen yang diperlukan :

1. Lampu led merah 4x


2. Resistor 1K 4x
3. Dioda in4001 (1A)

4. Potensio/trimpot (VR) 10K 1

5. IC ULN 2803

6. Breadboard

7. Kabel Jumper

8. Motor Stepper Unipolar 4 phase


9. Power Supply 5V 1A
10. Minimum sistem board Arduino

Koneksi Rangkaian

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 99


Penulisan Program
//Kendali Kecepatan Motor Stepper dengan Potensio
int tunda = 0; //deklarasi variabel tunda
int sensorValue = 0; //deklarasi variabel sensor value
int outputValue = 0;

const int phase1 = 2; //deklarasi pin phase1 pada kaki port D2


const int phase2 = 4;
const int phase3 = 3;
const int phase4 = 5;
const int analogIn = A4; //deklarasi pin analogIn pada pin 18 / ADC 4

void setup()
{
pinMode (phase1, OUTPUT); //phase1 sebagai output
pinMode (phase2, OUTPUT);
pinMode (phase3, OUTPUT);
pinMode (phase4, OUTPUT);
pinMode (analogIn, INPUT); //analogIn sebagai input analog
Serial.begin (9600); //inisialisasi komunikasi serial pada 9600 bps
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 100


void loop() //loping / pengulangan terus menerus
{
siklusADC(); //deklarasi void siklus ADC
powerStepper(); //deklarasi void powerStepper
}

void siklusADC() //kode program void siklusADC


{
sensorValue = analogRead (analogIn); //membaca sinyal analog pada pin analogIn
outputValue = map (sensorValue, 0, 1023, 0, 255); //maping dari nilai 1023 jadi 255
Serial.print ("outputValue= "); //mencetak pada serial monitor
Serial.println (outputValue, DEC); //menulis nilai dalam desimal

if (outputValue < 20) //membuat tingkatan dengan metode if


{tunda = 500;} //memberikan nilai pada variabel tunda
else
if (outputValue < 30)
{tunda = 300;}
else
if (outputValue < 70)
{tunda = 200;}
else
if (outputValue < 100)
{tunda = 100;}
else
if (outputValue < 140)
{tunda = 50;}
else
if (outputValue < 170)
{tunda = 20;}
else
if (outputValue < 200)
{tunda = 10;}
else
if (outputValue < 240)
{tunda = 5;}
else
{tunda = 2;}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 101


delayMicroseconds (tunda); //jeda waktu delay sama dengan nilai tunda
}

void powerStepper() //susunan program void powerStepper


{
digitalWrite (phase1, HIGH); //tahap sinyal pertama phase1 diberi sinyal high
digitalWrite (phase2, LOW); //tahap sinyal pertama phase2 diberi sinyal low
digitalWrite (phase3, LOW); // tahap sinyal pertama phase3 diberi sinyal low
digitalWrite (phase4, LOW); // tahap sinyal pertama phase4 diberi sinyal low
delay (tunda); //jeda waktu delay sama dengan nilai tunda
digitalWrite (phase1, LOW); //tahap sinyal kedua
digitalWrite (phase2, LOW);
digitalWrite (phase3, LOW);
digitalWrite (phase4, HIGH);
delay (tunda);
digitalWrite (phase1, LOW); // tahap sinyal ketiga
digitalWrite (phase2, LOW);
digitalWrite (phase3, HIGH);
digitalWrite (phase4, LOW);
delay (tunda);
digitalWrite (phase1, LOW); // tahap sinyal ke empat
digitalWrite (phase2, HIGH);
digitalWrite (phase3, LOW);
digitalWrite (phase4, LOW);
delay (tunda);
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 102


BAB XIII : SENSOR ULTRASONIC
TUJUAN
1. Mahasiswa mampu membuat interface mikrokontroler Arduino dengan modul sensor ultra
sonic HC-SR04
2. Mahasiswa mampu membuat program untuk mengendalikan modul Sensor Ultrasonic
3. Mahasiswa mampu menggunakan modul sensor ultrasonic sebagai alat ukur jarak

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Sensor jarak ultrasonik sangat cocok dipakai untuk aplikasi-aplikasi yang perlu melakukan pengukuran
jarak. Secara umum, sensor ini sangat populer untuk dipakai pada aplikasi-aplikasi robotika. Selain itu,
sensor ini juga bisa bermanfaat dalam sistem security dan sebagai alternatif lain penggantian sensor jarak
infrared. Sensor jarak ultrasonik yang dipakai dalam tugas akhir ini adalah sensor Parallax's PING)))
Ultrasonic Range Finder atau biasa disebut dengan sensor PING. Berdasarkan datasheet, sensor PING ini
dapat digunakan untuk mengukur jarak benda sejauh 3cm sampai 300cm. Dimensi dan kaki pin sensor
PING ditunjukkan pada Gambar 13.1.

Gambar 13.1. Sensor Ultrasonic

Sensor PING mendeteksi jarak objek dengan cara memancarkan gelombang ultrasonik (40kHz) selama
tBURST (200s) kemudian mendeteksi pantulannya. Sensor PING memancarkan gelombang ultrasonik
sesuai dengan sinyal kontrol dari pengontrol mikro (sinyal kontrol berupa pulsa trigger dengan tOUT
min 2s). Gelombang ultrasonik ini melalui udara dengan kecepatan 344m/s, mengenai objek, kemudian
memantul kembali ke sensor. Sensor PING
mengeluarkan pulsa output high pada pin SIG setelah memancarkan gelombang ultrasonik. Setelah
gelombang pantulan terdeteksi, sensor PING akan membuat output low pada pin SIG. Lebar pulsa high
(tIN) akan sama dengan lama waktu dipancarkan sampai diterima kembali pantulan gelombang

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 103


ultrasonik akibat objek. Maka jarak yang diukur dapat dilihat pada Persamaan berikut. Ilustrasi cara kerja
sensor PING ditunjukkan pada Gambar 13.2. Untuk dapat lebih memahami penggunaan cara kerja
sensor PING, pada Gambar 2.13 ditunjukkan diagram waktu sensor PING.

Gambar 13.2. Diagram Waktu Sensor Ultrasonic

Hal-hal yang dapat menyebabkan sensor PING tidak teliti untuk mengukur
jarak suatu objek adalah sebagai berikut :
1. Jarak objek tersebut diluar jangkauan ukur ( < 3cm atau > 300cm ).
2. Sudut objek terhadap sensor () < 45, sudut yang terlalu kecil antara sensor jarak ultrasonik dan
objek sehingga gelombang ultrasonik tidak dapat dipantulkan kembali ke sensor.
3. Objek tersebut terlalu kecil untuk memantulkan gelombang ultrasonik kembali ke sensor,
4. Jenis material objek yang bersifat meredam suara, bentuk permukaan yang tidak beraturan, sudut
ruangan, dan lain- lain sehingga mungkin tidak dapat memantulkan gelombang ultrasonik yang
cukup untuk dideteksi dengan teliti.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 104


Selain itu, sensor PING dapat digunakan untuk mendeteksi permukaan air, tetapi tidak dianjurkan
untuk digunakan di lingkungan yang basah.

Gambar 13.3. Deteksi Permukaan

Percobaan 17
HC-SR04 Ultrasonic Sensor adalah sensor jarak / jarak yang sangat terjangkau yang telah digunakan
terutama untuk menghindari objek dalam berbagai proyek robotika. Ini pada dasarnya memberikan
Arduino mata / kesadaran spasial dan dapat mencegah robot dari menabrak atau jatuh dari meja. Ini juga
telah digunakan dalam aplikasi menara, tingkat air penginderaan, dan bahkan sebagai sensor parkir.
Proyek sederhana ini akan menggunakan sensor HC-SR04 dengan Arduino dan sketsa Processing untuk
memberikan tampilan interaktif kecil yang rapi pada layar komputer Anda.

#define echoPin 7 // Echo Pin


#define trigPin 8 // Trigger Pin
#define LEDPin 13 // Onboard LED

int maximumRange = 200; // Maximum range needed


int minimumRange = 0; // Minimum range needed
long duration, distance; // Duration used to calculate distance

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 105


void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LEDPin, OUTPUT); // Use LED indicator (if required)
}

void loop() {
/* The following trigPin/echoPin cycle is used to determine the
distance of the nearest object by bouncing soundwaves off of it. */
digitalWrite(trigPin, LOW);
delayMicroseconds(2);

digitalWrite(trigPin, HIGH);
delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);

//Calculate the distance (in cm) based on the speed of sound.


distance = duration/58.2;

if (distance >= maximumRange || distance <= minimumRange){


/* Send a negative number to computer and Turn LED ON
to indicate "out of range" */
Serial.println("-1");
digitalWrite(LEDPin, HIGH);
}
else {
/* Send the distance to the computer using Serial protocol, and
turn LED OFF to indicate successful reading. */
Serial.println(distance);
digitalWrite(LEDPin, LOW);
}

//Delay 50ms before next reading.


delay(50);
}

Percobaan 18
Untuk aplikasi pengukuran jarak dengan perubahan satuan yang dapat diubah-ubah (inci, cm, m, dan
mm) dapat dituliskan program sebagai berikut, pin 6 dan pin 7 sebagai tombol simulasinya hasil
pengukuran ditampilkan dilayar LCD text 16X2 :

#include <NewPing.h>
#include <LiquidCrystal.h>

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 106


LiquidCrystal lcd(10, 9, 5, 4, 3, 2);
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 300 // Maximum distance we want to ping for (in centimeters).
Maximum sensor distance is rated at 400-500cm.

int tb_ukuran = 6;
int tb_pindah = 7;
int menu = 1;
double inchi = 2.54;
boolean swit;
double jarak;

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and


maximum distance.

void setup() {
Serial.begin(9600); // Open serial monitor at 9600 baud to see ping results.
lcd.begin(16, 2);
pinMode(tb_ukuran,INPUT_PULLUP);
pinMode(tb_pindah,INPUT_PULLUP);
unsigned int uS = sonar.ping(); // Send ping, get ping time in microseconds (uS).
Serial.print("Jarak: ");
Serial.print(uS / US_ROUNDTRIP_CM); // Convert ping time to distance in cm and print result (0
= outside set distance range)
Serial.println(" cm");
swit = false;
}

void tombol()
{
if (digitalRead(tb_pindah) == LOW)
{
menu++;
// lcd.clear();

delay(500);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 107


if (menu > 4)
menu = 1;
} else {}

if (digitalRead(tb_ukuran) == LOW)
{ swit = !swit;
delay(500);}
else {swit = swit;}
}

void ubah_ukuran()
{
while (swit == true)
{
lcd.setCursor(0,0);
lcd.print(">Satuan Ukuran <");
lcd.setCursor(0,1);
lcd.print(" ");
if (menu == 1)
{
lcd.setCursor(5,1);
lcd.print("Meter");
}
else if (menu == 2)
{
lcd.setCursor(3,1);
lcd.print("Centimeter");
}
else if (menu == 3)
{
lcd.setCursor(3,1);
lcd.print("Millimeter");
}
else if (menu == 4)
{
lcd.setCursor(5,1);
lcd.print("Inchi");
}

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 108


else {}
tombol();
delay(500);
}
}

void loop() {
tombol();
ubah_ukuran();
delay(50); // Wait 50ms between pings (about 20 pings/sec). 29ms should be the
shortest delay between pings.

double uS = sonar.ping();
// Send ping, get ping time in microseconds (uS).

lcd.setCursor(0,0);
lcd.print("Ukur Jarak UltraSonic");
lcd.setCursor(0,1);
lcd.print("Jarak: ");
if (menu == 1)
{
jarak = (uS / US_ROUNDTRIP_CM)/100;
lcd.setCursor(7,1);
lcd.print(jarak); // Convert ping time to distance in m and print result (0 = outside set distance
range)
lcd.setCursor(14,1);
lcd.print("mt");

}
if (menu == 2)
{
jarak = (uS / US_ROUNDTRIP_CM);
lcd.setCursor(7,1);
lcd.print(jarak); // Convert ping time to distance in cm and print result (0 = outside set distance
range)
lcd.setCursor(14,1);
lcd.print("cm");

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 109


}
if (menu == 3)
{
jarak = (uS / US_ROUNDTRIP_CM)*10;
lcd.setCursor(7,1);
lcd.print(jarak); // Convert ping time to distance in mm and print result (0 = outside set distance
range)
lcd.setCursor(14,1);
lcd.print("mm");

}
if (menu == 4)
{
jarak = (uS / US_ROUNDTRIP_CM)/inchi;
lcd.setCursor(7,1);
lcd.print(jarak); // Convert ping time to distance in inchi and print result (0 = outside set distance
range)
lcd.setCursor(12,1);
lcd.print("inch");

}
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 110


BAB XIV : PERCOBAAN REAL TIME CLOCK

TUJUAN:
1. Mahasiswa memahami tentang real time clock
2. Mahasiswa memahami rangkaian interface RTC dengan mikrokontroller
3. Mahasiswa memahami pembuatan program pengambilan data RTC

PERALATAN
1. Sebuah Komputer
2. Satu set trainer mikrokontroler

TEORI DASAR
Real-time clock disingkat RTC adalah jam di komputer yang umumnya berupa sirkuit terpadu yang
berfungsi sebagai pemelihara waktu. RTC umumnya memiliki catu daya terpisah dari catu daya
komputer (umumnya berupa baterai litium) sehingga dapat tetap berfungsi ketika catu daya komputer
terputus. Kebanyakan RTC menggunakan oskilator kristal.
RTC tipe DS1307 merupakan jenis pewaktu yang menggunakan komunikasi serial untuk operasi tulis
baca, dengan spesifikasi berikut ini:
Real-time clock (RTC) meyimpan data-data detik, menit, jam, tanggal, bulan, hari dalam
seminggu, dan tahun valid hingga 2100;
56-byte, battery-backed, RAM nonvolatile (NV) RAM untuk penyimpanan;
Antarmuka serial Two-wire (I2C)
Sinyal luaran gelombang-kotak terprogram (Programmable squarewave);
Deteksi otomatis kegagalan-daya (power-fail) dan rangkaian switch;
Konsumsi daya kurang dari 500nA menggunakn mode baterei cadangan dengan operasional
osilator;
Tersedia fitur industri dengan ketahana suhu: -40C hingga +85C
Tersedia dalam kemasa 8-pin DIP atau SOI

X1 1 8 VCC
X2 SQW/OUT
VBATt SCL
GND 4 5 SDA

Gambar 14.1 Konfigurasi Pin DS1307

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 111


Tabel 14.1 Fungsi Pin DS1307
No Nama Pin Fungsi
1 X1 Oscillator Crystal
2 X2 32,768KHz
3 VBAT Battery Input (+3V)
4 GND Ground
5 SDA Serial Data
6 SCL Serial Clock Input
7 SQW/OUT Square Wave/Output Driver
8 VCC Supply Power

Blok diagram internal DS1307 adalah:

Gambar 14.2 Blok Diagram Circuit DS1307

X1 dan X2 adalah pembangkit pulsa yang terhubung dengan quart krtstal 32,768Khz sebagai
internal circuit oscillator yang didesain dengan CL 12,5pF. X1 adalah osilator input yang terhubung
langsung dengan kristal, sedang X2 adalah keluaran dari osilator kristal internal.
Power Control merupakan catu daya yang mensuplay tegangan ke DS1307, Vcc adalah daya luar
sebesar 5V dan VBAT sebagai suplai input dengan 3V lithium Cell. Tegangan baterei harus berada
diantara batasan minimum dan maksimum pengoperasian. Baterei lithium 48mAh atau lebih
dapat mempertahankan fungsi RTC selama 10 tahun.

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 112


Serial Bus Interface And Address Register merupakan jalur data serial dan pengalamatan register
DS1307 dengan akses pulsa melalui SCL dan SDA. SCL (Serial Clock) berfungsi sebagai clock input
I2C dan digunakan untuk sinkronisasi data serial. SDA (Serial Data) berfungsi sebagai data
input/output untuk I2C serial, baik SCL dan SDA masih memerlukan pull up eksternal.
Control Logic merupakan pengendali data-data yang dibaca ataupun ditulis melalui SCL dan SDA
dengan pewaktu dari osilator kristal.
Buffer (7 bytes) adalah penyangga sementara sebelum data diterima atau dikirim, berkisar 7 bytes
(7 x 8 bit) sebagai transit pengalamatan register 8 bit detik-menit-jam-hari-tanggal-bulan-tahun.
Clock, Calender and Control Register atau CR berisi informasi clock dan kalender serta register
pengendali untuk mengontrol pengoperasian SQW/OUT.
Clock and Calender merupakan register RTC dengan waktu dan kalender dengan akses pembacaan
dan penulisan register byte dalam format BCD seperti yang diperlihatkan pada tabel berikut:
.

Dari tabel terlihat bahwa RTC memiliki 8 register (R0 R7 / detik jam dan CR) dalam ruang address 00
07h. Bit 7 dari R0 adalah CH (Clock Halt) bit, ketika di set 1 maka osilator disable dan ketika di clear
0 maka osilator enable. DS1307 dapat dijalankan dengan 12jam atau 24jam, mode pemilih berada di
Register Jam bit ke 6. Ketika high berarti mode 12 jam dipilih dan bit ke 5 akan selalu high selama PM.
Control Register adalah register untuk mengendalikan pin SQW

Bit 7 = Control Out yaitu sebagai pengendali keluaran pin SQW/OUT ketika gelombang square disable.
Jka SQWE = 0, maka SQW = 1 jika OUT = 1, dan akan SQW = 0 jka OUT = 0.
Bit 4 = SQWE (Square Wave Enable). Ketika bit ini di set 1 maka osilator output enable. Frekuensi yang
dihasilkan tergantung dari nilai RS1 dan RS0.
Bit 1 dan 0 = bit pengendali frekuensi SQW out ketika enable, dan dapat dipilih melalui RS1 dsan RS0
dengan range frekuensi seperti pada tabel berikut:

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 113


Bentuk fisik dan rangkaian pengoperasian DS1307 adalah sebagai berikut:

(a) (b)

Gambar 14.3. (a)Bentuk fisik (b) DS1307 Circuit

Skema rangkaian DS1307 di modul AVR adalah

Y1 RTC
U3
32.768KHz 1 8 VCC
X1 VCC
2 7 PB2
X2 SQW R-scl R- sda
3 6 PB0
VBAT SCL 10K 10K
4 5 PB1
BAT1 GND SDA
3V DS1307RTC

Percobaan 19
Untuk mengakses jam secara real time pada komponen RTC saudara dapat memnuat program
seperti pada contoh dibawah ini

#include <Wire.h>
#include <DS1307.h>

int rtc[7];
byte rr[7];
int ledPin = 13;

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 114


void setup()
{
DDRC|=_BV(2) |_BV(3); // POWER:Vcc Gnd
PORTC |=_BV(3); // VCC PINC3
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
RTC.get(rtc,true);
if(rtc[6]<12){
RTC.stop();
RTC.set(DS1307_SEC,1);
RTC.set(DS1307_MIN,27);
RTC.set(DS1307_HR,01);
RTC.set(DS1307_DOW,7);
RTC.set(DS1307_DATE,12);
RTC.set(DS1307_MTH,2);
RTC.set(DS1307_YR,12);
RTC.start();
}
//RTC.SetOutput(LOW);
//RTC.SetOutput(HIGH);
//RTC.SetOutput(DS1307_SQW1HZ);
//RTC.SetOutput(DS1307_SQW4KHZ);
//RTC.SetOutput(DS1307_SQW8KHZ);
RTC.SetOutput(DS1307_SQW32KHZ);
}

void loop()
{
int i;
RTC.get(rtc,true);

for(i=0; i<7; i++)


{
Serial.print(rtc[i]);
Serial.print(" ");
}
Serial.println();
digitalWrite(ledPin, HIGH);

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 115


delay(500);
digitalWrite(ledPin, LOW);
delay(500);
if (Serial.available() > 6) {
for(i=0;i<7;i++){
rr[i]=BCD2DEC(Serial.read());
}
Serial.println("SET TIME:");
RTC.stop();
RTC.set(DS1307_SEC,rr[6]);
RTC.set(DS1307_MIN,rr[5]);
RTC.set(DS1307_HR,rr[4]);
RTC.set(DS1307_DOW,rr[3]);
RTC.set(DS1307_DATE,rr[2]);
RTC.set(DS1307_MTH,rr[1]);
RTC.set(DS1307_YR,rr[0]);
RTC.start();
}
}
char BCD2DEC(char var){
if (var>9){
var=(var>>4)*10+(var&0x0f);
}
return var;
}

LANGKAH-LANGKAH PERCOBAAN
1. Nyalakan computer dengan program Arduino !
2. Sambungkan Trainer mikrokontroler dengan computer menggunakan kabel USB !
3. Sambungkan kabel-kabel jumper sesuai dengan praktikum yang dilaksanakan !
4. Ketiklah program yang diatas pada software Arduino !
5. Lakukan verifikasi terhadap program, apakah terjadi error atau tidak !
6. Jika tidak terjadi error lanjutkan dengan mengupload program ke dalam mikrokontroler !
7. Amati hasilnya apakah sudah sesuai dengan perintah instruktur atau belum, kalau belum
lakukan editing program dan kembali ke langkah 5 !

LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 116


LABORATORIUM MIKROKONTROLER UNIVERSITAS NAROTAMA SURABAYA 117