Arduino Dot Matrix Jam Digital + Suhu Max7219

Arduino Dot Matrix Jam Digital – Dalam era digital seperti saat ini, kebutuhan akan perangkat yang dapat menampilkan waktu dan suhu secara akurat dan efisien semakin meningkat. Salah satu cara untuk membuat perangkat seperti itu adalah dengan menggunakan Arduino dan modul MAX7219. Dalam proyek Arduino Dot Matrix Max7219 Jam Digital + Suhu, kita akan memanfaatkan kemampuan ini untuk membuat jam digital yang juga dapat menampilkan suhu.

Proyek ini adalah proyek yang menarik dan bermanfaat bagi para pemula di bidang elektronika. Dalam proyek ini, kita akan menggunakan beberapa komponen, termasuk modul MAX7219, sensor suhu DS18B20, display dot matrix, dan tentu saja, board Arduino. Dengan mempelajari cara menggunakan dan mengintegrasikan semua komponen ini, kita dapat membuat jam digital + suhu yang keren dan berguna.


Rangkaian

Untuk dapat menampilkan data jam dan suhu ke dot matrix, terlebih dahulu kita rangkaian semua komponen yang ada. Saya bagi ke dalam dua bagian rangkaian, rangkaian pertama adalah rangkaian Arduino ke Dot Matrix yang dapat anda lihat disini. Rangkaian yang kedua adalah rangkaian arduino ke RTC DS1307 dan DHT11/22 seperti yang anda lihat pada gambar berikut:

Arduino Dot Matrix Jam Digital + Suhu Max7219

Kode Program

Berikut ini adalah kode program yang dapat anda gunakan. Kode program ini bersumber dari projek wokwi, dengan sedikit modifikasi dengan menambahkan jumlah modul dot matrix dan mengganti beberapa kata dalam bahasa indonesia.

Silahkan copy kode program dibawah ini, paste kan ke arduino IDE, lalu upload ke Arduino board anda:

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "RTClib.h"
#include "DHT.h"

//------------------------------------------------
//-------------- Pengaturan Dot Matrix -----------
//------------------------------------------------
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 8

#define CLK_PIN   13
#define DATA_PIN  11
#define CS_PIN    10

MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);


//------------------------------------------------
//----------------- Pengaturan RTC ---------------
//------------------------------------------------
RTC_DS1307 rtc;

char daysOfTheWeek[7][7] = {"Ahad", "Senin", "Selasa", "Rabu", "Kamis", "Jumat", "Sabtu"};
char Month [13][10] = {" ", "Jan", "Feb", "Mar", "Apr", "Mei", "Juni", "Juli", "Agus", "Sept", "Okt", "Nov", "Des"};

int jam, menit, detik, tanggal, tahun;
char *hari;
char *bulan;
int detikSebelumnya = 0;


//------------------------------------------------
//----------------- Pengaturan Pesan -------------
//------------------------------------------------
#define MAX_MESG   20
char textJam[MAX_MESG + 1] = "";
char textHari[MAX_MESG + 1] = "";
char textTanggal[MAX_MESG + 1] = "";
char textSuhuC[MAX_MESG + 1] = "";
char textSuhuF[MAX_MESG + 1] = "";

uint8_t degC[] = { 6, 3, 3, 56, 68, 68, 68 }; // Deg C
uint8_t degF[] = { 6, 3, 3, 124, 20, 20, 4 }; // Deg F



//------------------------------------------------
//-------------- Pengaturan Sensor Suhu ----------
//------------------------------------------------
#define DHTPIN 2
#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);

float humidity, celsius, fahrenheit;
uint32_t timerDHT = 1000;


static uint32_t lastTime = 0; // Memory (ms)
static bool detak = false;  // Seconds passing detak
static uint8_t display = 0;  // Current display mode

void ambilWaktu()
{
  DateTime now = rtc.now();
  jam = now.hour();
  menit = now.minute();
  detik = now.second();
  tanggal = now.day();
  hari = daysOfTheWeek[now.dayOfTheWeek()];
  bulan = Month[now.month()];
  tahun = now.year();
}

void ambilSuhu()
{
  if ((millis() - timerDHT) > 100) {
    timerDHT = millis();

    humidity = dht.readHumidity();
    celsius = dht.readTemperature();
    fahrenheit = dht.readTemperature(true);

    // Check if any reads failed and exit early (to try again)
    if (isnan(humidity) || isnan(celsius) || isnan(fahrenheit)) {
      Serial.println("Failed to read from DHT sensor!");
      return;
    }
  }
}

void setup(void)
{
  P.begin();
  dht.begin();
  rtc.begin();
  //Serial.begin(9600);

  P.addChar('$', degC);
  P.addChar('&', degF);
}

void loop(void)
{
  ambilSuhu();
  ambilWaktu();

  char c[5] = " ";
  dtostrf(celsius, 3, 1, c);
  strcat(c, "$");

  char f[5] = "";
  dtostrf(fahrenheit, 3, 1, f);
  strcat(f, "&");

  if (P.displayAnimate()) {
    switch (display) {
      case 0:
        if (detik != detikSebelumnya)
        {
          sprintf(textJam, "%02d %c %02d %c %02d", jam, (detak ? ':' : ' '), menit,  (detak ? ':' : ' '), detik);
          P.displayText(textJam, PA_CENTER, 30, 1000, PA_NO_EFFECT, PA_NO_EFFECT);

          detak = !detak;
          detikSebelumnya = detik;
        }

        if (detik == 0 || detik == 30) {
          display++;
          P.setTextEffect(PA_PRINT, PA_WIPE_CURSOR);
        }
        break;

      case 1:
        sprintf(textHari, "%s", hari );
        P.displayText(textHari, PA_CENTER, 30, 1000, PA_PRINT, PA_NO_EFFECT);
        display++;
        break;

      case 2:
        sprintf(textTanggal, "%d%c%s%c%d", tanggal, ' ', bulan, ' ', tahun);
        P.displayText(textTanggal, PA_CENTER, 30, 1000, PA_PRINT, PA_NO_EFFECT);
        display++;
        break;

      case 3:
        sprintf(textSuhuC, "%s%s", "Suhu : ", c );
        P.displayText(textSuhuC, PA_CENTER, 30, 1000, PA_PRINT, PA_NO_EFFECT);
        display++;
        break;

      case 4:
        sprintf(textSuhuF, "%s%s", "Suhu : ", f);
        P.displayText(textSuhuF, PA_CENTER, 30, 1000, PA_PRINT, PA_NO_EFFECT);
        display++;
        P.setTextEffect(PA_PRINT, PA_WIPE_CURSOR);
        break;

      case 5:
        P.displayText("Selamat datang di www.chippiko.com", PA_LEFT, 20, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
        display = 0;
        break;
    }
  }
}

Hasil

Jika sudah berhasil upload kode program diatas ke Arduino anda, maka anda akan melihat hasilnya adalah sebagai berikut:

Arduino Dot Matrix Jam Digital + Suhu Max7219

Semoga artikel Arduino Dot Matrix Jam Digital + Suhu Max7219 ini bermanfaat.

Similar Posts