KELOMPOK
Nama Mahasiswa
Jurusan
Program Studi
Diploma
STEM Akamigas
Cepu,
Mei 2016
ARDUINO CALCULATOR
OLEH
ANNISA RAHMADAYANTI
MUAMMAR HAFIDZ
NIM 14441003
NIM 14441010
Disetujui Di Cepu
Pada Tanggal Mei 2016
Disahkan Oleh
Pembimbing
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,
1i
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
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
kontrolnya
Uno.
Arduino
digunakan
Uno
mikrokontroler
adalah
papan
Itali "Uno" berarti satu, maka jangan heran jika peluncuran Arduino 1.0
diberi nama Uno.
Mikrokontroler
: ATmega328
Operating Voltage
: 5V
: 7-12V
: 6-20V
Digital I / O
: Pins 14
Analog Input
: Pins 6
DC Current per I / O
: Pin 40 mA
: Pin 50 mA
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.
Alat :
Solder
1 buah
Timah
1 roll
Gergaji
1 buah
Bahan :
1 buah
3
1 buah
1 buah
Kabel Male-to-Male
20 buah
Kabel Female-to-Male
20 buah
1 buah
Baterai 9 V
1 buah
DC Battery Plug
1 buah
1 buah
Sakelar Toggle
1 buah
1 buah
(ukuran menyesuaikan)
(secukupnya)
(secukupnya)
(warna menyesuaikan)
D. Langkah Percobaan
-
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.
Adapun diagram alir dari percobaan yang telah penulis lakukan adalah
seperti berikut.
START
Perumusan Project
Memenuhi kriteria
percobaan?
Uji Coba
STOP
7
fungsi
matematika
yang
terdapat
pada
ARDUINO
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
10
LAMPIRAN
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
#include <Keypad.h>
#include <LiquidCrystal.h>
#include <stdlib.h>
#include <math.h>
int scroll_index = 0;
/////////////////////////////////////////////
//////////VARIABLES///////////////
////////////////////////////
int de=0;
//VARIABLES TO PARSE
FLOATING ANSWER INTO
WHOLE NUMBER AND
DECIMAL PARTS///
char outresult[20];
String OutResult;
int decimal_location;
String whole_number;
//INPUT VARIABLES//
String decimal_number;
//VARIABLES USED TO
SCROLL TOP LINE//
int lcdcolumnindexrow1 = 1; //
used to indicate location of
input key
//FUNCTION VARIABLES//
int function = 9; //stores
currently selected function
const int number_of_functions
= 10;
bool toggle = 1;
/////////////////////////////////////////////
//////////KEYPAD
SETUP//////////////////////////////////
/////
const byte ROWS = 4; // Four
rows
const byte COLS = 4; // Four
columns
// Define the Keymap
/////////////////////////////////////////////
//////////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");
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;
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);
}
displayfunction(function);
if(function==5 ||
function==6 || function==7 ||
function==8){
firstnumber = atof(input);
// convert input character array
to a float
numintototalarray();
printoperation(function);
lcdcolumnindexrow1 = 1;
firstnumber = 0;
secondnumber = 0;
response =
executefunction(function,
firstnumber, 0); // do the math
numintototalarray();
totalarray = "";
scroll1 = 0;
scroll2 = 0;
length = 0;
length2 = 0;
lcd.setCursor(0,1);
de=0;
lcd.print("
");
lcd.setCursor(0,1);
printresponse(response);
positive = 1;
}
de=1;
{
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("
"); //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;
}
}
{
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)
{
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
");
break;
case 6:
lcd.print("sin
else
");
break;
case 7:
lcd.print("cos
");
break;
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////////////////////////////////
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/////////////////////////
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();
}
}
}