在这篇文章中,我们将构建一个电路,它将通过短信通知用户,如果你的地区/家庭供水启动。它可以显示时间,当水开始供应和结束,平均水流速度升每分钟和总水交付到您的水箱升。
介绍
我们都知道地球上的生命是不可能的,因为人类是不可能的我们使用更多的水比地球上的任何其他物种消耗,不仅适用于我们的生存,还要满足我们的奢华需求。
我们不仅消耗水,而且污染水体。未来几十年,水的消耗和需求将急剧增长。
As a world citizen, it is our duty to save water, but as an individual we may not satisfy the entire world’s thirst by saving water but, we can definitely satisfy our family’s thirst as we might have healthy amount of water for brief period of time, even if no one around us saved water for future.
印度和其他迅速发展中国家的水供应有限,也有很大的需求,而且供水可以从地方政府的任何官方通知都开始。该项目将为我们解决这个问题。
现在让我们深入研究这个项目的技术细节。
电路:
电路由一个水流传感器YF-S201, Arduino板是这个项目的大脑,一个GSM模块(SIM 800或SIM 900)用于接收关于供水的短信警报和实时时钟模块,用于跟踪正确的供水启动时间和供水终止时间。
9伏特电源为Arduino板和GSM模块供电,建议使用9V适配器或自制的优质变压器(LM 7809)供电。
Arduino与GSM模块的连接如下:
Arduino TX to RX GSM模块
Arduino RX到TX GSM模块
Arduino GND到GND GSM模块
不要试图从Arduino的5V输出引脚给GSM模块供电到GSM模块的5V输入。
RTC或实时时钟模块将跟踪供水到达和供水终止的时间。
结束了硬件。
为了在RTC上设置时间,我们需要上传时间设置程序到RTC完成硬件设置。这将同步时间在您的计算机上的RTC。
下载RTC库文件:github.com/PaulStoffregen/DS1307RTC
RTC时间设置程序:
// ------------------------------------------------------ //
#include
#include
#include
int p = a3;//为RTC分配电源引脚
int N = A2;
const char * mountname [12] = {
“Jan”,“2月”,“Mar”,“Apr”,“May”,“Jun”,
“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”
};
tmElements_t tm;
无效的设置(){
pinMode (P输出);
pinMode (N、输出);
digitalWrite (P、高);
digitalWrite (N,低);
Bool parse = false;
bool config = false;
//获取编译器运行的日期和时间
if(getdate(__日期__)&& gettime(__ time__)){
解析= true;
//配置RTC
if(rtc.write(tm)){
config = true;
}
}
Serial.Begin(9600);
而(!序列);//等待Arduino串行监视器
延迟(200);
If (parse && config) {
系列。打印(“DS1307配置时间= ");
serial.print(__ time__);
系列。打印(”,日期= ");
以__DATE__);
}如果(解析){
serial.println(“DS1307通信错误: - {”);
serial.println(“请检查您的电路”);
} 别的 {
系列。print("无法从编译器解析信息,时间=\");
serial.print(__ time__);
系列。打印(“\”,日期= \ " ");
serial.print(__日期__);
serial.println(“\”);
}
}
void loop(){
}
const char *str = const char *str。
{
算法,分钟,秒;
if(sscanf(str,“%d:%d:%d”,和min,&sec)!= 3)返回false;
tm.hour =小时;
tm。分钟=最小;
tm。第二个=秒;
返回true;
}
const char *str = const char *str
{
炭月[12];
int,;
uint8_ttnondex;
if(sscanf(scr,'%s%d%d“,月,和日,和年)!= 3)返回false;
for (monthIndex = 0;monthIndex < 12;monthIndex + +) {
if(strcmp(月份,月份[honthindex])== 0)中断;
}
if (monthIndex >= 12)返回false;
tm.day =日;
tm。Month =月指数+ 1;
tm。年= CalendarYrToTm(年);
返回true;
}
// ------------------------------------------------------ //
·上传上述代码,硬件已完成。
·打开串口监视器,显示时间已设定。
·现在,您已准备好达到下一步。
日志含义成功设置RTC时间。
现在,让我们上传主要程序,该程序将通过短信通知我们。
主程序:
// -----由r.girish开发的计划----- //
#include
#include
#include
int X;
int y;
Int SEC = 50;
int t = 0;
int i = 0;
Int check = 1;
Int CHK = 0;
int p = a3;
int N = A2;
INT TIM = 0;
时间= 0;
浮动频率= 0;
浮动水流= 0;
浮点总数= 0;
浮点LS = 0;
浮点平均= 0;
const int input = A0;
Const int test = 9;
无效的设置()
{
Serial.Begin(9600);
pinMode(输入,输入);
pinMode(测试、输出);
analogWrite(测试,100);
pinMode (P输出);
pinMode (N、输出);
digitalWrite (P、高);
digitalWrite (N,低);
For (i = 0;我<交会;我+ +)
{
延迟(1000);
}
serial.println(“AT + CNMI = 2,2,0,0,0”);
延迟(1000);
以“在+ CMGF = 1”);
延迟(500);
serial.println(“at + cmgs = \”+ 91xxxxxxxxxxx \“\ r”);//用手机号码替换x
延迟(1000);
系列。println("Your water supply notification system is ready.");//你要发送的短信
延迟(100);
以(char) 26);// CTRL+Z的ASCII码
延迟(1000);
}
无效循环()
{
tmElements_t tm;
如果(RTC.read (tm))
{
如果(tm)。小时> 12)//24小时到12小时转换//
{
如果(tm)。小时== 13)tim = 1;
如果(tm)。小时== 14)tim = 2;
如果(tm)。小时== 15)时间= 3;
如果(tm)。小时== 16)tim = 4;
if(tm.hour == 17)tim = 5;
如果(tm)。小时== 18)tim = 6;
if(tm.hour == 19)tim = 7;
如果(tm)。小时== 20)tim = 8;
if(tm.hour == 21)tim = 9;
如果(tm)。小时== 22)tim= 10;
如果(tm)。小时== 23)tim = 11;
}
别的
{
tim = tm.hour;
}
x =脉冲(输入,高);
Y =脉冲(输入,低);
时间= X + Y;
frequency = 1000000 / Time;
水流=频率/ 7.5;
LS =水流/ 60;
If(频率>= 0)
{
如果(isinf(频率))
{
If (chk == 1)
{
serial.println(“AT + CNMI = 2,2,0,0,0”);
延迟(1000);
以“在+ CMGF = 1”);
延迟(500);
serial.println(“at + cmgs = \”+ 91xxxxxxxxxxx \“\ r”);//用手机号码替换x
延迟(1000);
serial.print(“时间:”);
延迟(10);
serial.print(tim);
延迟(10);
并同时(“:”);
延迟(10);
serial.print(tm.minute);
延迟(10);
如果(tm)。小时> = 12)
{
serial.println(“PM”);
}
if(tm.hour <12)
{
serial.println(“am”);
}
延迟(10);
系列。println("Water Supply is Ended.");//发送短信
延迟(100);
系列。打印(“平均水流量(升/分钟):”);
延迟(100);
以(平均);
延迟(100);
serial.print(“送水总额:”);
延迟(100);
serial.print(总计);
延迟(100);
系列。println(“升”);
延迟(100);
以(char) 26);// CTRL+Z的ASCII码
延迟(5000);
t = 0;
总= 0;
平均= 0;
嗯= 0;
检查= 1;
}
}
别的
{
If (check == 1)
{
serial.println(“AT + CNMI = 2,2,0,0,0”);
延迟(1000);
以“在+ CMGF = 1”);
延迟(500);
serial.println(“at + cmgs = \”+ 91xxxxxxxxxxx \“\ r”);//用手机号码替换x
延迟(1000);
serial.print(“时间:”);
延迟(10);
serial.print(tim);
延迟(10);
并同时(“:”);
延迟(10);
serial.print(tm.minute);
延迟(10);
如果(tm)。小时> = 12)
{
serial.println(“PM”);
}
if(tm.hour <12)
{
serial.println(“am”);
}
延迟(10);
系列。println("The water is being supply now.");//你想发送的短信
延迟(100);
以(char) 26);// CTRL+Z的ASCII码
延迟(1000);
检查= 0;
嗯= 1;
}
T = T + 1;
总=总+ ls;
平均值= total / t;
平均=平均* 60;
}
}
延迟(1000);
}
}
// -----由r.girish开发的计划----- //
笔记:您必须将RTC时间设置程序上传到Arduino首先和主程序第二(完成硬件设置),执行相反,项目将无法正常工作。
以下是测试的原型的SMS屏幕:
·接通电源一分钟后,你会收到一条短信,说系统准备好了。
·当水开始流过传感器时,系统将向用户通知用户。
·供水结束后,系统将再次发出警报,并对时间、平均流量和输送到水箱的总水量进行汇总。
作者的原型:
请注意,在水到达时,水必须自由流动,如果有任何街区或挖掘,则缩短将不会通知您。
如果您对此项目有任何疑问,请随时在评论部分中表达,您可能会获得快速回复。
亲爱的Swagatam记,
Dipawali的意思是“Dipawali”。
Dipawali快乐。
问候,
Devendar
谢谢你,也祝你杜帕瓦里非常快乐!!
第一个程序应该上传到arduino与RTC连接或单独上传到RTC
克先生很快就会回复你......
嗨,拉胡尔,
RTC与Arduino。
问候
为什么我们要把短信电源插入arduino 5v电源输出?