Lesson 11
温度湿度センサー
温度湿度センサーと電気式センサーの仕組みについて学習。
使用する機器
- (1) x Elegoo Uno R3
- (1) x DHT11 Temperature and Humidity module
- (3) x F-M wires (Female to Male DuPont wires)
温度湿度センサー
セットに入っている温度湿度センサーは DHT11 というセンサーを採用しており、抵抗膜方式の湿度計測部とNTC方式の温度計測部で構成され、高性能な8ビットマイコンと接続することで、優れた品質、高速応答、耐干渉性、コストパフォーマンスを実現しています。
電子式の湿度センサーには、主に抵抗式と容量式の2種類があり、抵抗式は感湿材料の吸湿/脱湿によって変化する抵抗値を捉えて計測し、容量式の場合は、感湿材料の吸湿/脱湿によって変化する静電容量を捉えて計測します。抵抗型は湿度が低くなると抵抗値が大きくなり、湿度が高くなると抵抗値が小さくなります。
温度測定に使われている NTC とは 温度により電気抵抗値が下がる仕組みを利用している。
本キットは上記の組み合わせでモジュール化している。
DHT11 は データシートにある通り、正面から見たときに左から VDD 電源ピン、DATA データ転送ピン、NC 無接続ピン、GNDピンとなっており、モジュール化されるにあたり NC が省略され 3ピンになっている。
構成
配線し、サンプルプログラムとライブラリをデプロイして、シリアルコンソールを開くとセンサーデータを確認できる。
T(temperature)が温度、 H(humidity)が湿度となっており、コードを見てみると
#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11
static const int DHT_SENSOR_PIN = 2;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
/*
* Initialize the serial port.
*/
void setup( )
{
Serial.begin( 9600);
}
/*
* Poll for a measurement, keeping the state machine alive. Returns
* true if a measurement is available.
*/
static bool measure_environment( float *temperature, float *humidity )
{
static unsigned long measurement_timestamp = millis( );
/* Measure once every four seconds. */
if( millis( ) - measurement_timestamp > 3000ul )
{
if( dht_sensor.measure( temperature, humidity ) == true )
{
measurement_timestamp = millis( );
return( true );
}
}
return( false );
}
/*
* Main program loop.
*/
void loop( )
{
float temperature;
float humidity;
/* Measure temperature and humidity. If the functions returns
true, then a measurement is available. */
if( measure_environment( &temperature, &humidity ) == true )
{
Serial.print( "T = " );
Serial.print( temperature, 1 );
Serial.print( " deg. C, H = " );
Serial.print( humidity, 1 );
Serial.println( "%" );
}
}`
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );
でデータをやり取りするピンと、利用する DHTセンサーのタイプを指定している。
ライブラリ側で計算しているためセンサー制御系のコードは無く、データの定義とデータ取得、表示についてのコードのみ measure_environment
関数を定義して値を取り続けるようにし、あとは Loop
で値の取得確認と表示を繰り返している。
Lesson 5 で デジタル入力、アナログ入力について学習したように、本来温度のような短時間での連続データを取り扱うことに対してデジタル入力は本来向いていません。実際にセンサーが取得し Arudino 側に送っているデータは 8bit x 5種類となっており 先頭から湿度(High)、湿度(Low)、温度(High)、温度(Low)と下記のようになっておりモジュール側で吸収している。