Hệ thống cảnh báo cấp nước dựa trên SMS

Hãy Thử Công Cụ CủA Chúng Tôi Để LoạI Bỏ Các VấN Đề





Trong bài viết này, chúng tôi sẽ xây dựng một mạch điện sẽ thông báo cho người dùng qua SMS nếu việc cấp nước cho khu vực / nhà của bạn được bắt đầu. Nó có thể hiển thị thời gian nước bắt đầu cung cấp và kết thúc, tốc độ dòng nước trung bình tính bằng lít trên phút và tổng lượng nước cung cấp đến bể của bạn tính bằng lít.

Giới thiệu

Tất cả chúng ta đều biết rằng sự sống trên trái đất là không thể thiếu nước, như con người chúng tôi sử dụng nhiều nước hơn nhiều hơn bất kỳ loài nào khác trên trái đất tiêu thụ, không chỉ để sinh tồn mà còn để đáp ứng nhu cầu xa xỉ của chúng ta.



Chúng ta không chỉ tiêu thụ nước mà còn làm ô nhiễm các nguồn nước. Tiêu thụ và nhu cầu nước sẽ tăng vọt trong những thập kỷ tới.

Là một công dân thế giới, nhiệm vụ của chúng ta là tiết kiệm nước, nhưng với tư cách là một cá nhân, chúng ta có thể không thỏa mãn cơn khát của toàn thế giới bằng cách tiết kiệm nước, nhưng chúng ta chắc chắn có thể thỏa mãn cơn khát của gia đình mình vì chúng ta có thể có lượng nước lành mạnh trong một thời gian ngắn , ngay cả khi không có ai xung quanh chúng ta tiết kiệm nước cho tương lai.



Nguồn cung cấp nước ở Ấn Độ và các nước đang phát triển nhanh chóng khác bị hạn chế và cũng có nhu cầu cao, hơn nữa việc cung cấp nước có thể bắt đầu mà không có bất kỳ thông báo chính thức nào từ chính quyền địa phương. Dự án này sẽ giải quyết vấn đề này cho chúng tôi.

Bây giờ chúng ta hãy đi sâu vào chi tiết kỹ thuật của dự án.

Mạch:

Mạch bao gồm một cảm biến lưu lượng nước YF-S201, một bảng Arduino là bộ não của dự án, Mô-đun GSM (SIM 800 hoặc SIM 900) để nhận thông báo SMS về cấp nước và mô-đun đồng hồ thời gian thực để theo dõi thời gian chính xác bắt đầu cấp nước và kết thúc cấp nước.

Nguồn điện 9 Vôn được mong muốn để cấp nguồn cho bảng Arduino và mô-đun GSM, bạn nên cung cấp nguồn điện từ bộ điều hợp 9V hoặc bộ nguồn dựa trên máy biến áp (LM 7809) tự chế.

Mạch cảnh báo cấp nước dựa trên SMS

Kết nối giữa Arduino và mô-đun GSM như sau:

Mô-đun Arduino TX đến RX GSM

Mô-đun GSM Arduino RX đến TX

Mô-đun Arduino GND đến GND GSM

Không bao giờ cố gắng cấp nguồn cho mô-đun GSM từ chân đầu ra 5V của Arduino đến đầu vào 5V của mô-đun GSM.

Mô-đun RTC hoặc đồng hồ thời gian thực sẽ theo dõi thời gian nước đến và kết thúc cấp nước.

Điều đó kết luận phần cứng.

Để đặt thời gian trên RTC, chúng ta cần tải chương trình cài đặt thời gian lên RTC với quá trình thiết lập phần cứng hoàn tất. Thao tác này sẽ đồng bộ thời gian trên máy tính của bạn với RTC.

Tải xuống tệp thư viện RTC: github.com/PaulStoffregen/DS1307RTC

Chương trình cài đặt thời gian trên 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
}
//-----------------------------------------------------------//

· Tải lên đoạn mã trên với phần cứng hoàn chỉnh.

· Mở màn hình nối tiếp và nó hiển thị thời gian đã được thiết lập.

· Bây giờ bạn đã sẵn sàng để chuyển sang bước tiếp theo.

Bạn đã đặt thành công thời gian cho mô-đun RTC.

Bây giờ, hãy tải lên chương trình chính sẽ thông báo cho chúng tôi qua SMS.

Chương trình chính:

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

Ghi chú : Bạn phải tải chương trình thiết lập thời gian RTC lên Arduino trước và chương trình chính thứ hai (với thiết lập phần cứng đã hoàn thành), làm ngược lại, dự án sẽ không hoạt động.

Đây là ảnh chụp màn hình SMS của nguyên mẫu thử nghiệm:

Ảnh chụp màn hình SMS của nguyên mẫu đã thử nghiệm:

· Sau một phút bật nguồn mạch ON, bạn sẽ nhận được một tin nhắn SMS thông báo rằng hệ thống đã sẵn sàng.

· Khi nước bắt đầu chảy qua cảm biến, hệ thống sẽ thông báo thời gian cho người dùng.

· Sau khi nguồn cấp nước bị ngắt, hệ thống sẽ gửi một cảnh báo khác và tóm tắt phiên với thời gian, lưu lượng nước trung bình và tổng lượng nước được cung cấp đến bể của bạn.

Nguyên mẫu của tác giả:

Nguyên mẫu của mạch cảnh báo cấp nước dựa trên SMS

Xin lưu ý rằng tại thời điểm nước đến, nước phải chảy tự do, có nghĩa là nếu có bất kỳ khối hoặc vòi nào bị đóng lại sẽ không thông báo cho bạn.

Nếu có bất kỳ thắc mắc nào liên quan đến dự án này, bạn cứ bày tỏ trong phần bình luận, có thể sẽ nhận được phản hồi nhanh chóng.




Trước: Tủ ấm sử dụng Arduino với điều khiển nhiệt độ và độ ẩm tự động Tiếp theo: 3 Mạch Biến Áp Không Biến Áp Tốt Nhất