首页 > 控制电路 >报警电路 > 供水警报系统设计方案

供水警报系统设计方案

来源:互联网发布者:王达业 关键词: 供水系统 警报系统 更新时间: 2024/04/17

在这篇文章中,我们将构建一个电路,如果开始向您的区域/家庭供水,它将通过短信通知用户。它可以显示水开始供应和结束的时间,平均水流速(以升/分钟为单位)和输送到水箱的总水量(以升为单位)。

介绍

我们都知道,没有水,地球上的生活是不可能的,因为人类使用的水比地球上任何其他物种消耗的水都多,这不仅是为了我们的生存,也是为了满足我们的奢侈需求。

我们不仅消耗水,还污染水体。未来几十年,水的消耗和需求将猛增。

作为世界公民,节约用水是我们的责任,但作为个人,我们可能无法通过节约用水来满足整个世界的口渴,但我们绝对可以满足家人的口渴,因为我们可能在短时间内拥有健康的水量,即使我们周围没有人为将来保存水。

印度和其他快速发展的国家的供水有限,需求量也很大,而且供水可以在没有当地政府任何官方通知的情况下开始。这个项目将为我们解决这个问题。

现在让我们深入了解该项目的技术细节。

电路:

该电路由水流量传感器YF-S201,作为项目大脑的Arduino板,用于接收供水短信警报的GSM模块(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 模块

切勿尝试从 Arduino 的 5V 输出引脚为 GSM 模块的 5V 输入为 GSM 模块供电。

RTC或实时时钟模块将跟踪水的到达时间和供水的终止。

硬件到此结束。

要在 RTC 上设置时间,我们需要将时间设置程序上传到 RTC 并完成硬件设置。这会将计算机上的时间同步到 RTC。

下载 RTC 库文件:github.com/PaulStoffregen/DS1307RTC

在 RTC 上设置时间的程序:

//-----------------------------------------------------------//

#include 《Wire.h》

#include 《TimeLib.h》

#include 《DS1307RTC.h》

int P = A3; //Assign power pins for RTC

int N = A2;

const char *monthName[12] = {

“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”,

“Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dec”

};

tmElements_t tm;

void setup() {

pinMode(P, OUTPUT);

pinMode(N, OUTPUT);

digitalWrite(P, HIGH);

digitalWrite(N, LOW);

bool parse = false;

bool config = false;

// get the date and time the compiler was run

if (getDate( DATE ) && getTime( TIME )) {

parse = true;

// and configure the RTC with this info

if (RTC.write(tm)) {

config = true;

}

}

Serial.begin(9600);

while (!Serial) ; // wait for Arduino Serial Monitor

delay(200);

if (parse && config) {

Serial.print(“DS1307 configured Time=”);

Serial.print( TIME );

Serial.print(“, Date=”);

Serial.println( DATE );

} else if (parse) {

Serial.println(“DS1307 Communication Error :-{”);

Serial.println(“Please check your circuitry”);

} else {

Serial.print(“Could not parse info from the compiler, Time=”“);

Serial.print( TIME );

Serial.print(”“, Date=”“);

Serial.print( DATE );

Serial.println(”“”);

}

}

void loop() {

}

bool getTime(const char *str)

{

int Hour, Min, Sec;

if (sscanf(str, “%d:%d:%d”, &Hour, &Min, &Sec) != 3) return
false;

tm.Hour = Hour;

tm.Minute = Min;

tm.Second = Sec;

return true;

}

bool getDate(const char *str)

{

char Month[12];

int Day, Year;

uint8_t monthIndex;

if (sscanf(str, “%s %d %d”, Month, &Day, &Year) != 3) return
false;

for (monthIndex = 0; monthIndex 《 12; monthIndex++) {

if (strcmp(Month, monthName[monthIndex]) == 0) break;

}

if (monthIndex 》= 12) return false;

tm.Day = Day;

tm.Month = monthIndex + 1;

tm.Year = CalendarYrToTm(Year);

return true;

}

//-----------------------------------------------------------//

·使用已完成的硬件上传上述代码。

·打开串行监视器,显示时间已设置。

·现在,您已准备好进行下一步。

您已成功将时间设置为 RTC 模块。

现在,让我们上传将通过短信通知我们的主程序。

主程序:

//-----Program Developed by R.Girish-----//

#include 《Wire.h》

#include 《TimeLib.h》

#include 《DS1307RTC.h》

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;

float Time = 0;

float frequency = 0;

float waterFlow = 0;

float total = 0;

float LS = 0;

float average = 0;

const int input = A0;

const int test = 9;

void setup()

{

Serial.begin(9600);

pinMode(input, INPUT);

pinMode(test, OUTPUT);

analogWrite(test, 100);

pinMode(P, OUTPUT);

pinMode(N, OUTPUT);

digitalWrite(P, HIGH);

digitalWrite(N, LOW);

for (i = 0; i 《 sec; i++)

{

delay(1000);

}

Serial.println(“AT+CNMI=2,2,0,0,0”);

delay(1000);

Serial.println(“AT+CMGF=1”);

delay(500);

Serial.println(“AT+CMGS=”+91xxxxxxxxxx“r”); // Replace x with mobile
number

delay(1000);

Serial.println(“Your water supply notification system is ready.”);// The
SMS text you want to send

delay(100);

Serial.println((char)26); // ASCII code of CTRL+Z

delay(1000);

}

void loop()

{

tmElements_t tm;

if (RTC.read(tm))

{

if (tm.Hour 》 12) //24Hrs to 12 Hrs conversion//

{

if (tm.Hour == 13) tim = 1;

if (tm.Hour == 14) tim = 2;

if (tm.Hour == 15) tim = 3;

if (tm.Hour == 16) tim = 4;

if (tm.Hour == 17) tim = 5;

if (tm.Hour == 18) tim = 6;

if (tm.Hour == 19) tim = 7;

if (tm.Hour == 20) tim = 8;

if (tm.Hour == 21) tim = 9;

if (tm.Hour == 22) tim = 10;

if (tm.Hour == 23) tim = 11;

}

else

{

tim = tm.Hour;

}

X = pulseIn(input, HIGH);

Y = pulseIn(input, LOW);

Time = X + Y;

frequency = 1000000 / Time;

waterFlow = frequency / 7.5;

LS = waterFlow / 60;

if (frequency 》= 0)

{

if (isinf(frequency))

{

if (chk == 1)

{

Serial.println(“AT+CNMI=2,2,0,0,0”);

delay(1000);

Serial.println(“AT+CMGF=1”);

delay(500);

Serial.println(“AT+CMGS=”+91xxxxxxxxxx“r”); // Replace x with mobile
number

delay(1000);

Serial.print(“Time: ”);

delay(10);

Serial.print(tim);

delay(10);

Serial.print(“:”);

delay(10);

Serial.print(tm.Minute);

delay(10);

if (tm.Hour 》= 12)

{

Serial.println(“ PM”);

}

if (tm.Hour 《 12)

{

Serial.println(“ AM”);

}

delay(10);

Serial.println(“Water Supply is Ended.”);// The SMS text you want to
send

delay(100);

Serial.print(“Average Water Flow (Litre/Min): ”);

delay(100);

Serial.println(average);

delay(100);

Serial.print(“Total Water Delivered: ”);

delay(100);

Serial.print(total);

delay(100);

Serial.println(“ Litre”);

delay(100);

Serial.println((char)26); // ASCII code of CTRL+Z

delay(5000);

t = 0;

total = 0;

average = 0;

chk = 0;

check = 1;

}

}

else

{

if (check == 1)

{

Serial.println(“AT+CNMI=2,2,0,0,0”);

delay(1000);

Serial.println(“AT+CMGF=1”);

delay(500);

Serial.println(“AT+CMGS=”+91xxxxxxxxxx“r”); // Replace x with mobile
number

delay(1000);

Serial.print(“Time: ”);

delay(10);

Serial.print(tim);

delay(10);

Serial.print(“:”);

delay(10);

Serial.print(tm.Minute);

delay(10);

if (tm.Hour 》= 12)

{

Serial.println(“ PM”);

}

if (tm.Hour 《 12)

{

Serial.println(“ AM”);

}

delay(10);

Serial.println(“The water is being supplied now.”);// The SMS text you want
to send

delay(100);

Serial.println((char)26); // ASCII code of CTRL+Z

delay(1000);

check = 0;

chk = 1;

}

t = t + 1;

total = total + LS;

average = total / t;

average = average * 60;

}

}

delay(1000);

}

}

//-----Program Developed by R.Girish-----//

注意:您必须首先将RTC时间设置程序上传到Arduino,然后上传主程序(完成硬件设置),反之,项目将不起作用。

提问/讨论

这里还没有内容,您有什么问题吗?

我要提问/讨论

推荐帖子 最新更新时间:2024-11-13 09:07

开关电源拓扑结构,这篇讲全了!(建议收藏)
什么是拓扑呢?所谓电路拓扑就是功率器件和电磁元件在电路中的连接方式,而磁性元件设计,闭环补偿电路设计及其他所有电路元件设计都取决于拓扑。最基本的拓扑是Buck(降压式)、Boost(升压式)和Buck/Boost(升/降压),单端反激(隔离反激),正激、推挽、半桥和全桥变化器
 木犯001号电源技术
下载程序到wince出现Timeout: Failed to connect to the device Failed downloading.
本贴和下面链接的帖子一起给分。 http://topic.eeworld.net/u/20100307/13/7c4e49b0-a004-4a30-a154-0aa68694e81d.html?37928 程序编译好了,error 和warning都0,然后自动下载程序的时候出
 mayi2008WindowsCE
FPGA最小系统设计
我在做FPGA最小系统的时候,当晶振输出管脚没有接在FPGA的GCLK的时候输出的幅值是最大2.78V,最小1.88V。但是我接到FPGA的GCLK的时候,最大值降到2.3V左右。请问这是什么原因引起的?我的晶振是5V供电的输出端接个100欧的电阻。 FPGA最小系统设计 连接
 ottomia1FPGA/CPLD
David_Lee 我那个跑马灯程序要你如何优化??
请全盘脱出好不??我晚上自己回味下,,,最好你写个完整的....麻烦 David_Lee 我那个跑马灯程序要你如何优化?? 方法一: ORG 0000H LJMP START ORG 000BH //定时器0中断向量地址 LJMP TIME0 //跳至中断服务函数 ORG
 硬制合金单片机
DSP2812的CMD详细配置例子
DSP2812的CMD详细配置例子 MEMORY { PAGE 0: /* Program Memory */ ZONE0 : origin = 0x002000, length = 0x002000 /* XINTF zone 0 */ ZONE1
 AguileraDSP 与 ARM 处理器
LM3S8962远程升级学习心得
这几天看了下 LM3S8963 远程升级的程序,觉得还是蛮有意思的,和大家分享一下。 首先,让我们看一个最基本的概念: 地址: 0xE000ED08 为什么要提这个地址呢?翻看 8962 的参考手册第 54 页,我们可以看到
 youki12345微控制器 MCU

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

EEWORLD 电路图 站点相关: 下载中心 Datasheet 参考设计

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved