System ostrzegania o dostawie wody oparty na SMS

Wypróbuj Nasz Instrument Do Eliminowania Problemów





W tym poście zamierzamy zbudować obwód, który powiadomi użytkownika SMS-em, jeśli zostanie rozpoczęta dostawa wody do Twojej okolicy / domu. Może pokazywać czas rozpoczęcia i zakończenia dostarczania wody, średnią prędkość przepływu wody w litrach na minutę oraz całkowitą ilość wody dostarczanej do zbiornika w litrach.

Wprowadzenie

Wszyscy wiemy, że życie na ziemi jest niemożliwe bez wody, jako istoty ludzkie zużywamy więcej wody niż jakikolwiek inny gatunek na Ziemi, nie tylko dla naszego przetrwania, ale także dla zaspokojenia naszych potrzeb w zakresie luksusu.



Nie tylko konsumujemy wodę, ale także zanieczyszczamy zbiorniki wodne. Zużycie i popyt na wodę gwałtownie wzrosną w nadchodzących dziesięcioleciach.

Jako obywatel świata naszym obowiązkiem jest oszczędzanie wody, ale jako jednostka możemy nie zaspokoić pragnienia całego świata oszczędzając wodę, ale z pewnością możemy zaspokoić pragnienie naszej rodziny, ponieważ możemy mieć zdrową ilość wody przez krótki czas , nawet jeśli nikt wokół nas nie oszczędzał wody na przyszłość.



Zaopatrzenie w wodę w Indiach i innych szybko rozwijających się krajach jest ograniczone, a także przy dużym zapotrzebowaniu, ponadto dostawa wody może rozpocząć się bez oficjalnego powiadomienia ze strony władz lokalnych. Ten projekt rozwiąże za nas ten problem.

Przejdźmy teraz do szczegółów technicznych projektu.

Obwód:

Obwód składa się z czujnik przepływu wody YF-S201, płytka Arduino, która jest mózgiem projektu, a Moduł GSM (SIM 800 lub SIM 900) do otrzymywania powiadomień SMS o zaopatrzeniu w wodę oraz moduł zegara czasu rzeczywistego do śledzenia prawidłowego czasu rozpoczęcia i zakończenia dostaw wody.

Do zasilania płyty Arduino i modułu GSM pożądane jest zasilanie 9 V, zalecane jest dostarczenie zasilania z adapterów 9 V lub samodzielnie zbudowanego zasilacza transformatorowego (LM 7809).

Obwód ostrzegawczy dotyczący zasilania wodą za pomocą wiadomości SMS

Połączenie między Arduino a modułem GSM w następujący sposób:

Moduł Arduino TX do RX GSM

Moduł Arduino RX do TX GSM

Moduł Arduino GND do GND GSM

Nigdy nie próbuj zasilać modułu GSM ze styku wyjściowego 5 V Arduino do wejścia 5 V modułu GSM.

Moduł zegara czasu rzeczywistego lub zegara czasu rzeczywistego będzie śledził czas nadejścia wody i zakończenia dostawy wody.

Na tym kończy się sprzęt.

Aby ustawić czas na RTC, musimy przesłać program do ustawiania czasu do RTC z zakończoną konfiguracją sprzętu. Spowoduje to zsynchronizowanie czasu na komputerze z RTC.

Pobierz plik biblioteki RTC: github.com/PaulStoffregen/DS1307RTC

Program do ustawiania czasu 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
}
//-----------------------------------------------------------//

· Prześlij powyższy kod z gotowym sprzętem.

· Otwórz szeregowy monitor i pokaże, że czas został ustawiony.

· Teraz możesz przejść do następnego kroku.

Pomyślnie ustawiłeś czas w module RTC.

Teraz prześlijmy główny program, który powiadomi nas SMS-em.

Główny 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-----//

Uwaga : Najpierw musisz przesłać program do ustawiania czasu RTC do Arduino, a następnie program główny (z zakończoną konfiguracją sprzętu), robiąc odwrotnie, projekt nie będzie działać.

Oto zrzut ekranu SMS-a testowanego prototypu:

zrzut ekranu SMS testowanego prototypu:

· Po minucie załączenia obwodu otrzymasz SMS z informacją, że system jest gotowy.

· Gdy woda zacznie przepływać przez czujnik, system z czasem powiadomi o tym użytkownika.

· Po zakończeniu dostarczania wody system wyśle ​​kolejne ostrzeżenie i podsumuje sesję z uwzględnieniem czasu, średniego przepływu wody i całkowitej wody dostarczonej do zbiornika.

Prototyp autora:

Prototyp obwodu alarmowego o zaopatrzeniu w wodę opartego na SMS

Należy pamiętać, że w momencie wpłynięcia wody woda musi swobodnie przepływać, co oznacza, że ​​jeśli jest jakiś blok lub kran, który jest zamknięty, nie powiadomi Cię o tym.

Jeśli masz jakiekolwiek pytania dotyczące tego projektu, nie krępuj się wyrazić w sekcji komentarzy, możesz otrzymać szybką odpowiedź.




Poprzedni: Inkubator wykorzystujący Arduino z automatyczną kontrolą temperatury i wilgotności Dalej: 3 najlepsze beztransformatorowe obwody falownika