BASIC4MCU | 질문게시판 | 답변 : 아두이노 앱인벤터 습도값을 측정하여 팬모터를 구동중입니다!
페이지 정보
작성자 master 작성일2019-05-29 06:22 조회5,439회 댓글2건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-05-29 오전 6:30:00// by Ok-Hyun Park//#include <SoftwareSerial.h>SoftwareSerial btSerial(2,3); // 소프트웨어 시리얼 객체이름을 btSerial로 지정//#include <DHT.h>#define DHTPIN 4 // DHT센서를 4번 핀에 연결#define DHTTYPE DHT11DHT dht(DHTPIN,DHTTYPE);//int fan=8;//char val,mode='A';//void setup(){pinMode(fan,OUTPUT);dht.begin();Serial.begin(9600); Serial.println("DHTxx test!");btSerial.begin(9600);}//void loop(){if(mode=='A'){ // AUTO모드delay(2000);float h=dht.readHumidity(); float t=dht.readTemperature(); float f=dht.readTemperature(true);if(isnan(h)||isnan(t)||isnan(f)){ Serial.println("Fail DHT!"); return; } // 온습도 읽기 실패float hic=dht.computeHeatIndex(t,h,false);float hif=dht.computeHeatIndex(f,h);//Serial.print("습도: "); Serial.print(h); Serial.print("%");Serial.print("온도: "); Serial.print(t); Serial.println(" 도 ");//if(h>=50){ states=false; digitalWrite(fan,1); }else { states=true; digitalWrite(fan,0); }}//if(btSerial.available()){val=btSerial.read();if(val=='A'){ mode='A'; }if(val=='1'){ mode='1'; digitalWrite(fan,1); }if(val=='0'){ mode='0'; digitalWrite(fan,0); }}}
댓글 2
조회수 5,439푸링이님의 댓글
푸링이 작성일
이른 아침에 답변 정말 감사합니다. 그런데, 팬모터가 업로드 하는 순간부터 쭉 돌기만하네요..
현재 앱인벤터쪽에서는 스위치를 이용해서, 키면 a로 블루투스로, 끄는동작인 b를 블루투스로 보내는 동작을 하고있는데, 어디가 문제인지 확인을 못하겠네요..
1) 습도를 측정 후, 일정 습도수준을 올라가면 자동으로 동작
2) 제가 수동으로 on/off 버튼을 통해 (a, b) 키고 끄는 동작을 실행
혹은 수동과 자동 각각 구분해서, 블록코딩과 아두이노 코딩이 필요할까요?
푸링이님의 댓글
푸링이 작성일
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,3); // 소프트웨어 시리얼 객체이름을 btSerial로 지정
//
#include <DHT.h>
#define DHTPIN 4 // DHT센서를 4번 핀에 연결
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//
int fan=8;
//
char val,mode='A';
boolean states=false;
//
void setup(){
pinMode(fan,OUTPUT);
dht.begin();
Serial.begin(9600); Serial.println("DHTxx test!");
btSerial.begin(9600);
}
//
void loop(){
if(mode=='A'){ // 자동모드
delay(2000);
float h=dht.readHumidity(); float t=dht.readTemperature(); float f=dht.readTemperature(true);
if(isnan(h)||isnan(t)||isnan(f)){ Serial.println("Fail DHT!"); return; } // 온습도 읽기 실패
float hic=dht.computeHeatIndex(t,h,false);
float hif=dht.computeHeatIndex(f,h);
//
Serial.print("습도: "); Serial.print(h); Serial.print("% ");
Serial.print("온도: "); Serial.print(t); Serial.println(" 도 ");
//
if(h>=50){ states=true; digitalWrite(fan,1); }
else { states=false; digitalWrite(fan,0); }
}
//
if(btSerial.available()){
val=btSerial.read();
if(val=='B'){ mode='B'; // 수동모드
if(val=='1'){ mode='1'; digitalWrite(fan,1); }
if(val=='0'){ mode='0'; digitalWrite(fan,0); }
}
}
}
마스터님 코드를 응용해, A일경우 자동모드로 습도를 계산해 팬을 동작시키고,
B일경우, 수동모드로 동작 해 VAL == 1일때, 모드 1 동작, 팬을 돌리고, 0일때는 멈추고,
이것도 쭉 모터가 돌아가기만 하네요. 어디가문제인거죠.. states=true 이쪽이 문제인건가. 반대로해봐도 쭉 도네요