- 必要なコンポーネント:
- 回路図と説明:
- 作業説明:
- コードの説明:
- "; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
次のコードは、sendDataという名前の関数を呼び出し、データとメッセージの文字列をWebページに送信して表示します。
sendData(cipSend、1000、DEBUG); sendData(webpage、1000、DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = "、"; cipSend + = webpage.length(); cipSend + = "\ r \ n";
次のコードは、LCDにデータを出力します。空気の質をチェックするためにさまざまな条件を適用しました。LCDは条件に応じてメッセージを印刷し、汚染が1000PPMを超えるとブザーも鳴ります。
lcd.setCursor(0、0); lcd.print( "大気質は"); lcd.print(air_quality); lcd.print( "PPM"); lcd.setCursor(0,1); if(air_quality <= 1000){lcd.print( "Fresh Air"); digitalWrite(8、LOW);
最後に、以下の関数がWebページにデータを送信して表示します。'webpage'という名前の文字列に保存したデータは、'command'という名前の文字列に保存されます。ESPは、「コマンド」から文字を1つずつ読み取り、Webページに印刷します。
String sendData(String command、const int timeout、boolean debug){String response = ""; esp8266.print(コマンド); //読み取った文字をesp8266に送信しますlongint time = millis(); while((time + timeout)> mills()){while(esp8266.available()){// espにはデータがあるため、出力をシリアルウィンドウに表示しますchar c = esp8266.read(); //次の文字を読み取ります。応答+ = c; }} if(debug){Serial.print(response); }応答を返します。}
- プロジェクトのテストと出力:
このプロジェクトでは、インターネットを使用してWebサーバーで大気質を監視し、大気質が特定のレベルを超えたとき、つまり十分な量があるときにアラームをトリガーするIoTベースの大気汚染監視システムを作成します。 CO2、煙、アルコール、ベンゼン、NH3などの有害ガスが大気中に存在します。LCDとWebページにPPMで空気の質が表示されるので、非常に簡単に監視できます。
以前はMQ6センサーを使用してLPG検出器を構築し、MQ2センサーを使用して煙探知器を構築しましたが、今回は大気質センサーとしてMQ135センサーを使用しました。これは、最も有害なガスを検出してその量を測定できるため、大気質の監視に最適です。正確に。このIOTプロジェクトでは、コンピューターまたはモバイルを使用して、どこからでも汚染レベルを監視できます。このシステムはどこにでもインストールでき、汚染が一定のレベルを超えたときにデバイスをトリガーすることもできます。たとえば、排気ファンをオンにしたり、ユーザーにアラートSMS /メールを送信したりできます。
必要なコンポーネント:
- MQ135ガスセンサー
- Arduino Uno
- Wi-FiモジュールESP8266
- 16X2 LCD
- ブレッドボード
- 10Kポテンショメータ
- 1Kオーム抵抗器
- 220オームの抵抗器
- ブザー
上記のすべてのコンポーネントはここから購入できます。
回路図と説明:
まず、ESP8266をArduinoに接続します。 ESP8266は3.3Vで動作し、Arduinoから5Vを与えると、正しく動作せず、損傷する可能性があります。 VCCとCH_PDをArduinoの3.3Vピンに接続します。 ESP8266のRXピンは3.3Vで動作し、Arduinoに直接接続するとArduinoと通信しません。そのため、5Vを3.3Vに変換する分圧器を作成する必要があります。これは、回路で行ったように3つの抵抗を直列に接続することで実行できます。 ESP8266のTXピンをArduinoのピン10に接続し、esp8266のRXピンを抵抗を介してArduinoのピン9に接続します。
ESP8266 Wi-Fiモジュールは、プロジェクトにWi-Fiまたはインターネットへのアクセスを提供します 。これは非常に安価なデバイスであり、プロジェクトを非常に強力にします。あらゆるマイクロコントローラーと通信でき、IOTプラットフォームで最も優れたデバイスです。ArduinoでのESP8266の使用について詳しくは、こちらをご覧ください。
次に、MQ135センサーをArduinoに接続します。VCCとセンサーのアースピンをArduinoの5Vとアースに接続し、センサーのアナログピンをArduinoのA0に接続します。
条件が真になるとビープ音を鳴らし始めるArduinoのピン8にブザーを接続します。
最後に、LCDをArduinoに接続します。LCDの接続は次のとおりです。
- ピン1(VEE)をアースに接続します。
- ピン2(VDDまたはVCC)を5Vに接続します。
- ピン3(V0)を10Kポテンショメータの中央のピンに接続し、ポテンショメータの他の両端をVCCとGNDに接続します。ポテンショメータは、LCDの画面コントラストを制御するために使用されます。10K以外の値のポテンショメータも機能します。
- ピン4(RS)をArduinoのピン12に接続します。
- ピン5(読み取り/書き込み)をArduinoのアースに接続します。このピンはあまり使用されないので、アースに接続します。
- ピン6(E)をArduinoのピン11に接続します。RSピンとEピンは、データと文字を送信するために使用される制御ピンです。
- 次の4つのピンは、Arduinoとの通信に使用されるデータピンです。
ピン11(D4)をArduinoのピン5に接続します。
ピン12(D5)をArduinoのピン4に接続します。
ピン13(D6)をArduinoのピン3に接続します。
ピン14(D7)をArduinoのピン2に接続します。
- ピン15を220オームの抵抗を介してVCCに接続します。抵抗は、バックライトの明るさを設定するために使用されます。値を大きくすると、バックライトがはるかに暗くなります。
- ピン16をグランドに接続します。
作業説明:
MQ135センサーは、NH3、NOx、アルコール、ベンゼン、煙、CO2、およびその他のガスを感知できるため、大気質監視プロジェクトに最適なガスセンサーです。Arduinoに接続すると、ガスが感知され、PPM(parts per million)で汚染レベルが取得されます。MQ135ガスセンサーは電圧レベルの形式で出力を提供し、それをPPMに変換する必要があります。したがって、PPMで出力を変換するために、ここではMQ135センサー用のライブラリを使用しました。これについては、以下の「コードの説明」セクションで詳しく説明します。
センサーの近くにガスがなく、空気の安全レベルが350 PPMで、1000 PPMを超えてはならない場合、センサーは90の値を示していました。1000 PPMの制限を超えると、頭痛、眠気、停滞、古く、息苦しい空気を引き起こし始め、2000 PPMを超えると、心拍数の増加や他の多くの病気を引き起こす可能性があります。
値が1000PPM未満になると、LCDとWebページに「FreshAir」と表示されます。値が1000PPM増加すると、ブザーがビープ音を鳴らし始め、LCDとWebページに「PoorAir、OpenWindows」と表示されます。2000が増えると、ブザーが鳴り続け、LCDとWebページに「危険!新鮮な空気に移動してください。」
コードの説明:
このプロジェクトのコーディングを開始する前に、まずMQ135ガスセンサーを校正する必要があります。センサーの出力をPPM値に変換するための計算はたくさんあります。この計算は、以前の煙探知器プロジェクトで行ったことがあります。ただし、ここではMQ135のライブラリを使用しています。このMQ135ライブラリは、https://github.com/GeorgK/MQ135からダウンロードしてインストールできます。
このライブラリを使用すると、以下の2行を使用するだけで、PPM値を直接取得できます。
MQ135 gasSensor = MQ135(A0); float air_quality = gasSensor.getPPM();
ただし、その前にMQ135センサーを調整する必要があります。センサーを調整するには、以下のコードをアップロードし、 12〜24 時間実行してから、 RZERO 値を取得します。
#include "MQ135.h" void setup(){Serial.begin(9600); } void loop(){MQ135 gasSensor = MQ135(A0); //センサーをピンA0に接続しますfloatrzero = gasSensor.getRZero(); Serial.println(rzero); delay(1000); }
RZERO 値を取得した後。ダウンロードしたライブラリファイル「MQ135.h」にRZERO値を入力します。 #define RZERO 494.63
これで、大気質監視プロジェクトの実際のコードを開始できます。
コードでは、まず、ガスセンサーとLCDのライブラリと変数を定義しました。ソフトウェアシリアルライブラリを使用することにより、TXピンおよびRXピンとして任意のデジタルピンを作成できます。このコードでは、ESP8266のRXピンとしてピン9を、TXピンとしてピン10を作成しました。次に、LCDのライブラリを含め、同じピンを定義しました。さらに2つの変数を定義しました。1つはセンサーのアナログピン用で、もう1つは air_quality 値を格納する ための ものです。
#include
次に、ピン8をブザーを接続した出力ピンとして宣言します。l cd.begin(16,2) コマンドは、データを受信するためにLCDを起動し、カーソルを最初の行に設定して、 「circuitdigest」を出力し ます。次に、2行目にカーソルを 置き、「SensorWarming」と出力し ます。
pinMode(8、OUTPUT); lcd.begin(16,2); lcd.setCursor(0,0); lcd.print( "circuitdigest"); lcd.setCursor(0,1); lcd.print( "センサーウォーミング"); delay(1000);
次に、シリアル通信のボーレートを設定します。ESPが異なればボーレートも異なるため、ESPのボーレートに応じて記述してください。次に、Arduinoと通信するようにESPを設定し、シリアルモニターにIPアドレスを表示するコマンドを送信します。
Serial.begin(115200); esp8266.begin(115200); sendData( "AT + RST \ r \ n"、2000、DEBUG); sendData( "AT + CWMODE = 2 \ r \ n"、1000、DEBUG); sendData( "AT + CIFSR \ r \ n"、1000、DEBUG); sendData( "AT + CIPMUair_quality = 1 \ r \ n"、1000、DEBUG); sendData( "AT + CIPSERVER = 1,80 \ r \ n"、1000、DEBUG); pinMode(sensorPin、INPUT); lcd.clear();
WebブラウザでWebページに出力を印刷するには、HTMLプログラミングを使用する必要があり ます。そこで、 webpage という名前の文字列を作成し、 その中に出力を保存しました。 read() 関数はASCII 10進数値を返し、0である最初の10進数は48から始まるため、出力から48を減算しています。
if(esp8266.available()){if(esp8266.find( "+ IPD、")){delay(1000); int connectionId = esp8266.read()-48; 文字列のウェブページ= "
IOT大気汚染監視システム
";ウェブページ+ =""; webpage + =" Air Quality is "; webpage + = air_quality; webpage + =" PPM "; webpage + ="
";
次のコードは、 sendData という名前の関数を呼び出し、データとメッセージの文字列をWebページに送信して表示します。
sendData(cipSend、1000、DEBUG); sendData(webpage、1000、DEBUG); cipSend = "AT + CIPSEND ="; cipSend + = connectionId; cipSend + = "、"; cipSend + = webpage.length(); cipSend + = "\ r \ n";
次のコードは、LCDにデータを出力します。空気の質をチェックするためにさまざまな条件を適用しました。LCDは条件に応じてメッセージを印刷し、汚染が1000PPMを超えるとブザーも鳴ります。
lcd.setCursor(0、0); lcd.print( "大気質は"); lcd.print(air_quality); lcd.print( "PPM"); lcd.setCursor(0,1); if(air_quality <= 1000){lcd.print( "Fresh Air"); digitalWrite(8、LOW);
最後に、以下の関数がWebページにデータを送信して表示します。 'webpage' という名前 の 文字列に保存したデータは、 'command' という名前 の 文字列に保存されます。ESPは、 「コマンド」 から文字を1つずつ読み取り、Webページに印刷します。
String sendData(String command、const int timeout、boolean debug){String response = ""; esp8266.print(コマンド); //読み取った文字をesp8266に送信しますlongint time = millis(); while((time + timeout)> mills()){while(esp8266.available()){// espにはデータがあるため、出力をシリアルウィンドウに表示しますchar c = esp8266.read(); //次の文字を読み取ります。応答+ = c; }} if(debug){Serial.print(response); }応答を返します。}
プロジェクトのテストと出力:
コードをアップロードする前に、ESP8266デバイスのWi-Fiに接続していることを確認してください。アップロード後、シリアルモニターを開くと、以下のようなIPアドレスが表示されます。
このIPアドレスをブラウザに入力すると、以下のような出力が表示されます。PPMで現在の大気質値を確認する場合は、ページを再度更新する必要があります。
ローカルサーバーをセットアップして、その動作を実証しました。以下のビデオを確認してください。ただし、世界中のどこからでも大気質を監視するには、ポート80(HTTPまたはインターネットに使用)をデバイスのローカルまたはプライベートIPアドレス(192.168 *)に転送する必要があります。ポート転送後、すべての着信接続がこのローカルアドレスに転送され、どこからでもインターネットのパブリックIPアドレスを入力するだけで、上記のWebページを開くことができます。ルーター(192.168.1.1)にログインしてポートを転送し、ポート転送を設定するオプションを見つけることができます。