?>

Hard Copy World

HCW

HardCopy project

Home > Project >

HardCopy project

아날로그형 온습도계 만들기

페이지 정보

작성자 하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일14-11-08 18:37 조회12,177회 댓글2건

첨부파일

본문

아두이노 초급 강좌에 포함된 내용이었던 아날로그형 온습도계 만들기 프로젝트입니다.

간단히 말씀드리면 온습도계 모듈을 이용해서 온도와 습도를 측정하고 서보모터 2개를 이용해서 바늘로 표시해주는 간단한 프로젝트입니다. 회로를 구성해서 하드보드지로 만든 케이스를 씌운 프로토타입은 아래와 같습니다.

20141108_182433_small

간단한 탁상용 온습도계로 이용하기에도 좋고, 교육용 DIY 킷으로 이용할 수도 있습니다.

 

1. 온습도계 만들기 준비

 

사용된 부품은 다음과 같습니다.

아두이노 Nano, 온습도계 모듈 (DHT11), 마이크로 서보모터(sg90)x2, 브레드보드, 연결선 (Dupont cable), 외부전원(5v)

동작구조는…

  • 온습도계 모듈을 통해 온도, 습도 측정
  • 온도, 습도 값을 서보모터를 움직이기 위한 각도 값 (0~180) 으로 변환
  • 서보모터 동작
  • 너무 빠르게 업데이트 되지 않도록 적절히 delay

 

2. 연결방법

 

아두이노와 온습도계의 연결은 아래와 같이 합니다.

1365485508

사용된 DHT11 모듈에 대한 상세정보는 링크를 참고하세요. >>>> DHT11 모듈 상세 페이지 (DHT11 모듈 사용을 위해서는 라이브러리 설치가 필요합니다. 링크에서 라이브러리 다운로드 받아 설치하세요)

 

이제 아두이노와 서보모터의 연결입니다.

테스트를 해보니 아두이노 Nano의 5v 핀에서 뺀 전원으로는 마이크로 서보모터 1개 밖에 돌리질 못했습니다. 마이크로 서보모터는 외부의 5v 전원을 사용해야 합니다. (서보의 GND가 아두이노의 GND에도 연결되도록 해주세요)

servo_with_external_power

서보모터까지 연결이 된 상태라면 이제 준비는 끝났습니다.

 

3. 소스코드 (스케치)

 

코드 작성하기 전 몇 가지 주의할 점이 있습니다.

  • 서보 모터+아두이노용 외부 전원은 5V/1A 이상이 되어야 넉넉할 것 같습니다.
  • 서보모터는 0′, 180′ 근처에서 제대로 동작하지 않는 경우가 많습니다. 종류에 따라 틀리므로 가지고 계신 서보모터의 동작 범위를 확인하고 거기에 맞게 수정해야 겠습니다. 아래 소스에서는 15′ ~ 165′  사이를 움직입니다.
  • 아두이노가 처음 시작될 때 서보모터 2개가 0~180′ 구간을 왕복하도록 해줍니다. 그래서 바늘이 정확한 위치에 있는지 테스트 할 수 있도록 합니다.
  • 더욱 정확하고 넓은 범위의 온습도 측정을 원하신다면 DHT22 모듈을 사용하시면 됩니다.
  • loop 반복함수 마지막에 적절히 delay를 줘서 너무 빠르게 온도 업데이트를 하지 않도록 합니다.

 

#include <DHT11.h>
#include <Servo.h>

int pin=2;    // Temperature sensor data pin
DHT11 dht11(pin);

Servo servo1;
Servo servo2;
int servo1Pin     =  8;    // control pin for servo motor  
int servo2Pin     =  9;    // control pin for servo motor  
int angle1 = -90;
int angle2 = -90;

int turnRate     =  100;  // servo turn rate increment (larger value, faster rate)  
int refreshTime  =  20;   // time (ms) between pulses (50Hz)  
int command;          // raw user input

//=======================================================

void setup()
{
  Serial.begin(9600);
  servo1.attach(servo1Pin);  // Set servo 1 pin
  servo2.attach(servo2Pin);  // Set servo 2 pin
  Serial.println("# Servo attached...");
  
  delay(1000);
  Serial.println("# Check temp servo");
  angle1 = 0;
  moveServo1();
  delay(500);
  angle1 = 180;
  moveServo1();
  delay(500);

  Serial.println("# Check humi servo");
  angle2 = 0;
  moveServo2();
  delay(500);
  angle2 = 180;
  moveServo2();
  delay(500);
}

void loop()
{
    int err;
    float temp, humi;
    
    Serial.println("# Read from thermometer");
    if((err=dht11.read(humi, temp))==0)
    {
      Serial.print("temperature:");
      Serial.print(temp);
      Serial.print(" humidity:");
      Serial.print(humi);
      Serial.println();
      
      // Calculate temperature servo position
      // Temperature range : 0 ~ 45
      // Servo range : 0 ~ 180
      angle1 = int(180 - temp*4);
      Serial.print(" Angle1:");
      Serial.print(angle1);
      Serial.println();
      moveServo1();
      delay(1500);
      
      // Calculate humidity servo position
      // Humidity range : 0 ~ 90      
      // Servo range : 0 ~ 180
      angle2 = int(180 - humi*2);
      Serial.print(" Angle2:");
      Serial.print(angle2);
      Serial.println();
      moveServo2();
      delay(1500);
    }
    else
    {
      Serial.println();
      Serial.print("Error No :");
      Serial.print(err);
      Serial.println();   
    }
    delay(1000); //delay for reread
}

void moveServo1() {
  if(angle1 > 165) angle1 = 165;
  if(angle1 < 15) angle1 = 15;
  servo1.write(angle1);
}

void moveServo2() {
  if(angle2 > 165) angle2 = 165;
  if(angle2 < 15) angle2 = 15;
  servo2.write(angle2);
}

 

앞선 아두이노 초급강좌 시리즈를 숙독하셨다면 이정도 소스코드는 어렵지 않게 이해하실 수 있으실겁니다.

여기에 추가로 블루투스나 WiFi 모듈을 붙여 다양하게 활용해보세요!!  온습도계를 IoT 형태로 발전시킨 예제는 [링크]에서 확인하세요.

프로토타입을 만들 때 사용된 외관은 레이저 커터를 이용해서 재단한 하드보드지 입니다. 개편된 홈페이지의 같은 게시물에서 디자인 파일을 받으실 수 있습니다. http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=project_hardcopy&wr_id=12

 

아래 이미지는 [디자인 스튜디오 36.5] 와 협업해서 만든 제품입니다. 

이미지 1 - 복사본

 


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

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

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

댓글목록

jy님의 댓글

jy 이름으로 검색 작성일

안녕하세요~~~
요거 하나 만들어볼려고 하는데 준비목록은 아누이노 나노로 되어있고.. 그림상 회로는 아두이노 우노인데... 본문에 있는 소스를 아두이노 나노에 적용해도 되는건가요?