在這篇文章中,我們將構建一個電路,如果開始向您的區域/家庭供水,它將通過短信通知用戶。它可以顯示水開始供應和結束的時間,平均水流速(以升/分鐘為單位)和輸送到水箱的總水量(以升為單位)。
介紹
我們都知道,沒有水,地球上的生活是不可能的,因為人類使用的水比地球上任何其他物種消耗的水都多,這不僅是為了我們的生存,也是為了滿足我們的奢侈需求。
我們不僅消耗水,還污染水體。未來幾十年,水的消耗和需求將猛增。
作為世界公民,節約用水是我們的責任,但作為個人,我們可能無法通過節約用水來滿足整個世界的口渴,但我們絕對可以滿足家人的口渴,因為我們可能在短時間內擁有健康的水量,即使我們周圍沒有人為將來保存水。
印度和其他快速發展的國家的供水有限,需求量也很大,而且供水可以在沒有當地政府任何官方通知的情況下開始。這個項目將為我們解決這個問題。
現在讓我們深入了解該項目的技術細節。
電路:
該電路由水流量傳感器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,然后上傳主程序(完成硬件設置),反之,項目將不起作用。
-
供水系統
+關注
關注
2文章
36瀏覽量
9858 -
DIY設計
+關注
關注
2文章
59瀏覽量
19881 -
警報系統
+關注
關注
0文章
54瀏覽量
4915
發布評論請先 登錄
相關推薦
評論