Sistem de alertă de alimentare cu apă bazat pe SMS

Încercați Instrumentul Nostru Pentru Eliminarea Problemelor





În acest post vom construi un circuit care va anunța utilizatorul prin SMS dacă este inițiată alimentarea cu apă a zonei / casei dvs. Poate arăta momentul în care apa începe să se alimenteze și se termină, viteza medie a debitului de apă în litri pe minut și apa totală livrată rezervorului dvs. în litri.

Introducere

Știm cu toții că viața pe pământ este imposibilă fără apă, ca ființe umane folosim mai multă apă decât consumă orice altă specie de pe pământ, nu numai pentru supraviețuirea noastră, ci și pentru satisfacerea nevoilor noastre de lux.



Nu numai că consumăm apă, ci și contaminăm corpurile de apă. Consumul și cererea de apă vor crește în următoarele decenii.

În calitate de cetățean mondial, este de datoria noastră să economisim apă, dar, ca individ, este posibil să nu satisfacem setea întregii lumi economisind apă, dar cu siguranță putem satisface setea familiei noastre, deoarece am putea avea o cantitate sănătoasă de apă pentru o perioadă scurtă de timp. , chiar dacă nimeni din jurul nostru nu a economisit apă pentru viitor.



Aprovizionarea cu apă în India și în alte țări în curs de dezvoltare rapidă este limitată și, de asemenea, la cerere mare, în plus, alimentarea cu apă poate începe fără nicio notificare oficială din partea guvernului local. Acest proiect va rezolva această problemă pentru noi.

Acum să ne aruncăm în detaliile tehnice ale proiectului.

Circuitul:

Circuitul este format dintr-un senzor de curgere a apei YF-S201, o placă Arduino care este creierul proiectului, a Modul GSM (SIM 800 sau SIM 900) pentru primirea de alerte SMS cu privire la alimentarea cu apă și un modul de ceas în timp real pentru urmărirea orei corecte pentru inițierea și terminarea alimentării cu apă.

Alimentarea de 9 volți este de dorit pentru alimentarea plăcii Arduino și a modulului GSM, se recomandă furnizarea sursei de alimentare de la adaptoare de 9V sau de la sursa de transformare (LM 7809) bine construită de casă.

Circuit de alertă de alimentare cu apă bazat pe SMS

Conexiunea dintre modulul Arduino și GSM după cum urmează:

Modulul Arduino TX către RX GSM

Modulul Arduino RX la TX GSM

Modulul Arduino GND la GND GSM

Nu încercați niciodată să alimentați modulul GSM de la pinul de ieșire 5V Arduino la intrarea 5V a modulului GSM.

Modulul RTC sau ceasul în timp real va urmări ora sosirii apei și încetarea alimentării cu apă.

Asta încheie hardware-ul.

Pentru a seta ora pe RTC, trebuie să încărcăm programul de setare a timpului pe RTC cu configurarea hardware finalizată. Aceasta va sincroniza timpul de pe computerul dvs. cu RTC.

Descărcați fișierul bibliotecii RTC: github.com/PaulStoffregen/DS1307RTC

Program pentru setarea timpului pe 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
}
//-----------------------------------------------------------//

· Încărcați codul de mai sus cu hardware completat.

· Deschideți monitorul serial și arată că timpul a fost setat.

· Acum sunteți gata să treceți la pasul următor.

Ați setat cu succes modulul RTC.

Acum, să încărcăm programul principal care ne va notifica prin SMS.

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

Notă : Trebuie să încărcați programul de setare a timpului RTC pe Arduino mai întâi și programul principal pe al doilea (cu configurarea hardware finalizată), făcând opusul, proiectul nu va funcționa.

Iată captura de ecran a prototipului testat SMS:

captură de ecran SMS a prototipului testat:

· După un minut de pornire a circuitului, veți primi un SMS care spune că sistemul este gata.

· Când apa începe să curgă prin senzor, sistemul va notifica utilizatorul cu timpul.

· După terminarea alimentării cu apă, sistemul va trimite o altă alertă și va rezuma sesiunea cu timpul, debitul mediu de apă și apa totală livrată în rezervorul dvs.

Prototipul autorului:

Prototipul circuitului de alertă de alimentare cu apă bazat pe SMS

Vă rugăm să rețineți că în momentul sosirii apei apa trebuie să curgă liber, adică dacă există un bloc sau robinet închis nu vă va anunța.

Dacă aveți întrebări cu privire la acest proiect, nu ezitați să exprimați în secțiunea de comentarii, este posibil să primiți un răspuns rapid.




Precedent: Incubator cu Arduino cu control automat al temperaturii și umidității În continuare: 3 cele mai bune circuite invertor fără transformator