Sistema de alerta de abastecimento de água baseado em SMS

Experimente Nosso Instrumento Para Eliminar Problemas





Neste post vamos construir um circuito que notificará o usuário via SMS se o abastecimento de água para sua área / residência for iniciado. Pode mostrar a hora em que o abastecimento de água é iniciado e terminado, a velocidade média do fluxo de água em litros por minuto e o total de água entregue ao seu tanque em litros.

Introdução

Todos nós sabemos que a vida na terra é impossível sem água, como seres humanos usamos mais água do que qualquer outra espécie na terra consome, não apenas para nossa sobrevivência, mas também para atender às nossas necessidades de luxo.



Não só consumimos água, mas também contaminamos corpos d'água. O consumo e a demanda de água vão disparar nas próximas décadas.

Como cidadão mundial, é nosso dever economizar água, mas como um indivíduo podemos não satisfazer a sede do mundo inteiro economizando água, mas podemos definitivamente satisfazer a sede de nossa família, pois podemos ter uma quantidade saudável de água por um breve período de tempo , mesmo que ninguém ao nosso redor economize água para o futuro.



O abastecimento de água na Índia e em outros países em rápido desenvolvimento é limitado e também com alta demanda; além disso, o abastecimento de água pode começar sem qualquer notificação oficial do governo local. Este projeto vai resolver esse problema para nós.

Agora vamos mergulhar nos detalhes técnicos do projeto.

O circuito:

O circuito consiste em um sensor de fluxo de água YF-S201, uma placa Arduino que é o cérebro do projeto, uma Módulo GSM (SIM 800 ou SIM 900) para receber alertas SMS sobre o abastecimento de água e um módulo de relógio em tempo real para rastrear o horário correto para o início e encerramento do abastecimento de água.

A fonte de 9 volts é desejável para alimentar a placa Arduino e o módulo GSM, é recomendado fornecer a fonte de alimentação de adaptadores de 9 V ou fonte caseira bem construída baseada em transformador (LM 7809).

Circuito de alerta de abastecimento de água baseado em SMS

A conexão entre o Arduino e o módulo GSM da seguinte forma:

Arduino TX para módulo RX GSM

Arduino RX para módulo TX GSM

Arduino GND para módulo GND GSM

Nunca tente alimentar o módulo GSM do pino de saída de 5 V do Arduino para a entrada de 5 V do módulo GSM.

O RTC ou módulo de relógio de tempo real rastreará o tempo de chegada da água e o término do fornecimento de água.

Isso conclui o hardware.

Para definir a hora no RTC, precisamos fazer o upload do programa de configuração de hora para o RTC com a configuração de hardware concluída. Isso sincronizará a hora do seu computador com o RTC.

Baixe o arquivo da biblioteca RTC: github.com/PaulStoffregen/DS1307RTC

Programa para definir a hora no 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
}
//-----------------------------------------------------------//

· Carregue o código acima com o hardware completo.

· Abra o monitor serial e mostra que a hora foi ajustada.

· Agora você está pronto para passar para a próxima etapa.

Você definiu a hora com sucesso para o módulo RTC.

Agora, vamos carregar o programa principal que nos notificará por SMS.

Programa principal:

//-----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-----//

Observação : Você deve fazer o upload do programa de configuração de tempo RTC para o Arduino primeiro e o programa principal depois (com a configuração do hardware concluída), fazendo o oposto, o projeto não funcionará.

Aqui está a captura de tela SMS do protótipo testado:

captura de tela de SMS do protótipo testado:

· Após um minuto ligando o circuito, você receberá um SMS informando que o sistema está pronto.

· Quando a água começar a fluir pelo sensor, o sistema notificará o usuário com o tempo.

· Após o término do abastecimento de água, o sistema enviará outro alerta e resumirá a sessão com o tempo, vazão média e total de água entregue ao seu tanque.

Protótipo do autor:

Protótipo de circuito de alerta de abastecimento de água baseado em SMS

Por favor, note que no momento da chegada da água a água deve fluir livremente, ou seja, se houver algum bloqueio ou torneira que esteja fechada não avisarei você.

Se você tiver alguma dúvida em relação a este projeto, sinta-se à vontade para expressar na seção de comentários, você pode receber uma resposta rápida.




Anterior: Incubadora usando Arduino com controle automático de temperatura e umidade Próximo: 3 melhores circuitos inversores sem transformador