在这篇文章中,我们将构建一个电路,如果开始向您的区域/家庭供水,它将通过短信通知用户。它可以显示水开始供应和结束的时间,平均水流速(以升/分钟为单位)和输送到水箱的总水量(以升为单位)。
介绍
我们都知道,没有水,地球上的生活是不可能的,因为人类使用的水比地球上任何其他物种消耗的水都多,这不仅是为了我们的生存,也是为了满足我们的奢侈需求。
我们不仅消耗水,还污染水体。未来几十年,水的消耗和需求将猛增。
作为世界公民,节约用水是我们的责任,但作为个人,我们可能无法通过节约用水来满足整个世界的口渴,但我们绝对可以满足家人的口渴,因为我们可能在短时间内拥有健康的水量,即使我们周围没有人为将来保存水。
印度和其他快速发展的国家的供水有限,需求量也很大,而且供水可以在没有当地政府任何官方通知的情况下开始。这个项目将为我们解决这个问题。
现在让我们深入了解该项目的技术细节。
电路:
该电路由水流量传感器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,然后上传主程序(完成硬件设置),反之,项目将不起作用。
这里还没有内容,您有什么问题吗?
电子电路资源推荐
- 开关电源的原理与设计-张占松箸-557页-18.5M.pdf
来源:下载中心
- 51单片机C语言实例(350例)Proteus仿真和代码
来源:下载中心
- 信号与系统:模拟与数字信号处理
来源:大学堂
- ESD 静电保护介绍系列视频
来源:大学堂
- PCB板基础知识讲解
来源:电路图
- 电阻和电阻定律以及0欧电阻和上、下拉电阻的作用
来源:电路图
推荐帖子 最新更新时间: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
- 做电源的面试问题若干(来自我测试一下)
- 看看这些数据怎么处理?
- TINA-TI中半导体零件库和spice宏模型库有什么不同?
- CCS编译问题
- 今天去参加了Microchip嵌入式解决方案研讨会
- if ((P1 & 0x07) != 0x07)什么含义?
- TI推出高集成度完整电流采样监控器
- 上位机与仪表多对多数据采集问题
- MSP430中的 CapTIvate 技术你了解多少
- 求推荐无线电基础原理的书籍
- 【颁奖】调查:量身定制你的 M0 单片机!参与问卷有好礼!
- 得捷电子 Follow me 第2期任务提交-----网络功能使用
- stm32F412-discovery探索板移植裸机littlevgl-v7
- 定位报警系统 无线电收发模块搭建
- ADT1-1WT+PINTOPIN替代对标国产成熟产品B0310A数据对比 参数对比
- CircuitPython在2021年目标
- 问个外行的问题:wince中eboot和fristboot有什么区别?
- 小西瓜学瑞萨单片机(3)GPIO
- 有玩LM4的同学吗?有没有个QQ群什么的
- 拆解随身WIFI,中兴微全套方案。
- TA8217P双音频功放典型应用
- 使用 ON Semiconductor 的 TN5D41 的参考设计
- 基于 AD5685R 的适用于 I/O 卡和 PLC 应用的 4 通道、灵活、可配置的电压和电流输出电路
- ST1S09 2 A、1.5 MHz PWM 同步整流降压开关稳压器典型应用电路
- LTC4162EUFD-FAD 9V 至 35V 2 节 3.2A 充电器的典型应用,具有 PowerPath 和 2A 输入限制
- 用于编程欠压锁定的 LT3066EMSE-5 线性稳压器的典型应用电路
- AN-CIPOS-Reference Board-4,CIPOS IKCSxxF60F2x 参考板
- DC1908A-D,具有 LTC2328-18、18 位、1Msps、真正双极低功率、单电源 ADC 的演示板
- DC954A-B,LT6402-12 低失真、低噪声差分放大器/ADC 驱动器的演示板
- LTC2257-14 演示板,14 位,40Msps ADC,CMOS 输出,5-170MHz