해 보고 싶은데 감전될까 조심조심 ㄷㄷ
코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2014-09-17 14:35:08
NO | 부품명 | 수량 | 상세설명 |
1 | 아두이노 우노 | 1 | |
2 | 브레드보드 | 1 | |
3 | 온습도 센서 | 1 | DHT11 온습도센서 모듈을 사용했습니다. |
4 | LCD | 1 | LCD-00709을 사용했습니다. 다른 LCD를 사용하실 경우 연결방법이 다를 수 있습니다. |
5 | Potentiometer | 1 | |
6 | 콘센트 | 1 | 직접 가습기에 릴레이를 연결할 경우 필요하지 않습니다. |
7 | 점퍼 케이블 | 20 | |
8 | 5V 릴레이 모듈 | 1 | |
9 | 가습기 | 1 |
부품명 | 아두이노 우노 | 브레드보드 | 온습도센서 | LCD | Potentiometer |
사진 | x1 | x1 | x1 | x1 | x1 |
부품명 | 콘센트 | 점퍼 케이블 | 5V 릴레이 모듈 | 가습기 |
사진 | x1 | x20 | X1 | x1 |
/* 본 스케치는 여러 커뮤니티를 참고하여
kocoafab에서 작성하였습니다.
누구나 무료로 사용하실 수 있습니다.*/
#include <LiquidCrystal.h>
#include <DHT11.h>
#define relay 9 //relay와 연결된 9번 핀 #define dht11Pin 6 //dht11과 연결된 6번 핀 LiquidCrystal lcd(12,11,5,4,3,2); //RS 핀, E핀, 데이터 핀 4개 String lcdString = ""; DHT11 dht11(dht11Pin); //dht11 라이브러리 사용을 위한 객체 선언
void setup() { pinMode(relay, OUTPUT); lcd.begin(16,2); //LCD 크기 지정, 2줄 16칸 lcd.clear(); //화면 지우기
Serial.begin(9600);
} void loop() { int err; //에러구분 변수 float humi; //습도 저장 변수 float tem; //온도 저장 변수, 필요한 분은 사용하세요.
if((err=dht11.read(humi, tem))==0) //습도값을 에러없이 읽어 왔다면 { onOff(humi); //가습기 on/off 함수 호출 lcdHumidity(humi); //현재 습도 lcd 출력 함수 호출 } else {
//읽어오는 도중 문제가 발생할 경우 에러번호와 에러 시리얼 모니터에 출력 Serial.println(); Serial.print("Error No :"); Serial.print(err); Serial.println(); } delay(DHT11_RETRY_DELAY); //다시 읽어올때 까지 멈춤 }
//가습기 on/off 함수 호출
void onOff(float h) {
if (h < 50 ) { //습도가 50%보다 작으면
digitalWrite(relay, HIGH); //가습기 ON
}else {
digitalWrite(relay,LOW);
}
}
//현재 습도 LCD 출력 함수
void lcdHumidity(float hu) {
lcd.setCursor(0,0); //커서 0,0에 배치
lcd.print("current humidity"); //""안에 글자 출력
lcd.setCursor(1,3); //커서 위치 1,3으로 변경 후
char buffer[10]; //float를 string으로 변환하기 위한 임시 char 배열 선언
dtostrf(hu, 4, 1, buffer); //float -> char로 변환
String humidity = " : "; //두번째 줄에 출력할 구문 만들기 ( : 습도 %)
humidity += (String)buffer; //char -> string
humidity += "%";
Serial.print(humidity);
lcd.print(humidity); //현재 습도 출력
}
#include <LiquidCrystal.h>두 개의 라이브러리가 필요합니다.
#include <DHT11.h>
if((err=dht11.read(humi))==0) //습도값을 에러없이 읽어 왔다면 { onOff(humi); //가습기 on/off 함수 호출 lcdHumidity(humi); //현재 습도 lcd 출력 함수 호출 }
DHT11라이브러리에 있는 read함수는 습도, 온도 값을 읽어서 변수에 저장해줍니다.
동시에 에러번호를 반환합니다.
반환된 값이 0이면 정상 동작을 의미합니다.
즉, 위 코드는 습도를 정상적으로 측정하였다면(반환 값이 0이면) 아래 두 함수를 호출하라는 뜻입니다.
void onOff(float h) {
if (h < 50 ) { //습도가 50%보다 작으면
digitalWrite(relay, HIGH); //가습기 ON
}else {
digitalWrite(relay,LOW);
}
}
습도가 50보다 작으면 릴레이의 HIGH 값을 전달하므로써 콘센트에 전류가 흐르게 합니다.
50 자리에 원하는 습도 정도에 따라 숫자를 넣어보세요.
//현재 습도 LCD 출력 함수
void lcdHumidity(float hu) {
lcd.setCursor(0,0); //커서 0,0에 배치
lcd.print("current humidity"); //""안에 글자 출력
lcd.setCursor(1,3); //커서 위치 1,3으로 변경 후
char buffer[10]; //float를 string으로 변환하기 위한 임시 char 배열 선언
dtostrf(hu, 4, 1, buffer); //float -> char로 변환
String humidity = " : "; //두번째 줄에 출력할 구문 만들기 ( : 습도 %)
humidity += (String)buffer; //char -> string
humidity += "%";
Serial.print(humidity);
lcd.print(humidity); //현재 습도 출력
}
스케치를 작성하시다 보면 변수의 타입을 변경해야 하는 경우가 많이 발생합니다.
lcd.print함수는 float을 출력할 수 없습니다.
하지만 습도는 float타입입니다.
이럴 경우 float을 dtostrf함수를 통해 char로 변경하고
변경된 char를 string으로 변경합니다.
dtostrf함수 () 안에는 변경할 float타입의 값, 최소한의 길이, 정확도, 변경된 값을 저장할 char 배열 변수가 들어갑니다.
정확도는 소수점 자리를 의미합니다. 1은 소수점 첫번째 자리까지만 변환된다는 의미입니다.
lcd에 출력할 문구를 변경하거나 다른 lcd를 사용해보세요.
dht11센서는 온도 측정도 가능합니다. 온도도 값도 이용해보세요.
kocoafab
아두이노:1.6.9 (Windows 7), 보드:"Arduino/Genuino Uno"
스케치는 프로그램 저장 공간 8,710 바이트(27%)를 사용. 최대 32,256 바이트.
전역 변수는 동적 메모리 288바이트(14%)를 사용, 1,760바이트의 지역변수가 남음. 최대는 2,048 바이트.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x62
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x62
보드에 업로딩중에 문제 발생. 다음을 참고하세요. http://www.arduino.cc/en/Guide/Troubleshooting#upload
이 리포트는 파일 -> 환경설정에 "컴파일중 자세한 출력보이기"를
활성화하여 더 많은 정보를
보이게 할 수 있습니다.
이렇게 뜨는데 왜 그런지 아시나요 ? ㅜㅠㅠ
LCD에 온도도 같이 표현되고 릴레이가 일정온도 밑으로 가면 ON, 위로가면 OFF되도록 하려면
어떤 부분을 고쳐야 하는걸까요?
DHT11 함수도 알고 싶은데 어딜 보면 되나요?
오! 안녕하세요!
코딩하고 아두이노 그림보고 온도와 습도를 lcd에 띄우는것을 성공했습니다.
저는 여기서 릴레이키트를 이용해 가습기랑 연결하는것이 아닌 가습기 모듈을 제어하는걸 하고 싶은데
어떻게 해야 할까요??ㅜㅜ
남민식 2015-11-11 15:32:52
블루투스를 통해 값을 스마트폰으로 전송하고있는데 값이 너무 빨리 반복되서 올라오네요 이거 멈추는 방법 없을까요? 아님 딜레이를 늦추는 방법을 생각하고있는데.. 그부분에대한 변경을 어떻게 해야할까요? ㅠㅠ