実際の土壌の湿度と地温の測定

本来の目的であった、地中の水分(土壌湿度)と地温の測定を行う。

使用したセンサーは(購入先は違うが)
DS18B20 防水型センサ
https://www.robotshop.com/jp/ja/ds18b20-waterproof-digital-temperature-sensor.html
土壌湿度センサ
https://www.amazon.co.jp/gp/product/B07K1DP211/ref=ppx_yo_dt_b_asin_title_o02_s01?ie=UTF8&psc=1

これらをDS18B20はOneWireで通信するために以下のライブラリをインストールした。
https://github.com/PaulStoffregen/OneWire
https://github.com/milesburton/Arduino-Temperature-Control-Library

配線としては両方のセンサとも3.3VとGNDに配線した後に、
温度計はD3を使用
土壌計はA1を使用
した。

温度は温度の値がそのまま出るが、湿度は出てくる電圧をanalogReadのレンジに対しての%に修正した。
今回は、モバイルバッテリを使って、連続動作時間や変化を知るためにブレッドボードで配線し、配線部にはホットボンドで仮止め、そして全体をビニール袋で覆った。

モバイルバッテリと合わせたところ

ビニール袋に入れたところ

地面に刺したところ

これで、受信できていることを確認した。
これによって、例えば数100mはなれた畑から自宅にLPWANで接続して地温や水分状態を監視できるプロトタイプが出来上がった。

ちなみにArduinoのソースの改造部分は下記となる。
( ” /// Modify” 部分を追加”)

定義部分への追加

// for Temperatures Sensor and Moisture Sensors  /// Modify
#include <OneWire.h>             /// Modify
#include <DallasTemperature.h>   /// Modify

#define dht_dpin A0 // Use A0 pin as Data pin for DHT11. 
#define DHTTYPE DHT11   // DHT 11 

// for Temperatures Sensor and Moisture Sensors   /// Modify
#define ONE_WIRE_BUS 3 // データ(黄)で使用するポート番号  /// Modify
#define SENSER_BIT    9      // 精度の設定bit     /// Modify
OneWire oneWire(ONE_WIRE_BUS);                    /// Modify
DallasTemperature sensors(&oneWire);              /// Modify

“void do_send(osjob_t* j){ “の中

// for Temperatures Sensor and Moisture Sensors    /// Modify
    sensors.requestTemperatures();              // 温度取得要求 /// Modify
    float Mo01,Ti01;                               /// Modify
    Mo01 = 100.0 - (((float) analogRead(1) + 1.0) / 1024.0 * 100.0 );  /// Modify
    Ti01 = (float) sensors.getTempCByIndex(0);     /// Modify
    Serial.print("Soil temp =");                   /// Modify
    Serial.println(Ti01); //温度の取得&シリアル送信  /// Modify
    Serial.print("Moisture =");                     /// Modify
    Serial.println(Mo01); //土壌湿度のシリアル送信  /// Modify

    CayenneLPP lpp(51);                    // create a buffer of 51 bytes to store the payload

    lpp.reset();                           // clear the buffer
//    lpp.addTemperature(1, t);       // on channel 1, add temperature, value 22.5°C   /// Modify
//    lpp.addRelativeHumidity(2, h);  // on channel 2, Hudimidity   /// Modify
    lpp.addTemperature(1, Ti01);      // on channel 1, add temperature, value 22.5°C   /// Modify
    lpp.addRelativeHumidity(2, Mo01); // on channel 2, Hudimidity   /// Modify

以上

コメントを残す

メールアドレスが公開されることはありません。