在此帖子中,我们将构建一个电路,如果您的区域/家庭供水,则会通过短信通知用户。它可以显示水开始供应和结束的时间,升每分钟的平均水流量速度和升上桶的总水。
介绍
我们都知道,地球上的生命没有水是不可能的,作为人类我们使用更多的水比地球上的任何其他物种消耗,不仅适用于我们的生存,还要满足我们的奢华需求。
我们不仅消耗水,而且污染水体。在未来的几十年里,水的消耗和需求将会激增。
作为一个世界公民,节约用水是我们的责任,但作为一个个体,我们可能不能满足整个世界的渴求通过节约用水,但我们绝对可以满足家庭的渴求可能健康水的短暂的时间,即使我们周围没有一个人救了水为未来。
印度和其他迅速发展中国家的水供应有限,也有很大的需求,而且供水可以从地方政府的任何官方通知都开始。该项目将为我们解决这个问题。
现在让我们深入研究这个项目的技术细节。
电路:
电路包括一个水流传感器YF-S201,作为项目大脑的Arduino板,aGSM模块(SIM 800或SIM 900)用于接收供水中的短信警报和实时时钟模块,用于跟踪供水启动和供水终止的正确时间。
9伏电源可用于为Arduino板和GSM模块供电,建议从9V适配器或自制构建的电源提供电源(LM 7809)电源。
Arduino和GSM模块之间的连接如下:
Arduino TX到RX GSM模块
Arduino RX到TX GSM模块
Arduino GND to GND GSM模块
切勿尝试将GSM模块从Arduino的5V输出引脚电源为GSM模块的5V输入。
RTC或实时时钟模块将跟踪水到达和终止供水的时间。
结束了硬件。
要在RTC上设置时间,我们需要在完成硬件设置后,将时间设置程序上传到RTC。这将同步您计算机上的时间到RTC。
下载RTC库文件:github.com/PaulStoffregen/DS1307RTC
设定RTC时间的程序:
// ------------------------------------------------------ //
#include
# include < TimeLib.h >
# include < DS1307RTC.h >
int P = A3;//为RTC分配电源插脚
int n = a2;
const char * mountname [12] = {
“Jan”,“Feb”,“Mar”,“Apr”,“May”,“Jun”,
“七月”,“八月”,“九月”,“十月”,“十一月”,“十二月”
};
tmelements_t tm;
void setup(){
pinMode (P输出);
Pinmode(n,输出);
DigitalWrite(P,高);
digitalWrite (N,低);
bool parse = false;
bool config = false;
//获取编译器运行的日期和时间
if (getDate(__DATE__) && getTime(__TIME__)) {
parse = true;
//配置RTC
if(rtc.write(tm)){
config = true;
}
}
Serial.begin (9600);
而(!序列);//等待Arduino串行监视器
延迟(200);
If(解析&&配置){
serial.print(“DS1307配置=”);
并同时__TIME__);
serial.print(“,日期=”);
serial.println(__日期__);
}如果(解析){
serial.println(“DS1307通信错误: - {”);
系列。println(“请检查电路”);
其他}{
serial.print(“无法解析编译器的信息,time = \”“);
并同时__TIME__);
serial.print(“\”,date = \“”);
serial.print(__日期__);
serial.println(“\”);
}
}
void loop(){
}
getTime(const char *str)
{
int小时,最小,秒;
if(sscanf(str,“%d:%d:%d”,和min,&sec)!= 3)返回false;
tm.hour =小时;
tm。分钟=最小;
tm.second =秒;
返回true;
}
BOOL GETDATE(const char * str)
{
char月[12];
泰铢日;
uint8_ttnondex;
if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3)返回false;
for(暂时的= 0;一个月Index<12;铃声++){
if (strcmp(Month, monthName[monthIndex]) == 0) break;
}
if(月胎> = 12)返回false;
tm.day =日;
tm.month =莲属ex + 1;
TM.Year = CalendaryRtotm(年);
返回true;
}
// ------------------------------------------------------ //
·使用已完成的硬件上传上述代码。
·打开串行监视器,它显示时间已设置。
·现在,您已准备好达到下一步。
您成功将时间设置为RTC模块。
现在,让我们上传主要程序,该程序将通过短信通知我们。
主程序:
//----- R.Girish开发的程序-----//
#include
# include < TimeLib.h >
# include < DS1307RTC.h >
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;
Float total = 0;
float ls = 0;
浮子平均值= 0;
const int输入= a0;
Const int test = 9;
void setup()
{
Serial.begin (9600);
pinMode(输入,输入);
PinMode(测试,输出);
analogWrite(测试,100);
pinMode (P输出);
Pinmode(n,输出);
DigitalWrite(P,高);
digitalWrite (N,低);
for(i = 0; i
延迟(1000);
}
以“在+ CNMI = 2, 2, 0, 0, 0);
延迟(1000);
serial.println(“AT + CMGF = 1”);
延迟(500);
以“在+发生= \”+ 91 xxxxxxxxxx \ " \ r ");//将x替换为移动电话号码
延迟(1000);
serial.println(“您的供水通知系统已准备就绪。”); //您要发送的SMS文本
延迟(100);
serial.println((char)26);// ctrl + z的ASCII代码
延迟(1000);
}
无效循环()
{
tmelements_t tm;
if(rtc.read(tm))
{
if(tm.hour> 12)// 24hrs到12小时转换//
{
if(tm.hour == 13)tim = 1;
if(tm.hour == 14)tim = 2;
if(tm.hour == 15)tim = 3;
if(tm.hour == 16)tim = 4;
如果(tm)。小时== 17)tim = 5;
if(tm.hour == 18)tim = 6;
如果(tm)。小时== 19)tim = 7;
if(tm.hour == 20)tim = 8;
如果(tm)。小时== 21)tim = 9;
如果(tm)。小时== 22)tim = 10;
if(tm.hour == 23)tim = 11;
}
别的
{
蒂姆= tm.Hour;
}
X = pulseIn(输入,高);
Y = pulseIn(输入,LOW);
时间= x + y;
频率= 1000000 /时间;
水流=频率/ 7.5;
LS =水流/ 60;
if(频率> = 0)
{
if(Isinf(频率))
{
If (chk == 1)
{
以“在+ CNMI = 2, 2, 0, 0, 0);
延迟(1000);
serial.println(“AT + CMGF = 1”);
延迟(500);
以“在+发生= \”+ 91 xxxxxxxxxx \ " \ r ");//将x替换为移动电话号码
延迟(1000);
系列。打印(“:”);
延迟(10);
serial.print(tim);
延迟(10);
并同时(“:”);
延迟(10);
serial.print(tm.minute);
延迟(10);
if(tm.hour> = 12)
{
系列。println(“点”);
}
如果(tm)。小时< 12)
{
系列。println(“我”);
}
延迟(10);
系列。println("Water Supply is Ended.");//要发送的短信
延迟(100);
Serial.print(“平均水流(升/分):”);
延迟(100);
以(平均);
延迟(100);
系列。print(“总送水量:”);
延迟(100);
serial.print(总计);
延迟(100);
serial.println(“升”);
延迟(100);
serial.println((char)26);// ctrl + z的ASCII代码
延迟(5000);
t = 0;
总= 0;
平均= 0;
嗯= 0;
检查= 1;
}
}
别的
{
如果(检查== 1)
{
以“在+ CNMI = 2, 2, 0, 0, 0);
延迟(1000);
serial.println(“AT + CMGF = 1”);
延迟(500);
以“在+发生= \”+ 91 xxxxxxxxxx \ " \ r ");//将x替换为移动电话号码
延迟(1000);
系列。打印(“:”);
延迟(10);
serial.print(tim);
延迟(10);
并同时(“:”);
延迟(10);
serial.print(tm.minute);
延迟(10);
if(tm.hour> = 12)
{
系列。println(“点”);
}
如果(tm)。小时< 12)
{
系列。println(“我”);
}
延迟(10);
系列。println("The water is being offered now.");//您想发送的短信
延迟(100);
serial.println((char)26);// ctrl + z的ASCII代码
延迟(1000);
检查= 0;
嗯= 1;
}
t = t + 1;
总=总+ ls;
平均=总计/ T;
平均=平均* 60;
}
}
延迟(1000);
}
}
//----- R.Girish开发的程序-----//
请注意:你必须先上传RTC时间设置程序到Arduino,然后上传主程序(完成硬件设置),反之,项目将无法运行。
以下是测试原型的短信截图:
·在一分钟电路后,您将获得短信,说系统已准备就绪。
·当水开始流经传感器时,系统会以时间通知用户。
·终止供水后,系统将发送另一个警报并随时间汇总会话,平均水流和送到您的坦克的总水。
作者的原型:
请注意,在水到达时,水必须自由流动,如果有任何街区或挖掘,则缩短将不会通知您。
如果您对此项目有任何疑问,请随时在评论部分中表达,您可能会获得快速回复。
亲爱的Swagatam记,
Dipawali ki bhut bhut shubhkamnayen。
快乐的Dipawali。
问候,
Devendar
谢谢德军吉,祝你太开心的DuPawali!
第1个程序应将与RTC连接的Arduino或仅单独连接到RTC
Mr.GR将很快回复你…
嗨拉胡尔,
有Arduino的RTC。
问候
为什么我们要把短信电源插到arduino 5v电源输出上?