この記事の結論
- DHT11は精度±2℃・湿度±5%RHの入門向け、DHT22は精度±0.5℃・湿度±2%RHの高精度版という違いがある
- 初めての1個としてまず動かしてみるだけならDHT11で十分、屋外や植物の水やり管理など精度が必要な用途ならDHT22が向く
- 配線はVCC・DATA・GNDの3本、モジュール基板にはプルアップ抵抗が内蔵されていることが多く追加配線は不要な場合が多い
- 読み取り間隔はDHT11が最短1秒・DHT22が最短2秒、間隔を詰めすぎると読み取りエラー(nan表示)の原因になる
「部屋の温度と湿度をArduinoで測ってみたい」というのは、センサー活用の中でも特に人気のあるテーマです。
温湿度センサーの定番であるDHT11・DHT22は、価格が手ごろで、初心者向けの解説記事も多いことから、最初の1つに選ばれやすいセンサーです。
この記事では、DHT11とDHT22の違い、配線の基本、コードの読み方までを順番に整理します。
センサー・モーターの基礎知識をまだ読んでいない人は、先にそちらでデジタル/アナログの違いを確認しておくと理解が早くなります。
DHT11とDHT22の違い、どちらを選ぶか
精度・測定範囲の違い
DHT11は、温度が0〜50℃(精度±2℃)、湿度が20〜90%RH(精度±5%RH)の範囲を測定できるセンサーです。
DHT22は、温度が-40〜80℃(精度±0.5℃)、湿度が0〜100%RH(精度±2〜5%RH程度)と、DHT11より広い範囲を高い精度で測定できます。
温度の分解能(読み取れる数字の細かさ)にも差があり、DHT11は1℃刻み、DHT22は0.1℃刻みで値を返します。
| 項目 | DHT11 | DHT22 |
|---|---|---|
| 温度測定範囲 | 0〜50℃ | -40〜80℃ |
| 温度精度 | ±2℃ | ±0.5℃ |
| 湿度測定範囲 | 20〜90%RH | 0〜100%RH |
| 湿度精度 | ±5%RH | ±2〜5%RH程度 |
| 最短読み取り間隔 | 約1秒 | 約2秒 |
価格差、初めての1個ならどちらか
DHT11のモジュール基板は300円台〜500円程度で購入できることが多く、価格の面でも試しやすいセンサーです。

DHT22はDHT11よりやや高価な傾向があり、精度が上がる分だけ価格にも差が出ます。
紹介した商品:DHT11 温湿度センサーモジュール
DHT11 1個 温度湿度センサーモジュール(KURA-PARTS)
まずは室内の気温・湿度を試してみたい人向けの入門モデルです。
Amazon ¥610
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
紹介した商品:DHT22 温湿度センサーモジュール
DHT22 デジタル温度湿度センサー 2個セット モジュール ケーブル付き Arduino用
屋外や植物の水やり管理など、精度が必要な用途向けの高精度モデルです。
Amazon ¥629(2個セット)
※価格は記事執筆時点のものです。購入前に最新価格をご確認ください。
配線の基本
3本足モジュールの配線
市販されているDHT11・DHT22のモジュール基板は、VCC・DATA(OUT)・GNDの3本足になっているタイプがほとんどです。
VCCをArduinoの5Vピンへ、GNDをGNDピンへ、DATAを任意のデジタルピン(例としてデジタル2番)へつなぎます。
ピン番号は好きなデジタルピンに変更して構いません、後ほど紹介するコード側の番号を同じ番号に合わせるだけです。

プルアップ抵抗が必要なケース
DHT11・DHT22は、DATA線の電圧を安定させるためのプルアップ抵抗(目安として4.7k〜10kΩ)を必要とする通信方式を使っています。
青色のPCBが付いた3本足モジュールを使う場合は、このプルアップ抵抗がすでに基板上に内蔵されているため、追加の配線は不要なことがほとんどです。
センサー素子だけの4本足タイプ(裸のDHT11・DHT22)を使う場合は、自分で抵抗を追加する必要があります。
抵抗の値の読み方に自信がない場合は、抵抗のカラーコードの読み方の記事を先に確認しておくと安心です。
ライブラリのインストールとコードの書き方
DHTセンサーライブラリの入れ方
DHT11・DHT22は、Adafruit社が公開している「DHT sensor library」を使うと、少ないコードで扱えます。
Arduino IDEのメニューから「スケッチ」→「ライブラリをインクルード」→「ライブラリを管理」を開き、「DHT sensor library」と「Adafruit Unified Sensor」の2つを検索してインストールします。
2つとも入れておかないとコンパイルエラーになるので、片方だけ入れて終わりにしないよう注意してください。
サンプルコードの読み方
ライブラリをインストールすると、サンプルコードの中に温度と湿度を読み取って表示するだけの短いプログラムが含まれています。
コードの中の「DHT11」という文字を「DHT22」に書き換えるだけで、同じプログラムのままセンサーの種類を切り替えられます。
「dht.readTemperature()」は温度を、「dht.readHumidity()」は湿度を読み取る命令だと分かっていれば、コードの丸暗記は必要ありません。
書き込んだあとは、Arduino IDE右上の虫眼鏡アイコン(シリアルモニタ)をクリックして結果を確認します。
シリアルモニタ右下のボーレートをスケッチ内の「Serial.begin(9600)」と同じ9600に合わせておかないと、文字化けしたような表示になってしまうので注意してください。
まずは書き込んでシリアルモニタに数値が表示されることを確認し、そこから配線ピンの番号やセンサーの種類を変えて試してみてください。
測定でつまずきやすいポイント
読み取り間隔
DHT11は最短でも約1秒、DHT22は最短でも約2秒の間隔を空けないと、正しく値を読み取れません。
ループの中で間隔を空けずに連続して読み取ろうとすると、エラーが起きやすくなります。
delay関数などで、最低でも2秒以上の間隔を空けてから次の読み取りを行うようにしてください。
間隔を詰めすぎると、後述する「nan」表示が頻発する原因になります。
「nan」表示が出たときの対処
シリアルモニタに数値ではなく「nan」と表示される場合は、正常に読み取れなかったことを意味します。
よくある原因は、配線ミス・読み取り間隔が短すぎること・電源が不安定なことの3つです。
まずは配線を確認し、次に読み取り間隔を見直すという順番で切り分けると、原因にたどり着きやすくなります。
それでも解決しない場合は、書き込みできない・反応しないときのチェックリスト記事もあわせて確認してください。

まとめ:DHT11・DHT22の使い分けチェックリスト
最後に、DHT11・DHT22を選ぶ・動かす際のポイントを振り返っておきます。
- 「まず動かしてみたいだけ」なのか「屋外や植物管理で正確さが必要」なのか、用途の見当がついている
- VCC・DATA・GNDの3本足配線と、プルアップ抵抗が基板に内蔵されているかどうかを確認できている
- 「DHT sensor library」「Adafruit Unified Sensor」の2つとも入れる必要がある、と分かっている
- 読み取り間隔を2秒以上空ける、「nan」が出たら配線→間隔→電源の順に見直す、という進め方が身についている


コメント