Система оповещения о водоснабжении на основе SMS

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся построить схему, которая будет уведомлять пользователя с помощью SMS, если будет подана подача воды в ваш район / дом. Он может показывать время начала и окончания подачи воды, среднюю скорость потока воды в литрах в минуту и ​​общее количество воды, подаваемой в ваш резервуар, в литрах.

Вступление

Все мы знаем, что жизнь на земле невозможна без воды, поскольку люди мы используем больше воды чем любой другой вид на Земле, не только для нашего выживания, но и для удовлетворения наших потребностей в роскоши.



Мы не только потребляем воду, но и загрязняем водоемы. Потребление и спрос на воду в ближайшие десятилетия резко возрастут.

Как гражданин мира, наш долг - экономить воду, но как личность мы можем не утолить жажду всего мира за счет экономии воды, но мы определенно можем утолить жажду своей семьи, поскольку у нас может быть здоровое количество воды в течение короткого периода времени. , даже если вокруг нас никто не приберег воду на будущее.



Подача воды в Индии и других быстро развивающихся странах ограничена и также пользуется высоким спросом, кроме того, подача воды может начаться без какого-либо официального уведомления от местного правительства. Этот проект решит эту проблему за нас.

Теперь давайте углубимся в технические детали проекта.

Схема:

Схема состоит из датчик расхода воды YF-S201, плата Arduino, которая является мозгом проекта, GSM модуль (SIM 800 или SIM 900) для получения SMS-оповещений о подаче воды и модуль часов реального времени для отслеживания точного времени начала и прекращения подачи воды.

Для питания платы Arduino и модуля GSM желательно напряжение 9 В, рекомендуется обеспечивать питание от адаптеров на 9 В или самодельного, качественного трансформаторного источника питания (LM 7809).

Цепь оповещения водоснабжения на основе SMS

Связь между Arduino и GSM модулем следующая:

Модуль Arduino TX to RX GSM

Модуль Arduino RX to TX GSM

Модуль Arduino GND на GND GSM

Никогда не пытайтесь подключить модуль GSM к выходному контакту 5 В Arduino на вход 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.

Теперь давайте загрузим основную программу, которая будет уведомлять нас по 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 в Arduino, а затем основную программу (с завершенной настройкой оборудования), в противном случае проект не будет работать.

Вот снимок экрана SMS протестированного прототипа:

снимок экрана с SMS протестированного прототипа:

· Через минуту после включения цепи вы получите SMS о том, что система готова.

· Когда вода начинает течь через датчик, система вовремя уведомляет пользователя.

· После прекращения подачи воды система отправит еще одно предупреждение и резюмирует сеанс с указанием времени, среднего расхода воды и общего количества воды, доставленной в ваш резервуар.

Авторский прототип:

Прототип цепи оповещения о водоснабжении на основе SMS

Обратите внимание, что в момент поступления воды вода должна течь свободно, а это означает, что при закрытии какого-либо блока или крана вас не уведомят.

Если у вас есть какие-либо вопросы по этому проекту, не стесняйтесь выражать их в разделе комментариев, вы можете получить быстрый ответ.




Предыдущая: Инкубатор с использованием Arduino с автоматическим контролем температуры и влажности Далее: 3 лучших бестрансформаторных инверторных схемы