SMSベースの給水警報システム

問題を排除するために楽器を試してください





この投稿では、あなたの地域/家への給水が開始された場合にSMSを介してユーザーに通知する回路を構築します。これは、水が供給を開始して終了する時刻、1分あたりの平均水流速度、およびタンクに供給される総水量をリットルで表示できます。

前書き

私たちは皆、人間のように、水なしでは地球上の生命は不可能であることを知っています より多くの水を使用します 地球上の他のどの種よりも、私たちの生存のためだけでなく、私たちの贅沢なニーズを満たすためにも消費します。



私たちは水を消費するだけでなく、水域を汚染します。水の消費量と需要は、今後数十年で急増するでしょう。

地球市民としての節水は私たちの義務ですが、個人としては節水で世界の渇きを満たせないかもしれませんが、短期間で健康的な水量を確保できるので、家族の渇きを確実に満たすことができます、たとえ私たちの周りの誰も将来のために水を節約しなかったとしても。



インドやその他の急速に発展している国々での水の供給は限られており、需要も高いため、地方自治体からの正式な通知なしに給水を開始することができます。このプロジェクトは私たちのためにこの問題を解決します。

それでは、プロジェクトの技術的な詳細を詳しく見ていきましょう。

回路:

回路は、 水流センサー YF-S201、プロジェクトの頭脳であるArduinoボード、 GSMモジュール(SIM800またはSIM900) 給水に関するSMSアラートを受信するため、および給水開始と給水終了の正しい時刻を追跡するためのリアルタイムクロックモジュール。

ArduinoボードとGSMモジュールに電力を供給するためには9ボルト電源が望ましいので、9Vアダプターまたは自家製のしっかりした変圧器ベース(LM 7809)電源から電源を供給することをお勧めします。

SMSベースの給水警報回路

ArduinoとGSMモジュール間の接続は次のとおりです。

ArduinoTXからRXGSMモジュール

ArduinoRXからTXGSMモジュール

ArduinoGNDからGNDGSMモジュール

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つの最高のトランスレスインバータ回路