回路

Arduinoで動体検知システムを構築する方法:7つのステップ

目次:

Anonim

ArduinoでプログラムされたUbidotsを搭載したFeather HUZZAHを使用して、モーションとプレゼンスのプロダクションカウンターを作りましょう。

スマートホームズおよびスマートマニュファクチャリングにおける効果的な物理的な動きとプレゼンスの検出は、高齢者の周囲生活支援(AAL)ソリューションや、より大きなMESを供給するプロダクションカウンティングシステムに及ぶアプリケーションに非常に役立ちます。動きと存在の検出のその他のアプリケーションには、次のものが含まれますが、これらに限定されません。

  1. ドアとゲートの自動化
  2. フリースポットを指定するためのパーキングセンサー
  3. 遠隔タンクレベル監視
  4. 照明とセキュリティのためのスマートな家と施設
  5. コンベアラインでのユニット検出とカウント
  6. 印刷物のマーク検出
  7. 段ボール、プラスチック、紙の傾斜内の液体検知
  8. 距離検出
  9. 人カウンター

存在と動きには多くの用途がありますが、データを収集するための静電容量式、誘導式、光電式、および超音波式センサーなど、同じ数のセンサーがあります。コスト、環境条件、および精度要件に応じて、環境要件とアプリケーション要件に最も適したハードウェアを選択する必要があります。

このチュートリアルでは、リアルタイム生産カウンターの構築に焦点を当てます。アプリケーションはコンベアベルト上を通過するすべてのユニットをカウントします。私たちはArduino IDEを使って超音波センサーであるFeather HUZZAH ESP8266をプログラムし、Ubidotsでアプリケーションを開発してIoTダッシュボードを表示します。

用品:

ステップ1:要件

  1. ESP8266MB7389-100と羽HUZZAH
  2. 超音波センサー
  3. Arduino IDE 1.8.2以上
  4. Ubidotsアカウントまたは教育用ライセンス

ステップ2:設定

  • Iハードウェア設定
  • II。ファームウェア設定
  • III。 Ubidotsアプリケーション開発(イベント、変数、そしてダッシュボード)

ステップ3:ハードウェアの設定

超音波センサーMB7389-100は、そのIPv667定格のおかげで、困難な気象条件において広範囲で低消費電力が要求される産業用途向けの低コストオプションです。

始めるには、下の図を鏡に映して超音波センサーを 羽HUZZAH ESP8266.

注意: センサーの測定値は、アナログ測定値またはPWMとして取得できます。以下では、PWM読み取りの設定について説明します。詳細については、上記の例を参照してください。

オプション ほこり、水、およびその他の危険な環境要因から保護するために、マイクロコントローラとセンサーをIP67のケースの中に入れてください。標準的なケースは上の写真に示されているものと似ています。

ステップ4:ファームウェアの設定

まず、Arduino IDEにFeather Huzzahをインストールしてコードをコンパイルします。簡単な点滅テストを行って、この設定を確認してください。 Featherデバイスの接続に関する詳細については、この役に立つハードウェア設定ガイドを調べてください。

センサーデータをUbidots IoT開発プラットフォームに送信するには、以下のコードをコピーしてArduino IDEに貼り付けます。コードで示されている場所に、Wi-Fiネットワーク名、パスワード、およびUbidotsアカウントのTokenを割り当てることを忘れないでください。

/ *******************************含まれるライブラリ*************** ****************/#含める / *******************************定数とオブジェクト************** ***************** // * Ubidots * / const char * SSID_NAME = "xxxxxxxx"; //ここにあなたのSSID nameconst charを入れてください。* SSID_PASS = "xxxxxxxx"; //ここにパスワードを入力してくださいchar * TOKEN = "Assig_your_ubidots_token"; //ここにあなたのTOKENconst charを入れてください* DEVICE_LABEL = "motion-control"; //お使いのデバイスのlabelconst char * VARIABLE_LABEL = "distance"; //変数labelconst char * USER_AGENT = "ESP8266"; const char * VERSION = "1.0"; const char * HTTPSERVER = "industrial.api.ubidots.com"; // Ubidotsビジネスユーザー// const char * HTTPSERVER = " things.ubidots.com "; // Ubidots教育用ユーザーint HTTPPORT = 80; / * Ultrasonic Sensor * / const int pwPin1 = 5; //センサーが接続されているPWMピンWiFiClient clientUbi; / *******************************補助機能*** **************************** // **ボディの長さを取得する@arg変数ボディchar型のボディ@return dataLen the変数の長さ* / int dataLen(char * variable){uint8_t dataLen = 0; for(int i = 0; i <= 250; i ++){if(variable i!= ' 0'){dataLen ++; } else {break;} returnLain;} / ********************************主な関数********* ********************** / void setup(){Serial.begin(115200);} / * APに接続します* / WiFi.begin(SSID_NAME、SSID_PASS); while(WiFi.status()!= WL_CONNECTED){delay(500); Serial.print( "。"); pinMode(pwPin1、INPUT); WiFi.setAutoReconnect(true); Serial.println(F( "WiFi connected")); Serial.println(F( "IPアドレス:")); Serial.println(WiFi.localIP());} void loop(){/ *あなたが*に変換することを望むのであれば、センサーの読みはミリメートルで返される* - > distance / 25.4 * / float distanceを指す変数を作成する= pulseIn(pwPin1、HIGH); sendToUbidots(DEVICE_LABEL、VARIABLE_LABEL、距離); void sendToUbidots(const char * device_label、const char * variable_label、float sensor_value){char * body =(char *)malloc(sizeof(char)* 150); char * data =(char *)malloc(sizeof(char)* 300); / *送信する値を格納するスペース* / char str_val 10; / * ----センサーの値をchar型に変換します----- * / / * 4は最小幅、2は精度です。 float値はstr_val * / dtostrf(sensor_value、4、2、str_val)にコピーされます。 / *リクエストに送信されるボディを構築する* / sprintf(ボディ、 "{"%s ":%s}"、variable_label、str_val); / * HTTPリクエストをPOST * / sprintf(data、 "POST /api/v1.6/devices/%s"、device_label)になるように構築します。 sprintf(データ、 "%s HTTP / 1.1 r n"、データ); sprintf(data、 "%sホスト:things.ubidots.com r n"、data); sprintf(データ、 "%sユーザエージェント:%s /%s r n"、データ、USER_AGENT、VERSION); sprintf(データ、 "%sX認証トークン:%s r n"、データ、トークン); sprintf(data、 "%sConnection:close r n"、data); sprintf(data、 "%sコンテンツタイプ:アプリケーション/ json r n"、データ); sprintf(data、 "%sコンテンツ長:%d r n r n"、データ、dataLen(ボディ)); sprintf(データ、 "%s%s r n r n"、データ、本体); / *初期接続* / clientUbi.connect(HTTPSERVER、HTTPPORT); / *クライアント接続を確認してください* / if(clientUbi.connect(HTTPSERVER、HTTPPORT)){Serial.println(F( "変数の転記:")); Serial.println(data); / * HTTPリクエストを送信します* / clientUbi.print(data); * / while(clientUbi.available()){char c = clientUbi.read();} / *クライアントが使用可能な状態で、サーバーの応答を読み取ります。 Serial.write(c); / *空きメモリ* / free(data);無料(ボディ)。 / *クライアントを停止します* / clientUbi.stop();}

ヒント: Arduino IDEでシリアルモニタを開くと、デバイスが正しく接続されているかどうかを確認できます。

あなたのアカウントのデバイス管理 - >デバイスでそれを見ることであなたのUbidotsバックエンドで作成されたデバイスを確認することができます。

デバイスをクリックすると、センサーの測定値が保存されている "distance"という変数が見つかります。この名前は、Arduino IDEに貼り付けたばかりのコードで割り当てられています。自動変数を調整したい場合は、デバイスカードを編集するか、アプリケーション用の正しい変数命名法で更新されたコードを点滅させることによって調整してください。

Feather HUZZAH ESP8266を接続してデータをUbidotsに報告することで、慎重に設計されたコードフリーのアプリケーション構成を使用してUbidotsを使用してアプリケーションを構築する時が来ました。

ステップ5:Ubidotsアプリケーション開発

Ubidotsイベント設定

私たちがUbidotsに送っている現在の読みは距離の入力です。これらの測定値を必要な出力(カウント単位)に変換するには、次の手順に従ってイベントを作成する必要があります。

  1. 現在のデバイスの「motion-control」の中に、「box」と呼ばれる新しいデフォルト変数を作成します。これは、新しいユニットがカウントされるたびに1を受け取ります。
  2. に行く デバイス管理 - >イベントをクリックし、ページの右上隅にある青いプラスアイコンをクリックして新しいイベントを追加します。
  3. 「If triggers」で始まるイベントを設定します。

  • 変数を選択してください。 "距離"
  • 値: 値(デフォルト)
  • センサーと通り過ぎる箱との間の最大予想距離}以下である*我々のアプリケーションは500mmを要求する
  • にとって 0分
  • 保存する

4.トリガーがアプリケーションの仕様に合わせて設定されたら、右上隅にあるオレンジ色の「プラス」アイコンをクリックして条件付きアクションを追加します。

5.アクションとして「変数の設定」を選択してください。

6.次に、以前に作成したデフォルト変数 "boxes"と値 "1"を選択します。

7.変更を保存します。イベントが適切に設定されていれば、センサーとユニットの間の距離が指定されたしきい値を超えるたびに「1」が送信されます。これは近くに物体がないことを示します。 。

Feather specific Deviceカードには、ユニットの存在が感知されるたびに「1」が送信される変数「boxes」があります。

工業用コンベアベルトやユニットカウントに特に便利です。このプロトタイプは、コーディングやアプリケーション開発において、さまざまな環境やハードウェアに合わせてカスタマイズできます。

8.検知されたユニット数(または物体が検知された回数)を視覚化する
ここで、 "boxes"変数を使用して、定義されたスパム(分、時間、日、週など)内の変数 "boxes"から受け取った読み取り値の合計を合計するための新しいローリングウィンドウ変数を作成します。この開発を実行するには、次の簡単な手順に従います。

新しいローリングウィンドウ変数に次の資格情報を割り当てます。

デバイスを選択してください。 モーションコントロール(またはデータを送信しているデバイスの名前)

変数を選択してください。

計算する:

すべての "1"時間(またはあなたのアプリケーション要求に従って)

新しい変数に、 "box / hour"や "units / hours"のように、1時間に数えられるボックス(または移動)の数を示す名前を割り当てます。

ステップ6:ダッシュボードの設定

最後に、検知されたユニットの数を表示するためのダッシュボードを作成してください。

デバイス管理 - > ダッシュボードに移動して、新しいウィジェットを追加します。このウィジェットは今日数えられた箱の数を時間ごとに分けて表示します。

あなたのカウントを視覚化するためにあなたの新しいウィジェットに以下の資格情報を割り当ててください。

どのようにあなたはあなたのデータを見たいですか? チャート

ウィジェットの種類を選択します。 折れ線グラフ

デバイスを追加する: 運動制御

変数を追加してください。 箱/時

終了しました。そして、この最後のダッシュボード開発で、あなたはアプリケーションを完成させ、そして今やあなたは効率的で効果的な動きと存在検出システムを持っています。これが最終結果です。

ステップ7: