?>

Hard Copy World

HCW

Arduino beginner

Home > Learning >

Arduino beginner

아두이노 기초 강좌 9 – 온습도 센서

페이지 정보

작성자 하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일14-10-22 18:01 조회17,067회 댓글3건

본문

아두이노 기초 강좌는 아두이노를 처음 접하시는 전자분야 비 전공자를 위한 강좌입니다. 이해를 위해서는 간단한 프로그래밍 지식이 필요할 수 있습니다. 프로그래밍이 처음이라면 [아두이노 프로그래밍 기초] 강좌를 먼저 읽으시길 권해 드립니다.

===============================================================

 

이번 회에서도 간단히 핀 하나로 통신할 수 있는 센서를 사용해보겠습니다. 그 중에서도 특히 활용도가 높은 온습도 센서의 사용법입니다.

 

1. DHT-11 온습도 센서

 

일반적으로 많이 사용하는 온습도 센서 모듈은 DHT-11 모듈인데 2가지 종류가 있습니다.

dht11sensor1-e1326310701210

DHT11_sensor_module

위 모듈이 인터페이스 보드가 없는 제품이고 아래 모듈이 인터페이스 보드가 달려있는 제품입니다. 위 제품은 5K ohm 저항을 거쳐 아두이노의 디지털 핀에 연결해줘야 하고, 아래 제품은 바로 디지털 핀에 연결해서 사용이 가능합니다. 인터페이스 보드가 없는 제품의 경우는 아래 링크를 참고해서 연결하시면 됩니다. 여기서는 인터페이스 보드가 있는 제품을 기준으로 설명하겠습니다.

 http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_sensor&wr_id=3&page=2

 

 

2. 연결방법

 

DHT-11 에 보면 (+), (-), (S) 세 개의 핀이 있을 겁니다. 이 중 +, - 가 전원핀이고 (S) 핀이 데이터 라인입니다. 아래와 같이 연결합니다.

(아두이노 --> DHT-11) :  5V --> (+),  GND --> (-),  D2 --> (S) 

 

데이터 라인을 통해 아두이노 2번 핀으로 계속 전달되는 온습도 데이터 값은 아래 형식으로 들어옵니다.

Data format: [8bit integral RH data] + [8bit decimal RH data] + [8bit integral T data] + [8bit decimal T data] + [8bit check sum]

굳이 이 형식대로 데이터를 직접 읽어서 처리할 필요는 없습니다. DHT-11용 라이브러리에서 알아서 처리해주기 때문에 보다 간편하게 사용할 수 있습니다. 대신 먼저 라이브러리를 설치해야겠죠.

아래 링크에서 라이브러리를 다운로드 받아 [아두이노 설치폴더 / libraries] 폴더에 [DHT11] 폴더를 만들고 그 안에 압축을 풉니다. 이제 아두이노 개발환경을 재시작하면 라이브러리를 사용할 수 있습니다.

DHT11 아두이노용 라이브러리 2.05 KB

Download

 

 

3. 소스코드 (스케치)

 

#include 
int pin=2;    // 연결한 아두이노 디지털 핀 번호
DHT11 dht11(pin); 

void setup()
{
   Serial.begin(9600);
}

void loop()
{
  int err;    // result code
  float temp, humi;   // temperature, humidity

  if((err=dht11.read(humi, temp))==0)
  {
    Serial.print("temperature:");
    Serial.print(temp);
    Serial.print(" humidity:");
    Serial.print(humi);
    Serial.println();
  }
  else
  {
    Serial.println();
    Serial.print("Error No :");
    Serial.print(err);
    Serial.println();    
  }
  delay(DHT11_RETRY_DELAY); //delay for reread
}

 

소스코드는 간단합니다. 온습도 센서에서 온도와 습도 값을 읽은 후, Serial 출력을 해줘서 Serial Monitor를 통해 확인이 가능하도록 한겁니다.

먼저 라이브러리를 사용하겠다고 선언하고, 쓸 준비를 해야겠죠. 소스 최상단 아래 코드들이 그 부분입니다.

#include 
int pin=2;    // 연결한 아두이노 디지털 핀 번호
DHT11 dht11(pin);

 아두이노 2번 핀에 연결했기 때문에 2번 핀으로 DHT11 라이브러리를 사용할 준비를 한겁니다.

setup() 함수에서는 Serial 출력을 위해 Serial.begin(9600); 코드만을 실행합니다.

 

이제 loop() 함수 안에서 온습도 센서의 값을 읽고 Serial 출력하는 코드가 무한반복 됩니다. 먼저 err, temp, humi 변수가 선언되어 있습니다. err 는 라이브러리를 통해 온습도 센서값을 읽는데 문제가 없는지 결과를 받기위해 사용합니다. temp, humi 는 각각 온도, 습도를 받아오기 위해 선언해뒀습니다.

if((err=dht11.read(humi, temp))==0)

이 부분이 실제 데이터를 읽어오는 부분입니다. dht11.read(humi, temp) 형태로 사용하면 자동으로 humi, temp 변수에 측정된 값을 담아줍니다. 이제부터는 humi, temp 값을 원하는대로 사용하면 됩니다.

그리고 dht11.read() 함수는 데이터를 정확히 읽었는지 결과를 리턴해줍니다. 위 코드에서 결과는 err 변수로 받도록 해뒀죠. 그리고 if 조건문으로 결과가 제대로 왔는지 판별합니다.

결과가 제대로 왔으면 (err 값이 0 일 때) 온도와 습도를 Serial 로 출력해줍니다. 측정에 문제가 있다면 (err 값이 0이 아닐 때) 에러 코드를 출력하고 넘어갑니다.

 

다음 몇 회에 걸쳐서는 다른 모듈 사용법을 알아보고, 여러개의 센서와 모터 등을 묶어 완성품이 나올만한 프로젝트를 진행해 보겠습니다.

 

===============================================================

이 문서는 작성자의 동의없이 개인적인 목적 외의 상업적인 목적으로 활용되어서는 안됩니다.

이 문서의 일부 혹은 전체를 수정, 삭제, 재배포 하여서는 안됩니다.

작성자 : GodsTale (godstale@hotmail.com)  


하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

모든 전통이 한 때는 오해를 면치 못했다. 마찬가지로 모든 아이디어는 한 때는 비웃음을 면치 못했다. -홀브룩 잭슨 ::::: 느닷없이 떠오르는 생각이 가장 귀중한 것이며, 보관해야할 가치가 있는 것이다. -베이컨 ::::: 미리 숙고하면 힘든 일도 그저 실행에 옮기는 순간 쉬워진다. - 로버트 M. 피어식

추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

ASUKAAI님의 댓글

ASUKAAI 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하세요. 아두이노 초보자 입니다.
 질문이있는데요.
왜 err값이 0일때 온도,습도를 serial로 출력하게 한거죠? 그리고 0값이라는 것은 온도,습도가 0이라는 뜻 아닌가요?

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

온습도 센서값이 0 이라는 얘기가 아니라, 온습도 센서에서 보내준 데이터를 읽은 결과가 0이라는 의미입니다. 이때 0은 정상을 의미하는 숫자이고 만약 읽는 과정에서 에러가 있으면 1, 2... 등의 값이 나옵니다.