BASIC4MCU | 질문게시판 | 모터 구동 및 센서 관련 질문 드립니다.
페이지 정보
작성자 김혼자 작성일2019-04-01 01:34 조회11,850회 댓글2건본문
![]() | 아두이노 미세먼지 센서 활용아두이노 미세먼지 센서를 활용해서 미세먼지 농도가 일정 수준 이하이면 창문을 열고, 이상이면 창문을 닫는 프로그램을 짜고 싶습니다. 그냥 dc모터만 동작시키면 되는데요, 코딩을 어... KIN.NAVER.COM |
안녕하세요. 먼저 좋은 자료들 올려주셔서 감사합니다. 올려주신 자료들과 질문게시판을 통해 배우면서 코딩을 해보았는데 제대로 짜였는지 확인 부탁드립니다.
제가 하고싶은것은 자동개폐 창문이고 비가 오면 창문이 닫히고,
미세먼지 농도가 1000이상 co2농도가 80이상이면 5분간 열리고
미세먼지 농도가 1000이상 co2농도가 80미만이면 열리고
미세먼지 농도가 1000미만 co2농도가 80이상이면 열리고
미세먼지 농도가 1000미만 co2농도가 80미만이면 열리는 창문을 만들고 싶습니다.
이산화탄소센서는 MH-Z19B, 미세먼지 센서는 GP2Y1023AU0F,빗물 감지 센서, L298N모터 입니다.
이산화탄소, 미세먼지 소스는 아래 링크를 참고하였습니다.
//이산화
#include <MHZ19PWM.h>
MHZ19PWM mhz(3, MHZ_DELAYED_MODE);
//미세먼지
unsigned long pulse = 0;
float ugm3 = 0;
int GP2Y1023 = 3; // GP2Y1023을 3번핀
float pulse2ugm3(unsigned long pulse) {
float value = (pulse - 1400) / 14.0;
if (value > 300) {
value = 0;
}
return value;
}
int IN1=7,IN2=8,ENA=9; // L298 Motor 드라이버모듈
void stop() { digitalWrite(IN1,0); digitalWrite(IN2,0); } //모터
void fwd() { digitalWrite(IN1,1); digitalWrite(IN2,0); } //모터
void bwd() { digitalWrite(IN1,0); digitalWrite(IN2,1); } //모터
void setup() {
pinMode(GP2Y1023, INPUT); //미세먼지
Serial.begin(115200);
pinMode(2, OUTPUT); //빗물
mhz.useLimit(5000); //이산화
pinMode(IN1,OUTPUT); pinMode(IN2,OUTPUT); analogWrite(ENA,255); //모터드라이버
}
void showValue()
{
unsigned long start = millis();
float co2 = mhz.getCO2();
unsigned long duration = millis() - start;
Serial.print(F("CO2: "));
Serial.println(co2);
}
void loop(){
pulse=pulseIn(GP2Y1023,LOW,20000); //미세먼지
ugm3=pulse2ugm3(pulse);
Serial.print(ugm3,4); Serial.println("\tug/m3");
showValue(); //이산화
if(digitalRead(2) == HIGH) //비
Serial.println("No Rain Detected");
else Serial.println("Rain Detected");
if(ugm3>3.5){
if(!flag){ flag=1; Serial.println("Open"); fwd(); delay(1000); stop(); }
}
else{
if(flag){ flag=0; Serial.println("Close"); bwd(); delay(1000); stop(); }
}
delay(100);
if(digitalRead(2) == LOW){ //비올때
if(flag){ flag=0; Serial.println("Close"); bwd(); delay(1000); stop(); }
}
else{
if(co2>1000 && ugm3>80){
if(!flag){ flag=1; Serial.println("Open"); fwd(); delay(1000); stop(); delay(300000) } //5분간 열려야 하는데 빠른 동작 확인을 위해 30초로 변경
}
else if(co2>1000 && ugm3<=80){
if(!flag){ flag=1; Serial.println("Open"); fwd(); delay(1000); stop(); }
else if(co2<=1000 && ugm3>80){
if(flag){ flag=0; Serial.println("Close"); bwd(); delay(1000); stop(); }
else {
if(!flag){ flag=1; Serial.println("Open"); fwd(); delay(1000); stop(); }
}
delay(100);
}
+)덧붙여서 비가 오면 바로 닫아야하지만 미세먼지, 이산화탄소는 빠르게 큰폭으로
바뀌지 않기 때문에 비가 오는지 여부는 짧은 시간내로 확인하고
미세먼지, 이산화탄소 수치는 10분정도 텀을 주면서 확인하고 싶다면
어떤 자료를 찾아보면 할 수 있을까요?
항상 감사합니다.
댓글 2
조회수 11,850master님의 댓글
master 작성일
unsigned long t;
//
if(millis()-t>=600000){ t=millis(); // 600초(10분) 마다 실행
// 미세먼지, 이산화탄소 읽어서 처리
}
10분마다 센서를 읽는 것은 위처럼 작성하면 됩니다.
김혼자님의 댓글
김혼자
와 이렇게 하면 되는거구나... 정말 감사합니다! 덕분에 큰 도움 받았습니다. 더 배우고 공부하겠습니다.