Banyak sistem controller yang menggunakan Arduino. Disamping bentuknya yang kecil dan compact, multi fungsi, programmable, harganya pun relatif terjangkau. Namun ada kalanya sistem controller kita nge-hang karena suatu hal, entah karena suhu luar, overload karena bekerja 24 jam, atau barangkali karena ada semacam glitch yang tidakk terdeteksi sebelumnya di program Anda. Namanya juga barang elektronik, pasti ada masa berlakunya 🙂 (kecuali Anda menggunakan komponen kualitas militer, barangkali bisa memperpanjang masa lifetime-nya)
Atas dasar hal tersebut, ada baiknya kita mereset / merestart sistem Arduino tiap hari (daily restart) agar sistem selalu ‘segar’ setiap hari. Hal ini cocok digunakan untuk sistem controller yang bekerja 24 jam sehari, 30 hari sebulan, 365 hari setahun 🙂 , mengingat Arduino ini adalah mikrokontroller 8 bit dengan RAM terbatas (2KB untuk tipe Arduino Uno / Atmega328). Jadi ya maklum aja kalau misal kadang sistem Anda ngehang tadi. Salah satu solusinya kita coba merestartnya tiap hari, dengan catatan berhati-hatilah terhadap status pin output yang terhubung dengan beban. Jangan sampai saat Anda restart, beban Anda ikut berubah statusnya. Kalau untuk pin input tidak ada masalah, karena sistem kita yang sifatnya menerima data.
Source Code Restart Arduino Tiap Hari
Baiklah, untuk mereset / merestart Arduino caranya cukup mudah, ada yang sifatnya berbasis software (bisa di baca di sini) atau berbasis hardware. Cara kedua ini lebih saya sukai karena kita akan benar-benar yakin mereset Arduino layaknya kita mereset dengan tangan kita sendiri. Jadi Arduino benar-benar akan bekerja dari awal. Untuk dapat mereset Arduino secara hardware namun terprogram, silahkan jumper pin reset dengan salah satu pin digital Arduino, seperti pada gambar berikut
Jika sudah, Anda perlu memprogram Arduino seperti contoh berikut
#include <TimeAlarms.h> #define resetuno 7 void setup() { // put your setup code here, to run once: digitalWrite(resetuno,HIGH); pinMode(resetuno,OUTPUT); digitalWrite(resetuno,HIGH); setTime(8,29,0,1,1,11); Alarm.alarmRepeat(8,20,0, saatnyarestart); Serial.begin(115200); } void loop() { // put your main code here, to run repeatedly: digitalClockDisplay(); Alarm.delay(100); } void saatnyarestart() { Serial.println("saatnya restart"); digitalWrite(resetuno,LOW); delay(200); digitalWrite(resetuno,HIGH); } void digitalClockDisplay() { // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.println(); } void printDigits(int digits) { Serial.print(":"); if (digits < 10) Serial.print('0'); Serial.print(digits); }
Script di atas membutuhkan library TimeAlarm.h, silahkan diunduh di sini
Perhatikan pada script di atas, bahwa kita perlu mengeluarkan tegangan digital HIGH (5V) ke pin RESET Arduino, agar Arduino tidak selalu reset saat pertama kali running (jika pin reset bernilai LOW/ ‘0V’ arduino akan reset). Perhatikan bahwa perintah ini dilakukan pertama kali di void setup, bahkan sebelum kita mendefiniskan fungsi pin digital dengan perintah ‘pinMode’. Ini sebenarnya kita gunakan untuk mengaktifkan resistor pull up internal di dalam mikrokontroller ATMEGA328 (core system Arduino). Dengan demikian efeknya, saat pertama kali booting, pin reset akan langsung bernilai HIGH sehingga tidak akan restart
Baris script berikutnya dapat Anda tebak fungsinya, yakni sekedar menciptakan ‘daily scheduler’ dengan library TimeAlarm, yang jika terpicu akan membuat pin digital bernilai LOW. Efeknya arduino akan restart dan bekerja dari awal lagi
Demikian sedikti tutorial mengenali cara reset arduino tiap hari, semoga bermanfaat buat yang membutuhkan. Sistem ini tentunya ada kekurangannya juga, yakni membutuhkan satu pin digital untuk langsung dihubungkan langsung dengan pin RESET Arduino. Buat sistem yang membutuhkan banyak interfacing dengan sensor atau aktuator, 1 pin ini sangat berharga sekali 🙂 . Nah, silahkan disesuaikan dengan kebutuhan Anda ya. Selamat berkreasi 🙂
a Technopreneur – writer – Enthusiastic about learning AI, IoT, Robotics, Raspberry Pi, Arduino, ESP8266, Delphi, Python, Javascript, PHP, etc. Founder of startup Indomaker.com