20 December 2015

Membuat Timer Pada Arduino Tanpa Modul RTC


Dalam perancangan sistem otomasi, waktu yang ditentukan oleh peralatan timer sering kali digunakan sebagai penentu keputusan operasi. Dalam tutorial singkat ini penulis akan membahas teknik pemrograman timer pada development board Arduino tanpa tambahan modul perangkat keras lainnya seperti Real Time Clock (RTC). 




Menurut kamus Merriam-Webster, timer didefinisikan sebagai berikut:
  • Suatu jam khusus yang digunakan untuk mengukur jumlah waktu yang dipergunakan untuk menyelesaikan suatu perlombaan, ujian, dsb
  • Seseorang yang menggunakan jam untuk mengukur seseorang atau sesuatu 
  • Suatu peralatan yang dapat membuat suara ketika jumlah waktu tertentu telah tercapai 
  • Suatu peralatan yang dapat diset untuk mengaktifkan atan menonaktifkan sesuatu (misal: lampu) pada waktu tertentu.

Secara sederhana timer merupakan sebuah peralatan penghitung waktu. Pada sistem perangkat lunak apabila waktu yang telah ditentukan tercapai maka suatu instruksi yang diinginkan akan mulai bekerja, sedangkan pada sistem perangkat keras output kontak akan mulai bekerja


Teknik Dan Algoritma
Pemrograman timer dalam tutorial ini hanya menggunakan fungsi millis() pada Arduino dan tidak menggunakan modul waktu apapun seperti RTC. Penjelasan millis() dapat dilihat pada halaman https://www.arduino.cc/en/Reference/Millis, secara sederhana millis() adalah
  • Jam dengan tingkat ketelitian millisecond
  • Memulai perhitungan dari nol sejak Arduino mendapatkan catu daya 
  • Terus menghitung waktu hingga 50 hari kedepan sejak dihidupkan 
  • Hanya dapat kembali ke nol setelah 50 hari, atau dengan menekan tombol reset, atau catu daya dilepas

Contoh program timer berikut ini akan bekerja sebagai berikut
  • Led pada pin 13 akan menyala ketika analogread(A0) membaca angka lebih besar dari 100
  • ketika pembacaan A0 lebih kecil dari 100, maka 5 detik kemudian led 13 padam
  • ketika A0 lebih kecil dari 100 dan belum 5 detik A0 melebihi 100 maka timer akan reset


int status=0;
unsigned long time;
unsigned long timer =5000;
unsigned long Start;
unsigned long Stop;

void setup(){
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop(){
time = millis();
status=analogRead(A0);


if (status>=100){
digitalWrite(13,HIGH);
Start=millis();
}


Stop=Start+timer;


if ( stop <=time ){
digitalWrite(13,LOW);
Start=0;
}


Serial.print(status);
Serial.print(",");
Serial.print(Start);
Serial.print(",");
Serial.println(time);


}

Gampang yah...

18 comments:

  1. Saya sedang cari penghitung hari buat mesin tetas, displaynya pakai yg 2 digits 7 segmentasi. Terus setiap Hari Tetas-3, bisa muncul alarm. Misal disetting untuk ayam 21 hari, maka hari ke 18 alarm muncul/ bunyi. Kira2 yang dibutuhkan apa saja ya?

    ReplyDelete
    Replies
    1. Saya rasa arduino, modul RTC, dan alaram saja cukup. Walaupun seven segment dua digit banyak pakai port digital, pakai arduino seri Uno masih tetap cukup kok (cek deh di google). Untuk alaram kalau mau gak perlu beli, kalau ada UPS rusak di rumah bongkar saja ambil buzzernya :). trus tinggal program saja

      Delete
  2. kalau semisal ingin menghidupkan atau mematikan lampu pada jam tertentu menggunakan apa?

    ReplyDelete
  3. mas,,,
    kalo misal gini,
    q pingin mendeteksi sensor selama 10 detik untuk menyatakan bahwa benda itu ada secara kosntan.
    jika belum 10 detik maka tidak ada benda/benda pindah dan jika lebih dari 10 detik berarti ada benda.
    tu gmana? apa bisa pake cara yg di atas.

    ReplyDelete
  4. mas,
    kalo saya mau buat program :
    1. menghitung (selisi berat awal + berat akhir)/detik dengan menggunakan 1 loadcell
    2. jika selisih tersebut dibawah set point maka motor semakin cepat, menggunakan sistem pid

    mohon di jawab di rickysanjaya1994@gmail.com

    ReplyDelete
  5. Mas, saya mau buat countdown timer (dalam satuan millisecond) yang nilainya dapat dimasukan via keypad berbasis pada program ini (karena program ini menggunakan millis sehingga akurat dan simpel), namun jika tidak ada nilai yang dimasukan, maka nilai defaultnya adalah 10detik. Mohon petunjuk apa yang harus dimodifikasi / dilakukan (tentunya selain membuat program untuk keypad dan LCD) agar program ini dapat difungsikan sebagai countdown timer. Terimakasih sebelumnya.

    ReplyDelete
  6. om, misal tombol stop ada 2, pin 12 dan pin 13... pin 12 output baris lcd16x2 bagian atas, dan pin 13 ouput lcd16x2 bagian bawah.. bisa om?

    ReplyDelete
    Replies
    1. bisa bisa saja, apa yang tidak bisa :D

      Delete
    2. di bantu sketch nya ya om
      irwadi88@gmail.com :D

      Delete
    3. gak janji ya hehe..., soalnya saya sedang diluar kota nih, jadinya gak bisa eksperimen dalam waktu dekat, nanti kalau jadi saya tempel di sini codingnya ya

      Delete
    4. om, gimana apa udah jadi program nya :D

      Delete
    5. waduuh, belum saya pikirkan, masih di luar kota nih, mohon maaf ya, hehe...

      Delete
  7. Maaf pak mau tanya ,, penyebabnya apa ya?? Saya kan buat timer pake RTC sama arduino uno,, dan sudah saya pasang dengan lcd keypad shield tapi kenapa tiap hari kq ada selisih waktu dengan jam di HP??

    ReplyDelete
  8. mas mohon di bantu, saya mau buat timer hitung mundur dengan sudah mengatur pilihan2 timer tersebut ada yang 10 menit 15 menit dan seterusnya dan jika sudah waktu habis motor servo akan menyala dan menutup katup, utk programnya bagaimana ya kalau tanpa RTC atau sebaiknya pakai RTC jika ingin membuat timer hitung mundur begitu.?

    ReplyDelete
  9. kalau nampilkan dioled (lcd) terus ngestart nya pakai aplikasi blynk itu gimana programnya bang? mohon bantuan nya bang

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. pin A0 itu dihibubgkan dengan apa yah pak?

    ReplyDelete