스마트 디바이스 실습 5.1주차

ESP32 온습도센서(DHT 11)와 액정 디스플레이(LCD)

한세대학교 컴퓨터공학과 22학번 김선영


실습 보고서

실습 목차
  1. 온습도를 Serial Monitor에 출력하기
  2. LCD에 Hello world 출력하기
  3. 온습도를 LCD에 출력하기

온습도 센서 DHT의 작동 원리

습도
  1. 아두이노에서 사용되는 온습도센서는 디지털 혹은 아날로그 신호를 출력하는 DHT(Digital Humidity and Temperature) 센서
  2. 온습도센서에서 아날로그 출력 신호는 습도와 온도 값으로 구성됩니다. 습도 값은 전기 저항을 이용하여 측정됨.
  3. 습도가 높을수록 전기 저항이 낮아지며, 습도가 낮을수록 전기 저항이 높아짐.
  4. 따라서 습도 측정 센서에서는 전기 저항값에 비례하는 아날로그 출력 신호를 생성함.

온도
  1. 온도 값은 일반적으로 온도 계수가 있는 NTC(음극온도계) 센서를 사용하여 측정됨.
  2. 센서는 반도체 재료로 만들어지며, 온도가 올라가면 전기 저항이 증가함
  3. 이러한 방식으로 온도 측정 센서에서는 온도에 대한 아날로그 출력 신호를 생성함.
  4. 측정된 아날로그 신호는 디지털로 변환하여 아두이노 보드로 전달함.
  5. 이렇게 계산된 값은 사용자가 원하는 방식으로 표시하거나 다른 장치와 통신하는 데 사용될 수 있음

DHT 11 핀구조
  1. GND 핀: GND 핀은 전기 신호의 0V 기준점으로 사용되는 접지 핀. 전기 회로를 구성할 때는 GND 핀을 먼저 연결하고, 나머지 전기적 요소들도 GND 핀과 연결함.
  2. DATA 핀: 온습도 센서의 DATA 핀은 디지털 데이터 핀으로, 센서에서 측정된 온습도 값을 디지털 신호로 출력함.
  3. VCC 핀: 온습도 센서의 VCC 핀은 센서가 동작하는 데 필요한 전원 공급 핀. 3.3V 또는 5V의 전압을 필요로 함.
[참고 이미지]


실습1 : 온습도 Serial Monitor 출력

준비물 : 온습도 센서, ESP32, 브래드보드, 점퍼선 3개

설계도
순서
  1. DHT 11 온습도 센서를 양극+에 연결함.
  2. 점퍼선을 GND핀 - GND, DATA핀 - PIN 13, VCC핀 - 3.3V에 연결함.
  3. 코드를 컴파일하고 아두이노 보드에 업로드하여 실행한 후, 아두이노에서 시리얼 모니터 창을 확인함. 출력: Temp: xx.x, xx.x *C

코드

    #include <DHT.h>

    #define DHTPIN 13     // DHT11 센서 핀 번호
    #define DHTTYPE DHT11 // DHT11 센서 타입설정
    DHT dht(DHTPIN, DHT11);
    
    void setup() {
        Serial.begin(115200);   // 시리얼 통신 시작
        dht.begin();          // DHT11 센서 초기화
    }
    
    void loop() {
        Serial.print(F("Hum: "));
        Serial.print(dht.readHumidity());
        Serial.print(F(" % "));
        Serial.print(F("Temp: "));
        Serial.print(dht.readTemperature());
        Serial.println(F(" *C"));
        delay(2000);
    }

                                    

사용된 함수
  1. Serial.begin(115200): 시리얼 통신을 시작함. 인수 115200은 시리얼 통신 속도를 나타냄.
  2. dht.begin(): DHT11 온습도 센서를 초기화함.
  3. Serial.print(): 시리얼 모니터에 값을 출력함.
  4. dht.readHumidity(): DHT11 센서에서 현재 습도 값을 읽어옴.
  5. dht.readTemperature(): DHT11 센서에서 현재 온도 값을 읽어옴.
  6. delay(2000): 2초 동안 코드 실행을 지연시킴.
실행결과

실행 결과


실습2 : LCD로 Hello world 출력하기

준비물 : LCD, ESP32, 브래드보드, 점퍼선 4개

설계도
순서
  1. 아두이노 라이브러리에서 LiquidCrystal by Arduino,Adafruit를 설치함.
  2. LCD에 연결한 점퍼선(암-수)을 GND핀 - GND, VCC핀 - 5V, SDA핀 - PIN 21, SCL핀 - PIN 22에 연결.
  3. 코드를 컴파일하고 아두이노 보드에 업로드하여 실행한 후, LCD 패널에 "Hello world"가 출력되는지 확인함.

코드


    #include <LiquidCrystal_I2C.h>

    int lcdColumns = 16;
    int lcdRows = 2;
    
    LiquidCrystal_I2C lcd (0x27, lcdColumns, lcdRows); //0x27 or 0x3F
    
    void setup(){
        lcd.init();
        lcd.backlight();
    }
    
    void loop(){
        lcd.setCursor(0,0);
        lcd.print("Hello, World!");
        delay(1000);
        lcd.clear();
        lcd.setCursor(0,1);
        lcd.print("Hello, World!");
        delay(1000);
        lcd.clear();
    }

                                    


실습3 : LCD로 Hello world 출력하기

준비물 : LCD, 온습도센서, ESP32, 브래드보드, 점퍼선 7개

설계도
순서
  1. DHT 11 온습도 센서를 빨간 레일에 연결. - 브래드보드의 파란레일과 빨간레일: 전원 공급과 접지(Ground)를 위한 연결선
  2. 점퍼선을 GND핀 - GND, DATA핀 - PIN 13, VCC핀 - 3.3V에 연결.
  3. 아두이노 라이브러리에서 LiquidCrystal by Arduino,Adafruit를 설치.
  4. LCD에 연결한 점퍼선(암-수)을 GND핀 - GND, VCC핀 - 5V, SDA핀 - PIN 21, SCL핀 - PIN 22에 연결.
  5. 코드를 컴파일하고 아두이노 보드에 업로드하여 실행한 후, LCD 패널에 온습도가 출력되는지 확인. 출력: Temp: xx.x, xx.x *C

코드
    
    
    #include "DHT.h"
    #define DHTPIN 13
    #define DHTTYPE DHT11
    DHT dht(DHTPIN, DHTTYPE);
    
    #include <LiquidCrystal_I2C.h>
    #include <Wire.h>
    unsigned long delayTime;
    
    int lcdColumns = 16;
    int lcdRows = 2;
    LiquidCrystal_I2C lcd(0x27, lcdColumns, lcdRows);
    
    void setup(){
        Serial.begin(115200);
        lcd.init();
        lcd.backlight();
        dht.begin();
    }
    
    void loop(){
        delay(1000);
        printValues();
    }
    
    void printValues(){
        lcd.setCursor(0,0);
        lcd.print(F("Hum: "));
        lcd.print(dht.readHumidity());
        lcd.print(F(" %"));
        lcd.setCursor(0,1);
        lcd.print(F("Temp: "));
        lcd.print(dht.readTemperature());
        lcd.print(F(" *C "));
        delay(2000);
        lcd.clear();
    }
    
                                        

실행 결과


실습 과정에서의 문제 해결

누전 발생

연결할 핀이 늘어날수록 점퍼선을 브래드보드에 잘못 연결시키는 경우가 발생함.

- 첫번째로 핀번호를 잘못 연결했을때 아두이노 output에서 error가 발생하고, 두번째로 브래드보드 습도센서에서 누전됬을때 나는 탄 냄새가 났음.

- 이때 재빨리 USB를 뽑고 누전되서 상승한 센서의 온도를 식힘.

- 미리 그려놓은 설계도를 보면서 다시한번 올바르게 점퍼선을 연결했나 점검한 뒤 컴파일 해줌.

- 이렇게 하면 실습시 발생하는 실수를 줄일 수 있고 누전되는 결과를 막을 수 있음.


실습을 통해 느낀점

- 아두이노의 온습도센서는 DHT 센서를 사용하여 온도와 습도 값을 측정하는데, 이때 온도는 NTC 센서를 이용하여 아날로그 출력 신호로 전달되며, 습도는 전기 저항을 이용하여 아날로그 출력 신호를 생성한다는 것을 배움.

- 실습을 진행하면서 하드웨어 제작에서는 실수할 가능성이 있다는 점을 알게 되었고 전기적인 안전을 고려해야 한다는 것을 알게 됨.

- 하드웨어를 제작할 때에는 설계도와 함께 점검을 하여 안전하고 정확한 결과물을 만들 수 있도록 노력해야 한다는 것을 느낌.


Previous   /   Next