酒と薔薇の日々(その2)

好きなことだけ求めて生きるアスペ気味のINTJ人

温湿度計 DHT11 Arduinoへのライブラリ追加と動作テスト

2016年09月13日 19時29分19秒 | マイコン(ESP32・Arduino等)

■ハードウエアとドライバの取得・セットアップ

秋月電子にあった「DHT11」商品コード(DFR0067)を約2年前に購入していたので、おっとり刀でArduinoに接続することとした。

【ハード】

品番:DHT11温湿度モジュール(Temperature and Humidity Sensor)  [DFR0067]

3Pinを使って接続し、シリアルで温湿度を取得する基盤モジュールでコネクタ配線付

赤・黒線は電源、緑が信号線。VCC3.35.5Vなので3vマシンでも使用可

http://www.geocities.jp/bokunimowakaru/diy/arduino/humidity.htmlによればあまり精度は高くないと。

【ドライバ】

https://github.com/jdattilo/DHT11LIBからライブラリを取得しIDEへインストール。

■ドライバ内容

    void attach(int pin);                 センサーピン番号

              int read();                          読み込み

int read(int pin);               読み込み(PinNo)

              int humidity;                     湿度

              int temperature;                温度

              int celcius();                      摂氏

              double fahrenheit();          華氏

              double fahrenheit(double dCelcius);            摂氏 => 華氏 変換

              double kelvin();                                             ケルビン

              double kelvin(double dCelcius);                   華氏=> 摂氏 変換

              double dewPoint();                                        露点(結露するポイント)

              double dewPointFast();                                 露点関係(?)

 

■参考サイト

http://isa.asablo.jp/blog/2015/01/29/7557787 「温湿度センサ DHT11を試す。」

https://www.dfrobot.com/index.php?route=product/product&product_id=174

このサイトでは、開発元のソースを使って実験したようだ。

 

温湿度計 DHT11 Arduinoへのライブラリ追加と動作テスト

■目的
温湿度計「DHT11」を動かすArduinoIDE環境の構築
■手順概要
 1 ライブラリの入手
 2 IDEへのライブラリのインストール
 3 サンプルスケッチから選択しコンパイル

■ライブラリの入手
 ググったところ、海外サイトで提供されていたので、ダウンロードした。
  https://github.com/jdattilo/DHT11LIB
  Zipを取得。内容は次のとおり。
 これをArduinoIDEのSampleに組み込む。
 
 ダウンロードしたZipをそのまま指定する。
 
一番下に追加され、サンプルをコンパイル・転送することができた。
赤は+5V、黒はGND、緑は2Pinへ接続
 
手元温度計との差は1度。湿らせたティッシュを被せると温度は3度低下し湿度は59%にアップ。動いているようです。
あっけないですなあ・・・

■実験結果

赤は+5V、黒はGND、緑は2Pinへ接続

サンプルをコンパイルして実行

気温26度湿度42%と表示が出た。手元の温度計では25度。誤差の範囲ですね。

湿ったティッシュを被せておいたら、しばらくすると気温24度湿度59%に変化。

変化の値が正しいかは知らないが、確かに気温は下がり湿度は上がっているのでそうなんだろうな。

参考サイトでもそこまでの精度を求めるなってあるしね。

良しとしましょうね。

参考のソースは次のような物

 

#include

dht11 DHT11;

 

void setup()

{

  DHT11.attach(2);

  Serial.begin(9600);

  Serial.println("DHT11 TEST PROGRAM ");

  Serial.print("LIBRARY VERSION: ");

  Serial.println(DHT11LIB_VERSION);

}

 

void loop()

{

  Serial.println("\n");

  int chk = DHT11.read();

  Serial.print("Read sensor: ");

  switch (chk)

  {

    case 0: Serial.println("OK"); break;

    case -1: Serial.println("Checksum error"); break;

    case -2: Serial.println("Time out error"); break;

    default: Serial.println("Unknown error"); break;

  }

  Serial.print("Humidity (%): ");                                // 湿度

  Serial.println((float)DHT11.humidity, DEC);

  Serial.print("Temperature (C): ");                       // 温度(摂氏)

  Serial.println((float)DHT11.temperature, DEC);

  Serial.print("Temperature (F): ");

  Serial.println(DHT11.fahrenheit(), DEC);

  Serial.print("Temperature (K): ");

  Serial.println(DHT11.kelvin(), DEC);

  Serial.print("Dew Point (C): ");

  Serial.println(DHT11.dewPoint(), DEC);

  Serial.print("Dew PointFast (C): ");

  Serial.println(DHT11.dewPointFast(), DEC);

  delay(10000);

}

---------------

PS. 2020/8/17
モジュールはシリアル通信でデータを送ってくるらしいが、ではどうやってるのか気になった。
I2C通指なの?どうもそれではなさそう。
調べた結果、細かい動作を教えてくれるサイトを発見
https://www.souichi.club/technology/dht11-datasheet/
いやいや大変ですわ・・・
ラズパイはOSがリアルタイムOSではないだろうから、細かい信号制御するのは難しそう。
大昔、後閑さんのPICサイトでRS-232C通信の記事を読んで、すんげーと思ったけど、あれとおんなじだ。
Arduinoのライブラリに感謝です。