■ハードウエアとドライバの取得・セットアップ
秋月電子にあった「DHT11」商品コード(DFR0067)を約2年前に購入していたので、おっとり刀でArduinoに接続することとした。
【ハード】
品番:DHT11温湿度モジュール(Temperature and Humidity Sensor) [DFR0067]
3Pinを使って接続し、シリアルで温湿度を取得する基盤モジュールでコネクタ配線付
赤・黒線は電源、緑が信号線。VCCは3.3~5.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のライブラリに感謝です。