Pages - Menu

Selasa, 19 Mei 2020

KALKULATOR ARDUINO DENGAN TEKNIK PERCABANGAN ATAU NESTED PADA PEMROGRAMANNYA


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.

  G.    Skema Rangkaian


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 :

#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)

[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)


Berikut Video Hasil Simulasi :

Tidak ada komentar:

Posting Komentar