SMS 기반 상수도 경보 시스템

문제를 제거하기 위해 도구를 사용해보십시오





이 글에서는 지역 / 집에 물 공급이 시작되면 SMS를 통해 사용자에게 알리는 회로를 구성 할 것입니다. 물 공급 시작 및 종료 시간, 분당 리터 단위의 평균 물 흐름 속도 및 리터 단위의 탱크로 전달되는 총 물을 표시 할 수 있습니다.

소개

우리 모두는 지구상의 생명체가 물 없이는 불가능하다는 것을 알고 있습니다. 우리는 더 많은 물을 사용합니다 지구상의 다른 어떤 종보다 우리의 생존을 위해서뿐만 아니라 우리의 사치스러운 필요를 충족시키기 위해 소비합니다.



우리는 물을 소비 할뿐만 아니라 수역을 오염시킵니다. 물 소비와 수요는 앞으로 수십 년 동안 급증 할 것입니다.

세계 시민으로서 물을 아끼는 것이 우리의 의무이지만, 개인 으로서는 물을 아껴서 전 세계의 갈증을 해소하지 못할 수도 있지만, 단기간 동안 건강한 물을 마실 수 있기 때문에 가족의 갈증을 확실히 해소 할 수 있습니다. , 우리 주변의 아무도 미래를 위해 물을 아끼지 않더라도.



인도와 기타 급속도로 발전하는 국가의 물 공급은 제한적이며 수요가 많기 때문에 지방 정부의 공식 통지 없이도 물 공급을 시작할 수 있습니다. 이 프로젝트는 우리를 위해이 문제를 해결할 것입니다.

이제 프로젝트의 기술적 세부 사항에 대해 자세히 살펴 보겠습니다.

회로 :

회로는 수류 센서 프로젝트의 두뇌 인 아두 이노 보드 인 YF-S201은 GSM 모듈 (SIM 800 또는 SIM 900) 상수도에 대한 SMS 알림을 수신하고 상수도 시작 및 급수 종료에 대한 정확한 시간을 추적하기위한 실시간 시계 모듈.

9V 전원은 Arduino 보드와 GSM 모듈에 전원을 공급하는 데 바람직하며, 9V 어댑터 또는 집에서 잘 제작 된 변압기 기반 (LM 7809) 전원 공급 장치를 통해 전원을 공급하는 것이 좋습니다.

SMS 기반 급수 경보 회로

Arduino와 GSM 모듈 간의 연결은 다음과 같습니다.

Arduino TX to RX GSM 모듈

Arduino RX to TX GSM 모듈

Arduino GND-GND GSM 모듈

Arduino의 5V 출력 핀에서 GSM 모듈의 5V 입력으로 GSM 모듈에 전원을 공급하지 마십시오.

RTC 또는 실시간 시계 모듈은 물이 도착한 시간과 물 공급이 중단 된 시간을 추적합니다.

이것으로 하드웨어를 마칩니다.

RTC에 시간을 설정하려면 하드웨어 설정이 완료된 RTC에 시간 설정 프로그램을 업로드해야합니다. 그러면 컴퓨터의 시간이 RTC에 동기화됩니다.

RTC 라이브러리 파일 다운로드 : github.com/PaulStoffregen/DS1307RTC

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

· 완성 된 하드웨어와 함께 위 코드를 업로드합니다.

· 시리얼 모니터를 열면 시간이 설정되었음을 보여줍니다.

· 이제 다음 단계로 이동할 준비가되었습니다.

RTC 모듈에 시간을 성공적으로 설정했습니다.

이제 SMS로 알려줄 메인 프로그램을 업로드하겠습니다.

주요 프로그램 :

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

노트 : RTC 시간 설정 프로그램을 먼저 Arduino에 업로드하고 메인 프로그램을 두 번째 (하드웨어 설정 완료)에 업로드해야합니다. 반대로하면 프로젝트가 작동하지 않습니다.

테스트 된 프로토 타입의 SMS 스크린 샷은 다음과 같습니다.

테스트 된 프로토 타입의 SMS 스크린 샷 :

· 1 분 동안 회로에 전원을 공급하면 시스템이 준비되었음을 알리는 SMS를 받게됩니다.

· 센서를 통해 물이 흐르기 시작하면 시스템이 사용자에게 시간을 알려줍니다.

· 물 공급이 종료 된 후 시스템은 또 다른 경고를 보내고 시간, 평균 물 흐름 및 탱크로 전달 된 총 물과 함께 세션을 요약합니다.

저자의 프로토 타입 :

SMS 기반 급수 경보 회로 프로토 타입

물이 도착할 때 물이 자유롭게 흘러야합니다. 즉, 막힌 블록이나 수도꼭지가 있으면 알림이 표시되지 않습니다.

이 프로젝트에 대해 궁금한 점이 있으시면 언제든지 댓글란에 말씀 해주시면 빠른 답변을 받으실 수 있습니다.




이전 : 자동 온도 및 습도 제어 기능이있는 Arduino를 사용하는 인큐베이터 다음 : 3 개의 최고의 트랜스포머리스 인버터 회로