2014년 2월 9일 일요일

온습도계(DHT-11) - 블루투스를 이용한 자동차 키트 + 안드로이드 컨트롤러


---------------------------------------------------------------------------------

온습도계 모델명 dht-11입니다. 많이 쓰는 것 같더군요.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#define dht11_pin 54 // 아두이노 2560 Mega에서 A0(Analog 0)핀의 번호입니다.

........
long cm, inch;  // cm, inch를 long 타입으로 전역변수 선언

byte read_dht11_dat()
// 데이터 읽어오기 함수 선언  센서에서는 8bit씩 데이터가 전송됩니다. 총 40bit
{
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while (!digitalRead(dht11_pin));
    delayMicroseconds(30);
    if (digitalRead(dht11_pin) != 0 )
      bitSet(result, 7-i);
    while (digitalRead(dht11_pin));
  }
  return result;
}

void setup() { //핀 초기화
  pinMode(dht11_pin, OUTPUT);
  digitalWrite(dht11_pin, HIGH);
}

void loop(){
    byte dht11_dat[5];
    byte dht11_in;
    byte i;// start condition
    digitalWrite(dht11_pin, LOW);
    delay(10);
    digitalWrite(dht11_pin, HIGH);
    delayMicroseconds(1);
    pinMode(dht11_pin, INPUT);
    delayMicroseconds(40);
    if (digitalRead(dht11_pin))
    {
      Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW
      delay(1000);
      return;
    }//dht 연결 확인 및 오류 출력
    delayMicroseconds(80);
    if (!digitalRead(dht11_pin))
    {
      Serial.println("dht11 start condition 2 not met"); //wair for second response signal:HIGH
      return;
    }//dht 연결 확인 및 오류 출력
    delayMicroseconds(80);// now ready for data reception
    for (i=0; i<5; i++)
    {
      dht11_dat[i] = read_dht11_dat();
    } //위의 함수 호출
    pinMode(dht11_pin, OUTPUT);
    digitalWrite(dht11_pin, HIGH);
    byte dht11_check_sum = dht11_dat[0]+dht11_dat[2];// check check_sum
    if(dht11_dat[4]!= dht11_check_sum)
    {
      Serial.println("DHT11 checksum error");
    }
}

dht-11 온습도 센서
dht11.pdf
사진에 보시면 VCC,GND,S 3개의 단자가 있습니다. 센서에 대한 설명이 나와있는 pdf를 읽어보면
VCC :허용전력이 3~5.5V인만큼 아두이노의 3.3V나 5V 출력 단자에 연결을 하고
GND는GND에 그리고
Signal단자는 자신이 설정할(한) 단자에 연결을 해주시면 됩니다. 저는 A0에 연결하였습니다.

아두이노에서의 코드입니다.  인터넷에 검색하면 많이 나오는 흔한 코드입니다.



여기에서 2번째 줄이 dht-11를 이용한 센서값입니다. 습도와 온도를 줄력을 하는 것을 알수 있습니다. 꽤 잘 맞는거 같더군요

4번째 줄의 소수점까지 나오는 온도는 뒤에 소개할 MPU 6050의 온도 측정값입니다.

댓글 없음:

댓글 쓰기