SIMULASI
KALKULATOR SEDERHANA BERBASIS ARDUINO DENGAN TEKNIK PERCABANGAN
BERSARANG ATAU NESTED
Candra
Puji
Fakultas
Teknologi Industri Jurusan Teknik Elektro Universitas Gunadarma
Jln KH.
Noer Ali Kalimalang, Bekasi Jawa Barat, Indonesia
A.
Latar
Belakang
Seiring perkembangan dari mikrokontroler beberapa
dekade terakhir, saat ini telah banyak sekali penggunaannya yang dilakukan oleh
berbagai kalangan dengan berbagai tujuan, mulai dari sekedar mempelajari ,
membuat project sederhana seperti robot dan berbagai alat yang sangat
membantu pekerjaan sehari-hari secara DIY (Do It Your Self) sampai dengan tingkat yang lebih expert
. Saat ini banyak sekali beredar berbagai jenis board mikrokontroler
salah satunya yang paling populer yaitu Arduino. Arduino adalah mikrokontroler
board atau papan rangkaian elektronik open source yang berasal dari Italia.
Alat ini bekerja dengan menggunakan komponen utama yaitu sebuah chip
mikrokontroler AVR (ATmega) dari perusahaan Atmel [1]. Dimana pemrograman yang
digunakan pada Arduino ini adalah bahasa pemrograman C yang sedikit
dimodifikasi sedemikian rupa sehingga lebih mudah digunakan terutama untuk yang
baru mempelajari bahasa C. Pada kesempatan ini penulis ingin mencoba melakukan
percobaan suatu simulasi alat yaitu kalkulator sederhana dengan menggunakan
Arduino Uno sebagai board mikrokontrolernya untuk memahami lebih lanjut
mengenai teknik percabangan
bersarang/nested pada bahasa C yang menjadi basic dari pemrograman
Arduino.Penulisan ini dilakukan sebagai upaya untuk memenuhi tugas dari dosen
matakuliah Algoritma dan Pemrograman Kasus Tek.Elektro.
B.
Perumusan
Masalah
Berdasarkan
latar belakang diatas maka dapat dirumuskan permasalahan sebagai berikut :
1. Bagaimana membuat program untuk kalkulator
sederhana pada arduino dengan menggunakan teknik percabangan bersarang / nested?
2.
Bagaimana
prinsip kerja dari kalkulator sederhana berbasis Arduino?
3.
Seberapa
akurat hasil perhitungan dari kalkulator sederhana berbasis Arduino?
C.
Batasan
Masalah
Berdasarkan rumusan
masalah diatas agar pembahasan dapat terfokus,
maka yang akan dibahas pada alat ini sebagai berikut:
1.
Percobaan
yang dilakukan hanya dalam simulasi 2D pada software Proteus dengan
meng-embed program yang dibuat pada software Arduino IDE.
2.
Mikrokontroler
yang dipakai pada percobaan ini adalah Arduino Uno.
3.
Output dari
kalkulator sederhana ini merupakan hasil perhitungan antara 2 buah inputan
dengan 1 operasi hitung.
D. Tujuan
Tujuan dari pembuatan simulasi ini adalah
untuk mengetahui fungsi teknik percabangan bersarang / nested bahasa C
yang menjadi basic pemrograman board mikrokontroler Arduino.
E.
Landasan
Teori
1. Arduino Uno R3[2]
Arduino
Uno R3 adalah papan pengembangan mikrokontroler yang berbasis chip ATmega328P.
Arduino Uno memiliki 14 digital pin input
/ output (atau biasa ditulis I/O, dimana 14 pin diantaranya dapat digunakan
sebagai output PWM antara lain pin 0
sampai 13), 6 pin input analog, menggunakan crystal 16 MHz antara lain pin A0 sampai A5, koneksi
USB, jack listrik, header ICSP dan
tombol reset. Hal tersebut adalah
semua yang diperlukan untuk mendukung sebuah rangkaian
mikrokontroler.Spesifikasi arduino uno R3 dapat dilihat pada tabel berikut dan
arduino uno dapat dilihat pada gambar
dibawah ini.
Tabel spesfiikasi Arduino Uno
Mikrokontroler
|
ATmega328
|
Operasi Tegangan
|
5 Volt
|
Input Tegangan
|
7-12 Volt
|
Pin I/O Digital
|
14
|
Pin Analog
|
6
|
Arus DC tiap pin I/O
|
50 mA
|
Arus DC ketika 3.3V
|
50 mA
|
Memori flash
|
32 KB
|
SRAM
|
2 KB
|
EEPROM
|
1 KB
|
Kecepatan clock
|
16 MHz
|
Gambar
ArduinoUno
Tabel Deskripsi Pin Arduino Uno
Pin Category
|
Pin Name
|
Details
|
Power
|
Vin, 3.3V, 5V, GND
|
Vin: Tegangan input ke Arduino saat
menggunakan sumber daya eksternal.
5V: Catu daya teregulasi digunakan untuk menyalakan mikrokontroler dan komponen lain di papan tulis. 3.3V: Pasokan 3.3V dihasilkan oleh regulator tegangan terpasang. Penarikan maksimum saat ini adalah 50mA. GND: pin ground. |
Reset
|
Reset
|
Mereset mikrokontroler.
|
Analog Pins
|
A0 – A5
|
Digunakan untuk memberikan input analog
dalam kisaran 0-5V
|
Input/Output Pins
|
Digital Pins 0 - 13
|
Dapat digunakan sebagai pin input atau
output.
|
Serial
|
0(Rx), 1(Tx)
|
Digunakan untuk menerima dan mengirimkan
data serial TTL.
|
External Interrupts
|
2, 3
|
Untuk membangkitkan interupsi.
|
PWM
|
3, 5, 6, 9, 11
|
Menyediakan output PWM 8-bit.
|
SPI
|
10 (SS), 11 (MOSI), 12 (MISO) and
13 (SCK)
|
Digunakan untuk komunikasi SPI.
|
Inbuilt LED
|
13
|
Untuk menghidupkan LED inbuilt.
|
TWI
|
A4 (SDA), A5 (SCA)
|
Digunakan untuk komunikasi TWI.
|
AREF
|
AREF
|
Untuk memberikan tegangan referensi untuk
tegangan input.
|
Software Arduino IDE ( Integreted
Development Environment )[2]
IDE itu merupakan kependekan dari Integrated
Developtment Enviroenment, atau secara bahasa mudahnya merupakan lingkungan
terintegrasi yang digunakan untuk melakukan pengembangan. Disebut sebagai
lingkungan karena melalui software inilah Arduino dilakukan pemrograman untuk
melakukan fungsi-fungsi yang dibenamkan melalui sintaks pemrograman.
Arduino menggunakan bahasa pemrograman sendiri
(menyerupai bahasa c ), untuk memudahkan pemula dalam melakukan pemrograman
dari bahasa aslinya. Sebelum dijual ke pasaran, IC mikrokontroler Arduino telah
ditanamkan suatu program bernama Bootlader yang berfungsi sebagai penengah
antara compiler Arduino dengan mikrokontroler.
Program yang ditulis dengan menggunaan Arduino Software (IDE) disebut
sebagai sketch. Sketch ditulis dalam suatu editor teks dan disimpan dalam file
dengan ekstensi .ino. Teks editor pada Arduino Software memiliki fitur” seperti
cutting/paste dan seraching/replacing sehingga memudahkan kamu dalam menulis
kode program. Pada Software Arduino IDE, terdapat semacam message box berwarna
hitam yang berfungsi menampilkan status, seperti pesan error, compile, dan
upload program.
Gambar Tampilan Software Arduino IDE
2. Liquid Crystal Display (LCD)[3]
LCD) adalah
komponen yang dapat menampilkan tulisan.
LCD 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
Gambar Sensor LCD 16x2
mentransmisikan
cahaya dari backlight. LCD berfungsi
sebagai penampil data baik dalam bentuk karakter, huruf, angka ataupun grafik
(Abdul Kadir, 2013: 196).
Material 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.
3.
Keypad Matriks 4x4[3]
Gambar
Keypad Matriks 4x4
Keypad adalah bagian penting dari suatu perangkat
elektronika yang membutuhkan interaksi manusia. Keypad berfungsi sebagai
interface antara perangkat (mesin) elektronik dengan manusia atau dikenal
dengan istilah HMI (Human Machine Interface). Matrix keypad 4×4 pada artikel
ini merupakan salah satu contoh keypad yang dapat digunakan untuk berkomunikasi
antara manusia dengan mikrokontroler. Matrix keypad 4×4 memiliki konstruksi
atau susunan yang simple dan hemat dalam penggunaan port mikrokontroler.
Konfigurasi keypad dengan susunan bentuk matrix ini bertujuan untuk penghematan
port mikrokontroler karena jumlah key (tombol) yang dibutuhkan banyak pada
suatu sistem dengan mikrokontroler.
4.
Komunikasi
I2C (Inter Integrated Circuit) / PCF8574[4]
Gambar
I2C
Inter
Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua
arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun
menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA
(Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.
Piranti yang dihubungkan dengan sistem I2C Bus dapat dioperasikan sebagai
Master dan Slave. Master adalah piranti yang memulai transfer data pada I2C Bus
dengan membentuk sinyal Start, mengakhiri transfer data dengan membentuk sinyal
Stop, dan membangkitkan sinyal clock. Slave adalah piranti yang dialamati
master.
Pada umumnya
I2C didesain untuk meminimalkan penggunaaan pin pada saat menggunakan display
LCD 16x2. Normalnya sebuah LCD 16x2 akan membutuhkan sekurang-kurangnya 8 pin Arduino
dan 1 buah potensiometer untuk dapat diaktifkan. Namun LCD tipe ini membuat pin
yang dibutuhkan hanya 2 saja.
F. Diagram Blok
1
Keypad Matriks 4x4
digunakan untuk memberikan inputan. .
2
Arduino uno sebagai
kendali algoritma untuk mengolah data masukan.
3
Tegangan masukan untuk
arduino sebesar 5VDC.
4
Sebelum ke kaki lcd pin
– pin arduino menuju I2C terlebih dahulu.
5
Penggunaan I2C untuk
menghemat penggunaan pin arduino untuk lcd.
6
LCD 16x2 akan memberikan informasi hasil perhitungan.
Gambar Skema Rangkaian di Proteus
I. Prinsip Kerja Alat
Alat ini masih berupa simulasi pada software
Proteus, Namun bukan berarti tidak bisa diimplementasikan secara langsung. Alat
ini bekerja pada tegangan 5V bisa dari catu daya eksternal atau dari tegangan
langsung yang diperoleh Arduino yang dikoneksikan ke PC/Laptop. Arduino
menerima inputan berupa tombol yang ditekan dari Keypad Matriks lalu data
tersebut dibedakan berdasarkan pin-pin yang terhubung dengan baris dan kolom
pada keypad. Lalu I2C bertindak sebagai perantara karena fungsinya untuk
meminimalkan pin-pin yang disambungkan ke LCD sehingga lebih menghemat pin ADC
pada Arduino yang terbatas. Lalu LCD 16x2 menampilkan inputan angka dan operasi
hitung beserta hasilnya berdasarkan data yang telah diolah oleh Arduino
sebelumnya.
J. Analisa Program
Percabangan IF sendiri merupakan sebuah pemilihan
statement yang akan dieksekusi berdasarkan suatu kondisi. Kondisi tidak hanya
satu saja tapi bisa lebih. Pada kali ini kita akan membahasnya lebih detail dan
kompleks dengan contoh program IF bersarang. IF Bersarang (Nested If)
merupakan percabangan IF dengan struktur yang lebih kompleks. Dimana didalam sebuah
pernyataan IF terdapat pernyataan IF lainnya, Dengan kata lain terdapat sebuah
kondisi IF didalam IF. Penggunaan struktur IF Bercabang biasa digunakan
untuk pemilihan beberapa pernyataan bertingkat, Ketika sebuah pernyataan
IF dijalankan dan bernilai true maka akan terdapat pernyataan if lainnya pada
blok tersebut [5]. Pada contoh program simulasi kalkulator ini memiliki banyak
percabangan bersarang atau nested yang bisa dilihat pada bagian blok
program dan penjelasanya yang saya letakkan dibagian bawah dari artikel ini.
Penjelasan Listing Program :
Penjelasan Listing Program :
#include <LiquidCrystal_I2C.h>
//Memasukkan library komunikasi I2C
LiquidCrystal_I2C lcd(0x27, 20, 2);
/*Inisialisasi library atau alamat LCD I2C (0x27)
* pada Arduino dan
jenis LCD yang akan digunakan yaitu 16x2*/
#include <Keypad.h>
//untuk memanggil library keypad pada Arduino
const byte ROWS = 4;
const byte COLS = 4;
/*Mendeklarasikan jumlah baris dan kolom yaitu 4 baris dan 4
kolom
* pada keypad yang
akan digunakan*/
char keys [ROWS] [COLS] = {
{'7', '8', '9',
'/'},
{'4', '5', '6',
'*'},
{'1', '2', '3',
'-'},
{'C', '0', '=', '+'}
/*Mendefinisikan karakter keypad yang dicetak
* dan
menyambungkannya dengan pin yang telah dideklarasikan untuk kontrol baris dan
kolom*/
};
byte rowPins[ROWS] = {2, 3, 4, 5};//Pin 2,3,4,5 pada Arduino
digunakan untuk kontrol baris
byte colPins[COLS] = {6, 7, 8, 9};//Pin 6,7,8,9 pada Arduino
digunakan untuk kontrol kolom
Keypad myKeypad = Keypad( makeKeymap(keys), rowPins,
colPins, ROWS, COLS );
/*Menginisialisasi bentuk keypad, pin-pin kontrol baris
& kolom
* yang sebelumnya
telah didefinisikan*/
float presentValue = false;
float next = false;
float final = false;
/*Pada baris program ini digunakan untuk mendeklarasikan
* variabel yang
digunakan*/
String num1, num2;//Inisialisasi 2 buah variabel string yang
akan dilakukan operasi perhitungan
float answer = 0 ;//answer bisa berupa bilangan desimal yang
berniai 0
char op;//operasi hitung pada keypad betipe data karakter
void setup()//program yang ada disini hanya dilakukan sekali
oleh Arduino
{
lcd.init();//memulai
atau inisialisasi LCD
lcd.backlight();//menyalakan lampu backlight pada LCD
lcd.setCursor(5,0);//mengatur
kursor pada posisi kolom ke 6 baris ke 1 pada layar LCD
lcd.print("Tugas Softskill");//mencetak karakter "Tugas
Softskill" ke layar LCD
lcd.setCursor(3,1);//mengatur kursor pada posisi kolom ke 4 baris ke 2
pada layar LCD
lcd.print("Calculator");//mencetak
karakter "Calculator" ke layar LCD
delay(1000);//menentukan jeda waktu selama 1 detik
lcd.clear();//membersihkan karakter yang ada pada layar LCD
}
//semua program yang ada pada void loop akan dibaca berulang
oleh Arduino
void loop() {
char key =
myKeypad.getKey();
//menerima dan membaca input dari tombol keypad yang ditekan
if (key != NO_KEY
&& (key == '1' || key == '2' || key == '3' || key == '4' || key == '5'
|| key == '6' || key == '7' || key == '8' || key == '9' || key == '0'))
/*Baris program yang berfungsi untuk mengecek karakter mana
yang ditekan dari setiap angka 0-9*/
{
if (presentValue
!= true)
//mengecek jika
benar karakter angka dari keypad yang ditekan
{
num1 = num1 +
key;
/*membaca
inputan num11 atau
* inputan
karakter pertama yang ditekan pada keypad*/
float numLength
= num1.length();
/*menentukan
panjang string, fungsinya menyimpan serta
* menampilkan
teks pada LCD yang telah ditentukan pada baris program sebelumnya*/
lcd.setCursor(0,
0); //mengatur kursor pada posisi awal layar tampilan LCD
lcd.print(num1);//mencetak karakter dari "num1', dalam hal ini
adalah angka yang ditekan dari keypad
}
else//mengecek
kondisi lainnya
{
num2 = num2 +
key;
/*membaca
inputan num2 atau inputan karakter kedua yang ditekan pada keypad*/
float numLength
= num2.length();
float numLength1 = num1.length();
/*menentukan
panjang string dari variabel yang telah ditentukan sebelumnya
* fungsinya
untuk menyimpan serta menampilkan nilai string tersebut*/
lcd.setCursor(1
+ numLength1, 0);
/*mengatur posisi
kursor untuk num 2 berada pada satu kolom setelah num1
* dan berada
pada baris pertama ditampilkan pada layar LCD*/
lcd.print(num2);//menampilkan karakter num 2 dari keypad
final =
true;//mengecek tiap karakter yang ada pada variabel datafloat sebelumnya
}
}
else if
(presentValue == false && key != NO_KEY && (key == '/' || key
== '*' || key == '-' || key == '+'))
/*mengecek kondisi
ini jika yang ditekan adalah 4 macam operasi hitung yaitu kali (*), tambah (+),
kurang(-), dan bagi (/)*/
{
if (presentValue
== false)
//jika benar yang
ditekan adalah salah satu dari 4 operasi hitung tersebut yang ditekan maka
program ini akan dijalankan
{
float numLength
= num1.length();
//menyimpan
nilai string dari num1 serta menampilkan pada layar LCD
presentValue =
true;
op = key;
//membaca tombol
operasi hitung yang ditekan
lcd.setCursor(0
+ numLength, 0);
/*mengatur
posisi kursor yaitu setelah nilai string dari num dan berada pada baris
pertama*/
lcd.print(op);//menampilkan karakter dari operasi hitung yang ditekan
pada keypad
}
}
else if (final ==
true && key != NO_KEY && key == '=') {
//mengecek
kondisi untuk menghasilkan nilai hasil perhitungan jika yang telah ditekan
adalah karakter "=" pada keypad
if (op == '+') {
//jika tombol
operasi hitung yang ditekan adalah "+"
answer = num1.toFloat()
+ num2.toFloat();
//maka
jawabannya adalah hasil perhitungan antara num1 + num2
}
else if (op ==
'-') {
//jika tombol
operasi hitung yang ditekan adalah "-"
answer =
num1.toFloat() - num2.toFloat();
//maka
jawabannya adalah hasil perhtungan antara num1 - num2
}
else if (op ==
'*') {
//jika yang
ditekan tombol kali (*)
answer =
num1.toFloat() * num2.toFloat();
//maka
jawabannya adalah hasil perhitungan antara num1 * num2
}
else if (op ==
'/') {
//jika yang
ditekan tombol bagi (/)
answer =
num1.toFloat() / num2.toFloat();
//maka
jawabannya adalah hasil perhitungan antara num1 / num2
}
lcd.clear();//membersihkan karaktere pada layar LCD
lcd.setCursor(16,
1);
//mengatur kursor
pada posisi pojok kanan atau kolom 16, baris 2 layar LCD
lcd.autoscroll();//mengatur layar LCD secara otomatis
lcd.print(answer);//mencetak jawaban hasil perhitungan ke layar LCD
lcd.noAutoscroll();//mengatur layar LCD tidak secara otomatis
}
else if (key !=
NO_KEY && key == 'C') {
//jika kondisi
tombol yang ditekan karakter "0n/c" pada keypad. maka program dibawah
ini akan dieksekusi
lcd.clear();
presentValue =
false;
final = false;
num1 =
"";//membaca nilai inputan num1
num2 =
"";//membaca nilai inputan num2
answer = 0;//angka
0 akan ditampilkan ketika tombol "on/c" telah ditekan atau mereset
kembali
op = ' ';//membaca
karakter operasi hitung
}
}//program selesai
K.
Kesimpulan
Setelah dilakukan analisa terhadap simulasi alat dapat
disimpulkan bahwa:
1.
Perhtingan
yang mampu dilakukan untuk project kalkulator ini terbilang sangat
sederhana yaitu hanya mampu melakukan operasi aritmatika dasar tambah, kurang,
bagi, kali dengan hanya terdiri dari 2 inputan dan 1 operasi hitung saja.
2. Meskipun
sederhana namun saat dibandingkan hasilnya dengan kalkulator yang sesungguhnya
tidaklah memiliki perbedaan yang signifikan namun hanya berbeda tingkat
ketelitian sebesar nol koma, hal ini wajar terjadi mengingat kapasitas
penyimpanan tipe data yang mampu disimpan oleh Arduino terbatas dibandingkan
dengan kalkulator sesungguhnya.
3. Dengan
menggunakan teknik percabangan bersarang atau nested ini kita bisa
menggunakannya untuk membuat program yang mempunyai kondisi bertingkat dan
kompleks untuk banyak pengambilan keputusan yang tentunya disesuaikan dengan
kebutuhan dan tujuan dari program ingin yang dibuat tersebut.
Daftar Pustaka
[1]Admin. 1
September 2019. “Pengertian Arduino”. https://rainboard.id/pengertian-arduino/ (Diakses pada 19 Mei
2020)
[2]Anonim. https://eprints.akakom.ac.id/3905/3/3_133310002_BAB%20II.pdf (Diakses pada 7 Mei 2020 )
[3]Purnama, Agus. 27 November 2018. “Matrix
Keypad 4×4 Untuk Mikrokontroler”
http://elektronika-dasar.web.id/matrix-keypad-4x4-untuk-mikrokontroler/ (Diakses pada 19 Mei 2020)
http://elektronika-dasar.web.id/matrix-keypad-4x4-untuk-mikrokontroler/ (Diakses pada 19 Mei 2020)
[4]Purnomo. 25 Agustus 2011. “Mengenal Komunikasi I2C(Inter
Integrated Circuit)”. https://purnomosejati.wordpress.com/2011/08/25/mengenal-komunikasi-i2cinter-integrated-circuit/ (Diakses pada 19 Mei 2020)
[5]Dimas,
Setiawan. 11 Januari 2020. “Contoh Program C++ IF Bersarang (Nested IF)”
https://kelasprogrammer.com/contoh-program-c-if-bersarang-nested-if/ (Diakses pada 19 Mei 2020)