はじめに
温湿度センサーといえば定番の DHT11 と DHT22。
どちらもArduinoでサクッと使える便利なやつですが、精度や表示の仕方、そしてお値段にちょっとした違いがあります。
そこで今回は、実際に両方を動かしてどれくらい差があるのかを比べてみました。
DHT11とDHT22の違い
| センサー | 精度 | 小数点 | 測定範囲 | サンプリング周期 | 価格 |
|---|---|---|---|---|---|
| DHT11 | ±2℃ / ±5% | ×(整数のみ) | 0〜50℃ / 20〜90% | 約1秒 | 約300円 |
| DHT22 | ±0.5℃ / ±2% | ○(0.1単位) | −40〜80℃ / 0〜100% | 約2秒 | 約800円 |
実用性を考えると、DHT22は氷点下も計測できるので、屋外でも活躍しそうです。
ただし、サンプリング周期は約2秒とやや長め。とはいえ、温度を毎秒計測したい場面はそう多くないので、特に問題なさそう。
外観比較
使用部品
今回は温湿度センサーで計測した値をLCDディスプレイに表示して確認します。
- Arduino UNO
- LCD1602(16ピン)
- DHT11 or DHT22
- 10kΩ可変抵抗
- ブレッドボード、ジャンパーワイヤー
配線写真
ソースコード
#include <LiquidCrystal.h>
#include <dht_nonblocking.h>
#define DHT_SENSOR_TYPE DHT_TYPE_11 // 使用するセンサーの種類(DHT11)
//#define DHT_SENSOR_TYPE DHT_TYPE_22 // 使用するセンサーの種類(DHT22)
#define DHT_PIN 2 // DHT11のデータピンをArduinoのD2に接続
// DHTセンサーの初期化
DHT_nonblocking dht(DHT_PIN, DHT_SENSOR_TYPE);
// LCDのピン配置
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);
void setup() {
lcd.begin(16, 2); // LCD初期化(16文字×2行)
}
// 温湿度を一定間隔で取得する関数(3秒ごと)
bool readSensor(float *temp, float *hum) {
static unsigned long last = millis(); // 前回の測定時刻を記録
if (millis() - last > 3000) { // 3秒経過したら測定
if (dht.measure(temp, hum)) { // 測定成功時のみ値を更新
last = millis();
return true;
}
}
return false;
}
void loop() {
float temp, hum;
// 測定できたときだけ表示を更新
if (readSensor(&temp, &hum)) {
// LCDに温度を表示(1行目)
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(temp, 1);
lcd.print(" C ");
// LCDに湿度を表示(2行目)
lcd.setCursor(0, 1);
lcd.print("Hum: ");
lcd.print(hum, 1);
lcd.print(" % ");
}
}
注意点
DHT11を使用する場合は DHT_SENSOR_TYPE を DHT_TYPE_11 に設定し、
DHT22を使用する場合は DHT_SENSOR_TYPE を DHT_TYPE_22 に設定してください。
※間違った設定で接続すると、規格外の計測値が出るので注意。
動作確認
計測値の基準には、自宅で使用しているSwitchBot の温湿度計を利用しました。
約1時間放置した結果、温度は +0.3℃、湿度は -6.0% となりました。
DHT11は整数しか計測できないため、実際にはもう少し誤差があるのではないかと思われます。
湿度については許容範囲を -1.0% 超える結果になりました。
こちらも約1時間放置した結果、温度は ±0℃、湿度は +3.4% となりました。
想定より温度が正確でビックリです。しかし湿度については許容範囲を +1.4% 超えていました。
比較結果
| センサー | 温度誤差 | 湿度誤差 | 備考 |
|---|---|---|---|
| DHT11 | +0.3℃ | -6.0% | 温度は許容範囲内だが、湿度は許容範囲を1.0%超過 |
| DHT22 | ±0℃ | +3.4% | 温度は正確。湿度は許容範囲を+1.4%超過だがDHT11より改善されている |
おわりに
今回はDHT11とDHT22を実際に動かして、精度や表示の違いを比較してみました。
計測に使ったソースコードは、前回作った距離センサーの仕組みをベースにしています。
👉 【Arduino】超音波距離センサで距離を測ってLEDとブザーで警告する回路を作ってみた
今後は購入した ESP32と組み合わせて、DHT22を使ったIoTデバイスを自作してみる予定です。
次のステップではクラウド連携やデータ可視化にも挑戦してみたいと思います。



