نظام تنبيه إمداد المياه المستند إلى الرسائل القصيرة

جرب أداة القضاء على المشاكل





في هذا المنشور ، سنقوم بإنشاء دائرة لإخطار المستخدم عبر الرسائل القصيرة إذا تم بدء توفير المياه لمنطقتك / منزلك. يمكن أن يُظهر الوقت الذي يبدأ فيه الماء في التزويد وانتهائه ، ومتوسط ​​سرعة تدفق المياه باللتر في الدقيقة وإجمالي المياه التي يتم تسليمها إلى الخزان باللترات.

مقدمة

نعلم جميعًا أن الحياة على الأرض مستحيلة بدون الماء ، كبشر نحن نستخدم المزيد من الماء أكثر من أي نوع آخر على وجه الأرض ، ليس فقط من أجل بقائنا ولكن أيضًا لتلبية احتياجاتنا الفاخرة.



نحن لا نستهلك المياه فحسب ، بل نلوث المسطحات المائية أيضًا. سوف يرتفع استهلاك المياه والطلب عليها بشكل كبير في العقود القادمة.

بصفتنا مواطنًا عالميًا ، من واجبنا توفير المياه ، ولكن كفرد قد لا نشبع عطش العالم بأسره من خلال توفير المياه ، ولكن يمكننا بالتأكيد إشباع عطش عائلتنا حيث قد يكون لدينا كمية صحية من الماء لفترة وجيزة من الزمن ، حتى لو لم يقم أحد من حولنا بتوفير المياه للمستقبل.



إن إمدادات المياه في الهند وغيرها من البلدان سريعة النمو محدودة وأيضًا في ارتفاع الطلب ، علاوة على ذلك ، يمكن أن تبدأ إمدادات المياه دون أي إخطار رسمي من الحكومة المحلية. هذا المشروع سوف يحل هذه المشكلة بالنسبة لنا.

دعنا الآن نتعمق في التفاصيل الفنية للمشروع.

الدائرة:

الدائرة تتكون من مستشعر تدفق المياه YF-S201 ، لوحة Arduino التي هي العقل في المشروع ، أ وحدة GSM (SIM 800 أو SIM 900) لتلقي تنبيهات الرسائل القصيرة حول إمدادات المياه ووحدة ساعة الوقت الحقيقي لتتبع الوقت الصحيح لبدء إمدادات المياه وإنهاء إمدادات المياه.

يُعد مصدر 9 Volt أمرًا مرغوبًا لتشغيل لوحة Arduino ووحدة GSM ، ويوصى بتوفير مصدر الطاقة من محولات 9V أو مزود محلي الصنع قائم على المحولات (LM 7809).

دائرة تنبيه إمداد المياه القائمة على الرسائل القصيرة

الاتصال بين وحدة Arduino و GSM كما يلي:

وحدة Arduino TX إلى RX GSM

وحدة Arduino RX to TX GSM

وحدة Arduino GND إلى GND GSM

لا تحاول أبدًا تشغيل وحدة GSM من طرف إخراج Arduino 5 فولت إلى إدخال 5 فولت لوحدة 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.

الآن ، دعنا نحمل البرنامج الرئيسي الذي سيعلمنا عبر الرسائل القصيرة.

البرنامج الرئيسي:

//-----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 إلى Arduino أولاً والبرنامج الرئيسي ثانيًا (مع إعداد الأجهزة المكتمل) ، والقيام بالعكس ، فلن يعمل المشروع.

إليك لقطة شاشة SMS للنموذج الأولي الذي تم اختباره:

لقطة شاشة SMS للنموذج الأولي الذي تم اختباره:

· بعد دقيقة من تشغيل الدائرة ، ستتلقى رسالة نصية تفيد بأن النظام جاهز.

· عندما يبدأ الماء في التدفق عبر المستشعر ، يقوم النظام بإخطار المستخدم مع مرور الوقت.

· بعد إنهاء إمدادات المياه ، سيرسل النظام تنبيهًا آخر ويلخص الجلسة بالوقت ، ومتوسط ​​تدفق المياه وإجمالي المياه التي يتم توصيلها إلى الخزان الخاص بك.

النموذج الأولي للمؤلف:

نموذج أولي لدائرة تنبيه إمداد المياه المعتمدة على الرسائل القصيرة

يرجى ملاحظة أنه في وقت وصول المياه ، يجب أن تتدفق المياه بحرية ، مما يعني أنه إذا كان هناك أي كتلة أو صنبور مغلق فلن يخطرك بذلك.

إذا كانت لديك أي أسئلة بخصوص هذا المشروع ، فلا تتردد في التعبير عنها في قسم التعليقات ، فقد تتلقى ردًا سريعًا.




السابق: حاضنة باستخدام Arduino مع التحكم التلقائي في درجة الحرارة والرطوبة التالي: 3 أفضل دوائر العاكس غير المتحولة