5.1 ESP32 온습도센서(DHT 11)와 액정 디스플레이(LCD) - sunbang123/Smart_device GitHub Wiki

실습 보고서

실습 목차

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

온습도 센서 DHT의 작동 원리

  • 아두이노에서 사용되는 온습도센서는 디지털 혹은 아날로그 신호를 출력하는 DHT(Digital Humidity and Temperature) 센서
  • 온습도센서에서 아날로그 출력 신호는 습도와 온도 값으로 구성됩니다. 습도 값은 전기 저항을 이용하여 측정됨.
  • 습도가 높을수록 전기 저항이 낮아지며, 습도가 낮을수록 전기 저항이 높아짐.
  • 따라서 습도 측정 센서에서는 전기 저항값에 비례하는 아날로그 출력 신호를 생성함.
  • 온도 값은 일반적으로 온도 계수가 있는 NTC(음극온도계) 센서를 사용하여 측정됨.
  • 센서는 반도체 재료로 만들어지며, 온도가 올라가면 전기 저항이 증가함
  • NTC 센서는 온도가 올라가면 전기 저항이 감소함.
  • 이러한 방식으로 온도 측정 센서에서는 온도에 대한 아날로그 출력 신호를 생성함.
  • 측정된 아날로그 신호는 디지털로 변환하여 아두이노 보드로 전달함.
  • 이렇게 계산된 값은 사용자가 원하는 방식으로 표시하거나 다른 장치와 통신하는 데 사용될 수 있음

DHT 11 핀구조

  • GND 핀: GND 핀은 전기 신호의 0V 기준점으로 사용되는 접지 핀. 전기 회로를 구성할 때는 GND 핀을 먼저 연결하고, 나머지 전기적 요소들도 GND 핀과 연결함.
  • DATA 핀: 온습도 센서의 DATA 핀은 디지털 데이터 핀으로, 센서에서 측정된 온습도 값을 디지털 신호로 출력함.
  • 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);
}

사용된 함수

  • Serial.begin(115200): 시리얼 통신을 시작함. 인수 115200은 시리얼 통신 속도를 나타냄.
  • dht.begin(): DHT11 온습도 센서를 초기화함.
  • Serial.print(): 시리얼 모니터에 값을 출력함.
  • dht.readHumidity(): DHT11 센서에서 현재 습도 값을 읽어옴.
  • dht.readTemperature(): DHT11 센서에서 현재 온도 값을 읽어옴.
  • 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();
}

실행 결과

KakaoTalk_20230405_140326682.mp4

실습3 : 온습도 LCD로 출력하기

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

설계도

순서

  1. DHT 11 온습도 센서를 빨간 레일에 연결.
  • 브래드보드의 파란레일과 빨간레일: 전원 공급과 접지(Ground)를 위한 연결선
  1. 점퍼선을 GND핀 - GND, DATA핀 - PIN 13, VCC핀 - 3.3V에 연결.
  2. 아두이노 라이브러리에서 LiquidCrystal by Arduino,Adafruit를 설치.
  3. LCD에 연결한 점퍼선(암-수)을 GND핀 - GND, VCC핀 - 5V, SDA핀 - PIN 21, SCL핀 - PIN 22에 연결.
  4. 코드를 컴파일하고 아두이노 보드에 업로드하여 실행한 후, 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();
}

실행 결과

KakaoTalk_20230405_145643052.mp4

실습 과정에서의 문제 해결

누전 발생

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

  • 첫번째로 핀번호를 잘못 연결했을때 아두이노 output에서 error가 발생하고, 두번째로 브래드보드 습도센서에서 누전됬을때 나는 탄 냄새가 났음.
  • 이때 재빨리 USB를 뽑고 누전되서 상승한 센서의 온도를 식힘.
  • 미리 그려놓은 설계도를 보면서 다시한번 올바르게 점퍼선을 연결했나 점검한 뒤 컴파일 해줌.
  • 이렇게 하면 실습시 발생하는 실수를 줄일 수 있고 누전되는 결과를 막을 수 있음.

실습을 통해 느낀점

  • 아두이노의 온습도센서는 DHT 센서를 사용하여 온도와 습도 값을 측정하는데, 이때 온도는 NTC 센서를 이용하여 아날로그 출력 신호로 전달되며, 습도는 전기 저항을 이용하여 아날로그 출력 신호를 생성한다는 것을 배움.
  • 실습을 진행하면서 하드웨어 제작에서는 실수할 가능성이 있다는 점을 알게 되었고 전기적인 안전을 고려해야 한다는 것을 알게 됨.
  • 하드웨어를 제작할 때에는 설계도와 함께 점검을 하여 안전하고 정확한 결과물을 만들 수 있도록 노력해야 한다는 것을 느낌.
⚠️ **GitHub.com Fallback** ⚠️