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:
- Arduino Uno
- Modul RTC DS3231
- LCD 20x4
- Modul DHT11
- IC 74HC595
- Potensio
- 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("%");
}
13>
Video Hasil.
2 comments
om kalo semisal itu lcdnya nampilin jam dan voltmeter gimana ya caranya? saya mau bikin jam dan voltmeter untuk motor atau mobil
dan bisakah modulnya dibikin lebih kecil? krna untuk motor dan mobil. terimakasih
Post a Comment