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ị
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ờ
-
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 )
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