Sistem Makluman Bekalan Air Berasaskan SMS

Cuba Instrumen Kami Untuk Menghapuskan Masalah





Dalam posting ini kita akan membina rangkaian yang akan memberitahu pengguna melalui SMS jika bekalan air ke kawasan / rumah anda dimulakan. Ini dapat menunjukkan waktu ketika air mula dibekalkan dan berakhir, kelajuan aliran air rata-rata dalam liter per minit dan jumlah air yang dihantar ke tangki anda dalam liter.

Pengenalan

Kita semua tahu bahawa kehidupan di bumi tidak mungkin tanpa air, sebagai manusia kita menggunakan lebih banyak air daripada spesies lain di bumi yang dimakan, bukan sahaja untuk kelangsungan hidup kita tetapi juga untuk memenuhi keperluan mewah kita.



Kita bukan sahaja mengambil air tetapi juga mencemarkan badan air. Penggunaan dan permintaan air akan meroket dalam beberapa dekade mendatang.

Sebagai warganegara dunia, adalah tugas kita untuk menjimatkan air, tetapi sebagai individu kita mungkin tidak dapat memuaskan kehausan seluruh dunia dengan menjimatkan air tetapi, kita pasti dapat memuaskan dahaga keluarga kita kerana kita mungkin mempunyai jumlah air yang sihat untuk jangka masa yang singkat , walaupun tidak ada orang di sekitar kita yang menyelamatkan air untuk masa depan.



Bekalan air di India dan negara-negara berkembang pesat adalah terhad dan juga atas permintaan tinggi, lebih-lebih lagi bekalan air dapat dimulakan tanpa pemberitahuan resmi dari pemerintah daerah. Projek ini akan menyelesaikan masalah ini untuk kita.

Sekarang mari kita selami butiran teknikal projek.

Litar:

Litar terdiri daripada a sensor aliran air YF-S201, papan Arduino yang merupakan otak projek, a Modul GSM (SIM 800 atau SIM 900) untuk menerima amaran SMS mengenai bekalan air dan modul jam masa nyata untuk mengesan masa yang tepat untuk permulaan bekalan air dan penamatan bekalan air.

Bekalan 9 Volt adalah wajar untuk menghidupkan papan Arduino dan modul GSM, disarankan untuk menyediakan bekalan kuasa dari penyesuai 9V atau bekalan buatan sendiri yang dibina dengan baik, berdasarkan pengubah (LM 7809).

Litar Makluman Bekalan Air Berasaskan SMS

Sambungan antara modul Arduino dan GSM seperti berikut:

Modul Arduino TX to RX GSM

Modul Arduino RX to TX GSM

Arduino GND ke GND GSM modul

Jangan sekali-kali cuba menghidupkan modul GSM dari pin output 5V Arduino hingga input modul GSM 5V.

Modul jam RTC atau masa nyata akan mengesan waktu kedatangan air dan penamatan bekalan air.

Itu menyimpulkan perkakasan.

Untuk menetapkan waktu di RTC, kita perlu memuat naik program penetapan waktu ke RTC dengan persediaan perkakasan yang telah selesai. Ini akan menyegerakkan masa di komputer anda ke RTC.

Muat turun fail perpustakaan RTC: github.com/PaulStoffregen/DS1307RTC

Program untuk menetapkan masa di 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
}
//-----------------------------------------------------------//

· Muat naik kod di atas dengan perkakasan yang lengkap.

· Buka monitor bersiri dan menunjukkan masa telah ditetapkan.

· Sekarang anda sudah bersedia untuk melangkah ke langkah seterusnya.

Anda berjaya menetapkan masa ke modul RTC.

Sekarang, mari muat naik program utama yang akan memberitahu kami melalui SMS.

Program Utama:

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

Catatan : Anda mesti memuat naik program penetapan masa RTC ke Arduino terlebih dahulu dan program utama kedua (dengan persediaan perkakasan yang selesai), dengan melakukan sebaliknya, projek itu tidak akan berfungsi.

Berikut adalah tangkapan skrin SMS prototaip yang diuji:

tangkapan skrin SMS prototaip yang diuji:

· Setelah satu minit menghidupkan litar ON, anda akan mendapat SMS yang mengatakan bahawa sistem sudah siap.

· Ketika air mulai mengalir melalui sensor, sistem akan memberitahu pengguna dengan waktu.

· Setelah bekalan air dihentikan, sistem akan mengirim peringatan lain dan meringkaskan sesi dengan waktu, aliran air rata-rata dan jumlah air yang dihantar ke tangki anda.

Prototaip pengarang:

Prototaip Litar Peringatan Bekalan Air Berasaskan SMS

Harap maklum bahawa pada waktu kedatangan air, air mesti mengalir bebas, yang bermaksud jika ada blok atau keran yang ditutup tidak akan memberitahu Anda.

Sekiranya anda mempunyai pertanyaan mengenai projek ini, sila nyatakan di bahagian komen, anda mungkin akan mendapat balasan cepat.




Sebelumnya: Inkubator Menggunakan Arduino dengan kawalan Suhu dan Kelembapan Automatik Seterusnya: 3 Litar Inverter Transformerless Terbaik