工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ホームモニター

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
Arduinoイーサネットボード
× 1
I2Cインターフェイスを備えた4x20LCD
× 1
DHT22温度センサー
× 1
DS3231 RTC
× 1
HC-SR04超音波距離
× 1
OSHパークカスタム製作PCB
× 1

このプロジェクトについて

私は娘の家にEcobeeSmartサーモスタットを設置することから家の監視から始めました。それらはEcobeeによって廃止されたので、サンプレベル、洪水警報、停電などの項目を監視できる代替手段が必要でした。特にArduinoとWebサイトの両方のコーディングのために、さまざまなサイトの他のプロジェクトから多くのことを引き出しました。通知にPushingboxを使用することは、リモート通知の手段を可能にするシステムの重要な部分でした。知識とプロジェクトを公開してくれたオープンデザインコミュニティに感謝します。

<図>

私はArduinoMega 2560から始め、イーサネットカードを追加しました。 Eagle cadを使用して、入力用のボードと視覚的なアナンシエータをいくつか設計しました。これらはOSHパークで作ってもらいました。インターフェイスボードは、7つの利用可能なドライ接点、温度および湿度センサー、リアルタイムクロック、および超音波サンプレベルセンサーをArduinoに接続します。

<図>

ローカルディスプレイには、4x20LCDディスプレイを使用しました。また、アラーム入力のステータスを示す8つのLEDがあります。インの場合はオレンジ、クリアの場合はグリーン、リセットの場合はオフです。
リセットボタンは緑色のLEDをクリアし、メッセージ有効化PBはPushingboxを使用して通知をオン/オフにします。

ウェブサイトはLAN上にのみ表示されます。セキュリティ上の理由から、ルーターを移植したくありませんでした。ラボシステムでスタンドアロンにしたかったので、jqplotだけでなく一部を使用したArduinoの例がいくつかありました。

フルディスプレイのウェブサイト。<図> <図>

ラベルはまだありませんが、ソフトウェアはセンサーから10インチ未満でアラームを発するように設定されており、オレンジ色のLEDが点灯して、このアラームがアクティブであることを示します。緑色のアラームは、それがかつて入っていたが、それ以来開いていることを示しています。リセットpbを押すと、緑色のLEDは消えますが、レベルが10インチを超えるまで、黄色のLEDは点灯したままになります。

コード

  • Arduinoコード
  • ウェブサイト
Arduinoコード C / C ++
 //ホームモニターコード/ *割り当てarduinogrn led red led interface annunciator annunciator Sensor#可変入力ピン出力ピン出力ピン可変ボードピンボード赤ピンボードgrnピンサンプレベル1 6,8 1819インチx15-2から6 、x15-3〜8 20-120-2フラッドアラーム228 23 25 x15-4 20-320-4電源喪失330 27 29 x15-5 20-520-6温度4ftemp 5(ftemp、1 )x15-1湿度5 fhumi 5(fhumi、1)x15-1aux 1 6 aux 1 32 31 33 x15-6 20-7 20-8aux 2 7 aux2 34 35 37 x15-11 21-1 21-2 aux 3 8 aux3 36 39 41 x15-7 21-3 21-4aux 4 9 aux4 38 43 45 x15-8 21-5 21-6aux 5 10 aux5 40 47 49 x15-9 21-721-8リセットリセット42x15-10メッセージ禁止msginhbt44x15-12メッセージLED17 * Wi-Fiシールド用に変更する必要がありますWIRINGVCCから5VLCD:SDAピンからピン21L CD:SCLピンからピン20DHT:DHTピン1からVCCDHT:DHTピン2からピン5および10KからVCCDHT:DHTピン3スペアDHT:DHTピン4からGNDSR04:SR04ピントリガーからピン8SR04:SR04ピンエコーからピン6RTC: SDAピンからピン21RTC:SCLピンからピン20LOSS OFPOWERピン30FLOODALARMピン28MESSAGELEDピン17はピン4、7、10、11、12、13 50、51、52、53を使用できません* /// LIBRARIES#include  #include  #include  #include  #include  #include  #include  #include  #include  // HTTPリクエストのキャプチャに使用されるバッファのサイズ#defineREQ_BUF_SZ 50 //ボードバイトmac [] ={0xzz、0xzz、0xzz、0xzz、0xzz、0xzz}の下のイーサネットシールドステッカーからのMACアドレス; IPAddress ip(192、168、1、100); //(10、9、9、12);または(192,168,1,100); IPアドレス。networkIPAddressgateway(192,168,1,1);によって変更が必要になる場合があります。 //(10,9,9,1):または(192,168,1,1);以前は他のスケッチで使用されていませんでした。削除する必要がある場合がありますIPAddresssubnet(255,255,255,0); //(255,255,255,0);以前は他のスケッチで使用されていませんでした。EthernetServerサーバー(1000)を削除する必要がある場合があります。 //ポート1000Fileにサーバーを作成しますwebFile; // SDカードのWebページファイルcharHTTP_req [REQ_BUF_SZ] ={0}; // nullで終了したstringcharとして保存されたバッファリングされたHTTPリクエストstringcharreq_index =0; // HTTP_reqバッファにインデックスを付けます//PushingBox.comからの秘密のDevID。必要な場合は、複数のピンで複数のDevIDを使用できます。DEVID1[] ="xxxxxxxxxxxxxxxxx"; //シナリオ:「これは最初のアラートシナリオです」ここにDevIDを引用符で囲みます//デバイスのセットアップ//セットアップLCDLiquidCrystal_I2C lcd(0x27,20,4); // 16文字と2行表示のLCDアドレスを0x27に設定// DHT22dhtDHTを設定; #define DHT22_PIN 5 // setup sonar#define TRIGGER_PIN 8 //超音波センサーのトリガーピンに接続されたArduinoピン#define ECHO_PIN 6 //超音波センサーのエコーピンに接続されたArduinoピン。#defineMAX_DISTANCE 200 // pingする最大距離(センチメートル単位)。センサーの最大距離は400〜500cmです。NewPingソナー(TRIGGER_PIN、ECHO_PIN、MAX_DISTANCE); //ピンと最大距離のNewPingセットアップ// setup RTCRTC_DS3231 RTC; //グローバル変数unsignedlong mathtime1 =0; unsigned long mathtime2 =0; unsigned long mathtime3 =0; unsigned long mathtime3a =0; unsigned long mathtime4 =0;文字列timestring;文字列datestring; unsignedintインチ; float ftemp;フロートフミ; int aux1; int aux2; int aux3; int aux4; int aux5; intリセット; int msginhbt =LOW; int Sensor1 =0;文字列sensor2 =0;文字列sensor3 =0; int Sensor4 =0; int Sensor5 =0;文字列sensor6 =0;文字列センサー7 =0;文字列sensor8 =0;文字列センサー9 =0;文字列センサー10 =0;文字列messagesend;文字列sensor1msg;文字列sensor2msg;文字列sensor3msg;文字列sensor6msg;文字列sensor7msg;文字列sensor8msg;文字列sensor9msg;文字列sensor10msg;文字列msginhbtmsg;文字列devid ="xxxxxxxxxxxxxxxxx"; char serverName [] ="api.pushingbox.com"; boolean lastConnected =false; boolean DEBUG =true; // pushingboxbooleanのトラブルシューティング用DEBUG1 =true; //ウェブサイトのトラブルシューティング用booleanDEBUG2 =false; //データのトラブルシューティング用voidsetup(){// SDカードの操作//イーサネットチップを無効にするpinMode(10、OUTPUT); digitalWrite(10、HIGH); //デバッグ用のシリアルを開始Serial.begin(9600); if(DEBUG1){Serial.println( "Starting Program ..");} Ethernet.begin(mac、ip、gateway、subnet); if(DEBUG1){Serial.println( "Active Server IP:"); Serial.println(Ethernet.localIP());} server.begin(); // SDカードを初期化しますif(DEBUG1){Serial.println( "Initializing SD card ...");} if(!SD.begin(4)){if(DEBUG1){Serial.println( "ERROR-SD card初期化に失敗しました! ");} return; //初期化に失敗しました} if(DEBUG1){Serial.println( "SUCCESS-SDカードが初期化されました。");} // index.htmファイルをチェックしますif(!SD.exists( "index.htm")){if( DEBUG1){Serial.println( "エラー-index.htmファイルが見つかりません!");} return; //インデックスファイルが見つかりません} Serial.println( "SUCCESS-インデックス.htmファイルが見つかりました。"); //機器を初期化します// Webサーバーを初期化しますEthernet.begin(mac、ip); //イーサネットデバイスを初期化しますserver.begin(); //クライアントのリッスンを開始します// lcdを初期化しますlcd.init(); // RTC Wire.begin();を初期化します。 RTC.begin(); if(!RTC.isrunning()){if(DEBUG2){Serial.println( "RTC is NOT running!");} //次の行は、RTCをこのスケッチがコンパイルされた日時に設定しますRTC.adjust(DateTime (__日付時刻__)); } DateTime now =RTC.now();コンパイルされたDateTime =DateTime(__ DATE __、__ TIME__); if(now.unixtime() -1){//コマンドがhomefront =homefront +6に到達したかどうかを確認します。 //次の文字を取得しますintendfront =homefront + 3; //このコマンドが3文字であることを願っていますStringaction =line.substring(homefront、endfront); //コマンドの値を取得しますclient.print( "datas({sensor1:"); client.print(sensor1); client。 print( "、sensor2:"); client.print(sensor2); client.print( "、sensor3:"); client.print(sensor3); client.print( "、sensor4:"); client.print(sensor4 ); client.print( "、sensor5:"); client.print(sensor5); client.print( "、sensor6:"); client.print(sensor6); client.print( "、sensor7:"); client .print(sensor7); client.print( "、sensor8:"); client.print(sensor8); client.print( "、sensor9:"); client.print(sensor9); client.print( "、sensor10: "); client.print(sensor10); client.print("、msgtimer: "); client.print(mathtime3a); client.print( "、msgonoff:"); client.print(msginhbtmsg); client.print( "})"); } 壊す; } if(c =='\ n'){連続=true; } else if(c!='\ r'){連続=false; }}} delay(1); client.stop(); } if(DEBUG1){Serial.print( "datas({sensor1:"); Serial.println(sensor1); Serial.print( "、sensor2:"); Serial.println(sensor2); Serial.print( "、 Sensor3: "); Serial.println(sensor3); Serial.print("、sensor4: "); Serial.println(sensor4); Serial.print("、sensor5: "); Serial.println(sensor5); Serial。 print( "、sensor6:"); Serial.println(sensor6); Serial.print( "、sensor7:"); Serial.println(sensor7); Serial.print( "、sensor8:"); Serial.println(sensor8 ); Serial.print( "、sensor9:"); Serial.println(sensor9); Serial.print( "、sensor10:"); Serial.println(sensor10); Serial.print( "、msgtimer:"); Serial .println(mathtime3a); Serial.print( "、msgonoff:"); Serial.print(msginhbtmsg); Serial.println( "})");} if(DEBUG1){Serial.print( "私のウェブサイトのIPアドレス:"); Serial.println(Ethernet.localIP());}} void timeanddate(){//時刻と日付DateTime now =RTC.now(); DateTime future(now.unixtime()-0); //時刻の修正は840文字列の時間文字列でした。文字列minutestring;文字列secondstring; if(future.hour()<10){hourstring ='0' + String(future.hour())+ ':';} else {hourstring =String(future.hour())+ ':';} if (future.minute()<10){minutestring ='0' + String(future.minute())+ ':';} else {minutestring =String(future.minute())+ ':';} if( future.second()<10){secondstring ='0' + String(future.second());} else {secondstring =String(future.second());} timestring =hourstring + minutesstring + secondstring;文字列monthstring;文字列daystring;文字列yearstring; if(future.month()<10){monthstring ='0' + String(future.month())+ '/';} else {monthstring =String(future.month())+ '/';} if (future.day()<10){daystring ='0' + String(future.day())+ '/';} else {daystring =String(future.day())+ '/';} datestring =月文字列+日文字列+ future.year(); lcd.setCursor(0,0); lcd.print(timestring); lcd.setCursor(10,0); lcd.print(datestring); mathtime1 =(now.unixtime());戻る; } void超音波センサー(){//超音波センサー{unsigned int uS =sonar.ping_median(5); // pingを送信し、マイクロ秒(uS)でping時間を取得します。 lcd.setCursor(9,1); lcd.print( ""); lcd.setCursor(9,1); lcd.print(uS / US_ROUNDTRIP_IN); // ping時間をcm単位の距離に変換し、結果を出力します(0 =設定された距離範囲外)inchs =(uS / US_ROUNDTRIP_IN);センサー1 =インチ; if(DEBUG2){Serial.print( "Distance:"); Serial.println(inches);}} return;} void dht22(){//温度および湿度センサー{if((mathtime1-mathtime4)> 2){ int chk =DHT.read22(DHT22_PIN); fhumi =(DHT.humidity); ftemp =((DHT.temperature * 1.8)+32); lcd.setCursor(9,2); lcd.print(fhumi、1); lcd.setCursor(12,3); lcd.print(ftemp、1); mathtime4 =mathtime1; } // delay(2000); //読み取りの2秒の遅延if(DEBUG2){Serial.println( "Temperature and Humidity:");} if(DEBUG2){Serial.println(ftemp、1);} if(DEBUG2){Serial.println(fhumi 、1);}} return;} void annunciator(){//サンプアラームif(inches <10){digitalWrite(18、HIGH); digitalWrite(19、HIGH); } else {digitalWrite(19、LOW);} //洪水警報if(digitalRead(28)==HIGH){digitalWrite(23、HIGH); digitalWrite(25、HIGH); } else {digitalWrite(25、LOW);} //電力損失alarmif(digitalRead(30)==HIGH){digitalWrite(27、HIGH); digitalWrite(29、HIGH); } else {digitalWrite(29、LOW);} // aux 1 alarmif(digitalRead(32)==HIGH){digitalWrite(31、HIGH); digitalWrite(33、HIGH); } else {digitalWrite(33、LOW);} // aux 2 alarmif(digitalRead(34)==HIGH){digitalWrite(35、HIGH); digitalWrite(37、HIGH); } else {digitalWrite(37、LOW);} // aux 3 alarmif(digitalRead(36)==HIGH){digitalWrite(39、HIGH); digitalWrite(41、HIGH); } else {digitalWrite(41、LOW);} // aux 4 alarmif(digitalRead(38)==HIGH){digitalWrite(43、HIGH); digitalWrite(45、HIGH); } else {digitalWrite(45、LOW);} // aux 5 alarmif(digitalRead(40)==HIGH){digitalWrite(47、HIGH); digitalWrite(49、HIGH); } else {digitalWrite(49、LOW);} // reset ledsif(digitalRead(42)==HIGH){int ledPinsout [] ={18、19、23、25、27、29、31、33、35、37 、37、39、41、43、45、47、49}; int ledPinsoutcnt =17; {for(int q =0; q  99999){mathtime3a =99999;}; if(DEBUG2){Serial.print( "MATH TIME 1:"); Serial.println(mathtime1); Serial.print( "MATH TIME 2:"); Serial .println(mathtime2); Serial.print( "MATH TIME 3:"); Serial.println(mathtime3); Serial.print( "ZFLAG:"); Serial.println(zflag);} {if(zflag ==1 &&mathtime3> 300)// 300秒に変更すると、5分ごとにメッセージが送信されます{mathtime2 =mathtime1; if(DEBUG1){Serial.println( "SEND MESSAGE!");} EthernetClientクライアント; Serial.println( "イーサネット対応"); //イーサネットボード/シールドのIPアドレスを出力します:Serial.print( "My SENDMESSAGE IP address:"); Serial.println(Ethernet.localIP()); //イーサネットシールドに初期化する時間を1秒与えます:delay(1000); if(DEBUG2){Serial.print( "incoming value:"); Serial.println(messagesend);} String repel =messagesend; char room [repel。 length()+ 1]; repel.toCharArray(room、repel.length()+ 1); if(DEBUG2){Serial.print( "これはフレーム化されている値です:"); Serial.println(room);} client.stop(); if(DEBUG){Serial.println( "connecting ...");} if(client.connect(serverName、80)){if(DEBUG){Serial.println( "connected");} if(DEBUG){ Serial.println( "リクエストの送信");} client.print( "GET / pushingbox?devid ="); client.print(devid); client.print( "&room ="); if(DEBUG){Serial.print( "これは送信される値です:"); Serial.println(room);} client.print(room); client.println( "HTTP / 1.1"); client.print( "ホスト:"); client.println(serverName); client.println( "ユーザーエージェント:Arduino"); client.println(); } else {if(DEBUG){Serial.println( "connection failed");}}}} return;} 
ウェブサイト JavaScript
これを実行するには、jsファイルとcssファイルを追加する必要があります。これらは使用しているコンピューターにあります。 I
   ホームモニター  <!-[if lt IE 9]>  <![endif]->        //    <!-クロック関数->       

ホームモニター KevinStrainによって開発

<!-テキストブロック->

日付と時刻:

MUDSHARK INDUSTRIES
より良い未来のために世界を変える。

ステータス:

ジャンプレベル 値: 上から1インチ

洪水警報 ステータス:

電源 ステータス:

温度 値: &#176 F

湿度 値:

Aux Input 1 ステータス:

補助入力2 ステータス:

Aux入力3 ステータス:

Aux Input 4 ステータス:

Aux入力5 ステータス:

送信されたメールメッセージ 数分前

<!-グラフとゲージの描画->

回路図

インターフェイスとアナンシエータ LED%20BAR%202.sch

製造プロセス

  1. 血圧モニタ
  2. 自宅にワイヤレスセンサーネットワークを構築する
  3. RaspberryPiを使用して自宅の温度を監視します
  4. RASPBERRY PI HOME AUTOMATION
  5. 自宅でDIY宿題ライティングマシンを作る
  6. Arduinoを使用してモニターをAmbilightにする
  7. IoTを使用した心拍数モニター
  8. 給湯器熱電対電圧モニター
  9. 自律型ホームアシスタントロボット
  10. Alexaによってアクティブ化されたArduinoホームコントローラー
  11. 16x2LCDのMAX30102心拍数モニター