Sistema d'alerta de subministrament d'aigua basat en SMS

Proveu El Nostre Instrument Per Eliminar Problemes





En aquest post anem a construir un circuit que avisarà a l’usuari per SMS si s’inicia el subministrament d’aigua a la vostra zona / casa. Pot mostrar l'hora en què l'aigua comença a subministrar-se i finalitza, la velocitat mitjana del cabal d'aigua en litres per minut i l'aigua total lliurada al dipòsit en litres.

Introducció

Tots sabem que la vida a la terra és impossible sense aigua, com a éssers humans fem servir més aigua que qualsevol altra espècie de la terra consumeix, no només per a la nostra supervivència, sinó també per satisfer les nostres necessitats de luxe.



No només consumim aigua, sinó que també contaminem les masses d’aigua. El consum i la demanda d’aigua es dispararan en les properes dècades.

Com a ciutadà del món, és el nostre deure estalviar aigua, però, com a individu, potser no satisfarem la set del món tot estalviant aigua, però definitivament podem satisfer la set de la nostra família, ja que podríem tenir una quantitat sana d’aigua durant un breu període de temps. , encara que ningú al nostre voltant estalviés aigua per al futur.



El subministrament d’aigua a l’Índia i altres països en ràpid desenvolupament és limitat i també té molta demanda, a més el subministrament d’aigua pot començar sense cap notificació oficial del govern local. Aquest projecte solucionarà aquest problema per a nosaltres.

Ara aprofundim en els detalls tècnics del projecte.

El circuit:

El circuit està format per un sensor de cabal d’aigua YF-S201, una placa Arduino que és el cervell del projecte, a Mòdul GSM (SIM 800 o SIM 900) per rebre alertes per SMS sobre el subministrament d’aigua i un mòdul de rellotge en temps real per rastrejar l’hora correcta d’inici del subministrament d’aigua i finalització del subministrament d’aigua.

L'alimentació de 9 volts és desitjable per alimentar la placa Arduino i el mòdul GSM; es recomana proporcionar la font d'alimentació a partir d'adaptadors de 9V o d'alimentació casolana, basada en transformadors (LM 7809).

Circuit d

La connexió entre Arduino i el mòdul GSM de la següent manera:

Mòdul Arduino TX a RX GSM

Mòdul Arduino RX a TX GSM

Mòdul GSM Arduino GND a GND

Mai intenteu alimentar el mòdul GSM des del pin de sortida de 5V d’Arduino fins a l’entrada de 5V del mòdul GSM.

El mòdul RTC o rellotge en temps real farà un seguiment de l’hora d’arribada d’aigua i la finalització del subministrament d’aigua.

Això conclou el maquinari.

Per configurar l'hora a RTC, hem de carregar el programa de configuració de temps a RTC amb la configuració de maquinari completa. Això sincronitzarà l'hora a l'ordinador amb RTC.

Baixeu-vos el fitxer de la biblioteca RTC: github.com/PaulStoffregen/DS1307RTC

Programa per configurar el temps a 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
}
//-----------------------------------------------------------//

· Pengeu el codi anterior amb el maquinari complet.

· Obriu el monitor sèrie i es mostra que s'ha establert l'hora.

· Ara ja esteu a punt per passar al següent pas.

Heu establert correctament el temps al mòdul RTC.

Ara, carregem el programa principal que ens notificarà per 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-----//

Nota : Primer heu de carregar el programa de configuració del temps RTC a Arduino i el segon el programa principal (amb la configuració de maquinari completada), fent el contrari, el projecte no funcionarà.

Aquí teniu la captura de pantalla del SMS del prototip provat:

captura de pantalla SMS del prototip provat:

· Després d’un minut d’engegar el circuit, rebreu un SMS que indica que el sistema està a punt.

· Quan l’aigua comenci a fluir a través del sensor, el sistema avisarà l’usuari amb temps.

· Un cop finalitzat el subministrament d’aigua, el sistema enviarà una altra alerta i resumirà la sessió amb el temps, el cabal mitjà d’aigua i l’aigua total lliurada al dipòsit.

Prototip de l'autor:

Prototip de circuit d

Tingueu en compte que en el moment de l’arribada de l’aigua l’aigua ha de fluir lliurement, és a dir, si hi ha algun bloc o aixeta que estigui tancada no us ho notificarà.

Si teniu cap pregunta sobre aquest projecte, no dubteu a expressar-ho a la secció de comentaris, és possible que rebeu una resposta ràpida.




Anterior: Incubadora que utilitza Arduino amb control automàtic de temperatura i humitat Següent: 3 millors circuits d’inversors sense transformador