Selasa, 25 Maret 2014

Kalkulator dengan Arduino (Tugas 5 II 3231)

"Indeed, every act depends on it's intentions"
Para pembaca setia sekalian, kali ini saya akan bercerita mengenai pembuatan tugas saya, yaitu membuat sesuatu dari Arduino dengan memanfaatkan display dan keypad. Saya dan teman-teman kelompok berencana untuk membuat sebuah kalkulator perkalian dua angka. Display yang digunakan oleh kelompok kami berupa LCD Module 16x2 dan Keypad yang digunakan adalah keypad 3x4. 

Courtesy of memegenerator.net
Pada percobaan sebelumnya, kami melipatkan kabel ke pin-pin LCD dalam rangka memasang rangkaian LCD. Namun, pada percobaan kali ini, kami menggunakan pin yang khusus untuk disolder ke komponen. Menyolder komponen merupakan hal yang cukup menantang bagi saya mengingat terakhir kali saya menyolder komponen adalah pada saat saya masih SMA. Pada awalnya, teman kelompok saya yang melakukan penyolderan. Tapi, karena dia sudah lama tidak menyolder dan lupa caranya, maka pekerjaan tersebut diserahkan kepada saya. Saya menggunakan solder tembak/pistol untuk menyolder pin-pin khusus ke LCD. Saat percobaan, saya masih ingat cara menyolder, yaitu bagian ujung komponen yang mau disolder didekatkan dulu, baru timah solder didekatkan. Saat itu, penyolderan komponen lancar-lancar saja. Itu cerita saya menyolder komponen.  

Anda tentunya sudah tidak sabar kan untuk mencoba membuat kalkulator ini? Untuk membuat kalkulator, persiapkan beberapa alat dan bahan berikut ini.
  1. 1 buah Mikrokontroller Arduino Uno R3 beserta kabel konektor USB
  2. 1 buah Keypad 3x4
  3. 1 buah Display (LCD Module 16x2 atau Multidigit 7-Segment)
  4. 1 buah 10K ohm potensiometer 
  5. Kabel jumper secukupnya
  6. 1 buah Laptop / PC Desktop yang sudah terinstall Arduino IDE
  7. 1 buah breadboard (apabila diperlukan)
Setelah Anda mendapatkan semua komponen di atas, selanjutnya Anda dapat memulai membuat rangkaian kalkulator. Gambar di bawah ini menunjukkan rangkaian kalkulator yang akan dibuat dengan menggunakan display LCD 16x2 dan Keypad 3x4.


Setelah rangkaian selesai dibuat, nyalakan PC Anda. Buka program Arduino IDE. Masukkan kode program di bawah ini. Kemudian klik tombol verify pada program Arduino IDE Anda. 


// Kalkulator perkalian dua angka pada Arduino
#include ≺liquidcrystal.h≻ // Library untuk LCD
#include ≺keypad.h≻ // Library untuk Keypad

const int numRows = 4; // Jumlah Baris pada Keypad
const int numCols = 3; // Jumlah Baris pada Keypad
const int debounceTime = 20; // Waktu kestabilan switch pada Keypad

const int numRow = 2; //Jumlah Baris pada LCD
const int numCol = 16; //Jumlah Kolom pada LCD

// Inisialisasi library dengan angka pada interface pin
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);

// Definisi Keymap pada Keypad
const char keymap[numRows][numCols] = {
{ '1', '2', '3' } ,
{ '4', '5', '6' } ,
{ '7', '8', '9' } ,
{ '*', '0', '=' }
};

// Array untuk baris dan kolom pin pada keypad
const int rowPins[numRows] = { 0, 2, 3, 4 }; // Baris 0-3
const int colPins[numCols] = { 5, 6, 7 }; // Kolom 0-2

//Deklarasi Variabel pada Kalkulator
boolean valOnePresent = false;
boolean next = false;
boolean final = false;
String num1, num2;
long int ans;
char op;
long int key1;
char oper;
long int key2;

void setup()
{
  Serial.begin(9600);
  for (int row = 0; row < numRows; row++)
  {
    pinMode(rowPins[row],INPUT); // Set pin baris sebagai masukan
    digitalWrite(rowPins[row],HIGH); // Menyalakan Pull-Up
  }
  for (int column = 0; column < numCols; column++)
  {
    pinMode(colPins[column],OUTPUT); // Set pin kolom sebagai keluaran
    // Untuk penulisan
    digitalWrite(colPins[column],HIGH); // Buat semua kolom tidak aktif
  }
  lcd.begin(numCol, numRow); // Mulai membuat tampilan di LCD
  lcd.print("CALCULATOR"); // Pesan pada LCD.
  lcd.setCursor(0, 1); // Set cursor pada kolom 0, baris 1 untuk tampilan angka
}

void loop()
{
  char key = getKey(); //Mendapatkan key dari keypad
  //Pembacaan angka pertama dan angka kedua
  if ((key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
    if (valOnePresent != true){
      num1 = num1 + key;
      int numLength1 = num1.length();
      lcd.setCursor(0, 1); 
      lcd.print(num1);
    }
    else {
      num2 = num2 + key;
      int numLength2 = num2.length();
      lcd.setCursor(num1.length()+1, 1);
      lcd.print(num2);
      final = true;
    }
  }
  // Pembacaan Operator
  else if (valOnePresent == false && (key == '*')){
    if (valOnePresent == false){
      valOnePresent = true;
      op = key;
      lcd.setCursor(num1.length(), 1); 
      lcd.print(op);
    }
  }
  // Operasi Penghitungan
  else if (final == true && key == '='){
    if (op == '*'){
      ans = num1.toInt() * num2.toInt();
    }    
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print(ans);
  }
}

// Fungsi mendapatkan key dari tombol keypad yang ditekan
char getKey()
{
  char key = 0; // Inisialisasi nilai awal key
  for(int column = 0; column < numCols; column++)
  {
    digitalWrite(colPins[column],LOW); // Aktifkan kolom
    for(int row = 0; row < numRows; row++) // Periksa semua baris
    // Tombol/Key ditekan.
    {
      if(digitalRead(rowPins[row]) == LOW) // Pemeriksaan tombol, apakah ditekan atau tidak
      {
        delay(debounceTime); // debounce
        while(digitalRead(rowPins[row]) == LOW)
          ; // Menunggu key untuk dilepaskan
          key = keymap[row][column]; // Key yang ditekan
      }
    }
    digitalWrite(colPins[column],HIGH); // Deaktivasi kolom.
  }
  return key; // Mengembalikan nilai key
}

Setelah program di atas terverifikasi, sambungkan Arduino ke PC Anda dengan menggunakan kabel konektor USB. Klik tombol upload pada PC Anda. Anda pun dapat mencoba hasil rangkaian Anda.

Courtesy of memegenerator.net
Pada rangkaian, awalnya kami menggunakan pin 1,2,3,dan 4 untuk Row keypad. Pada saat kelompok kami mencoba program di atas, hasilnya tidak begitu lancar, karena ketika tombol keypad ditekan, angka 4,5, dan 6 tidak muncul. Kemudian, setelah kami coba mengganti pin, ada sesuatu yang aneh dengan LCD. Tampilan LCD menjadi kacau. Saat itu, kami pun langsung mencabut sumber arus rangkaian. Pada saat bagian bawah LCD (bagian solder) dipegang, bagian tersebut terasa panas, sehingga kami pun menghentikan percobaan hingga bagian bawah LCD menjadi dingin kembali. Kami pun mencoba kembali LCD. Ternyata, tidak muncul tampilan apapun. Hanya backlight LCD saja yang berfungsi. LCD kelompok kami pun tidak bisa digunakan. Akhirnya, kami meminjam LCD dari kelompok lain. Percobaan pada saat itu pun terhenti. Saya pun penasaran dengan pin 1 pada Arduino. Saya coba cari di internet, ternyata pin 1 arduino merupakan pin khusus yang digunakan untuk transmisi TTL serial data. Kemudian, saya pun teringat pelajaran elektronika di SMP ketika saya menyolder komponen yang ber-chip. Saat itu, chip harus dilepaskan terlebih dahulu agar panas dari solder tidak sampai kepada chip sehingga merusak chip. Jadi, dengan kata lain, LCD saya sekarang beralih fungsi menjadi LED.

Beberapa hari kemudian, kami kembali melakukan percobaan dengan kode dan rangkaian yang sama (tentunya dengan meminjam LCD ke kelompok lain). Percobaan pun akhirnya berhasil, walaupun pada saat pemasangan komponen di awal, LCD tidak menampilkan apapun. Tapi, kami mencoba merangkai ulang rangkaian dan rangkaian pun dapat beroperasi sebagaimana mestinya. 

Berikut ini adalah foto dan video untuk percobaan yang kami lakukan.

Foto percobaan : 
Proses Penyolderan LCD (Courtesy by Lutfhi Al Fikri)

Rangkaian Jadi (Courtesy by Lutfhi Al Fikri)

Video Percobaan :

Courtesy by Lutfhi Al Fikri

Sekian saja tulisan saya kali ini. Pembaca sekalian tentunya dapat mencoba hal diatas dan tidak perlu takut untuk gagal dan mencoba. Sampai bertemu kembali di tulisan saya yang berikutnya.

Referensi : Margolis, Michael. 2011. Arduino Cookbook, 2nd Edition. U.S.A:O’Reilly Media, Inc.

Credits to : Allah SWT, kedua orang tua saya, Pak Soni (selaku dosen mata kuliah), teman kelompok (Luthfi Al Fikri, Michael Yurry, Ryan Adi Wicaksana dan Faris Taufiq Zaqiy), teman-teman angkatan STI 2011, blogger.com, serta siapapun yang telah membantu terlaksananya tugas ini.