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

ヘリウムとDFRobotを備えたワイヤレス土壌水分プローブ

コンポーネントと消耗品

>
Helium AtomXbeeモジュール
× 1
ヘリウムエレメントアクセスポイント
× 1
DFRobot Gravity:アナログ容量性土壌水分センサー
× 1
Helium Arduino / mbedアダプター
× 1
Arduino UNO
× 1

アプリとオンラインサービス

>
Arduino IDE
ヘリウムダッシュボード

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

ワイヤレス土壌水分センサーで植物に声を届けましょう

それに直面しよう。植物は水やりの不足でいつも死んでいます。あなたは忙しくて、それらのシダは乾いた感じで手を上げるつもりはありません。したがって、外出中の植物愛好家にとって、このプロトタイプの土壌水分プローブは、幸せで健康的なシダやイチジクへのチケットです。

カバーする内容

このガイド全体は、エンドツーエンドで約60分かかります。これから説明します:

  • DF Robot Gravity Capacitive Soil Moisture Sensor、Helium Atom Prototyping Module、Helium Arduino Adapter、およびArduinoボード(UNOを使用)を使用して、完全な土壌水分プローブを構築します。
  • ヘリウムダッシュボードにヘリウム元素とヘリウム原子プロトタイピングモジュールを登録する。独自の低電力、広域ワイヤレスネットワークを構築します。
  • ArduinoIDEを介した土壌水分プローブのプログラミング。途中でヘリウムもインストールします および ArduinoJson Arduinoライブラリ;
  • 植物からヘリウムダッシュボードにほぼリアルタイムで土壌水分データを測定して送信します。ヘリウムHTTPチャネルに配管します。

大丈夫。それを手に入れましょう。保存するシダがあります。

土壌水分プローブの構築

まず、センシングユニットを構築する必要があります。これはすばやく簡単です。完了すると、完全なプローブは次のようになります。

<図>

これを構築するには:

  • まず、HeliumAtomプロトタイピングモジュールをHeliumArduinoアダプターに固定してから、この組み合わせたユニットを選択したArduinoボードに接続します。必ず構成してください RX および TX それに応じてジャンパー 使用しているボードによって異なります。これらすべてのボードをピンで留める方法の詳細と、正しいジャンパー構成については、こちらをご覧ください。見て、それを完了して、戻ってきてください。
  • 次に、DF Robot Soil Moisture Probeに付属の3線式ジャンパーケーブルを使用して、実際の土壌水分プローブをヘリウムArduinoアダプターに接続する必要があります。ワイヤーの3色はです 、 、および 。ヘリウムArduinoアダプターでは、 ワイヤーは GND に接続します; ワイヤーは 5V に接続します;と ワイヤーは ADO に接続します ヘッダ。この接続がどのように機能するかについて、DFRobotチームからのすばらしい図がここにあります。配線が正しく行われると、ボードは次のようになります。

<図>
  • 最後に、ジャンパーケーブルの白いヘッダーをDF Robot Soil MoistureProbeに接続します。これは少し注意が必要ですが、最小限の労力ですぐに実行できるはずです。

ヘリウム元素の配備

次に、独自のヘリウムネットワークを構築します。これには約30秒かかります。 (Heliumでエンドツーエンドのアプリケーションがどのように構築され、ワイヤレスネットワークコンポーネントをどのように処理するかについて詳しく知りたい場合は、このアーキテクチャの概要から始めてください。)

Elementを展開し、Atomベースのセンサーのネットワークカバレッジを作成するには、付属のコードを使用して、エレメントを電源とライブイーサネットポートに接続するだけです。 (注:セルラーでバックアップされた要素がある場合、イーサネット接続の使用はオプションですが、バックアップとして推奨されます。 )プラグを差し込むと、いくつかのLEDアクティビティが表示されます。前面のLEDが緑色に変わると、エレメントが接続されます (イーサネット接続のシグナリング )またはティールセルラー接続の場合 )。 Elementとその接続方法に関する短いビデオをここで見ることができます。

ヘリウム元素と原子をヘリウムダッシュボードに登録する

センシングユニットが構築され、Heliumネットワークが展開されたので、Heliumダッシュボードにハードウェアを登録します。ダッシュボードは、接続されたハードウェア展開を監視および管理するためのヘリウムのホストされたユーザーインターフェイスです。ヘリウムが出荷するすべてのハードウェアはすでにシステムに登録されていますが、誰がそれを展開しているかを知る必要があります。

  • 最初に、Heliumダッシュボードアカウントをまだ作成していない場合は作成します。
  • Atomを登録するには、まず新しいAtom を選択します 。 UIで、名前を追加します(例: Fern Saver )次に、 MACアドレスの最後の4つを入力します およびその4桁の HVV Code 保存をクリックします これで完了です。
  • 要素の登録はまったく同じ方法で行われます。 新しい要素を選択します 次に、名前、その MACアドレスの最後の4つを指定します およびその4桁の HVV Code 。また、ダッシュボードがそれを地図上に表示できるように、要素の場所を入力してください。

要素がオンラインであることを確認するには、ステータスとシグナルを確認します。 ダッシュボード:

<図>

ヘリウムHTTPチャネルの展開

ヘリウムプラットフォームの主な機能はチャネルです。これらは、ウェブサービス(AWS IoT、Google Cloud IoT、Azure IoTなど)およびプロトコル( MQTT など)への事前構築されたコネクタです。 および HTTP )。 Channelsを使用すると、Heliumは、これらのWebサービスまたはプロトコルの1つとの統合に関して、すべての面倒な作業を行います。土壌水分プローブであるFernSaverの場合、HTTPチャネルを起動してみましょう。これにより、HTTP経由でデータを受け入れる任意のWebサービスにデータをパイプ処理できるようになります。たとえば、HTTPチャネルを使用してこのデータをIFTTTに送信し、FernSaverが特定のレベル未満の水分を報告するたびにテキストを受信することができます。

この例では、HTTPサービスをテストするための便利な無料のWebサービスであるrequestb.inにデータを送信するHTTPチャネルを設定します。以下では、SketchをArduinoにアップロードするときに、このチャネル名 HTTP を参照することに注意してください。 、コード内で、データの送信先がわかります。

このチャンネルの設定は次のようにすばやく簡単に行えます。

<図>

ArduinoIDEの構成とスケッチのアップロード

これで、ArduinoIDEの構成と必要なライブラリのインポートに進むことができます。開始するには:

  • 最新のArduinoIDEがダウンロードされていることを確認してください。必要に応じてここで入手してください。
  • 次に、2つのライブラリを追加する必要があります: Helium および ArduinoJson スケッチに移動すると、IDE内からライブラリを追加できます。 -> ライブラリを含める -> ライブラリを管理します。 「ヘリウム」を検索して選択し、インストールを押します。 。 「ArduinoJson」ライブラリについても、これと同じインストールプロセスに従います。 (記録する土壌水分日はJSONとしてフォーマットされているため、このライブラリが必要です。)

これが完了したら、実際のArduinoプログラミングを実行します。アップロードするSketchの完全なソースは、GitHubにあります。以下は完全な Soil_Humidity.ino です。 スケッチ。

  / * * Copyright 2017、Helium Systems、Inc。*無断複写・転載を禁じます。ライセンス情報については、LICENCE.txtを参照してください* * SEN0192容量性湿度センサーを使用して湿度を読み取ります。配線手順:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Sketch-> Manage Librariesから次のライブラリをインストールします:* --ArduinoJson * --Helium * / #include "Board.h "#include  #include  #include  #include  //このチャネル名は、これを取り込むためにHelium //ダッシュボードにデプロイしたチャネルに対応している必要がありますデータ。 #define CHANNEL_NAME "HTTP" // 1秒間の遅延#defineCHANNEL_DELAY 5000 //非常に60サイクル(秒)を送信します#define CHANNEL_SEND_CYCLE 12ヘリウムヘリウム(&atom_serial);チャネルチャネル(&ヘリウム); int channel_counter; void report_status(int status、int result =0){if(helium_status_OK ==status){if(result ==0){Serial.println(F( "Succeeded")); } else {Serial.print(F( "Failed-")); Serial.println(結果); }} else {Serial.println(F( "Failed")); }} void connect(){while(!helium.connected()){Serial.print(F( "Connecting-")); int status =helium.connect(); report_status(status); if(helium_status_OK!=status){delay(1000); }}} void channel_create(const char * channel_name){int8_t result; intステータス; do {//接続されていることを確認しますconnect(); Serial.print(F( "チャネルの作成-")); status =channel.begin(channel_name、&result); //ステータスと結果を出力report_status(status、result); if(helium_status_OK!=status){delay(1000); }} while(helium_status_OK!=status || result!=0); } void channel_send(const char * channel_name、void const * data、size_t len){int status; int8_t結果; do {// Serial.print(F( "Sending-"));を送信しようとしますstatus =channel.send(data、len、&result); report_status(ステータス、結果); //サービスエラーが返された場合にチャネルを作成しますif(status ==helium_status_OK &&result!=0){channel_create(channel_name); } else if(status!=helium_status_OK){delay(1000); }} while(helium_status_OK!=status || result!=0); } void setup(){Serial.begin(9600); Serial.println(F( "Starting")); helium.begin(HELIUM_BAUD_RATE); channel_create(CHANNEL_NAME); channel_counter =0; } #define DRY_VALUE 536 //空気中に取り込まれる#defineWET_VALUE 303 //水中に取り込まれる#defineHUM_RANGE(DRY_VALUE --WET_VALUE)void loop(){Serial.print(F( "Reading-"));フロート読み取り=analogRead(A0);フロートパーセント=100 *(1-(読み取り値-WET_VALUE)/ HUM_RANGE); Serial.print(読み取り); Serial.print( "-"); Serial.println(パーセント); if(-channel_counter <=0){StaticJsonBuffer  jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root [F( "value")] =読み取り; root [F( "percent")] =パーセント; char buffer [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer、HELIUM_MAX_DATA_SIZE); channel_send(CHANNEL_NAME、buffer、used); channel_counter =CHANNEL_SEND_CYCLE; } delay(CHANNEL_DELAY); }  

Helium を使用 および ArduinoJson ライブラリをインストールし、新しいスケッチを作成します(ファイル->新規 Arduino IDE内から)、上記のコードを貼り付けます。次に、完全な土壌水分プローブハードウェアパッケージをUSBケーブルでワークステーションに接続した状態で、アップロードを押します。 ボタン。

AtomプロトタイピングモジュールのLEDは、しばらくすると点滅し始めます。これは、Heliumネットワークに接続しているAtomです(以前にデプロイしたElementを介して)。コードのアップロード時にArduinoIDEがエラーをスローしない場合、これは成功しており、土壌水分プローブが読み取り値を生成しています。

土壌水分データに関する注記

上記のように、このスケッチは土壌水分データをキャプチャし、それを JSON としてエンコードします <コード> ヘリウムプラットフォームに送る前に。上記のスケッチを使用すると、1つのデータポイントは次のようになります( JSON のように) ):

  {"value":433、 "percent":55.5}  

DFRobot重力容量性土壌水分センサーが実際にこれらの読み取り値を、キャリブレーションされた乾式読み取り値と湿式読み取り値の間のアナログ読み取り値としてキャプチャしていることは注目に値します。これがどのように実装され、調整されるかについての完全な詳細は、ここで入手できます。キャリブレーションを少し調整することをお勧めします。

ヘリウムダッシュボードでのセンサーの接続とデータの確認

センサーがデプロイされたので、センサーがオンラインでデータを送信していることを確認できます。ダッシュボード内では、 Atom UI を介して、いくつかの方法でこれを行うことができます。 デプロイしたばかりのセンサーを表示します。

  • Atomがオンラインの場合、ダッシュボードにはステータスとシグナルが表示されます 、そのステータスに関する他のさまざまなメタデータとともに。次のようになります:
<図>
  • 同じAtomインターフェースのさらに下に、イベントログも表示します。 センサーからの各データポイントと、それがヘリウムチャネルに正常に送信されたかどうかを示します。上で述べたように、これらはWebサービスまたはrawプロトコルへの事前に構築されたコネクターです。以前、Helium組織にHTTPチャネルを導入しました。そして、上記のスケッチは、土壌水分プローブにデータをこのチャネルに送信するように指示します- HTTP と呼ばれます 。ただし、下の図のこの例では、データをヘリウムHTTPチャネルに送信しています。
<図>
  • デバッグも提供しています 入ってくるときに測定値を表示する各Atomのインターフェース(このオプションを有効にすると)。ダッシュボードのデバッグビューアの土壌水分データは次のとおりです。
<図>

次のステップとヘルプ

おめでとう!これでこのガイドは終わりです。これで、ワイヤレス土壌水分プローブを使用してシダの将来を保証できます。これは大したことです。あなたのシダはあなたに感謝します。

<図>

ヘリウムの詳細と、このハードウェアとソフトウェアを使用して独自のセンサーのプロトタイプを作成する方法については、こちらから始めてください:

  • ヘリウム開発者向けドキュメント
  • Helium Developer Slack
  • ヘリウム開発者フォーラム

コード

  • Soil_Humidity.ino
Soil_Humidity.ino C / C ++
センサーからヘリウムチャネルへの土壌水分データの送信を開始するための完全なArduinoスケッチ。
 / * * Copyright 2017、Helium Systems、Inc。* All RightsReserved。ライセンス情報については、LICENCE.txtを参照してください* * SEN0192容量性湿度センサーを使用して湿度を読み取ります。配線手順:* https://www.dfrobot.com/wiki/index.php/Capacitive_Soil_Moisture_Sensor_SKU:SEN0193 * * Sketch-> Manage Librariesから次のライブラリをインストールします:* --ArduinoJson * --Helium * /#include "Board.h "#include  #include  #include  #include  #define CHANNEL_NAME" Helium MQTT "// 1秒間の遅延#defineCHANNEL_DELAY 5000 //非常に送信60サイクル(秒)#define CHANNEL_SEND_CYCLE 12Helium helium(&atom_serial); Channel channel(&helium); int channel_counter; voidreport_status(int status、int result =0){if(helium_status_OK ==status){if(result ==0){ Serial.println(F( "Succeeded")); } else {Serial.print(F( "Failed-")); Serial.println(結果); }} else {Serial.println(F( "Failed")); }} voidconnect(){while(!helium.connected()){Serial.print(F( "Connecting-")); int status =helium.connect(); report_status(status); if(helium_status_OK!=status){delay(1000); }}} voidchannel_create(const char * channel_name){int8_t result; intステータス; do {//接続されていることを確認しますconnect(); Serial.print(F( "チャネルの作成-")); status =channel.begin(channel_name、&result); //ステータスと結果を出力report_status(status、result); if(helium_status_OK!=status){delay(1000); }} while(helium_status_OK!=status || result!=0);} voidchannel_send(const char * channel_name、void const * data、size_t len){int status; int8_t結果; do {// Serial.print(F( "Sending-"));を送信しようとしますstatus =channel.send(data、len、&result); report_status(ステータス、結果); //サービスエラーが返された場合にチャネルを作成しますif(status ==helium_status_OK &&result!=0){channel_create(channel_name); } else if(status!=helium_status_OK){delay(1000); }} while(helium_status_OK!=status || result!=0);} voidsetup(){Serial.begin(9600); Serial.println(F( "Starting")); helium.begin(HELIUM_BAUD_RATE); channel_create(CHANNEL_NAME); channel_counter =0;}#define DRY_VALUE 536 //空気に取り込まれる#define WET_VALUE 303 //水中に取り込まれる#define HUM_RANGE(DRY_VALUE --WET_VALUE)voidloop(){Serial.print(F( "Reading-"));フロート読み取り=analogRead(A0);フロートパーセント=100 *(1-(読み取り値-WET_VALUE)/ HUM_RANGE); Serial.print(読み取り); Serial.print( "-"); Serial.println(パーセント); if(-channel_counter <=0){StaticJsonBuffer  jsonBuffer; JsonObject&root =jsonBuffer.createObject(); root [F( "value")] =読み取り; root [F( "percent")] =パーセント; char buffer [HELIUM_MAX_DATA_SIZE]; size_t used =root.printTo(buffer、HELIUM_MAX_DATA_SIZE); channel_send(CHANNEL_NAME、buffer、used); channel_counter =CHANNEL_SEND_CYCLE; } delay(CHANNEL_DELAY);} 

製造プロセス

  1. 土壌水分センサーの動作と用途
  2. QR、RFID、温度検証によるアクセス制御
  3. ラズベリーパイ土壌水分センサー
  4. ラズベリーパイと湿度センサーを備えたエアロポニックス
  5. RaspberryPiとPythonを使用したロボットの構築
  6. 粘り強さと忍耐力でリードする
  7. Portentaおよび熱電対センサー(MAX6675を使用)
  8. ArduinoとMPU6050によるサーボモーターの制御
  9. u-blox LEA-6H 02GPSモジュールとArduinoおよびPython
  10. Arduinoによる音声認識と合成
  11. 土壌水分を監視するための標準的なデジタルカメラとAI