SMS-baserat varningssystem för vattentillförsel

Prova Vårt Instrument För Att Eliminera Problem





I det här inlägget ska vi konstruera en krets som meddelar användaren via SMS om vattentillförseln till ditt område / hem är igång. Det kan visa tiden när vattnet börjar tillföras och avslutas, den genomsnittliga vattenflödeshastigheten i liter per minut och det totala vattnet som levereras till din tank i liter.

Introduktion

Vi vet alla att livet på jorden är omöjligt utan vatten, som människor vi använder mer vatten än någon annan art på jorden förbrukar, inte bara för vår överlevnad utan också för att möta våra lyxbehov.



Vi konsumerar inte bara vatten utan förorenar också vattenkroppar. Vattenförbrukningen och efterfrågan kommer att skjuta i höjden under de kommande decennierna.

Som världsmedborgare är det vår plikt att spara vatten, men som individ kan vi inte tillfredsställa hela världens törst genom att spara vatten, men vi kan definitivt tillfredsställa vår familjs törst eftersom vi kanske har en hälsosam mängd vatten under kort tid , även om ingen runt omkring oss sparade vatten för framtiden.



Tillförseln av vatten i Indien och andra snabbt utvecklingsländer är begränsad och även på hög efterfrågan, dessutom kan vattenförsörjningen börja utan någon officiell anmälan från den lokala regeringen. Detta projekt kommer att lösa problemet för oss.

Låt oss nu dyka in i de tekniska detaljerna i projektet.

Kretsen:

Kretsen består av en vattenflödesgivare YF-S201, ett Arduino-kort som är hjärnan i projektet, a GSM-modul (SIM 800 eller SIM 900) för att ta emot SMS-varningar om vattenförsörjning och en realtidsklockmodul för att spåra rätt tid för vattenförsörjningens initiering och avslutning av vattenförsörjningen.

9-voltsförsörjning är önskvärd för att driva Arduino-kortet och GSM-modulen, det rekommenderas att strömförsörjas från 9V-adaptrar eller hemlagad välbyggd, transformatorbaserad (LM 7809) matning.

SMS-baserad varningskrets för vattentillförsel

Anslutningen mellan Arduino och GSM-modul enligt följande:

Arduino TX till RX GSM-modul

Arduino RX till TX GSM-modul

Arduino GND till GND GSM-modul

Försök aldrig att driva GSM-modulen från Arduinos 5V-utgångsstift till 5V-ingången på GSM-modulen.

RTC- eller realtidsklockmodulen spårar tidpunkten för ankomsten av vatten och vattenförsörjningen avslutas.

Det avslutar hårdvaran.

För att ställa in tiden på RTC måste vi ladda upp tidsinställningsprogrammet till RTC med den slutförda hårdvarukonfigurationen. Detta synkroniserar tiden på din dator till RTC.

Ladda ner RTC-biblioteksfilen: github.com/PaulStoffregen/DS1307RTC

Program för inställning av tid på 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
}
//-----------------------------------------------------------//

· Ladda upp koden ovan med färdig hårdvara.

· Öppna den seriella bildskärmen och den visar att tiden har ställts in.

· Nu är du redo att gå vidare till nästa steg.

Du har framgångsrikt ställt in tiden för RTC-modulen.

Låt oss nu ladda upp huvudprogrammet som meddelar oss via SMS.

Huvudprogram:

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

Notera : Du måste ladda upp RTC-tidsinställningsprogrammet till Arduino först och huvudprogrammet andra (med slutförd hårdvarukonfiguration), om du gör det motsatta fungerar inte projektet.

Här är den testade prototypens SMS-skärmdump:

testad prototyps SMS-skärmdump:

· Efter en minut att slå på kretsen får du ett SMS som säger att systemet är klart.

· När vattnet börjar strömma genom sensorn kommer systemet att meddela användaren med tiden.

· När vattenförsörjningen har avslutats skickar systemet en ny varning och sammanfattar sessionen med tid, genomsnittligt vattenflöde och totalt vatten som levereras till din tank.

Författarens prototyp:

Prototyp för SMS-baserad varningskrets för vattentillförsel

Observera att vid tidpunkten för ankomsten till vattnet måste vattnet rinna fritt, vilket innebär att om det finns något block eller kran som är stängd kommer du inte att meddela dig.

Om du har några frågor angående detta projekt är du välkommen att uttrycka i kommentarsektionen, du kan få ett snabbt svar.




Tidigare: Inkubator med Arduino med automatisk temperatur- och luftfuktighetskontroll Nästa: 3 bästa transformatorlösa inverterarkretsar