מערכת התראת אספקת מים מבוססת SMS

נסה את הכלי שלנו לביטול בעיות





בפוסט זה אנו הולכים לבנות מעגל אשר יודיע למשתמש באמצעות SMS אם אספקת המים לאזור / הבית שלך תתחיל. זה יכול להראות את השעה שבה המים מתחילים לספק והסתיים, מהירות זרימת מים ממוצעת בליטר לדקה וסך המים המועברים למיכל שלך בליטר.

מבוא

כולנו יודעים שחיים עלי אדמות הם בלתי אפשריים ללא מים, כבני אדם אנו משתמשים יותר מים מכל סוג אחר על כדור הארץ שצורך, לא רק להישרדותנו אלא גם כדי לענות על צרכי היוקרה שלנו.



אנחנו לא רק צורכים מים אלא גם מזהמים גופי מים. צריכת המים והביקוש הולכים לרקיע שחקים בעשורים הקרובים.

כאזרח עולמי, חובתנו לחסוך במים, אך כאדם אנו עשויים שלא לספק את צמאון העולם כולו על ידי חיסכון במים, אך אנו בהחלט יכולים לספק את צמאונם של משפחתנו מכיוון שאולי תהיה לנו כמות בריאה של מים לפרק זמן קצר. , גם אם איש סביבנו לא חסך מים לעתיד.



אספקת המים בהודו ובמדינות אחרות שמתפתחות במהירות מוגבלת וגם בביקוש גבוה, בנוסף אספקת המים יכולה להתחיל ללא שום הודעה רשמית מהשלטון המקומי. פרויקט זה יפתור לנו בעיה זו.

עכשיו בואו נצלול לפרטים הטכניים של הפרויקט.

המעגל:

המעגל מורכב מ- חיישן זרימת מים YF-S201, לוח ארדואינו שהוא המוח של הפרויקט, א מודול GSM (SIM 800 או SIM 900) לקבלת התראות SMS על אספקת מים ומודול שעון בזמן אמת למעקב אחר הזמן הנכון להתחלת אספקת מים והפסקת אספקת המים.

אספקת 9 וולט רצויה להפעלת לוח הארדואינו ומודול ה- GSM, מומלץ לספק את אספקת החשמל ממתאמי 9 וולט או מאספקה ​​ביתית שנבנתה היטב, מבוססת שנאים (LM 7809).

מעגל התראה על אספקת מים מבוסס SMS

הקשר בין Arduino למודול GSM כדלקמן:

מודול GSM של Arduino TX ל- RX

מודול GSM של Arduino RX ל- TX

מודול GND ל- GND של Arduino

לעולם אל תנסה להפעיל את מודול ה- GSM מפין פלט 5V של Arduino לכניסת 5V של מודול GSM.

מודול ה- RTC או שעון זמן אמת יעקוב אחר זמן הגעת המים וסיום אספקת המים.

זה מסכם את החומרה.

כדי לקבוע את הזמן ב- RTC עלינו להעלות את תוכנית הגדרת הזמן ל- RTC עם הגדרת החומרה שהושלמה. זה יסנכרן את הזמן במחשב שלך ל- RTC.

הורד את קובץ ספריית RTC: github.com/PaulStoffregen/DS1307RTC

תוכנית להגדרת זמן ב- RTC:

//-----------------------------------------------------------//
#include
#include
#include
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.

עכשיו, בואו נעלה את התוכנית הראשית שתודיע לנו באמצעות SMS.

תוכנה ראשית:

//-----Program Developed by 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
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 {
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' ') // 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' ') // 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' ') // 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 לארדואינו תחילה ואת התוכנית הראשית השנייה (עם הגדרת חומרה שהושלמה), אם תעשה את ההפך, הפרויקט לא יעבוד.

הנה צילום מסך ה- SMS של אב הטיפוס שנבדק:

צילום המסך של אב הטיפוס שנבדק:

· לאחר דקה הפעלת המעגל, תקבל SMS המסביר כי המערכת מוכנה.

כאשר המים מתחילים לזרום דרך החיישן, המערכת תודיע למשתמש על כך בזמן.

לאחר סיום אספקת המים המערכת תשלח התראה נוספת ותסכם את המפגש עם הזמן, זרימת המים הממוצעת וסך המים המועברים למיכל שלך.

אב הטיפוס של המחבר:

אב טיפוס של מעגל התראה על אספקת מים מבוסס SMS

שימו לב כי בזמן הגעת המים המים חייבים לזרום חופשי, כלומר אם יש בלוק או ברז סגור לא יידעו אתכם.

אם יש לך שאלות בנוגע לפרויקט זה, אל תהסס להביע בסעיף ההערות, ייתכן שתקבל תשובה מהירה.




קודם: חממה באמצעות ארדואינו עם בקרת טמפרטורה ולחות אוטומטית הבא: 3 המעגלים הטובים ביותר ללא שנאי