Anda di halaman 1dari 31

ARDUINO CALCULATOR

KELOMPOK
Nama Mahasiswa

: Annisa Rahmadayanti (14441003)


Muammar Hafidz
(14441010)
: Instrumentasi dan Elektronika
: Teknik Instrumentasi Kilang
: II (dua)

Jurusan
Program Studi
Diploma

KEMENTERIAN ENERGI DAN SUMBER DAYA MINERAL


BADAN PENDIDIKAN DAN PELATIHAN ENERGI DAN SUMBER DAYA MINERAL
SEKOLAH TINGGI ENERGI DAN SUMBER DAYA MINERAL Akamigas

STEM Akamigas
Cepu,

Mei 2016

ARDUINO CALCULATOR

Praktikum Ini Telah Diterima dan Disahkan Sebagai Salah


Satu Syarat kelulusan dalam mata kuliah Microprosesor

OLEH

ANNISA RAHMADAYANTI

MUAMMAR HAFIDZ

NIM 14441003

NIM 14441010

Disetujui Di Cepu
Pada Tanggal Mei 2016
Disahkan Oleh

Pembimbing

(Agus Heriyanto, S.T., M.T.)


NIP. 195508271978091001

ABSTRAK
Dalam praktikum ini dibuat suatu alat untuk melakukan perhitungan
(kalkulasi) matematika, yaitu kalkulator. Kerja sistem ini adalah melakukan
perhitungan fungsi matematika seperti penjumlahan, pengurangan, perkalian,
pembagian, trigonometri, dan kuadrat. Komponen utama dari alat ini adalah LCD
8x2, mikrokontroler ATMEGA 328 dan keypad rubber 4x4.
Hasil praktikum menunjukkan bahwa perhitungan atau kalkulasi
penjumlahan, pengurangan, perkalian, pembagian, trigonometri, dan kuadrat
adalah benar dan cukup efektif digunakan sebagai kalkulator sehari-hari karena
penggunaannya tidak rumit dan mudah dibawa.

Kata

Kunci

Arduino Calculator,

mikrokontroler ATMega 328

1i

LCD 8x2, keypad rubber 4x4,

KATA PENGANTAR
Assalamualaikum Wr. Wb.
Puji syukur kami panjatkan ke Hadirat Allah S.W.T atas berkat dan
bimbingan-Nya sehingga praktikum ini dapat kami selesaikan.
Tugas ini merupakan salah satu syarat bagi setiap mahasiswa Jurusan
Teknik Instrumentasi Kilang dan Elektronika 2 STEM Akamigas dalam
melengkapi syarat-syarat praktikum mikrokontroller semester empat dengan
judul :

ARDUINO CALCULATOR
Kami sangat menyadari bahwa terwujudnya praktikum ini tak lepas dari
bantuan dan dorongan dari berbagai pihak. Pada kesempatan ini kami
menghaturkan terima kasih yang sebesar-besarnya kepada:
1. Allah SWT, atas rahmat dan karunia-Nya kami dapat menyelesaikan
project ini.
2. Bapak Agus Heriyanto, S.T., M.T., yang telah membimbing kami
dalam pembuatan project ini.
3. Teman-teman INS-II, yang telah membantu memberikan inspirasi
dan solusi serta pemecahan masalah/kendala yang kami hadapi
dalam pembuatan project ini.
Cepu, Mei 2016

Penyusun

DAFTAR ISI

KATA PENGANTAR......................................................................................i
ABSTRAK.....................................................................................................ii
DAFTAR ISI.................................................................................................iii
DAFTAR GAMBAR.....................................................................................iv
ARDUINO CALCULATOR........................................................................1
A. TUJUAN PRAKTIKUM..............................................................1
B. DASAR TEORI............................................................................1
C. ALAT DAN BAHAN...................................................................3
D. LANGKAH PERCOBAAN.........................................................4
E. HASIL PENGAMATAN..............................................................8
F. SIMPULAN..................................................................................9
DAFTAR PUSTAKA..................................................................................10
LAMPIRAN

iii

DAFTAR GAMBAR

Gambar 1. Arduino UNO Pada Rangkaian Kontrol


Gambar 2. Rangkaian Elektronika ARDUINO CALCULATOR
Gambar 3. LCD Display 8x2
Gambar 4. Keypad Rubber Matriks 4x4
Gambar 5. Rangkaian Power Supply pada ARDUINO CALCULATOR
Gambar 6. Rangka/Body ARDUINO CALCULATOR
Gambar 7. Diagram Alir (Flowchart) Project ARDUINO CALCULATOR
Gambar 8. ARDUINO CALCULATOR

iv

ARDUINO CALCULATOR
A. Tujuan Praktikum
Setelah mengikuti praktikum alarm dan acknowledge sistem pada level
control, peserta pelatihan mampu :
1. Mengetahui prinsip kerja alarm dan acknowledge sistem pada level
control dengan Mikrokontroller Arduino Uno.
2. Melakukan instalasi pemasangan alarm dan acknowledge sistem pada
level control.

B. Landasan Teori
Mikrokontroler (ATMega 328 Arduino Uno)
Dalam

pembuatan

ATMega 328 Arduino


mikrokontroler

kontrolnya

Uno.

Arduino

digunakan
Uno

mikrokontroler
adalah

papan

berdasarkan ATmega328 (datasheet). Dalam bahasa

Itali "Uno" berarti satu, maka jangan heran jika peluncuran Arduino 1.0
diberi nama Uno.

Gambar 1. Arduino Uno pada Rangkaian Kontrol


Arduino ini berisi semua yang diperlukan untuk mendukung
mikrokontroler, untuk mengaktifkan cukup menghubungkannya ke
komputer dengan kabel USB dengan adaptor AC-DC. Berikut spesifikasi
dari Arduino Uno :
-

Mikrokontroler

: ATmega328

Operating Voltage

: 5V

Input Voltage (disarankan)

: 7-12V

Input Voltage (batas

: 6-20V

Digital I / O

: Pins 14

Analog Input

: Pins 6

DC Current per I / O

: Pin 40 mA

DC Current for 3.3V

: Pin 50 mA

Flash Memory 3 kB (Atmega328)

: digunakan sebanyak 0,5 kB

oleh bootloader

SRAM

: 2 kB (Atmega328)

EEPROM

: 1 kB (Atmega328)

Clock Speed

: 16 MHz

Input Tegangan
Arduino Uno ini dapat beroperasi pada tegangan eksternal dari 6-

20 volt. Jika diberikan tegangan kurang dari 7V, maka arduino ini
2

mungkin akan menjadi tidak stabil. Jika menggunakan lebih dari 12V,
regulator voltage bisa panas dan merusak board. Rentang yang dianjurkan
adalah 7-12 volt.

Memori
ATmega328 ini memiliki memori sebesar 32 KB (0,5 KB dari
memori tersebut digunakan untuk bootloader) dan juga memiliki memori
sebesar 2 KB dari SRAM dan 1 KB dari EEPROM.

Input/Output
Masing-masing dari 14 pin digital pada Uno dapat digunakan
sebagai input atau output, dengan menggunakan fungsi pinMode,
digitalWrite, dan digitalRead. Setiap pin dapat memberikan atau
menerima maksimum 40 mA dan memiliki resistor pull-up internal
(terputus secara default) dari 20-50 kOhms. Pada rangkaian kontrol
ini menggunakan satu buah Arduino Uno.

C. Alat dan Bahan


-

Alat :

Solder

1 buah

Timah

1 roll

Gergaji

1 buah

Bahan :

Rangkaian elektronika ARDUINO CALCULATOR menggunakan bahanbahan berikut.


Mikrokontroler Arduino Uno

1 buah
3

LCD Display 8x2 Yellow Backlight

1 buah

Keypad Rubber Matriks 4x4

1 buah

Kabel Male-to-Male

20 buah

Kabel Female-to-Male

20 buah

Breadboard (atau Protoboard Soldering)

1 buah

Baterai 9 V

1 buah

DC Battery Plug

1 buah

Kabel untuk supply power Arduino Uno

1 buah

Sakelar Toggle

1 buah

Kabel USB untuk connect Arduino dengan PC

1 buah

Sedangkan rangka/body menggunakan bahan berikut.


Kayu Triplek
Lem
Mur Baut
Cat

(ukuran menyesuaikan)
(secukupnya)
(secukupnya)
(warna menyesuaikan)

D. Langkah Percobaan
-

Membuat rangkaian elektronika ARDUINO CALCULATOR seperti


gambar berikut.

Gambar 2. Rangkaian Elektronika ARDUINO CALCULATOR


4

Tabel sambungan LCD dan keypad terlampir.


-

Menyolder konektor kabel dengan LCD dan Keypad agar benarbenar tersambung. Hal ini sangat penting karena kabel yang kendor
atau mudah goyang akan membuat pembacaan LCD dan ouput
keypad terganggu.

Gambar 3. LCD Display 8x2

Gambar 4. Keypad Matriks Rubber 4x4


5

Mengunggah kode program ke Arduino Uno. Kode program


terlampir.

Menyambungkan power supply ke Arduino Uno untuk melakukan


test.

Gambar 5. Rangkaian Power Supply pada ARDUINO CALCULATOR

Membuat rangka untuk ARDUINO CALCULATOR seperti berikut.

Gambar 6. Rangka/Body ARDUINO CALCULATOR

Adapun diagram alir dari percobaan yang telah penulis lakukan adalah
seperti berikut.
START

Perumusan Project

Pencarian Alat dan Bahan

Memenuhi kriteria
percobaan?

Pembuatan Rangkaian Elektronika

Memasukkan Kode Program

Pembuatan Kerangka atau Bodi

Uji Coba

STOP
7

Gambar 7. Diagram Alir (Flowchart) Project ARDUINO CALCULATOR


E. HASIL PERCOBAAN
Pada saat sakelar on, maka supply akan terhubung ke Arduino Uno dan
menyalakan LCD. Pada saat startup, akan muncul pesan LOADING. Untuk
memasukkan angka pertama, tekan tombol

angka pada keypad. Lalu, untuk

memasukkan fungsi matematika, tekan tombol A untuk scroll up dan B untuk


scroll down lalu klik D (enter). Setelah itu, angka kedua dimasukkan dengan
menekan tombol angka pada keypad, lalu klik D (enter) dan hasil akan muncul
pada LCD.
Adapun

fungsi

matematika

yang

terdapat

pada

ARDUINO

CALCULATOR adalah penjumlahan, pengurangan, perkalian, pembagian,


kuadrat, serta trigonometri (sin, cos, tan). ARDUINO CALCULATOR juga dapat
menghitung bilangan positif dan negatif, serta bilangan desimal.

Gambar 8. ARDUINO CALCULATOR

F. SIMPULAN
ARDUINO CALCULATOR dapat melakukan perhitungan matematika
seperti penjumlahan, pengurangan, pembagian, perkalian, kuadrat, serta
trigonometri. Hal terpenting dalam pembuatan ARDUINO CALCULATOR
adalah pengkodean, kesesuaian komponen, pengkabelan yang baik dan rapi, serta
power supply.

DAFTAR PUSTAKA

1. Kale Cloud. Arduino Calculator. www.instructables.com


2. Gabe. Arduino Calculator : Old Version. rampantrobots.blogspot.co.id

10

LAMPIRAN

Lampiran 1 : Datasheet Keypad Rubber Matriks 4x4

Lampiran 2 : Datasheet LCD Display 8x2 Yellow Backlight

Lampiran 3 : Tabel Penyambungan Keypad dan LCD dengan Arduino Uno

LCD 8X2
KEYPAD 4X4 RUBBER
Keypad Function

Ro
w1

Ro
w2

Ro
w3

Ro
w4

Col
1

Col
2

Col
3

Col
4

Keypad Pin

Arduino Pin

A0

A5

A4

A3

A1

A2

Pin 12

Pin 1

Lampiran 4 : Kode Program ARDUINO CALCULATOR

#include <Keypad.h>
#include <LiquidCrystal.h>

bool scroll1 = 0; //whether to


scroll on line one or not

#include <stdlib.h>

bool scroll2 = 0; //whether to


scroll on line two or not

#include <math.h>

int scroll_index = 0;

/////////////////////////////////////////////
//////////VARIABLES///////////////
////////////////////////////

int de=0;

//VARIABLES TO PARSE
FLOATING ANSWER INTO
WHOLE NUMBER AND
DECIMAL PARTS///

char input[9]; //buffer for input


characters

char outresult[20];
String OutResult;
int decimal_location;
String whole_number;

//INPUT VARIABLES//

float firstnumber = 0; //stores


first number
float secondnumber = 0;
//stores second number
float response = 0; //stores
"answer"

String decimal_number;

bool positive = 1; //indicates


positive number

//VARIABLES USED TO
SCROLL TOP LINE//

int lcdcolumnindexrow1 = 1; //
used to indicate location of
input key

long lasttime =0;


String totalarray = ""; //stores
what was input
int length = 0; //length of what
was input
int length2 = 0; //length after
the first input is added

//FUNCTION VARIABLES//
int function = 9; //stores
currently selected function
const int number_of_functions
= 10;

int mode = 2; // select normal


operation (1) or mystery
function (0)

// Connect keypad COL0,


COL1, COL2, and COL3 to
these Arduino pins.

bool toggle = 1;

byte colPins[COLS] = { 17,


18, 19, 14 };

int level = 0; // stores level for


the game
const int number_of_levels =
10;

/////////////////////////////////////////////
//////////KEYPAD
SETUP//////////////////////////////////
/////
const byte ROWS = 4; // Four
rows
const byte COLS = 4; // Four
columns
// Define the Keymap

// Create the Keypad


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

/////////////////////////////////////////////
//////////LCD
SETUP//////////////////////////////////
/////
LiquidCrystal lcd(2, 3, 13, 8,
9, 10, 11, 4, 5, 6, 7);

char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},

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

{'7','8','9','C'},
{'*','0','#','D'}
};

lcd.clear();
lcd.setCursor(0,0);
lcd.print("LOADING");

// Connect keypad ROW0,


ROW1, ROW2 and ROW3 to
these Arduino pins.
byte rowPins[ROWS] = { 1,
12, 16, 15 };

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


lcd.setCursor(i,1);
lcd.write(255);
delay(170);
}

lcd.clear();
for(int i = 0; i < 8; i++)
{ input[i] = '0'; } // initialize
input as zero

lcd.clear();
for(int i = 0; i < 8; i++)
{ input[i] = '0'; }
lcdcolumnindexrow1 = 1;

firstnumber = 0;
secondnumber = 0;
totalarray = "";

void loop()

scroll1 = 0;

scroll2 = 0;
length = 0;
length2 = 0;

if(scroll1) // display the input


number and function(s) on the
top line if math has been done
{

de=0;
if(!mode) {function = 10;}
else {function = 9;}
positive = 1;

scrollline(750, 0, length);
}

}
else if(scroll2) // display the
input number and function(s)
on the second line if awaiting a
2nd number
{
scrollline(750, 1, length2);
}

else if(key == 'A'){


//increment function in
calculator mode
function = mod(+
+function,
number_of_functions);
displayfunction(function);
}

char key = kpd.getKey(); //


read keypad
if (key != NO_KEY)
{
if(de==1){

else if(key == 'B'){


//decrement function in
calculator mode
function = mod(-function,
number_of_functions);

displayfunction(function);

}else if(key == 'C'){ //clear


lcd.clear();

if(function==5 ||
function==6 || function==7 ||
function==8){
firstnumber = atof(input);
// convert input character array
to a float

for(int i = 0; i < 8; i++)


{ input[i] = '0'; }

numintototalarray();
printoperation(function);

lcdcolumnindexrow1 = 1;
firstnumber = 0;
secondnumber = 0;

response =
executefunction(function,
firstnumber, 0); // do the math
numintototalarray();

totalarray = "";
scroll1 = 0;
scroll2 = 0;

scroll1 = 1; // display the


input numbers and function on
the top line

length = 0;
length2 = 0;

lcd.setCursor(0,1);

de=0;

lcd.print("

if(!mode) {function = 10;}


else {function = 9;}

");

lcd.setCursor(0,1);
printresponse(response);

positive = 1;
}

de=1;

else if(key == 'D') //enter


}

{
if(de==1){

}else{

else if(firstnumber == 0) //
this is the first time that enter
has been pressed and we have
a valid function
{
firstnumber = atof(input);
// convert input character array
to a float
numintototalarray();

printoperation(function);
lcd.setCursor(0,0);

if(function == 3 &&
secondnumber == 0){
lcd.setCursor(0,1);

lcd.print("
"); //clear
first line to make space for the
second number

lcd.print("ERROR");
de=1;

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

}else{

"); //clear

lcd.setCursor(0,1);

line
length2 = length;

lcd.print("

scroll2 = 1; //print what


the user has entered so far on
the second line
for(int i = 0; i < 8; i++)
{ input[i] = '0'; } // reinitialize
the input buffer to make space
for the second number

"); //clear

line
lcd.setCursor(0,1);
printresponse(response);
//print answer
positive = 1;
de=1;

lcdcolumnindexrow1 = 1;
}

positive = 1;
}else{
secondnumber =
atof(input); // convert input
character array to a float
response =
executefunction(function,
firstnumber,
secondnumber); // do the math
numintototalarray();
totalarray = totalarray +
"= ";
length = length + 2;
scroll1 = 1; // display the
input numbers and function on
the top line

}
}
}
else if(key == '#' &&
positive ==1) //negative
number read and number is
currently positive
{
input[0] = '-';
lcd.setCursor(0,0);
lcd.print(input[0]); //print
negative sign

positive = 0; //indicate
number is now negative

lcd.print(input[7]);
++lcdcolumnindexrow1;

++length;

++length;

else if(key == '#' &&


positive ==0)

}
}

{
positive = 1; //indicate
number is now negative
input[0] = '0';
lcd.setCursor(0,0);
lcd.print(' '); //remove
negative sign
--length;

/////////////////////Function
Returns Modulo Even for
Negative
Numbers//////////////////////////
int mod(int a, int b)
{

return (((a % b) + b) % b);

else if(lcdcolumnindexrow1
< 8) //buffer overrun
prevention

{
//read in a number or a
decimal
{
for(int i =1; i < 7; i++)
{input[i] = input[i+1]; } //shift
all the values left
if(key == '*') { input[7]
= '.'; } else { input[7] =
key; } //* is decimal

//////////////////////Function
Displays Math
Functions//////////////////////////////
///////////
void displayfunction(int
_function)
{
lcd.setCursor(0,1);
switch (_function)

lcd.setCursor(lcdcolumnindexr
ow1,0); //print on left of LCD
moving right

{
case 0:

lcd.print("+

");

case 9:

break;

lcd.print("

case 1:
lcd.print("-

");

break;
");

break;

}
}

case 2:
lcd.print("x

");

//////////////////////Function
Decides Whether Output Has
0, 1, 2, 3, or 4 Decimals AND
Prints Output/////////////////

");

void printresponse(float
_response)

break;
case 3:
lcd.print("/
break;

case 4:
lcd.print("^

");

break;
case 5:
lcd.print("^2

");

else if(_response >


99999999) {lcd.print("Too
Big ");}
else if(_response < -9999999)
{lcd.print("-Too Big");}

break;
case 6:
lcd.print("sin

if(abs(_response) < 0.0001


&& abs(_response) > 0)
{lcd.print("TooSmall");}

else
");

break;
case 7:
lcd.print("cos

");

break;

for(int i=0; i<19; i++) //Find


the location of the decimal

case 8:
lcd.print("tan
break;

dtostrf(_response,7,4,outresult)
; //Convert Float to Character
Array

");

{
if(outresult[i] == '.')
{

decimal_location = i;
}
}
OutResult = outresult;
//Convert Character Array to
String
whole_number =
OutResult.substring(0,decimal
_location); //Read up to the
Decimal Location
decimal_number =
OutResult.substring(decimal_l
ocation+1,
decimal_location+5); //Read
After the Decimal Location
if(decimal_number[3] =='0'
&& decimal_number[2] =='0'
&& decimal_number[1] =='0'
&& decimal_number[0] =='0')
//print only the whole number
part
{

}
else if(decimal_number[3]
=='0' && decimal_number[2]
=='0') // print two decimal
places
{
OutResult =
whole_number + '.' +
decimal_number[0] +
decimal_number[1];
lcd.print(OutResult);
}
else if(decimal_number[3]
=='0') // print three decimal
places
{
OutResult =
whole_number + '.' +
decimal_number[0] +
decimal_number[1] +
decimal_number[2];
lcd.print(OutResult);

lcd.print(whole_number);
}

}
else if(decimal_number[3]
=='0' && decimal_number[2]
=='0' && decimal_number[1]
=='0') // print one decimal
place

else {lcd.print(OutResult);}
// print four decimal places
}
}

{
OutResult =
whole_number + '.' +
decimal_number[0];
lcd.print(OutResult);

//////////////////////FUNCTION
ADDS "+" "-" "/" TO STRING
ARRAY////////////////////////////////
/////////

void printoperation(int
_function)
{
switch (_function)

break;
case 5:
totalarray = totalarray +
"^2= ";

length = length + 4;

case 0:

break;

totalarray = totalarray +
"+";
length = length + 1;
break;
case 1:
totalarray = totalarray +
"-";
length = length + 1;
break;
case 2:
totalarray = totalarray +
"x";
length = length + 1;
break;
case 3:
totalarray = totalarray +
"/";

case 6:
totalarray = "sin(" +
totalarray + ")= ";
length = length + 7;
break;
case 7:
totalarray = "cos(" +
totalarray + ")= ";
length = length + 7;
break;
case 8:
totalarray = "tan(" +
totalarray + ")= ";
length = length + 7;
break;
case 9:
break;

length = length + 1;
break;
case 4:
totalarray = totalarray +
"^";
length = length + 1;

case 10:
totalarray = "f(" +
totalarray + ")= ";
length = length + 5;
break;

if(_secondnumber != 0)
{_output = _firstnumber /
_secondnumber;}

break;
case 4:
//////////////////////FUNCTION
DOES
MATH//////////////////////////////////
///////
float executefunction(int
_function, float _firstnumber,
float _secondnumber)
{
float _output;

_output =
pow(_firstnumber,
_secondnumber);
_output= round(_output);
break;
case 5:
_output =
pow(_firstnumber, 2);

switch (_function)
{

break;
case 6:

case 0:
_output = _firstnumber +
_secondnumber;
break;
case 1:
_output = _firstnumber _secondnumber;
break;
case 2:
_output = _firstnumber *
_secondnumber;

_output =
sin(_firstnumber);
break;
case 7:
_output =
cos(_firstnumber);
break;
case 8:
_output =
tan(_firstnumber);
break;

break;

case 9:

case 3:

break;
}
return _output;

///////////////////Function Scrolls
a Line////////////////////////////////

else // if the input is shorter


than 8 characters, no scroll is
required
{

void scrollline(int delaytime,


int line_number, int _length)

lcd.setCursor(0,line_number);

{
if(length > 8) // if the input is
too long to fit on the screen,
then scroll

lcd.print(totalarray);
}
}

{
if(millis() - lasttime >
delaytime) // do this only
every 750 milliseconds.
{

////////////////////////////////////////Fu
nction Scans Input Number
into String Total
Array/////////////////////////

for(int i =0; i<8; i++)

void numintototalarray()

lcd.setCursor(i,line_number);
if(scroll_index+i <
_length)
{lcd.print(totalarray.charAt(scr
oll_index+i));} else
{lcd.print(" "); }

if(positive == 0) { totalarray
= totalarray + '-'; }
for(int i = 1; i < 8; i++)
{
if(i > (8 lcdcolumnindexrow1))

}
scroll_index =
(scroll_index + 1)%(_length6);

{
totalarray = totalarray +
input[i];
}

lasttime = millis();
}

}
}

Anda mungkin juga menyukai