BASIC4MCU | 질문게시판 | 아두이노를 이용한 축이 회전하는 환풍기
페이지 정보
작성자 굳은살 작성일2018-10-28 16:03 조회996회 댓글0건본문
제가 master님이 알려주신 코드와 제가 알고있는 코드를 조합하여 나름대로 코드를 작성해봤습니다.
컴파일링은 됩니다만, 제가 의도한 대로 잘 작동되지 않네요.
제가 작성한 코드가 아래의 조건을 만족시키는지 틀렸다면 어디가 틀렸는지 지적부탁드립니다.
1.내부 온습도센서(DHT22)로는 내부의 온도를 측정하고 온도에 따라 환풍기의 축인 스텝모터(Nema17) 를 180도 회전시킨 후 BLDC모터(BL42S-24026N)를 고속회전시켜서 외부의 공기를 내부로 들이기도하고 내부의 공기를 외부로 방출(내부공기를 외부로 방출, 외부공기를 내부로 유입 : 총 2가지 경우)
2.외부 온습도센서(DHT22)로는 외부의 온도를 측정하고 온도에 따라 환풍기의 축인 스텝모터(Nema17) 를 180도 회전시킨 후 BLDC모터(BL42S-24026N)를 고속회전시켜서 외부의 공기를 내부로 들이기도하고 내부의 공기를 외부로 방출(내부공기를 외부로 방출, 외부공기를 내부로 유입 : 총 2가지 경우)
3.미세먼지센서(PM2005)로 미세먼지의 농도에 따라 내부의 미세먼지 농도가 높으면 BLDC모터(BL42S- 24026N)를 고속회전시켜서 내부의 공기를 외부로 방출(내부공기를 외부로 방출 : 총 1가지 경우)
4.MQ-5 센서를 내부에 둬서 LPG가스 감지시 환풍기의 축인 스텝모터(Nema17)가 작동하여 180도 회전시 킨 후 BLDC모터(BL42S-24026N)를 고속회전시켜서 내부공기를 외부로 방출(내부공기를 외부로 방출 : 총 1가지 경우)
5.MQ-7 센서를 내부에 둬서 일산화탄소 감지시 환풍기의 축인 스텝모터(Nema17)가 작동하여 180도 회 전 시킨 후 BLDC모터(BL42S-24026N)를 고속회전시켜서 내부공기를 외부로 방출(내부공기를 외부로 방출 : 총 1가지 경우)
6.LCD디스플레이(I2C 1602)로는 내부온도, 외부온도, 미세먼지 농도를 실시간으로 출력시키고 싶습니 다.
센서의 우선순위는 MQ5 > MQ7 > PM2005 > DHT22 순으로 우선순위를 설정하고 싶습니다
#include <DHT.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
#include <Stepper.h>
#define DHTPIN1 52
#define DHTPIN2 53
#define DHTTYPE DHT22
DHT dht1(DHTPIN1,DHTTYPE);
DHT dht2(DHTPIN2,DHTTYPE);
float t1=0;
float t2=0;
int GAS_1 = 48;
int GAS_2 = 49;
int ENA=7;
int ENB=12;
const int stepsPerRevolution = 100;
int target=0;
int angle=0;
int fan = 4;
int led = 6;
int buzzer = 5;
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 3);
LiquidCrystal_I2C lcd(0x27,20,4);
SoftwareSerial mySerial(13, 11);
unsigned char Send_data[5] = {0x11,0x02,0x0b,0x01, 0xE1};
unsigned char Receive_Buff[20];
unsigned long PM25;
unsigned long COM_SUCCESS, COM_COUNT;
unsigned char recv_cnt = 0;
void Send_CMD(void)
{
unsigned char i;
for(i=0; i<5; i++)
{
mySerial.write(Send_data[i]);
delay(1);
}
}
unsigned char Checksum_cal(void)
{
unsigned char count, SUM=0;
for(count=0; count<19; count++)
{
SUM += Receive_Buff[count];
}
return 256-SUM;
}
void setup() {
Serial.begin(9600);
pinMode(fan, OUTPUT);
pinMode(led, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(13,INPUT);
pinMode(11,OUTPUT);
myStepper.setSpeed(60);
digitalWrite(ENA,HIGH);
digitalWrite(ENB,HIGH);
lcd.init();
lcd.backlight();
while(!Serial);
mySerial.begin(9600);
while (!mySerial);
}
void loop() {
COM_COUNT++;
Send_CMD();
while(1)
{
if(mySerial.available())
{
Receive_Buff[recv_cnt++] = mySerial.read();
if(recv_cnt ==20){recv_cnt = 0; break;}
}
}
if(Checksum_cal() == Receive_Buff[19])
{
COM_SUCCESS++;
PM25 = (unsigned long)Receive_Buff[3]<<24 | (unsigned long)Receive_Buff[4]<<16 | (unsigned long)Receive_Buff[5]<<8| (unsigned long)Receive_Buff[6];
Serial.write("PM2.5 : ");
Serial.println(PM25);
}
else
{
Serial.write("CHECKSUM Error");
}
t1=dht1.readTemperature();
Serial.write("DHT_1 : ");
Serial.println(t1);
t2=dht2.readTemperature();
Serial.write("DHT_2 : ");
Serial.println(t2);
Serial.write("GAS_1 : ");
Serial.println(digitalRead(GAS_1));
Serial.write("GAS_2 : ");
Serial.println(digitalRead(GAS_2));
//digitalWrite(led, LOW);
//noTone(buzzer);
if((GAS_1=0) || (GAS_2=0)){
while(180>angle){ angle++; myStepper.step( 1); delay(10); }
analogWrite(fan, 150);
digitalWrite(led, HIGH);
tone(buzzer, 500, 100);
}
else if((GAS_1=1) || (GAS_2=1) && (PM25>=35.1)){
analogWrite(fan, 0);
digitalWrite(led, HIGH);
noTone(buzzer);
}
else if((GAS_1=1) || (GAS_2=1) && (PM25<=35) && (t1>=18.0) && (t1<=25)){
analogWrite(fan, 0);
digitalWrite(led, LOW);
noTone(buzzer);
}
else if((GAS_1=1) || (GAS_2=1) && (PM25<=35) && ( t1<=17.9) && (t2>=18)){
while(0<angle){ angle--; myStepper.step(-1); delay(10); }
analogWrite(fan, 150);
digitalWrite(led, LOW);
noTone(buzzer);
}
else if((GAS_1=1) || (GAS_2=1) && (PM25<=35) && ( t1>=25.1) && (t2<=25)){
while(180>angle){ angle++; myStepper.step( 1); delay(10); }
analogWrite(fan, 150);
digitalWrite(led, LOW);
noTone(buzzer);
}
lcd.setCursor(0,0);
lcd.print("T1:");
lcd.print(t1);
lcd.print("T2:");
lcd.print(t2);
lcd.setCursor(0,1);
lcd.print("D:");
lcd.print(PM25);
delay(3000);
}
댓글 0
조회수 996등록된 댓글이 없습니다.