Lebih Asyik dengan LCD Display

Bakal lebih asyik jika piranti kita punya display tersendiri sehingga kita bisa memonitor aktivitasnya terlepas dari peran komputer. Oleh karena itu saya membeli LCD display standard. Penggunaannya dengan Arduino sangat mudah karena sudah ada library-nya, yaitu LiquidCrystal (Tutorial lengkap ada di: sini).

Wow e-Pot, hehehe
Wow e-Pot, hehehe

Saya mengintegrasikan display ini ke Arduino Nano. Sebagian code untuk sensor-sensor saya ambil dari proyek Garduino versi 1 saya. Sementara sensor Soil Moisture belum saya integrasikan.

Menampilkan nilai Humidity & Temperature
Menampilkan nilai Humidity & Temperature

Oh iya, untuk menyalakan backlight dari LCD saya menggunakan salah satu pin Arduino juga. Saya pakai pin 10 dengan PWM sehingga kecerahannya bisa diatur dengan program.

Saya menambahkan timer untuk mematikan backlight supaya hemat listrik. Backlight akan diredupkan (fading) sampai padam setelah menyala 20 detik. Tetapi ada tombol untuk menyalakan backlight jika kita ingin sewaktu-waktu melihat penginderaan.

Tombol untuk menyalakan & mematikan backlight
Tombol untuk menyalakan & mematikan backlight

Asyik kan? Di bawah ini adalah source code-nya. Meneruskan sebelum-belumnya, program di bawah ini open source.

/*
Sensors with LCD
Dewo, 25/09/2012
*/

#include <dht11.h>
#include <LiquidCrystal.h>

dht11 DHT;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define DHT_pin 6
#define DHT_jeda 2000
#define backlight_pin 10
#define backlight_delay 20000
#define button_pin 9
#define button_delay 200

double DHT_millis = 0;
int backlight_state = HIGH;
double button_prev = 0;

void setup() {
  pinMode(backlight_pin, OUTPUT);
  digitalWrite(backlight_pin, backlight_state);
  pinMode(button_pin, INPUT);

  lcd.begin(16,2);
  lcd.print("e-Pot by Dewo   ");
  lcd.setCursor(0, 1);
  lcd.print("dewo@studewo.com");
  Serial.begin(9600);
  delay(3000);
  lcd.setCursor(0, 1);
  lcd.print("                ");
  lcd.setCursor(0, 0);
  lcd.print("Temp. Humid Soil");
}

void loop() {
  read_sensor();
  read_button();
  backlight();
}

void read_sensor() {
  double DHT_current = millis();
  if (DHT_current - DHT_millis >= DHT_jeda) {
    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;
    }
    // Temperature
    lcd.setCursor(0, 1);
    lcd.print((float)DHT.temperature, 0);
    lcd.print("'C");
    // Humidity
    lcd.setCursor(6, 1);
    lcd.print((float)DHT.humidity, 0);
    lcd.print("%");
    // Soil Moisture
    lcd.setCursor(12, 1);
    lcd.print("N/A");
    DHT_millis = millis();
  }
}

void read_button() {
  int reading = digitalRead(button_pin);

  if ((reading == HIGH) && (millis()-button_prev>button_delay)) {
    if (backlight_state == HIGH) {
      backlight_state = LOW;
      for (int i = 255; i >= 0; i--) {
        analogWrite(backlight_pin, i);
        delay(10);
      }
    }
    else {
      backlight_state = HIGH;
      digitalWrite(backlight_pin, backlight_state);
      delay(1);
    }
    button_prev = millis();
  }
}

void backlight() {
  if (backlight_state == HIGH && millis()-button_prev>backlight_delay) {
    backlight_state = LOW;
    for (int i = 255; i >= 0; i--) {
      analogWrite(backlight_pin, i);
      delay(10);
    }
  }
}
Iklan

3 pemikiran pada “Lebih Asyik dengan LCD Display

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.