LoginSignup
0
0

More than 3 years have passed since last update.

RubyエンジニアがArduinoで電子工作やってみた~温湿度センサ編~

Last updated at Posted at 2020-04-03

はじめに

皆様、こんにちは!
Toretaのサーバサイドエンジニア兼佐久間まゆちゃんのプロデューサーの@hiroki_tanakaです!
最近、ひょろんなことから電子工作を始めたので、作成したものを整理・紹介したく、記事を書きました。
RubyエンジニアがArduinoで電子工作やってみた~超音波距離センサ編~の続編で、今回は温湿度センサを使いました。

使ったセンサ

  • DHT11

DHT11は温度と湿度をカリブレーション済みの状態で出荷されているセンサーです。信号はデジタル信号となっています。
温度は1°C程度の誤差、湿度は4%程度の誤差で測定可能ということになってます。
より高性能なDHT22もあります。

image.png

配線

  • + (DHT11) -> +5V (Arduino)
  • S (DHT11) -> Digital_Pin (Arduino)
  • - (DHT11) -> GROUND (Arduino)

作ったもの

温湿度から室内の不快指数を算出し、ディスプレイに表示します。
そして、不快指数に応じてLEDが灯ったりブザーが鳴ります。
また、スマホ用モバイルバッテリーと接続して持ち運べるようにしました。

不快指数というのは、下記の通りです。
不快指数 = 0.81*温度 + 0.01*湿度 × ( 0.99*温度 − 14.3 ) + 46.3
60より小さい:寒いと感じる→青色LEDが灯る。
61〜74:普通→黄色LEDが灯る。
75より大きい:暑いと感じる→赤色LEDが灯る&ブザーが鳴る。
参考:https://ja.wikipedia.org/wiki/不快指数

image.png

ソースコード

DHT11を操作するためにはライブラリを使用し、includeします。
DHT-sensor-library:https://github.com/adafruit/DHT-sensor-library


#include <LiquidCrystal.h>
#include <dht.h>                  
dht DHT;
const int dht11_data = 6;     
int temp=0;
int hum=0;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int redLed = 10;
int greenLed = 9;
int blueLed = 8;
int buzzer = 7;

void setup() {
  lcd.begin(16,2);
  lcd.print("Welcome to");
  lcd.setCursor(0,1);
  lcd.print("Discomfort Check");
  delay(2000);
  lcd.clear();
  pinMode(redLed, OUTPUT);
  pinMode(greenLed, OUTPUT);
  pinMode(blueLed, OUTPUT);
  pinMode(buzzer, OUTPUT);
}

void loop() { 
  DHT.read(dht11_data);
  temp=DHT.temperature;
  hum=DHT.humidity;
  float discomfortIndex = 0.81 * temp + 0.01 * hum * (0.99 * temp - 14.3) + 46.3;

  lcd.clear();
  lcd.print("H=");
  lcd.print(hum);
  lcd.print("%");
  lcd.setCursor(6,0);
  lcd.print("T=");           
  lcd.print(temp);
  lcd.write(0xDF);
  lcd.print("C");

  lcd.setCursor(0,1) ;
  lcd.print("Discomfort=");      
  lcd.print(discomfortIndex);

  if (discomfortIndex >= 75) {
   digitalWrite(redLed, HIGH); 
   digitalWrite(greenLed, LOW);
   digitalWrite(blueLed, LOW);
   digitalWrite(buzzer, HIGH);
  } else if(discomfortIndex >= 60 && discomfortIndex < 75) {
   digitalWrite(redLed, LOW); 
   digitalWrite(greenLed, HIGH);
   digitalWrite(blueLed, LOW);
   digitalWrite(buzzer, LOW);
  } else {
   digitalWrite(redLed, LOW); 
   digitalWrite(greenLed, LOW);
   digitalWrite(blueLed, HIGH);   
   digitalWrite(buzzer, LOW); 
  }
  delay(1000);
}

終わりに

より様々なセンサを使用して、実生活で使用できるハードウェアを作成したいです!
次回は人感センサをしようと思います(∩゚Д゚)∩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0