工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

コンポーネントと用品

DHT11温湿度センサー(4ピン) × 1
Raspberry Pi 2 Model B × 1
Arduino UNO × 1
オス-オスジャンパーワイヤー × 3
ブレッドボード(汎用) × 1
4.7kΩ抵抗 × 1
Cobblerブレークアウトキット × 1

アプリとオンラインサービス

このプロジェクトについて

はじめに

DHT11は4ピン(1ピン未使用)の温湿度センサーで、相対湿度20%〜90%、温度0〜50℃を測定可能です。動作電圧は3〜5.5V DCで、独自のOneWireプロトコルで通信します。このプロトコルはデータ取得のために非常に正確なタイミングを必要とします。LOW/HIGHビットは、信号がHIGHである時間の長さで符号化されます。測定にかかる総時間は最大23.4msで、これにはデータ転送開始に必要な18msの遅延と、最大5.4msのデータウィンドウが含まれます。個々の信号は20μs〜80μsの長さです。

背景

Windows 10 IoT Coreが利用可能になったとき、Raspberry Pi 2とDHT11センサーでC#を試しましたが、うまくいきませんでした。Windows 10 IoT CoreでのC#は、少なくとも現時点では十分な速度が出ないのが問題です。

Microsoftフォーラムに投稿し、同じ問題を抱える他の開発者とやり取りしました。最終的に、Windows 10 IoT CoreでのOneWireプロトコルについてのMicrosoftの回答を見つけました。その後、DHT11をサンプルセンサーとして、C++でWindows 10 IoT Core上でのOneWireプロトコルサポートのサンプルがMicrosoftから投稿されているのを発見しました。これをC#に移植する機会と捉えました。

このプロジェクトは、そのサンプルをC#で使えるライブラリにするものです。この人気センサーをWindows 10 IoT Coreで使えるようにするライブラリを書いた方に感謝し、このライブラリでさらに役立つものになればと思います。

ライブラリ

作成したライブラリは、Microsoftが公開したコードのシンプルなリファクタリングなので、センサー読み取りを実現した作業のクレジットは主張しません。

ライブラリは、Sensors.Dht名前空間にDht11というシンプルなクラスを提供します。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;
    double Temperature;
    double Humidity;
    int RetryCount;
};

観察結果

C++では動作しますが、それでも毎回読み取りが成功するわけではありません。そのため、クラスにリトライオプションが必要です(これはMicrosoftのサンプルにも含まれています)。他のプラットフォームと比較して性能を見てみようと思いました。Raspberry Pi 2でRaspbianを動かし、Arduino Unoでもコードを試しました。両方のコードはGitHubリポジトリに含めています。

このプロジェクトに含まれるビデオで、各プラットフォームの出力をデモし、比較しています。

始め方

Raspberry Pi 2用回路の組み立て

ページ下部の図を参照しながら回路を組み立ててください(ワイヤーの色は任意ですが、組み立て時に分かりやすくするために選んでいます)。

Arduino用回路の組み立て

ページ下部の図を参照しながら回路を組み立ててください。

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応
DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応
DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応
DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

Raspberry Pi用アプリケーションの起動

Debug、ARM構成、Remote Machineを選択。プロジェクトを右クリックし、Property → Debugタブをクリック。Remote machineフィールドにRaspberry Pi 2のIPアドレスを入力し、Use authenticationのチェックを外します。

F5を押すと、アプリケーションがデバイスにデプロイされます(初回は数分かかる場合があります)。

Arduino用アプリケーションの起動

このプロジェクトのスケッチはGitHubのDht11_Speedファイルにあります。Arduino IDEでスケッチを開き、Arduinoにアップロード(Ctrl+U)、シリアルモニタを開始(Ctrl+Shift+M)。

やり方が不明な場合や初心者の方は、下のビデオでデモしています。

Raspbian用アプリケーションの起動

Raspberry Pi用のCコードは、このプロジェクトのGitHubでDht11.cファイルとして公開しています。ソースをRaspberry Piにコピーしてそこでコンパイルします。ファイルコピーにはWinSCPを使うのが好きです。持っていない場合はダウンロードしてインストールをお勧めします。ソースコードはwiringPiを使用するため、コンパイル前にインストールが必要です。

Raspberry Piでのコンパイルコマンド:

gcc -o Dht11_Speed Dht11_Speed.c -L/usr/local/lib -lwiringPi -std=c99 -lm

実行コマンド:

sudo ./Dht11_Speed 1000 10

ここで1000は1000ms(1秒)の遅延、10は読み取りサンプル数を指定します。

ビデオで、コードのコピー方法とRaspbian上でのコンパイル方法を詳しくデモしています。Raspbianのインストール方法はこちら。

ビデオ

下のビデオはアプリケーションのデモです。YouTubeでシアターモードで見ると最高画質で見られます。

コード

Visual Studio 2015 C#/C++ ソースコード(GitHub)

回路図

Dht11_RPi2.fzz

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

Dht11_Arduino.fzz

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

DHT11/DHT22温湿度センサーキット - Raspberry Pi & Arduino対応

製造プロセス

  1. 5ドルI2C温度センサーで作るRaspberry Pi温度ロガー
  2. Raspberry PiでTMP006赤外線温度センサーを使う – Pythonライブラリとセットアップガイド
  3. Raspberry PiとPythonでリモート温度センサーを構築 – ステップバイステップガイド
  4. DS1820ワンワイヤー温度センサーをGPIOでRaspberry Piに接続する方法
  5. DS18B20ワンワイヤーデジタル温度計をRaspberry Piに接続 - ステップバイステップガイド
  6. Raspberry PiとDS18B20でマルチセンサー温度・光監視システムを構築
  7. Raspberry Pi、MCP9808、InfluxDB、Grafanaで作る家庭温度モニター
  8. Raspberry Pi 3とDHT11センサーを接続し、ThingsIo.aiクラウドへデータ送信
  9. 色感度プロセス向け高精度赤外線温度センシング
  10. 高精度ベアリング温度センサー:正確な検知と監視
  11. DS18B20温度センサー:産業・コンシューマー向け高精度1-Wireデジタル温度計