DIY Digital Clock Arduino LCD 20x4 With DHT11


        Liburan kalau tidak dimanfaatkan akan sia-sia! jadi pada kesempatan ini guna mengisi waktu libur saya akan berbagi tentang bagaimana cara membuat jam digital dengan mudah yang dilengkapi dengan pemantau suhu dan kelembapan. Pada project ini saya menggunakan shift register 74HC595 untuk mengontrol LCD 20x4 atau yang sering kita kenal dengan sebutan 3 Wire. Sistem ini digunakan agar dapat lebih menghemat penggunaan pin arduino, bagi teman teman yang belum paham tentang penggunaan shift register tersebut bisa berkunjung ke postingan sebelumnya DISINI,



         Selain menggunakan sistem 3 Wire untuk LCD saya juga menggunakan Costum Char buat menampilkan karakter sesuai keinginan kita, seperti pada gambar diatas digunakan untuk costum lambang lonceng, sinyal maupun costum font. 

Bahan-bahan yang digunakan:


  1. Arduino Uno
  2. Modul RTC DS3231
  3. LCD 20x4
  4. Modul DHT11
  5. IC 74HC595
  6. Potensio
  7. Kabel Jumper Secukupnya.
Skema Rangkaian.


Program


     Bisa diperhatikan pada File Header terdapat Library "LiquidCrystal_SR.h" yang mungkin agak asing bagi teman-teman yang masih belajar, jadi kalian harus mendownload Library tersebut Disini agar bisa menjalankan program jam digital ini.




Program Utama

=================================Source Code================================
#include "Wire.h"
#include "RTClib.h"
#include "DHT.h"
#include "LiquidCrystal_SR.h"
#define DHTPIN 12
#define DHTTYPE DHT11
LiquidCrystal_SR lcd(9, 10, 11);
DHT dht(DHTPIN, DHTTYPE);
RTC_DS3231 rtc;
float temp, hum;

void setup () {
    Serial.begin(9600);
    Wire.begin();
    rtc.begin();
    dht.begin();
    lcd.begin(20, 4);

   byte customCharL[] = {
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11111,
    0b11111
  };
  //C
  byte customCharC[] = {
    0b01111,
    0b11111,
    0b11000,
    0b11000,
    0b11000,
    0b11000,
    0b11111,
    0b01111
  };
  //D
  byte customCharD[] = {
    0b11110,
    0b11111,
    0b11011,
    0b11011,
    0b11011,
    0b11011,
    0b11111,
    0b11110
  };
  //O
  byte customCharO[] = {
    0b01110,
    0b11111,
    0b11011,
    0b11011,
    0b11011,
    0b11011,
    0b11111,
    0b01110
  };
  //K
  byte customCharK[] = {
    0b11011,
    0b11011,
    0b11110,
    0b11100,
    0b11100,
    0b11110,
    0b11011,
    0b11011
  };
  byte customCharY[] = {
    0b11111,
    0b01110,
    0b01110,
    0b00100,
    0b00100,
    0b00100,
    0b00100,
    0b00100
  };
  byte customCharG[] = {
    0b00001,
    0b00001,
    0b00001,
    0b00101,
    0b00101,
    0b00101,
    0b10101,
    0b10101
  };
   byte customCharS[] = {
    0b00000,
    0b00000,
    0b01010,
    0b00000,
    0b10001,
    0b01110,
    0b00000,
    0b00000
  };
   byte customCharR[] = {
    0b00100,
    0b01110,
    0b01110,
    0b01110,
    0b11111,
    0b11111,
    0b00100,
    0b00100
  };


  lcd.createChar(0, customCharL);//huruf L
  lcd.createChar(1, customCharC);//huruf C
  lcd.createChar(2, customCharD);//hutuf D
  lcd.createChar(3, customCharO);//huruf O
  lcd.createChar(4, customCharK);//huruf K
  lcd.createChar(5, customCharY);//Antena
  lcd.createChar(6, customCharG);//Sinyal
  lcd.createChar(7, customCharR);//Bel
  

  lcd.setCursor(4,1);
  lcd.print(" "); // print space 
  lcd.write((uint8_t)0);  //L
  delay(400);
  lcd.write((uint8_t)1);  //C
  delay(400);
  lcd.write((uint8_t)2);  //D
  delay(400);
  lcd.print(" "); // print space 
  lcd.write((uint8_t)1);  //C
  delay(400);
  lcd.write((uint8_t)0);  //L
  delay(400);
  lcd.write((uint8_t)3);  //O
  delay(400);
  lcd.write((uint8_t)1);  //C
  delay(400);
  lcd.write((uint8_t)4);  //K
  delay(400);
  lcd.print("");
  delay(800);

  lcd.setCursor(2,2);
  lcd.print("Dicky B_Mz 2017");
  delay(800); 
  lcd.clear();
  delay(800);

  lcd.setCursor(4,1);
  lcd.print(" "); // print space 
  lcd.write((uint8_t)0);  //L
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)2);  //D
  lcd.print(" "); // print space 
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)0);  //L
  lcd.write((uint8_t)3);  //O
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)4);  //K
  lcd.print("");

  lcd.setCursor(2,2); 
  lcd.print("Dicky B_Mz 2017");
  delay(800); 
  lcd.clear();
  delay(800);
  
  lcd.setCursor(4,1);
  lcd.print(" "); // print space 
  lcd.write((uint8_t)0);  //L
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)2);  //D
  lcd.print(" "); // print space 
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)0);  //L
  lcd.write((uint8_t)3);  //O
  lcd.write((uint8_t)1);  //C
  lcd.write((uint8_t)4);  //K
  lcd.print("");

  lcd.setCursor(2,2); 
  lcd.print("Dicky B_Mz 2017");
  delay(800); 
  lcd.clear();
  delay(800);
  
 
   if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
    }
   if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }
}

void loop () {
  temp = dht.readTemperature();
  hum  = dht.readHumidity();
  DateTime now = rtc.now();
  
    lcd.setCursor(1,0);  //Penampil Nama Jam
    lcd.write((uint8_t)7);//bell  
    lcd.setCursor(3,0);
    lcd.print(" "); // print space 
    lcd.write((uint8_t)0);  //L
    lcd.write((uint8_t)1);  //C
    lcd.write((uint8_t)2);  //D
    lcd.print(" "); // print space 
    lcd.write((uint8_t)1);  //C
    lcd.write((uint8_t)0);  //L
    lcd.write((uint8_t)3);  //O
    lcd.write((uint8_t)1);  //C
    lcd.write((uint8_t)4);  //K
    lcd.print(" v2 ");
    lcd.write((uint8_t)5);  //antena
    lcd.write((uint8_t)6);  //signal
  
    lcd.setCursor(0, 1); //Penampil JAM
    lcd.print(" -->> ");
    if (now.hour()<10)
    lcd.print('0');
    lcd.print(now.hour(), DEC);
    lcd.print(':');
     if (now.minute()<10)
    lcd.print('0');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if (now.second()<10)
    lcd.print('0');
    lcd.print(now.second(), DEC);
    lcd.print(" <<-- ");
   
    
    lcd.setCursor(0,2); //Penampil Hari
    lcd.print(">");
   int hari = now.dayOfTheWeek();
   switch(hari)
   {
     case 1:
     lcd.print("Senin");
     break;
     case 2:
     lcd.print("Selasa");
     break;
     case 3:
     lcd.print("  Rabu");
     break;
     case 4:
     lcd.print(" Kamis");
     break;
     case 5:
     lcd.print("jum'at");
     break;
     case 6:
     lcd.print(" Sabtu");
     break;
     case 0:
     lcd.print("Minggu");
     break;
    delay(1000);
}
    lcd.setCursor(9,2);  //Penampil Kalender
    lcd.print(">");
    lcd.setCursor(10,2);
    lcd.print(now.day(), DEC);
    lcd.print('-');
    lcd.print(now.month(), DEC);
    lcd.print('-');
    lcd.print(now.year(), DEC);
  
    lcd.setCursor(0, 3);  //Penampil Suhu
    lcd.print("Temp:");
    lcd.print(temp);
    lcd.write(0b11011111);
    lcd.print("C");

    lcd.setCursor(13, 3);  //Penampil Kelembapan
    lcd.print("Hum:");
    lcd.print(hum);
    lcd.print("%");



}
 

Video Hasil.

2 comments

Unknown said...

om kalo semisal itu lcdnya nampilin jam dan voltmeter gimana ya caranya? saya mau bikin jam dan voltmeter untuk motor atau mobil

Unknown said...

dan bisakah modulnya dibikin lebih kecil? krna untuk motor dan mobil. terimakasih

Dicky B_Mz. Powered by Blogger.