DHT11 / DHT22温度センサー
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
| × | 3 | ||||
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 |
アプリとオンラインサービス
> ![]() |
| |||
![]() |
| |||
![]() |
| |||
![]() |
| |||
| ||||
|
このプロジェクトについて
はじめに
背景
DHT11は、4ピン(1ピンは未使用)の温度および湿度センサーで、相対湿度20%〜90%、0〜50°Cを測定できます。センサーは3〜5.5V DCで動作し、独自のOneWireプロトコルを使用して通信します。このプロトコルでは、センサーからデータを取得するために非常に正確なタイミングが必要です。 LOWビットとHIGHビットは、信号がHIGHである時間の長さによってワイヤ上にコード化されます。読み取りにかかる合計時間は最大23.4ミリ秒です。これには、データ転送の開始に必要な18ミリ秒の遅延と、データの最大5.4ミリ秒のウィンドウが含まれます。個々の信号は、最短で20μs、最長で80μsにすることができます。
Windows 10 IoT Coreが最初に利用可能になったとき、Raspberry Pi 2とDHT11センサーを入手して、C#で試してみました。私はすぐにそれがうまくいかないことに気づきました。 Windows 10 IoT CoreのC#の問題は、十分な速度が得られないことです(少なくとも現時点では)。
私はMicrosoftフォーラムに投稿し、同じ苦労をしている他の開発者といくつかのやり取りをしました。私は最終的に、Windows 10 IoTCoreのOneWireプロトコルに関するMicrosoftの回答に次のように出くわしました。
しばらくすると、次のような投稿への返信が届きました。
まあ、それは素晴らしいことであり、私は今後の機能に本当に興奮していますが、誰が待つことができますか?最近、MicrosoftがサンプルセンサーとしてDHT11を使用し、Windows 10 IoTCoreでC ++を使用してOneWireプロトコルをサポートする方法に関するサンプルを投稿しているのを見ました。これをC#に導入する機会だと思いました。
このプロジェクトは、そのサンプルをC#で使用できるライブラリに変換することを目的としています。この人気のあるセンサーをWindows10 IoT Coreで役立つようにライブラリを作成してくれた人に感謝します。このライブラリがあれば、さらに役立つことを願っています。
ライブラリ
私が作成したライブラリは、元々Microsoftによって投稿されたコードの単純なリファクタリングであるため、センサーの読み取り値を取得するために行われた作業の功績は認められません。
ライブラリには、 Dht11 という単純なクラスがあります。 ネームスペースの Sensors.Dht 。 C#で新しいオブジェクトを作成するのは簡単です。
まず、DHT11センサーピンを接続しているGPIOピンを開きます。
using Sensors.Dht; GpioPin pin =GpioController.GetDefault()。OpenPin(4、GpioSharingMode.Exclusive);
次に、このピンを Dht11 のコンストラクターに渡します。 クラスを作成し、GPIOピンドライブモードを指定します。これにより、独自のプルアップ抵抗を追加するかどうかを決定できます。
Dht11 dht11 =new Dht11(_pin、GpioPinDriveMode.Input);
デバイスから読み取り値を取得するには、 GetReadingAsync を使用します 方法。
DhtReading reading =await dht11.GetReadingAsync()。AsTask();
最大再試行値を指定できる過負荷があります。デフォルト値は20です。これは、失敗した読み取りをあきらめて返す前に、センサーの読み取りを試行する回数を指定します。
DhtReading 構造は次のように定義されます:
public value struct DhtReading {bool TimedOut; bool IsValid;ダブル温度;二重湿度; int RetryCount;};
観察
センサーはC ++で動作しますが、それでも毎回読み取り値を取得するわけではありません。したがって、クラスでの再試行オプションの必要性(これは実際にはMicrosoftサンプルの一部です)。これを他のプラットフォームと比較して、どのように機能するかを確認するのが最善だと思いました。 Raspbianを実行しているRaspberryPi2とArduinoUnoでコードを試しました。両方に使用したコードは、GitHubリポジトリに含まれています。
このプロジェクトに含まれるビデオは、これらの各プラットフォームからの出力を示し、比較します。
はじめに
Raspberry Pi2の回路を組み立てる
このガイドを使用して、ページの下部にある図をガイドとして使用しながら回路を組み立てます(ワイヤの色はオプションであり、回路を構築するときに回路をわかりやすくするために選択されていることに注意してください)。
- T字型のコブラーをハーフサイズ+ボードの左端に配置します(数字は1から始まります)。左端の2つのピンは E1 にあります および F1 ボード上の。右端の2つのピンは E20 にあります および F20
- 4.7KΩ抵抗を A4 の間に配置します および 3V3
- B4 の間にオレンジ色のオスとオスのジャンパー線を接続します および F28
- F29 の間に赤いオスとオスのジャンパー線を接続します および 3V3
- F30 の間に黒のオスとオスのジャンパー線を接続します および GND
- DHT11センサーを J30 に配置します (-)、 J29 (+)および J28 (s)
- リボンケーブルをコブラーとラズベリーパイに差し込みます
Arduinoの回路を組み立てる
このガイドを使用して、ページの下部にある図をガイドとして使用しながら回路を組み立てます(ワイヤの色はオプションであり、回路を構築するときに回路をわかりやすくするために選択されていることに注意してください)。
- 4.7KΩ抵抗を E12 の間に配置します および E13
- D13 の間に白人男性と男性のジャンパー線を接続します およびピン5 Arduinoで
- D12 の間に赤いオスとオスのジャンパー線を接続します および 5V Arduinoのピン
- D11 の間に黒のオスとオスのジャンパー線を接続します および GND Arduinoで
- DHT11センサーを A11 に配置します (-)、 A12 (+)および A13 (s)
- コンピューターからArduinoにUSBケーブルを接続します
以下は私が作った回路の写真です。
<図>








RaspberryPiのアプリケーションを開始する
デバッグ、ARM構成、およびリモートマシンを選択します。次に、プロジェクトを右クリックし、[プロパティ]を選択して、[デバッグタグ]をクリックします。次に、Raspberry Pi 2のIPアドレスを[リモートマシン]フィールドに入力し、[認証を使用する]チェックボックスをオフにします。
F5 を押します 。アプリケーションはデバイスにデプロイされますが、最初は数分かかる場合があります。
Arduinoのアプリケーションを開始する
このプロジェクトのスケッチは、GitHubの Dht11_Speed というファイルで入手できます。 。 Arduino IDEを起動し、スケッチを開きます。スケッチをArduinoにアップロードします( Ctrl U
)次に、シリアルモニターを起動します( Ctrl Shift M
)
これを行う方法がわからない場合、またはこの環境に慣れていない場合は、以下のビデオでこれを行う方法を説明します。
Raspbianのアプリケーションを開始する
Raspberry PiのCコードは、このプロジェクトのGitHubの Dht11.c というファイルで入手できます。 。ソースをRaspberryPiにコピーして、そこでコンパイルする必要があります。 WinSCPを使用してファイルをコピーするのが好きです。このアプリケーションをお持ちでない場合は、今すぐダウンロードしてインストールすることをお勧めします。ソースコードはwiringPiを使用しており、アプリケーションをコンパイルする前にインストールする必要があります。
RaspberryPiでコードをコンパイルするコマンドは次のとおりです。
gcc -oDht11_Speed Dht11_Speed.c -L / usr / local / lib -lwiringPi -std =c99 -lm
アプリケーションを実行するには、次のコマンドを入力します。
sudo ./Dht11_Speed 1000 10
ここで、1000は1000ミリ秒(1秒)の遅延を指定し、10は読み取るサンプルの数です。
ビデオでは、コードをコピーする方法と、Raspbianを実行しているRaspberryPiでコードをコンパイルする方法について詳しく説明します。 Raspberry PiにRaspbianをロードする方法については、https://www.raspberrypi.org/downloads/raspbian/にアクセスしてください。
ビデオ
以下のビデオは、アプリケーションのデモンストレーションです:
最高の品質を得るには、シアターモードを使用してYouTubeでこのビデオをご覧ください。
コード
Visual Studio 2015 C#/ C ++ソースコード
https://github.com/porrey/dht.git 回路図
Dht11_RPi2.fzz 



製造プロセス