基于Arduino的实时时钟电池监控系统
文件列表(压缩包大小 210.07K)
免费
概述
Arduino UNO
LCD 1602
Arduino Tiny RTC I2C模块 24C32存储器 DS1307时钟
Arduino IDE
在本文中,你将学习如何实现监视实时时钟电池并防止电路出现问题的功能。
在使用时间和日期执行某些任务的多个系统上,使用实时时钟芯片至关重要。但是最大的问题之一是它需要电池才能在系统关闭时保持时间和日期计数。
例如,在计算机上,我们有一个实时时钟,当电池电压低时,时间和日期会显示错误的值。
因此,要解决项目中的此问题,我们可以监视电池电压。因此,当电池电量低于极限值时,系统将发出警报以进行更换。
在本文中,我们将创建一个监视电池的系统,并为用户更换电池生成警报。
在这个项目中,我们将创建一个完整的配置和日期和时间表示的系统。我们的目标是仅显示日期和小时,并且主要集中于监视实时时钟的电池。
通过此监视,我们将在LCD上显示日期和时间的同时显示其电压值。如果电压值小于1.5V,系统将警告用户,以通知电池电压过低。此我们在屏幕上显示下图中的低电压警报消息。
屏幕显示低电压消息。
现在,我们将逐步介绍使用Arduino UNO构建一个简单项目的过程。
要构建这个项目,你需要使用图2所示的电路。
监控电池电压的电路电子原理图
通过该电路,可以看到在实时时钟模块中有一个名为VBat的引脚。通过该引脚,我们连接到模拟引脚AN0,以验证电池电压并通知LCD 1602 。
现在,查看项目,我们将学习代码的工作方式。代码如下。
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
#define tensao A0
bool ControlVbat1 = 0, ControlVbat2 = 0;
void setup ()
{
lcd.begin(16,2);
Serial.begin(9600);
if (! rtc.begin())
{
Serial.println("DS1307 não encontrado");
while(1);
}
if (! rtc.isrunning())
{
Serial.println("DS1307 rodando!");
rtc.adjust(DateTime(2025, 6, 1, 15, 00, 00)); //Year, Month, Day, Minutes and Seconds
}
pinMode(tensao, INPUT);
}
void loop ()
{
float Vbat = (5*(analogRead(tensao)))/1023;
DateTime now = rtc.now();
lcd.setCursor(0,0);
if(now.hour() < 10)
{
lcd.setCursor(0,0);
lcd.print("0");
}
lcd.print(now.hour(), DEC );
lcd.print(":");
if(now.minute() < 10)
{
lcd.setCursor(3,0);
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.setCursor(8,0);
lcd.print(now.day(), DEC );
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
if(Vbat < 1.5 && ControlVbat1 == 0)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(2,1);
lcd.print("Low Battery!");
ControlVbat1 = 1;
ControlVbat2 = 0;
}
if(Vbat >= 1.5 && ControlVbat2 == 0)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(1,1);
lcd.print("Voltage: ");
lcd.print(Vbat);
lcd.print("V");
ControlVbat1 = 0;
ControlVbat2 = 1;
}
}
在此代码中,我们进行了LCD ,Real Clock ,其小时初始化和变量声明的配置。
float Vbat = (5*(analogRead(tensao)))/1023;
此后,将从实时时钟模块收集数据和小时数。因此,其值显示在LCD 16x2中。
DateTime now = rtc.now();
lcd.setCursor(0,0);
if(now.hour() < 10)
{
lcd.setCursor(0,0);
lcd.print("0");
}
lcd.print(now.hour(), DEC );
lcd.print(":");
if(now.minute() < 10)
{
lcd.setCursor(3,0);
lcd.print("0");
}
lcd.print(now.minute(), DEC);
lcd.setCursor(8,0);
lcd.print(now.day(), DEC );
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.year(), DEC);
输入日期和小时值后,系统将验证电池电压是否小于或大于1.5V。
if(Vbat < 1.5 && ControlVbat1 == 0)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(2,1);
lcd.print("Low Battery!");
ControlVbat1 = 1;
ControlVbat2 = 0;
}
if(Vbat >= 1.5 && ControlVbat2 == 0)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(1,1);
lcd.print("Voltage: ");
lcd.print(Vbat);
lcd.print("V");
ControlVbat1 = 0;
ControlVbat2 = 1;
}
如果电压值小于1.5V,则LCD将显示“电量低”消息,如图3所示。这样,系统将向用户发出警报。
LCD显示电量不足消息。
现在,如果电池电压超过1.5V,则LCD会显示电池的日期,时间和电压。如图4所示。
屏幕显示小时数和电池电压。
变量ControlVbat1和ControlVbat2用于在LCD中仅显示一次消息。这样,这些变量会阻止多次显示该消息,并在LCD中产生不良影响。
因此,在需要正确的日期和时间操作的应用中,我们可以使用这种设计来监视电池操作并避免时间故障。
这样,当警告用户时,它可能会更换电池并维持设备的正常运行。
所有需要的文件在下载区均可找到。
如果遇到文件不能下载或其他产品问题,请添加管理员微信:ligongku001,并备注:产品反馈
评论(0)