โมดูลนาฬิกา DS3231 module

บทความนี้จะสอนใช้งาน โมดูลนาฬิกา RTC DS3231 ให้แสดงเวลาและวันที่บน LCD โดยคอนโทรลผ่านบอร์ด ESP8266 หรือใครจะใช้บอร์ด Arduino UNO หรือ Arduino NANO ก็ได้นะครับ จะมีวิธีการทำอย่างไรกันนั้น ไปดูกันเลยครับ

DS3231 Module โมดูลนาฬิกา

DS3231 module เป็นโมดูนาฬิกาแบบเวลาจริง RTC( Real Time Clock ) ที่มีความถูกต้องแม่นยำสูง เพราะข้างในมีวงจรวัดอุณหภูมิ เพื่อนำอุณหภูมิจากสภาพแวดล้อมมาคำนวนชดเชยความถี่ของ Crystal ที่ถูกรบกวนจากอุณหภูมิภายนอก มาพร้อมแบตเตอร์รี่ ใช้งานได้แม้ไม่มีแหล่งจ่ายไฟจากภายนอก สามารถตั้งค่า วัน เวลา ได้อย่างง่าย มีไลบารีมาพร้อมใช้งาน สามารถเลือกแสดงผลเวลาแบบ 24 ชั่วโมงหรือแบบ 12 ชัวโมงก็ได้โมดูลนี้ยังสามารถ แสดงอุณหภูมิภายนอกได้ เป็นเหมือนนาฬิกาดิจิตอลที่บอกอุณหภูมิได้ด้วย

สเปค

  1. ขนาด: 38x×22×14mm
  2. น้ำหนัก: 8g
  3. แรงดันใช้งาน: 3.3 – 5 .5 V
  4. ชิป: DS3231
  5. ความแม่นยำ: ช่วง range 0-40, 2ppm ,Error ระมาณ 1 นาที
  6. เซ็นเซอร์อุณหภูมิ: ความแม่นยำ± 3
  7. ชิปหน่วยความจำ: AT24C32 (ความจุ 32K)
  8. อินเทอร์เฟซบัส: I2C
  9. ความเร็วในการรับส่งข้อมูลสูงสุด: 400KHz
  10. ใช้แบตเตอรี่: CR2032

อุปกรณ์ที่ต้องใช้

  1. บอร์ด ESP8266  →   สั่งซื้อ
  2. จอ LCD16x2   →   สั่งซื้อ
  3. Clock Module DS3231   →   สั่งซื้อ
  4. บอร์ดทดลอง – 830 จุด   →   สั่งซื้อ
  5. สาย Jumper 20 cm Male to Female  →   สั่งซื้อ
  6. สาย Jumper 20 cm Male to Male  →   สั่งซื้อ

การต่อวงจร

LCD  ⇒  ESP8266

SDA    →   D2

SCL     →   D1

VCC    →    Vin

GND   →    GND

RTC DS3231  ⇒  ESP8266

SDA    →   D2

SCL     →   D1

VCC    →    Vin

GND   →    GND

โหลด Library

RTC  →   คลิก

LCD  →   คลิก

// SDA ต่อ D2 for ESP8266
// SCL ต่อ D1 for ESP8266
// SDA ต่อ A4 for UNO หรือ NANO
// SCL ต่อ A5 for UNO หรือ NANO

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include “RTClib.h”
RTC_DS3231 rtc;

void setup() {
lcd.begin();
lcd.backlight();
lcd.setCursor(0, 0);
Serial.begin(9600);

if (! rtc.begin()) {
Serial.println(F(“Couldn’t find RTC”));
while (1);
}

if (rtc.lostPower()) {
Serial.println(F(“RTC lost power, lets set the time!”));
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}

void printDigits(int digits){ //ถ้าตัวเลข <10 ให้แสดงเลข 0 นำหน้า เช่น 01,02,03 ถึง 09
if(digits < 10)
{
lcd.print(‘0’);
}
lcd.print(digits);
}

void loop() {
DateTime now = rtc.now();
//แสดงเวลา
lcd.setCursor(0, 0);
lcd.print(“Time:”);
lcd.setCursor(5, 0);
printDigits(now.hour());
lcd.setCursor(7, 0);
lcd.print(“:”);
lcd.setCursor(8, 0);
printDigits(now.minute());
lcd.setCursor(10, 0);
lcd.print(“:”);
lcd.setCursor(11, 0);
printDigits(now.second());

//แสดงวันเ/เดือน/ปี
lcd.setCursor(0, 1);
lcd.print(“Date:”);
lcd.setCursor(5, 1);
printDigits(now.day());
lcd.setCursor(7, 1);
lcd.print(“/”);
lcd.setCursor(8, 1);
printDigits(now.month());
lcd.setCursor(10, 1);
lcd.print(“/”);
lcd.setCursor(11, 1);
printDigits(now.year());
}

เมื่ออัพโหลดโค้ดลงบอร์ดเรียบร้อยแล้วเมื่อทำการทดสอบจะได้ผลดังรูป

Banner Content

0 Comments

Leave a Comment