2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Arduino】温湿度センサーのDHT11とDHT22を比較してみた

Last updated at Posted at 2025-11-18

はじめに

温湿度センサーといえば定番の 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秒とやや長め。とはいえ、温度を毎秒計測したい場面はそう多くないので、特に問題なさそう。

外観比較

左:DHT11 右:DHT22
20251117_123816154_iOS.jpg

使用部品

今回は温湿度センサーで計測した値をLCDディスプレイに表示して確認します。

  • Arduino UNO
  • LCD1602(16ピン)
  • DHT11 or DHT22
  • 10kΩ可変抵抗
  • ブレッドボード、ジャンパーワイヤー

配線写真

20251117_130411769_iOS.jpg

ソースコード

#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_TYPEDHT_TYPE_11 に設定し、
DHT22を使用する場合は DHT_SENSOR_TYPEDHT_TYPE_22 に設定してください。

※間違った設定で接続すると、規格外の計測値が出るので注意。

動作確認

計測値の基準には、自宅で使用しているSwitchBot の温湿度計を利用しました。

  • DHT11の計測結果
    20251117_131249982_iOS.jpg

約1時間放置した結果、温度は +0.3℃、湿度は -6.0% となりました。
DHT11は整数しか計測できないため、実際にはもう少し誤差があるのではないかと思われます。
湿度については許容範囲を -1.0% 超える結果になりました。


  • DHT22の計測結果
    20251117_134744690_iOS.jpg

こちらも約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デバイスを自作してみる予定です。
次のステップではクラウド連携やデータ可視化にも挑戦してみたいと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?