DIY Digital Clock Arduino Nano Seven Segment With Temperature & Humidity

 

Pada kesempatan kali ini saya akan berbagi pengalaman bagaimana cara membuat jam dinding digital menggunakan Arduino Nano. dan jam digital ini bekerja secara real time karena menggunakan RTC DS3231, sebagai Back Up ketika sumber tegangan padam. pada project kali ini saya menggunakan IC RTC DS3231 karena dari beberapa jenis IC RTC yang mempunyai nilai keakurasian yang tinggi adalah IC DS3231. Selain sebagai penampil waktu, jam digital ini dilengkapi dengan Sensor DHT11 yang berguna untuk pendeteksi suhu dan kelembapan susatu ruangan, sehingga kita bisa mengetahui suhu suatu ruangan. 

Keunggulan dari Project ini adalah sistem 3 in 1 yang terintegrasi dalam satu microcontroller yaitu Arduino Nano. Project ini juga mempunyai keunggulan lainnya yaitu seperti penggunaan Daya, jam digital ini mengkonsumsi daya yang sangat kecil karen menggunakan LED SMD1206, dan untuk mengidupkan LED tiap segmentnya menggunakan IC Shift Register 74HC595, tidak hanya berhenti disitu, jam digital ini juga menggunakan tegangan yang cukup kecil untuk Seven Segment dengan ukuran yang besar, yaitu menggunakan tegangan sebesar 5 Volt.

Mungkin cukup itu saja untuk penjelasan singkat mengenai project jam digital ini. Dan bagi rekan-rekan yang ingin membuat project ini, telah saya siapkan semua file yang dibutuhkan untuk membuatnya. namun selain file-file dalam bentuk softwere rekan-rekan juga harus menyiapkan bahan yang akan digunakan, daftar bahan yang digunakan adalah sebagai berikut:
  1. PCB Digital Wall Clock 2017  1 Buah
  2. Arduino Nano CH340G           1 Buah
  3. DHT 11                                     1 Buah
  4. IC RTC DS3231                       1 Buah
  5. IC 74HC595                             2 Buah
  6. LED 1206 SMD                       84 Buah
  7. Resistor 56 Ohm                      8 Buah
  8. Battrey CR2032+Holder          1 Buah
  9. LED 1 Watt                              2 Buah
  10. Design Acrylic                         1 Buah
  11. Speser                                       8 Buah
  12. Jack DC                                    1 Buah
  13. Regulator 7805                         1 Buah
  14. Timah Cair                               Secukupnya
Untuk Skema Utama bisa dilihat Dibawah ini.

Dibawah ini merupakan Design PCB yang digunakan

  • Design Utama
  • Bottom Layer

  •  Top Layer

Design untuk Acrylic
Bahan Setelah Dicetak
  • PCB Digital Wall Clock 2017





  • Case Acrylic


Setelah Semua Siap maka dilanjut tahap pemasangan Komponen.


Tampak Depan.



Tampak belakang.



Setelah Semua komponen terpasang maka masukkan Source Code Dibawah ini.



Program Utama

=================================Source Code================================

#include "Time.h"        //Time Library
#include "RTClib.h"      //Real Time Clock Library DS3231
#include "Wire.h"        //Library untuk pembacaan RTC (SDA , SCL)
#include "dht11.h"       //Library Suhu dan Kelembapan
dht11 DHT;              
#define DHT11_PIN 11     //Sensor DHT terhubung ke pin 11 Arduino
RTC_DS3231 rtc;
int clockPin = 8; // Pin 8  ke kaki IC no 11 74HC595 (Clock)
int latchPin = 9; // Pin 9  ke kaki IC no 12 74HC595 (Latch)
int dataPin = 10; // Pin 10 ke kaki IC no 14 74HC595 (Data)
int Jam, Menit, temp, umid;
int unitJam, unitMenit, perJam, perMenit;
int Hari, Tanggal, Bulan, Tahun;
int unitTemp, perTemp, unitUmid, perUmid;
unsigned long ti;
int chk; //variable untuk membaca sensor DHT11

//Costum Angka Seven Segment - 0 sampai 9
byte num[] = {
  B01111110, // 0
  B00110000, // 1
  B01101101, // 2
  B01111001, // 3
  B00110011, // 4
  B01011011, // 5
  B01011111, // 6
  B01110000, // 7
  B01111111, // 8
  B01111011, // 9
};


void setup() {

  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  rtc.begin();
  Wire.begin();

 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() {
DateTime now = rtc.now();
  ti = millis();

  while ((millis() - ti) < 50000) { //Waktu tampilan JAM 
    
    Jam = now.hour(), DEC; 
    Menit = now.minute(), DEC;
    unitJam = Jam % 10;
    perJam = Jam / 10;
    unitMenit = Menit % 10;
    perMenit = Menit / 10;
    
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[perJam]);      
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                 
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unitJam]);     
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[perMenit]);     
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                   
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unitMenit]);     
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                 
    shiftOut(dataPin, clockPin, LSBFIRST, ~B10000000);         
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  
    shiftOut(dataPin, clockPin, LSBFIRST, 255);                
    digitalWrite(latchPin, HIGH);
  }
  delay(10); 


  chk = DHT.read(DHT11_PIN);  //membaca data dari sensor DHT11
  ti = millis();
  temp = DHT.temperature; 
 
  while ((millis() - ti) < 3000) { //Waktu tampilan SUHU

    unitTemp = temp % 10;
    perTemp = temp / 10;

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                 
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[perTemp]);      
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unitTemp]);     
    digitalWrite(latchPin, HIGH); 
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);             //Penampil Simbol Derajat    
    shiftOut(dataPin, clockPin, LSBFIRST, ~B01100011);          
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);             // Pnampil Huruf C     
    shiftOut(dataPin, clockPin, LSBFIRST, ~B01001110);         
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                   
    shiftOut(dataPin, clockPin, LSBFIRST, 255);
    digitalWrite(latchPin, HIGH);
  }
  delay(10); 

  ti = millis(); 
  umid = DHT.humidity; //membaca kelembapan

  while ((millis() - ti) < 3000) { //Waktu tampilan kelembapan

    unitUmid = umid % 10;
    perUmid = umid / 10;

    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[perUmid]);     
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 2);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~num[unitUmid]);  
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 4);                  
    shiftOut(dataPin, clockPin, LSBFIRST, ~B00000001);        //Penampil -
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 8);                 
    shiftOut(dataPin, clockPin, LSBFIRST, ~B00110111);        //Penampil Huruf H
    digitalWrite(latchPin, HIGH);
    digitalWrite(latchPin, LOW);
    shiftOut(dataPin, clockPin, LSBFIRST, 1);                  
    shiftOut(dataPin, clockPin, LSBFIRST, 255);                
    digitalWrite(latchPin, HIGH);
  }
  delay(10); 

}




File Design PCB dan Design Case Acrylic Download Disini

Video Proses Pembuatan

No comments

Dicky B_Mz. Powered by Blogger.