タグ別アーカイブ: dht11

CIMG2380

温度湿度センサーDHT11を使う

ここでは温度湿度センサーDHT11をRaspberry piで使う手順を説明します.

温度センサーは種類が多く安価なものも見つかるのですが、湿度センサーは手頃な価格のものがなかなか見つからないものです.
そこで今回見つけたのがDHT11 というセンサーです。Google検索で海外のブログで多く見つかるので、メジャーなのかもしれませんね。とりあえず日本で手に入るところとして見つけたのがaitendoでした。
aitendo のDHT11通販ページ
Single wire接続なのでとてもシンプルです。
センサーにはアプリケーションノートどおりにパスコンとプルアップ抵抗を接続します。
スクリーンショット 2013-12-13 18.09.46

CIMG2380
写真のセンサー左端が1ピンです。抵抗は2つ付いていますが、手持ちの10kを二つ使って5kにしてあります。パスコンのセラミックコンデンサーも忘れずに。
Raspberry piには7番ピンであるGPIO4(GPCLK0)とDHT11の信号線を接続します。

制御するプログラムはこちらを参考にしました。
Raspberry Pi Blog

ソースコードを引用します。

#include 
#include 
#include 
#include 
#define MAX_TIME 85
#define DHT11PIN 7
int dht11_val[5]={0,0,0,0,0};

void dht11_read_val()
{
  uint8_t lststate=HIGH;
  uint8_t counter=0;
  uint8_t j=0,i;
  float farenheit;
  for(i=0;i<5;i++)
     dht11_val[i]=0;
  pinMode(DHT11PIN,OUTPUT);
  digitalWrite(DHT11PIN,LOW);
  delay(18);
  digitalWrite(DHT11PIN,HIGH);
  delayMicroseconds(40);
  pinMode(DHT11PIN,INPUT);
  for(i=0;i=4)&&(i%2==0)){
      dht11_val[j/8]<<=1;
      if(counter>16)
        dht11_val[j/8]|=1;
      j++;
    }
  }
  // verify cheksum and print the verified data
  if((j>=40)&&(dht11_val[4]==((dht11_val[0]+dht11_val[1]+dht11_val[2]+dht11_val[3])& 0xFF)))
  {
    farenheit=dht11_val[2]*9./5.+32;
    printf("Humidity = %d.%d %% Temperature = %d.%d *C (%.1f *F)\n",dht11_val[0],dht11_val[1],dht11_val[2],dht11_val[3],farenheit);
  }
  else
    printf("Invalid Data!!\n");
}

int main(void)
{
  printf("Interfacing Temperature and Humidity Sensor (DHT11) With Raspberry Pi\n");
  if(wiringPiSetup()==-1)
    exit(1);
  while(1)
  {
     dht11_read_val();
     delay(3000);
  }
  return 0;
}

dht11.cというファイル名で保存しておきましょう。つぎにgccでコンパイルします。

gcc -o dht11 -lwiringPi

wiringPiは事前にインストールしていますね。無事コンパイルが出来たら実行します
sudo ./dht11

測定結果がコンソールに出力されていきます.
湿度の測定はなかなか難しいものが有りますので、何かと比較といってもそれぞれの誤差を勘案してみる必要が有るでしょう。温度の測定精度ですが、手元の電子温度計と比較した限りではプラスマイナス1度の範囲に入っているようです.科学的な測定でなければ、ある程度の実用範囲の測定結果だと思います.