Ngoprek Sensor Temperature & Humidity (DHT11)

Setelah belanja dan ngrakit Protoshield, tibalah saatnya untuk menyicil proyek Graduino-ku. Karena daku tidak punya banyak waktu dan kebetulan seminggu kemarin sambil njagain Papa yang sedang sakit, jadi acara pengoprekan dan penulisan dicicil. Jadi malam ini dikebut 3 tulisan sekaligus, mumpung sudah kembali ke apartemen sehingga bisa konsentrasi nulis.

Sambungkan DHT11, mainkan Arduino-nya
Sambungkan DHT11, mainkan Arduino-nya

Dan penyicilan pertama adalah mengoprek DHT11 produksi DFRobot, yaitu sensor temperatur & humidity digital. Seperti namanya, fungsi dari sensor ini adalah untuk men-sensing suhu ruangan dan kelembabannya. Dalam pengoprekan ini daku memanfaatkan Protoshield ala Dewo (hehehe) dan memanfaatkan pin 0 (RX) serta LED built-in di pin 13.

Kurang lebih begini diagramnya sesuai kaidah Input -> Process -> Output

[DHT11] -> [Arduino] -> [LED]

Algoritmanya kurang lebih begini:

  1. Sensor akan men-sensing suhu dan kelembaban (dipicu oleh Arduino)
  2. Arduino akan memvalidasi data dari sensor
  3. Arduino akan mengevaluasi nilainya, jika melebihi nilai ambang (contoh: 27 derajat celcius), maka buat LED merah berkedip
  4. Sensing dilakukan setiap 5 detik

Kebetulan tadi siang ada teman yang tanya-tanya bagaimana pemrograman Arduino. Jadi di bawah ini daku sertakan programnya. Program di bawah ini tidak menggunakan delay, tetapi menggunakan perhitungan waktu internal Arduino (millis). Lebih repot sih, tapi konon bisa lebih efisien pemrogramannya dari pada dengan delay. Entah bener apa enggak sih, hehehehe…

Selain itu, program Arduino di bawah juga mengirimkan hasil sensing ke komputer via komunikasi serial. Jadi kita bisa memonitor suhu dan kelembaban yang sesungguhnya yang di-sensing oleh sensor.

Disclaimer: Code di bawah menggunakan library dht11 yang open source. Code di bawah diadaptasi dari banyak contoh program dan daku modifikasi sesuai kebutuhan. Code di bawah juga daku rilis sebagai open source sehingga siapa saja bisa menggunakan dan mengembangkannya.

Disclaimer ini sekaligus menjadi kredit bagi para penulis code sebelumnya (termasuk penulis library-nya).

// Project Name: Gardening Arduino
// Start: 02/09/2012
// Started by Dewo, setio.dewo@gmail.com, https://dewo.wordpress.com

#include <dht11.h>

dht11 DHT;
#define DHT_pin 0
#define DHT_jeda 5000
#define DHT_max_temp 27
#define LED_pin 13
#define LED_jeda 500

unsigned long DHT_millis = 0;
unsigned long LED_millis = 0;
boolean _blink = false;
boolean LED_state = LOW;

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

void loop() {
  DHT_read();
  LED_blink();
}

void LED_blink() {
  unsigned long LED_current = millis();
  if (_blink) {
    if (LED_current - LED_millis > LED_jeda) {
      LED_millis = LED_current;
      if (LED_state == LOW) LED_state = HIGH;
      else LED_state = LOW;
    }
    digitalWrite(LED_pin, LED_state);
  }
  else digitalWrite(LED_pin, LOW);
}

void DHT_read() {
  unsigned long DHT_current = millis();
  if (DHT_current - DHT_millis >= DHT_jeda) {
    DHT_millis = DHT_current;
    int DHT_chk = DHT.read(DHT_pin);
    switch(DHT_chk) {
      case DHTLIB_OK:
        Serial.println("OK");
        break;
      case DHTLIB_ERROR_CHECKSUM:
        Serial.println("Checksum error");
        break;
      case DHTLIB_ERROR_TIMEOUT:
        Serial.println("Time out error");
        break;
      default:
        Serial.println("Unknown error");
        break;
    }
    // Apakah melebihi batas yg ditentukan?
    String alert_temp = "";
    // (>27)
    if (DHT.temperature >= DHT_max_temp) {
      _blink = true;
      alert_temp.concat("(*>=");
      alert_temp.concat((String)DHT_max_temp);
      alert_temp.concat(")");
    }
    else _blink = false;
    // Kirimkan nilai ke serial
    Serial.print("Suhu: ");
    Serial.print((float)DHT.temperature, 2);
    Serial.println(alert_temp);
    Serial.print("Kelembaban: ");
    Serial.println((float)DHT.humidity, 2);
    Serial.print("\n");
  }
}

Penyicilan berikutnya adalah untuk ngoprek sensor Ambient Light dan Soil Moisture. Yang pasti bakal lebih seru!

Tambahan

Oh iya, bagi yang mau belajar mengenal Arduino dan pemrogramannya bisa ngintip pengalamanku dulu saat memulai belajar Arduino, yaitu di: “Ngoprek Arduino Seadanya (Hiks)”. Kalau mau cari ide untuk eksperimen Arduino bisa mengintip Blog Famosa Studio. Kalau mau belajar secara nyata bisa belanja di Famosa Studio.

Yang pasti, sekalinya kenal Arduino pasti bakal ketagihan ngoprek. Hehehe…

Iklan

10 pemikiran pada “Ngoprek Sensor Temperature & Humidity (DHT11)

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout /  Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout /  Ubah )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.