Systém varování před přívodem vody založený na SMS

Vyzkoušejte Náš Nástroj Pro Odstranění Problémů





V tomto příspěvku zkonstruujeme obvod, který uživatele upozorní prostřednictvím SMS, pokud je zahájen přívod vody do vaší oblasti / domu. Může zobrazit čas, kdy voda začíná dodávat a končí, průměrná rychlost průtoku vody v litrech za minutu a celková voda dodaná do vaší nádrže v litrech.

Úvod

Všichni víme, že život na Zemi je nemožný bez vody jako lidí používáme více vody než jakýkoli jiný druh na Zemi konzumuje, nejen pro naše přežití, ale také pro splnění našich luxusních potřeb.



Vodu nejen konzumujeme, ale také kontaminujeme vodní útvary. Spotřeba a poptávka po vodě bude v příštích desetiletích prudce stoupat.

Jako občan světa je naší povinností šetřit vodou, ale jako jednotlivec nemusíme uspokojovat žízeň celého světa šetřením vody, ale určitě můžeme uspokojit žízeň naší rodiny, protože můžeme mít na krátkou dobu zdravé množství vody , i když nikdo kolem nás nešetřil vodou pro budoucnost.



Dodávky vody v Indii a dalších rychle se rozvíjejících zemích jsou omezené a také na vysoké poptávce, navíc může dodávka vody začít bez jakéhokoli oficiálního oznámení místní samosprávy. Tento projekt tento problém vyřeší za nás.

Nyní se ponoříme do technických detailů projektu.

Okruh:

Obvod se skládá z a snímač průtoku vody YF-S201, deska Arduino, která je mozkem projektu, a GSM modul (SIM 800 nebo SIM 900) pro příjem SMS upozornění na dodávku vody a hodinový modul reálného času pro sledování správného času pro zahájení a ukončení dodávky vody.

Pro napájení desky Arduino a modulu GSM je žádoucí 9 voltové napájení, doporučuje se zajistit napájení z 9V adaptérů nebo domácího dobře zabudovaného zdroje založeného na transformátoru (LM 7809).

Obvod upozornění na přívod vody založený na SMS

Spojení mezi Arduino a GSM modulem je následující:

Arduino TX na RX GSM modul

GSM modul Arduino RX na TX

Arduino GND na GND GSM modul

Nikdy se nepokoušejte napájet GSM modul z 5V výstupního kolíku Arduina na 5V vstup GSM modulu.

RTC nebo hodinový modul v reálném čase bude sledovat čas příjezdu vody a ukončení dodávky vody.

Tím je hardware ukončen.

Chcete-li nastavit čas na RTC, musíme nahrát program pro nastavení času do RTC s dokončeným nastavením hardwaru. Tím se synchronizuje čas v počítači s RTC.

Stáhněte si soubor knihovny RTC: github.com/PaulStoffregen/DS1307RTC

Program pro nastavení času na 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
}
//-----------------------------------------------------------//

· Nahrajte výše uvedený kód s dokončeným hardwarem.

· Otevřete sériový monitor a ukazuje, že byl nastaven čas.

· Nyní jste připraveni přejít k dalšímu kroku.

Úspěšně jste nastavili čas modulu RTC.

Nyní nahrajeme hlavní program, který nás bude informovat prostřednictvím SMS.

Hlavní program:

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

Poznámka : Nejprve musíte nahrát program pro nastavení času RTC do Arduina a druhý do hlavního programu (s dokončeným nastavením hardwaru), jinak bude projekt fungovat.

Zde je snímek obrazovky testovaného prototypu SMS:

testovaná obrazovka prototypu SMS:

· Po minutě zapnutí obvodu obdržíte SMS, že systém je připraven.

· Když voda začne protékat senzorem, systém uživatele včas upozorní.

· Po ukončení dodávky vody systém odešle další výstrahu a shrne relaci s časem, průměrným průtokem vody a celkovou vodou dodanou do vaší nádrže.

Autorův prototyp:

Prototyp obvodu upozornění na dodávku vody založeného na SMS

Vezměte prosím na vědomí, že v době přívodu vody musí voda volně proudit, což znamená, že pokud existuje nějaký blok nebo kohoutek, který je zavřený, nebude vás upozorňovat.

Máte-li jakékoli dotazy týkající se tohoto projektu, neváhejte se vyjádřit v sekci komentářů, můžete obdržet rychlou odpověď.




Předchozí: Inkubátor využívající Arduino s automatickou regulací teploty a vlhkosti Další: 3 nejlepší transformátorové invertorové obvody