Ruby 엔지니어가 Arduino에서 전자 공작 해 보았습니다 ~ 온습도 센서 편 ~

소개



여러분, 안녕하세요!
Toreta의 서버 사이드 엔지니어 겸 사쿠마 마유의 프로듀서 @ 히로키 _ 타나카입니다!
최근, 어려운 일로부터 전자 공작을 시작했기 때문에, 작성한 것을 정리·소개하고 싶고, 기사를 썼습니다.
Ruby 엔지니어가 Arduino에서 전자 공작 해봤다 ~ 초음파 거리 센서 편 ~의 속편에서 이번에는 온습도 센서를 사용했습니다.

사용한 센서


  • DHT11

  • DHT11 은 온도와 습도를 캘리브레이션된 상태로 출하된 센서입니다. 신호는 디지털 신호입니다.
    온도는 1℃ 정도의 오차, 습도는 4% 정도의 오차로 측정 가능하다고 되어 있습니다.
    더 고성능 DHT22도 있습니다.



    배선


  • + (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://ko.wikipedia.org/wiki/불쾌지수



    소스 코드



    DHT11을 조작하기 위해서 라이브러리를 사용해, include 합니다.
    DHT-sensor-library: htps : // 기주 b. 코 m / 아다 f 루이 t / DHT - 전구 r-b 등 ry
    
    #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);
    }
    

    끝에



    보다 다양한 센서를 사용하여 실생활에서 사용할 수 있는 하드웨어를 만들고 싶습니다!
    다음 번은 인감 센서를 하려고 합니다(∩゚Д゚)∩

    좋은 웹페이지 즐겨찾기