Selasa, 25 Maret 2014

Tutorial Arduino: Membuat Countdown Timer dengan LCD dan Keypad


Jadi, oleh Pak Soni sang dosen tugas kali ini adalah membuat penerapan dengan LCD dan keypad. Ini memberikan kebebasan :D. Jadi saya bikin timer Arduino. Mengapa bikin timer? Simak terus ceritanya.

Walaupun tidak lebih seru dari trailer The Raid yang baru, tapi ini hasil kerja dari eksperimen yang menyenangkan. The result comes first.
 


Behind The Scene

Pada waktu itu saya sudah bikin dasar rangkaian sama program yang bisa menuliskan output di LCD dengan input dari keypad. Permasalahannya tinggal satu, mau bikin program apa?
Matahari mulai terbenam dan deadline semakin mendekat. Kita berkumpul sekelompok untuk menentukan apa yang akan dibuat. Setelah berdiskusi, kami memikirkan mengenai sebuah game. Ya! Sebuah game di Arduino, dimana akan ditampilkan soal matematika secara random dan kita harus menjawab sebanyak-banyaknya. Kami sepakat.

10 menit pertama kami berhasil membuat kode dasar dengan looping, if-else, dan semacamnya. Lalu jemari berhenti menari di atas keyboard. 
1 menit...
5 menit...
10 menit...
"Ini susah banget!" kata Prama. Lalu dia pergi main FIFA 2014.

"Gimana kalau kita bikin kalkulator dulu?" saran Farrell. Usul diterima. Searching di Google, dengan mudah kami menemukan source code untuk kalkulator. Seperti biasa: Ctrl+A, Ctrl+C, Ctrl+V (if you know what I mean). Setelah pengaturan variabel dan verifikasi, kami jalankan. 
BISA bekerja, saudara-saudara.

"Gitu doang?" kata saya. Satu kelompok merasa senang. Tapi entah kenapa kami belum puas. Ada perasaan yang menggugah untuk mengeksplorasi lebih jauh. 
Saya : Kalkulator terlalu mainstream nih. Mau coba yang lain nggak?
Farrell : Ayo.
Saya: Timer aja gimana?
Farrell: Coba dulu deh
(Percakapan yang sebenarnya lebih absurd daripada ini. Daripada pembaca bingung, saya kasih inti pembicaraan aja)

Jadi intinya kami akan membuat timer yang bisa disetting waktunya dengan keypad. Angka-angka di keypad untuk memasukkan angka (you don't say), tanda '#' untuk menjalankan timer, dan tanda '*' untuk membatalkan. Berdasarkan source code dari kalkulator tadi, kami mencoba membuat timer kami sendiri. Tidak ada bantuan tambahan. Kami benar-benar koding dengan sepenuh jiwa dan pikiran. Tak ayal dalam proses ini banyak kelucuan dan kesalahan yang terjadi. Berikut beberapa di antaranya.
  • Kalau memasukkan input yang terlalu besar, nilai angkanya jadi negatif. Jadi timernya tidak berfungsi, malahan dia akan bernilai negatif makin besar. Itu karena keterbatasan bit dari integer.
  • Kami masih belum ngerti apa itu autoscroll(). Mau sok-sokan pakai juga hasilnya jadi nggak jelas.
  • Penempatan kode dalam looping itu sangat penting. Kalau salah looping, programnya bisa nggak selesai-selasai.
  • Perhatikan penempatan kursor di LCD. Saya bilang sekali lagi. Watch. Your. LCD. Cursor. Sebagian besar kesalahan konyol kami adalah penempatan kursor yang salah sehingga tulisan baru menimpa tulisan sebelumnya.
Pada akhirnya kami berhasil. Kami berjoget merayakan keberhasilan. Bukan karena ini sesuatu yang hebat, tapi karena kami bangga bisa menghasilkan karya dari tangan sendiri

Tutorial yang Sebenarnya

Jadi ini yang Anda perlukan sama seperti proyek arduino pada umumnya.

Alat dan Bahan

Keypad 3x4 - 1 buah
Arduino Uno R3 - 1 buah

Potensiometer - 1 buah
LCD ukuran 2x16 - 1 buah
Oh ya. Saya asumsikan LCD nya sudah disolder. Jadi tinggal pasang.
Belum tahu caranya? Klik disini
Breadboard - 1 buah

Kabel USB - 1 buah
Untuk menyambungkan Arduino ke komputer. Pastikan juga di komputer telah terinstal Arduino IDE.
Kalau belum punya unduh disini
Kabel jumper atau kabel tembaga biasa secukupnya.

Oh ya, jangan lupa resistor. Satu saja cukup. Jangan yang nilainya terlalu besar.

Cara Kerja

1. Pasangkan semua komponen seperti pada gambar berikut (Disclaimer: saya selalu bikin sendiri gambar rangkaian di Fritzing langsung setelah rangkaian itu jadi)

Nah, jadi secara umum kita memasangkan LCD (sepaket sama potensiometer) ke Arduino, lalu memasangkan keypad ke Arduino, lalu menghubungkan keduanya melalui program sehingga kita bisa memasukkan input dari keypad dan melihat output di LCD. Pastikan pin yang terhubung sudah benar dan kabel-kabel terhubung dengan baik. Kesalahan yang umum terjadi adalah salah penempatan kabel atau ada kabel yang terlalu dekat dan bersinggungan.

2. Jalankan Arduino IDE, masukkan source code di bawah

3. Pastikan pin yang terdefinisi di program sama dengan pin pada rangkaian. Jika sudah, lakukan verify dan upload.

4. Sekarang Anda punya timer. Start the countdown!

Tambahan: Sebenarnya lebih keren lagi jika saat timer menunjukkan angka nol, akan muncul bunyi alarm. (Contoh yang ada di video ada sound effect biar meyakinkan saja). Tunggu sampai kami punya komponennya hehe.

Berikut adalah tampilannya




Source Code

// import dari library. Pastikan sudah ada keduanya.
#include <LiquidCrystal.h>
#include <Keypad.h>

//Pendefinisian konstanta untuk keypad
const int NRow = 2; //Jumlah baris LCD
const int NCol = 16; //Jumlah kolom LCD
const byte ROWS = 4; //empat baris keypad
const byte COLS = 3; //tiga kolom keypad
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'+','0','='}
};

// inisialisasi pin
LiquidCrystal lcd(0, 1, 5, 4, 3, 2); //pin untuk LCD
byte rowPins[ROWS] = {12, 11, 10, 9}; //pin untuk row keypad
byte colPins[COLS] = {8, 7, 6}; //pin untuk column keypad

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

//deklarasi variabel
boolean valOnePresent = false;
boolean next = false;
boolean final = false;
String num1, num2;
int timer;
char op;


void setup() {
  // setup untuk awalan tampilan di LCD
  lcd.begin(NCol, NRow);
  lcd.setCursor(1,0);
  lcd.print("Timer SegoGule");
  delay(2000);
  lcd.clear();
  lcd.setCursor(1,0);
  lcd.print("by Yogi, Farrell");
  lcd.setCursor(1,1);
  lcd.print("Prama, Adhela");
  delay(3000);
  lcd.clear();
}

void loop(){
  char key = keypad.getKey();
  //set durasi
  lcd.setCursor(1,0);
  lcd.print("Set Durasi: ");
  lcd.setCursor(1,1);
  if (key != NO_KEY && (key=='1'||key=='2'||key=='3'||key=='4'||key=='5'||key=='6'||key=='7'||key=='8'||key=='9'||key=='0')){
    if (valOnePresent != true){
      lcd.setCursor(1,1);
      num1 = num1 + key;
      int numLength = num1.length();
      lcd.setCursor(1, 1); 
      lcd.print(num1);
    }
    else {
      num2 = num2 + key;
      int numLength = num2.length();
      lcd.setCursor(15 - numLength, 1);
      lcd.print(num2);
      final = true;
    }
  }
  //set!
  if (key == '='){
    timer = num1.toInt();
    for(int i=0;i=timer;i++){  
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Sisa waktu: ");
      lcd.setCursor(0,1);
      lcd.print(timer--);
      delay(1000);
    }
    lcd.clear();
    lcd.setCursor(1,0);
    lcd.print("Waktu habis!");
    timer=0;
    num1=0;
    delay(3000);
  }
  //batal
  else if (key == '+'){
    lcd.clear();
    valOnePresent = false;
    final = false;
    num1 = "";
    num2 = "";
    timer = 0;
    op = ' ';
  }
}

6 komentar:

  1. keren gan, saya coba menyederhanakan program timer menggunakan millis(), bisa lihat disini
    http://sentroino.blogspot.co.id/2015/12/membuat-timer-pada-arduino-tanpa-modul.html

    BalasHapus
  2. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  3. misi gan.
    numpang nanya ni.
    gimana cara kalau ditekan 1 baru set durasi.
    thanks gan.

    BalasHapus
  4. Gan...masih bingung...fungsi dari potensiometer dari di atas apa yah?....apakah bisa mengatur timer cma bermodal kn lcd dan keypad

    BalasHapus
  5. Gan...masih bingung...fungsi dari potensiometer dari di atas apa yah?....apakah bisa mengatur timer cma bermodal kn lcd dan keypad

    BalasHapus
  6. autputnya dimana ya bang ?
    apa bisa outputnya pake relay

    BalasHapus