Quantcast
Channel: ぼくのデジタルライフ
Viewing all articles
Browse latest Browse all 33

DHT11とESP8266で不快指数によってLEDの色を変えてみる

$
0
0

f:id:computer-life:20190504230625p:plain

用意したもの

用意したものはこんな感じ。

ESP-WROOM-02開発ボード

今回も秋月の「ESP-WROOM-02開発ボード」を使います。

DHT11

気温と湿度が測れるセンサーです。300円ぐらいと安価に入手できます。気温は0~50℃までしか測れないらしい。 DHT11のプルアップ用に10KΩの抵抗を用意しておきました。

PL9823-F5

今回は、5mmのものを買いましたが8mmのものもあるようです。マイコン内蔵で信号線を1本つなぐだけで色を制御できるので、ケーブルがごちゃごちゃしなくて済みそう。Arduino用のライブラリが用意されていて手軽に扱えます。

データシートに「外部コンポーネントが不要」みたいなことが書かれていたので、気になって調べてみたところ、こちらのブログがヒット。参考にさせていただきました。

play-arduino.seesaa.net

抵抗はなくても良さそうなので、今回は無しにしました。不安な方は適当な抵抗を用意してください。

回路図

最初に出てた写真の通りだとケーブルがごちゃごちゃしてて、わかりにくくなってしまったので回路図を変更。 この通りに組むと後述のプログラムがそのまま動くようになってます。

DHT11はVDDとDATEのピンを10KΩの抵抗でプルアップしています。

PL9823のつなぎ方はデータシートを参考にしてください。

http://akizukidenshi.com/download/ds/rita/pl9823.pdf

回路図

プログラム

ここでは以下のライブラリをつかいました。まずはインストールしておきましょう。

不快指数の算出に関してはこちらを参考にさせていただきました。 qiita.comja.wikipedia.org

今回、LEDの色は以下のようにしてみました。

不快指数体感RGB
〜55寒い101, 0, 203
55〜60肌寒い0, 50, 203
60〜65 何も感じない0, 152, 203
65〜70 快い0, 203, 152
70〜75 暑くない152, 203, 0
75〜80 やや暑い203, 152, 0
80〜85 暑くて汗が出る203, 101, 0
85〜 暑くてたまらない203, 0, 0

例えば気温25℃、湿度65%だったときの不快指数は73.3。「暑くない」に該当するのでLEDが黄緑色っぽく光るはずです。

写真だと白飛びしちゃってわかりにくいですね。

ソースコード

#include <DHT.h>#include <Adafruit_NeoPixel.h>#define DHTPIN 14//DHT11のピン番号#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

#define LEDPIN 2//LEDののピン番号#define NUMPIXELS 1//LEDの個数
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, LEDPIN, NEO_GRB + NEO_KHZ800);

void setup()
{
  Serial.begin(115200);

  pixels.begin(); //NeoPixel開始
  pixels.setBrightness(255); //LEDの輝度を指定
  dht.begin();  //DHT11開始
}

void loop()
{
  float humi = dht.readHumidity();  //湿度を取得float temp = dht.readTemperature();  //気温を取得int   index = 0;  // 不快指数の小数点以下切り捨て
  index = 0.81 * temp + 0.01 * humi * (0.99 * temp - 14.3) + 46.3;  //不快指数の算出//取得したデータをシリアルでプリント
  Serial.print("Humidity:  ");
  Serial.print(humi);
  Serial.println("%\t");
  Serial.print("Temperature:  ");
  Serial.print(temp);
  Serial.println(" *C");
  Serial.print("Discomfort Index: ");
  Serial.println(index);

  //LED表示for (int i = 0; i < NUMPIXELS; i++) {
    if (index <= 54) {
      pixels.setPixelColor(i, pixels.Color(101, 0, 203));
    }
    elseif (55<= index && index <= 59) {
      pixels.setPixelColor(i, pixels.Color(0, 50, 203));
    }
    elseif (60<= index && index <= 64) {
      pixels.setPixelColor(i, pixels.Color(0, 152, 203));
    }
    elseif (65<= index && index <= 69) {
      pixels.setPixelColor(i, pixels.Color(0, 203, 152));
    }
    elseif (70<= index && index <= 74) {
      pixels.setPixelColor(i, pixels.Color(152, 203, 0));
    }
    elseif (75<= index && index <= 79) {
      pixels.setPixelColor(i, pixels.Color(203, 152, 0));
    }
    elseif (80<= index && index <= 84) {
      pixels.setPixelColor(i, pixels.Color(203, 101, 0));
    }
    else {
      pixels.setPixelColor(i, pixels.Color(203, 0, 0));
    }
    pixels.show(); //色を出力
  }
  delay(5000); //5秒おきにチェック
}

Viewing all articles
Browse latest Browse all 33

Trending Articles