CHI TIẾT BÀI VIẾT

Hướng dẫn sử dụng module DS3231 Real Time hẹn giờ tắt thiết bị

17/09/2020 6:41:20 PM | Xem: lần

  1. Giới thiệu

Bài viết này sẽ hướng dẫn các bạn cách sử dụng Module DS3231 kết hợp với arduino xuất thông tin thời gian thực ra màn hình và thực hiện hẹn giờ tắt tự động. Áp dụng thực tế ta có thể sử dụng để tắt mở đèn ở ngoài sân vườn, đèn phòng khách theo giờ. 


 2. Nội dung chính

  • Module Arduino Uno R3 kết nối I2C với LCD & DS3231
  • Sử dụng màn hình LCD kết nối Arduino để xuất thông tin
  • 3 nút nhấn để cấu hình hẹn giờ 

3. Sơ đồ kết nối các thiết bị 

 

  • Kết nối I2C với LCD

 



 

  • Kết nối Module I2C & LCD với Arduino & DS3231

 




 

  • Sơ đồ kết nối hoàn chỉnh ( Sử dụng relay và LED hoặc một thiết bị nào đó muốn hẹn giờ )

 




Button 1 : 1 chân nối xuống GND chân còn lại tới Pin 10 ( Button Next )

Button 2 : 1 chân nối xuống GND chân còn lại tới Pin 11 ( INC)

Button 3 : 1 chân nối xuống GND chân còn lại tới Pin 12 ( Set_Mad )


4. Code thiết bị Arduino 

Các thư viện cần khai báo :

#include

#include

#include

#include


 

  • Code mô hình hẹn giờ tắt thiết bị realtime

 

#include

#include

#include

#include

DS3231 clock;

RTCDateTime dt;

LiquidCrystal_I2C lcd(0x27,16,2);

int temp,inc,hours1,minut,add=11;

int next=10;

int INC=11;

int set_mad=12;

#define den 8

int HOUR,MINUT,SECOND;

void setup()

{

Serial.begin(9600);

Wire.begin();

clock.begin();

lcd.backlight();

lcd.begin(16,2);

lcd.init();

pinMode(INC, INPUT);

pinMode(next, INPUT);

pinMode(set_mad, INPUT);

pinMode(den, OUTPUT);

digitalWrite(den, HIGH);

digitalWrite(next, HIGH);

digitalWrite(set_mad, HIGH);

digitalWrite(INC, HIGH);

lcd.setCursor(3,0);

lcd.print("CAI DAT GIO");

lcd.setCursor(3,1);

lcd.print(" ITSTARVN ");

delay(2000);

// clock.setDateTime(__DATE__, __TIME__);

}

void loop()

{

dt = clock.getDateTime();

//lcd.backlight();

int temp=0,val=1,temp4;

// DateTime now = clock.now();

if(digitalRead(set_mad) == 0) //set Alarm time

{

lcd.setCursor(0,0);

lcd.print(" Set Alarm ");

delay(2000);

defualt();

time();

delay(1000);

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" Hen Gio TAT ");

lcd.setCursor(0,1);

lcd.print(" DA SAN SANG ");

delay(2000);

}

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Time:");

lcd.setCursor(6,0);

lcd.print(HOUR= dt.hour);

lcd.print(":");

lcd.print(MINUT= dt.minute);

lcd.print(":");

lcd.print(SECOND= dt.second);

lcd.setCursor(0,1);

lcd.print("Date: ");

lcd.print( dt.day);

lcd.print("/");

lcd.print( dt.month);

lcd.print("/");

lcd.print( dt.year);

match();

delay(200);

}

void defualt()

{

lcd.setCursor(0,1);

lcd.print(HOUR);

lcd.print(":");

lcd.print(MINUT);

lcd.print(":");

lcd.print(SECOND);

}

/*Function to set alarm time and feed time into Internal eeprom*/

void time()

{

int temp=1,minuts=0,hours=0,seconds=0;

while(temp==1)

{

if(digitalRead(INC)==0)

{

HOUR++;

if(HOUR==24)

{

HOUR=0;

}

while(digitalRead(INC)==0);

}

lcd.clear();

lcd.setCursor(0,0);

lcd.print("Set Alarm Time ");

//lcd.print(x);

lcd.setCursor(0,1);

lcd.print(HOUR);

lcd.print(":");

lcd.print(MINUT);

lcd.print(":");

lcd.print(SECOND);

delay(100);

if(digitalRead(next)==0)

{

hours1=HOUR;

EEPROM.write(add++,hours1);

temp=2;

while(digitalRead(next)==0);

}

}

while(temp==2)

{

if(digitalRead(INC)==0)

{

MINUT++;

if(MINUT==60)

{MINUT=0;}

while(digitalRead(INC)==0);

}

// lcd.clear();

lcd.setCursor(0,1);

lcd.print(HOUR);

lcd.print(":");

lcd.print(MINUT);

lcd.print(":");

lcd.print(SECOND);

delay(100);

if(digitalRead(next)==0)

{

minut=MINUT;

EEPROM.write(add++, minut);

temp=0;

while(digitalRead(next)==0);

}

}

delay(1000);

}

/* Function to chack medication time */

void match()

{

int tem[23];

for(int i=11;i<23;i++)

{

tem[i]=EEPROM.read(i);

}

if(HOUR == tem[11] && MINUT == tem[12])

{

beep();

}

}

/* function to buzzer indication */

void beep()

{

digitalWrite(den, LOW);

}

 

Lưu ý:đối với realtime sử dụng

clock.setDateTime(__DATE__, __TIME__);

sau đó đổ code lần 2 và loại bỏ dòng này đi để tránh việc setDateTime với Arduino mỗi khi restart lại Arduino Uno R3.



Video thực hiện demo cài đặt hẹn giờ thiết bị:


Thực hiện:  Nguyễn Mạnh Cương