SMS pranešimų apie vandens tiekimą perspėjimo sistema

Išbandykite Mūsų Instrumentą, Kaip Pašalinti Problemas





Šiame įraše mes sukursime grandinę, kuri praneš vartotojui SMS žinute, jei bus pradėtas vandens tiekimas jūsų vietovei / namui. Tai gali parodyti laiką, kai vanduo pradeda tiekti ir baigiasi, vidutinį vandens srauto greitį litrais per minutę ir bendrą į jūsų baką tiekiamą vandenį litrais.

Įvadas

Visi žinome, kad gyvenimas žemėje neįmanomas be vandens, kaip žmonių sunaudojame daugiau vandens nei bet kuri kita rūšis žemėje vartoja ne tik dėl mūsų išlikimo, bet ir dėl mūsų prabangos poreikių.



Mes ne tik vartojame vandenį, bet ir užteršiame vandens telkinius. Ateinančiais dešimtmečiais vandens suvartojimas ir paklausa didės.

Kaip pasaulio pilietis, mūsų pareiga yra taupyti vandenį, tačiau būdami individu galime netenkinti viso pasaulio troškulio taupydami vandenį, tačiau tikrai galime patenkinti savo šeimos troškulį, nes trumpam galime turėti sveiko vandens kiekį , net jei niekas aplinkui netaupė vandens ateičiai.



Vandens tiekimas Indijoje ir kitose sparčiai besivystančiose šalyse yra ribotas ir taip pat reikalingas didelis poreikis, be to, vandens tiekimas gali prasidėti be oficialaus vietos valdžios pranešimo. Šis projektas išspręs šį klausimą mums.

Dabar pasinerkime į technines projekto detales.

Grandinė:

Grandinę sudaro a vandens srauto jutiklis YF-S201, „Arduino“ lenta, kuri yra projekto smegenys, a GSM modulis (SIM 800 arba SIM 900) SMS pranešimams apie vandens tiekimą gauti ir realaus laiko laikrodžio moduliui, kad būtų galima stebėti teisingą vandens tiekimo pradžios ir nutraukimo laiką.

Norint maitinti „Arduino“ plokštę ir GSM modulį, pageidautina 9 voltų maitinimo šaltinio, maitinimą rekomenduojama tiekti iš 9 V adapterių arba naminių gerai pastatytų, transformatorių (LM 7809) maitinimo šaltinių.

SMS pranešimų apie vandens tiekimą perspėjimo grandinė

Ryšys tarp „Arduino“ ir GSM modulio yra toks:

„Arduino TX to RX GSM“ modulis

„Arduino RX to TX GSM“ modulis

Arduino GND to GND GSM modulis

Niekada nebandykite maitinti GSM modulio nuo „Arduino“ 5 V išvesties kaiščio iki 5 V įvesties „GSM“ modulio.

RTC arba realaus laiko laikrodžio modulis stebės vandens atvykimo laiką ir vandens tiekimo nutraukimą.

Tuo baigiama aparatūra.

Norėdami nustatyti laiką RTC, turime įkelti laiko nustatymo programą į RTC su užbaigta aparatūros sąranka. Tai sinchronizuos jūsų kompiuteryje esantį laiką su RTC.

Atsisiųskite RTC bibliotekos failą: github.com/PaulStoffregen/DS1307RTC

RTC laiko nustatymo programa:

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

· Įkelkite aukščiau nurodytą kodą su sukomplektuota aparatine įranga.

· Atidarykite nuoseklųjį monitorių ir jis rodo, kad laikas buvo nustatytas.

· Dabar esate pasirengęs pereiti prie kito žingsnio.

Jūs sėkmingai nustatėte laiką iki RTC modulio.

Dabar įkelkime pagrindinę programą, kuri mums praneš SMS žinute.

Pagrindinė programa:

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

Pastaba : Pirmiausia turite įkelti RTC laiko nustatymo programą į „Arduino“, o antrą - pagrindinę programą (su užbaigta aparatūros sąranka), priešingai, projektas neveiks.

Štai išbandyto prototipo SMS ekrano vaizdas:

išbandytas prototipo SMS ekrano vaizdas:

· Po minutės įjungę grandinę, gausite SMS žinutę, kad sistema paruošta.

· Kai vanduo pradeda tekėti per jutiklį, sistema apie tai praneš vartotojui.

· Nutraukus vandens tiekimą, sistema išsiųs kitą perspėjimą ir apibendrins užsiėmimą su laiku, vidutiniu vandens srautu ir bendru vandens kiekiu, pristatytu į jūsų rezervuarą.

Autoriaus prototipas:

SMS pranešimų apie vandens tiekimą perspėjimo grandinės prototipas

Atkreipkite dėmesį, kad atvykstant į vandenį vanduo turi laisvai tekėti, ty jei yra kokių nors uždarytų blokų ar čiaupų, apie tai nepranešite.

Jei turite klausimų dėl šio projekto, nedvejodami išsakykite komentarų skyriuje, galite gauti greitą atsakymą.




Pora: Inkubatorius naudojant „Arduino“ su automatiniu temperatūros ir drėgmės valdymu Kitas: 3 geriausios be transformatoriaus keitiklio grandinės