森林火災監視および検出システム(SMSアラート付き)
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 2 | ||||
| × | 1 |
アプリとオンラインサービス
> |
|
このプロジェクトについて
森林火災の検出プロセスは、森林内の樹木に植えられたノードのいずれかで開始されます。フォレストには、互いに適切な距離に配置されたノードのネットワークがあり、ノードには、デバイス(この場合はRFモジュール)を介して、Arduinoを使用して通信する機能があります。ノード(ソースノード)の近くの大気パラメータ(温度上昇、煙による空気の汚染など)にしきい値を超える変化が見つかった場合、情報はメイン/に到達するまで最も近い中間ノードに渡されます。ヘッド端子。メイン/ヘッド端末はGSMモデムを使用して、情報を携帯電話(森林火災監視センター)に渡します。
物理モデルの送信機部分
森林火災検知モジュールは、3つの異なる段階で機能します。最初の段階は、温度や煙などの外部環境パラメータを読み取ることで構成されます。最初の段階は、アナログデータを検知してデジタルデータに変換するために使用されるいくつかのセンサーの助けを借りて行われます。センサーは、温度、湿度、空気の質などのパラメーターを読み取り、この情報を次に近いノードに送信します。このプロセスは、情報がプロセス全体の第2段階であるfinalnodeまたはメインターミナルに到達するまで続きます。第3段階は、森林火災監視ユニットへの情報の送信で構成されます。
各ノードには、温度および湿度センサー、煙センサー、およびマイクロコントローラーユニットがあります。 Arduinoはマイクロコントローラーデバイスとして使用されています。センサーはArduinoと対話し、比較プロセスのために情報を保存します。これらの各パラメーターには、事前定義されたしきい値があります。マイクロプロセッサは、一定の時間間隔でセンサー値をしきい値と比較します。比較に基づいて、センサーの入力値がしきい値を超えた場合、ノードは情報を次の近くのノードに送信し、次に、ノードは情報を他の近くのノードに送信します。このようにして、メッセージフローはこのモデルで規制されます。
装置の物理モデル <図>
物理モデルの送信機部分 <図>
シリアルモニターでのシリアル読み取り <図>
GSMモジュールが受信したメッセージ <図>
コード
- 受信機側と送信機側のArduinoモジュールコード
受信機と送信機側のArduinoモジュールコード Python
このコードは、温度と湿度を監視するために受信側のArduinoモジュールを構成します。値がしきい値を超えると、SMSがベースステーションに送信され、同じことを警告します。送信機側ノードで値の上昇がある場合、これは送信機側ArduinoUnoのRF送信機モジュールを介して受信側ArduinoUnoのRF受信機モジュールに通信されます。以下のコードは、「受信機側arduino」用と「送信機側arduino」用の2つの部分で構成されていることに注意してください。########(PART-1)######受信機側Arduinoコード########################## // RadioHead振幅偏移変調ライブラリを含める#include#include / /依存するSPIライブラリを含める#include #include SoftwareSerial mySerial(4、3); // Constants#define DHTPIN 2 //接続しているピン#defineDHTTYPE DHT11 // DHT11int smokeA0 =A5; //しきい値intsensorThres =400; //変数を定義しますDHTdht(DHTPIN、DHTTYPE); //通常の16mhzArduinoのDHTセンサーを初期化します// Variablesfloathum; //湿度値を保存しますfloattemp; //温度値を格納します//出力文字列を定義しますStringstr_humid; String str_temp; String str_smk; String str_out; //振幅偏移変調オブジェクトを作成RH_ASKrf_driver; void setup(){pinMode(smokeA0、INPUT); dht.begin(); // ASKオブジェクトを初期化しますrf_driver.init(); //シリアルモニターを設定しますSerial.begin(9600); mySerial.begin(115200);} void loop(){delay(2000); hum =dht.readHumidity(); temp =dht.readTemperature(); Serial.print( "Reciever Humidity ="); Serial.print(hum); Serial.print( '\ n'); Serial.print( "Reciever Temperature ="); Serial.println(temp); int analogSensor =analogRead(smokeA0);文字列smk; //しきい値に達しているかどうかを確認しますif(analogSensor> SensorThres){Serial.print( "Smoke at Reciever"); Serial.print( '\ n'); smk ="煙"; } else {Serial.print( "Clean at Reciever"); Serial.print( '\ n'); smk ="クリーン"; } //バッファを予想されるメッセージのサイズに設定しますuint8_tbuf [20]; uint8_t buflen =sizeof(buf); //受信したパケットが正しいサイズかどうかを確認しますif(rf_driver.recv(buf、&buflen)){str_out =String((char *)buf); for(int i =0; i =60 &&temp> =25){Serial.print( "受信者で火災が検出されました"); mySerial.println( "AT + CMGF =1"); // GSMモジュールをテキストモードに設定delay(1000); // 1000ミリ秒または1秒の遅延mySerial.println( "AT + CMGS =\" + 918744984131 \ "\ r"); // xを携帯電話番号delay(1000);に置き換えます。 mySerial.println( "FIRE ALERT !!"); Serial.println( '\ n'); mySerial.println( "受信者ノードでの起動"); Serial.println( '\ n'); mySerial.println( "Temperature:" + String(temp)); Serial.print( '\ n'); mySerial.println( "湿度:" + String(hum)); Serial.print( '\ n'); mySerial.println( "Air Quality:" + smk); delay(100); mySerial.println((char)26); // CTRL + ZのASCIIコードdelay(1000); } if(str_humid.toInt()> =60 &&str_temp.toInt()> =25){Serial.print( "送信機で火災が検出されました"); mySerial.println( "AT + CMGF =1"); // GSMモジュールをテキストモードに設定delay(1000); mySerial.println( "AT + CMGS =\" + 918744984131 \ "\ r"); // xを携帯電話番号delay(1000);に置き換えます。 mySerial.println( "FIRE ALERT !!"); Serial.println( '\ n'); mySerial.println( "送信機ノードでの起動"); Serial.println( '\ n'); mySerial.println( "Temperature:" + str_temp); Serial.print( '\ n'); mySerial.println( "湿度:" + str_humid); Serial.print( '\ n'); mySerial.println( "Air Quality:" + String(str_smk)); delay(100); mySerial.println((char)26); // CTRL + ZのASCIIコードdelay(1000); }} #######(PART-2)############送信機側Arduinoコード#################### #################################################### ################### include #include #include // Constants#define DHTPIN 2 //どのピン接続している#define DHTTYPE DHT11 // DHT11DHT dht(DHTPIN、DHTTYPE); //通常の16MHzのDHTセンサーを初期化しますArduinointsmokeA0 =A5; //しきい値intsensorThres =400; //変数を定義しますfloathum; //湿度値をパーセントフロート温度で保存します; //温度値をCelciusfloatsmkに格納します; //出力文字列を定義しますStringstr_humid; String str_temp; String str_smk; String str_out; //振幅偏移変調ObjectRH_ASKrf_driverを作成します; //通常の16mhzArduinoのDHTセンサーを初期化しますvoidsetup(){dht.begin(); pinMode(smokeA0、INPUT); // ASKオブジェクトを初期化しますrf_driver.init(); } void loop(){delay(2000); // DHT-22センサーがhum =dht.readHumidity();を安定化できるように遅延します//湿度値を取得しますtemp =dht.readTemperature(); //温度値を取得します//湿度を文字列に変換しますstr_humid =String(hum); Serial.print(hum); //温度を文字列に変換しますstr_temp =String(temp); Serial.print(temp); int analogSensor =analogRead(smokeA0); //しきい値に達しているかどうかを確認しますif(analogSensor> SensorThres){str_smk ="1"; } else {str_smk ="0"; } //湿度と温度を組み合わせるif(str_smk =="1"){str_out =str_humid + "、" + str_temp + "、" + "Smoke"; } if(str_smk =="0"){str_out =str_humid + "、" + str_temp + "、" + "Clean"; } //出力文字を作成しますconstchar * msg =str_out.c_str(); rf_driver.send((uint8_t *)msg、strlen(msg)); rf_driver.waitPacketSent(); }
回路図
製造プロセス