Mengatasi Pembacaan Sensor Lama Gara-Gara Delay dengan Millis

Indobot Update

FungeuArduino merupakan device mikrokontroler yang biasa digunakan untuk mengendalikan banyak fungsi, mulai dari sensor, aktuator, hingga monitoring. Namun sayangnya ketika kita menggunakan program yang banyak, kita terkadang bermasalah dengan waktunya yang melambat. Contohnya ketika kita membuat real time ditambah program lainnya atau melakukan lampu berkedip tapi ada program yang harus dijalankan juga.

Millis arduino

Nah di sinilah fungsi Millis. Millis arduino adalah fungsi pada arduino yang berguna untuk menjalankan  waktu internal secara independen. Waktu ini menggunakan milli seconds. Ketika millis dijalankan, millis akan terus menghitung waktu meskipun program juga sedang menjalankan program lain. Karena kemampuan millis ini, millis sering disebut dengan multitaskingnya Arduino.

Langsung saja kita coba praktikkan.

Sebelum mempelajari millis, alangkah baiknya kita pahami dulu kondisi yang akan kita ubah. Contoh di sini adalah LED blink, di mana LED ini akan berkedip dengan jarak waktu 1 detik. LED yang digunakan, harus berkedip dari awal program hingga program selesai. Program LEDnya adalah sebagai berikut.

 
//LED Blink oleh indobot.co.id
#define LED 2
void setup() {
  // Inisialisasi LED digunakan untuk Output
  pinMode(LED, OUTPUT);
}
void loop() {
  digitalWrite(LED, HIGH);   // LED menyala
  delay(1000);                       // waktu untuk LED menyala
  digitalWrite(LED, LOW);    // LED mati
  delay(1000);                       // waktu untuk LED mati
}

Pertama program di atas akan membuat LED berkedip dari awal hingga arduino dimatikan. Program ini menggunakan delay untuk membuat LED berada dalam keadaan menyala dan mati.

Selanjutnya kita akan mencoba untuk menghubungkan dengan sensor suhu DHT11. Sensor ini berfungsi untuk mengetahui suhu ruangan. Kedua program yang digunakan adalah sebagai berikut.

 
/* Program Indikator Suhu DHT11 dengan LED dibuat oleh Indobot */
 
#include "DHT.h"            //Library DHT
#define DHTPIN A0            //Inisialisasi DHT pada pin D5
#define DHTTYPE DHT11       //Inisialisasi tipe DHT
 
DHT dht (DHTPIN,DHTTYPE);   //Mengenalkan pin dan tipe DHT
 
float t;  //Variabel penampung nilai suhu

void setup() {
  Serial.begin(9600);     //Mulai komunikasi serial
  dht.begin();            //Mulai DHT
  
}

void loop() {
delay(100); //waktu pembacaan
  t = dht.readTemperature();    //Baca suhu
  Serial.print("Suhu : ");
  Serial.print(t);              //Tampilkan suhu
  Serial.println(" *C");
delay(100); //waktu pembacaan
}

Program di atas akan membaca nilai suhu yang kemudian akan terlihat ke serial Monitor. Program akan selalu update suhu dengan kecepatan sekitar 100ms (waktu pembacaan).

Mengatasi Sensor Delay Millis
Mengatasi Sensor Delay Millis

Ketika kita ingin menggabungkan dengan program LED blink secara langsung, maka kita dapat menuliskan program menjadi seperti berikut.

 
/* Program Indikator Suhu DHT11 dengan LED dibuat oleh Indobot */
 
#include "DHT.h"            //Library DHT
#define DHTPIN A0            //Inisialisasi DHT pada pin A0
#define DHTTYPE DHT11       //Inisialisasi tipe DHT
#define LED 2
 
DHT dht (DHTPIN,DHTTYPE);   //Mengenalkan pin dan tipe DHT
 
float t;  //Variabel penampung nilai suhu

void setup() {
  Serial.begin(9600);     //Mulai komunikasi serial
  dht.begin();            //Mulai DHT
    // Inisialisasi LED digunakan untuk Output
  pinMode(LED, OUTPUT);
}

void loop() {
  delay(100);
  t = dht.readTemperature();    //Baca suhu
  Serial.print("Suhu : ");
  Serial.print(t);              //Tampilkan suhu
  Serial.println(" *C");
  digitalWrite(LED, HIGH);   // LED menyala
  delay(1000);                       // waktu untuk LED menyala
  digitalWrite(LED, LOW);    // LED mati
  delay(1000);                       // waktu untuk LED mati
}

Program berikut akan menjadikan pembacaan suhu yang terjadi menjadi 2100ms. Kenapa? Jika memerhatikan pada program, secara keseluruhan void loop memiliki 3 delay yaitu delay untuk DHT (100ms), kemudian delay untuk LED menyala (1000ms), dan yang terakhir delay untuk LED mati (1000ms). Ke tiga delay inilah yang membuat pembacaan suhu menjadi lebih lambat, efeknya ada pada akurasi pembacaan yang jadi terlambat.

Mengatasi Sensor Delay Millis
Mengatasi Sensor Delay Millis

baca juga: Dasar Program Membaca Data Suhu Dan Kelembaban Sensor DHT11

Fungsi Milis

Di sinilah fungsi millis dapat sebagai fungsi multitasking dengan waktu yang independen. penulisan di millis harus seefisien mungkin tanpa menggunakan delay. di sini yang akan kita masukkan ke dalam millis adalah bagian LED blink. Berikut millis yang dapat anda gunakan untuk LED blink.

 
//program Millis LED Blink
#define LED 2; //pin LED yang digunakan
int nilai_LED = 0;
unsigned long sebelum = 0; //untuk pengurang waktu millis
void setup() {
pinMode(LED, OUTPUT); //inisialisasi LED untuk Output
}

void loop() {
//inisialiasasi bahwa "sekarang" menggunakan waktu millis
unsigned long sekarang = millis();

if(sekarang - sebelum >= 1000){
  sebelum = sekarang;
  nilai_LED = !nilai_LED;
  digitalWrite(LED, nilai_LED);
}
}

 

Millis () akan terus berjalan semenjak terdeklarasi. Dalam penentuan detik, merupakan program dengan if. Perhatikan pada rumus program if.

“sekarang – sebelum >=1000”

Artinya nilai “sekarang” yang berisi nilai millis akan berkurang dengan nilai sebelum ( “sebelum” mulai dengan nilai 0. Lihat pada bagian deklarasi). Pada perhitungan millis () dari 0 hingga 999, nilai belum memenuhi if. Jadi LED belum bisa terakses karena masih di bawah 1000. Hingga nilai “sekarang” mencapai 1000, if sudah dapat jalankan.

Ketika program berjalan, program awal (sebelum = sekarang) menjelaskan bahwa nilai sebelum terubah menjadi nilai sekarang (ketika nilai sekarang 1000, nilai sebelum juga berubah menjadi 1000).

Pada program berikutnya (nilai_LED =! Nilai_LED) artinya nilai_LED di awal (0) mengubah ke nilai yang berlawanan, yaitu 1. Inilah yang membuat LED menjadi menyala dengan program berikutnya (digitalWrite(LED, nilai_LED)).

Setelah LED menyala, maka program akan looping kembali. Namun lagi-lagi tidak bisa masuk ke bagian if. Padahal nilai millis selalu berjalan. Sehingga otomatis sudah melebihi 1000. Lalu kenapa?

Ingat. Nilai “sebelum” sudah kita ubah menjadi 1000 saat if program berjalan. Sehingga LED akan tetap menyala hingga program bisa masuk ke bagian if kembali untuk berubah nilai jadi 0. Begitu terus secara berulang-ulang.

baca juga: Indikator Suhu DHT11 dengan LED

Nah untuk menghubungkan ke pembacaan suhu DHT11, maka program tersebut hanya perlu gabungkan saja. Sehingga menghasilkan program sebagai berikut.

 
/* Program Indikator Suhu DHT11 dengan LED dibuat oleh Indobot */
 
#include "DHT.h"            //Library DHT
#define DHTPIN A0            //Inisialisasi DHT pada pin A0
#define DHTTYPE DHT11       //Inisialisasi tipe DHT
#define LED 2
int nilai_LED = 0;
unsigned long sebelum = 0; //untuk pengurang waktu millis

DHT dht (DHTPIN,DHTTYPE);   //Mengenalkan pin dan tipe DHT
 
float t;  //Variabel penampung nilai suhu

void setup() {
  Serial.begin(9600);     //Mulai komunikasi serial
  dht.begin();            //Mulai DHT
    // Inisialisasi LED digunakan untuk Output
  pinMode(LED, OUTPUT);
  
}
 
void loop() {
  delay(100);
  t = dht.readTemperature();    //Baca suhu
  Serial.print("Suhu : ");
  Serial.print(t);              //Tampilkan suhu
  Serial.println(" *C");
  //inisialiasasi bahwa "sekarang" menggunakan waktu millis
  unsigned long sekarang = millis();
  if(sekarang - sebelum >= 900){
  sebelum = sekarang;
  nilai_LED = !nilai_LED;
  digitalWrite(LED, nilai_LED);
}
}

Jika program jalan, maka pembacaan sensor akan kembali seperti semula yaitu 100ms (meskipun lebih dikit untuk menjalankan program lainnya).

Jalankan Program

Mengatasi Sensor Delay Millis
Mengatasi Sensor Delay Millis

Oh ya jika teman-teman perhatikan di bagian millis nilai if ubah menjadi 900. Kenapa? agar LED menyala sesuai dengan ketentuan, yaitu 1000ms. Nilai 100 tetap terhitung pada program kali ini. Ingin tau caranya agar nilai 100 ini ga ikut-ikutan di millis LED? Ikuti terus artikel kami.

Ingin Tahu Program Kami Lebih Lanjut?

Silahkan isi Formulir Dibawah Ini untuk Diskusi dengan Tim Indobot Academy.

Baca Juga

Bagikan:

Tags

Tinggalkan komentar

whatsapp whatsapp