BASIC4MCU | 질문게시판 | 먼지센서(PPD42NS) 센서 합치는거 관련 질문드립니다.
페이지 정보
작성자 어메이징 작성일2018-06-15 16:40 조회10,320회 댓글0건본문
아두이노 우노 / 먼지센서 PPD42NS사용중입니다.
먼지센서 한개를 사용해서 업로딩 했을때는 값이 잘뜨는데
먼지센서 2개를 사용해서 비교하는 프로그램을 짜는 중인데
제가 짜는대로 하면 값이 반토막이나서 나옵니다.
문제가 무었일까요
코드올려드릴게요 감사합니다.
기본 코드 센서 1개
--------------------------------------
/*
Grove - Dust Sensor Demo v1.0
Interface to Shinyei Model PPD42NS Particle Sensor
Program by Christopher Nafis
Written April 2012
http://www.seeedstudio.com/depot/grove-dust-sensor-p-1050.html
http://www.sca-shinyei.com/pdf/PPD42NS.pdf
JST Pin 1 (Black Wire) => Arduino GND
JST Pin 3 (Red wire) => Arduino 5VDC
JST Pin 4 (Yellow wire) => Arduino Digital Pin 8
*/
int pin = 7;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;//sampe 30s ;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
void setup()
{
Serial.begin(9600);
pinMode(7,INPUT);
starttime = millis();//get the current time;
}
void loop()
{
duration = pulseIn(pin, LOW);
lowpulseoccupancy = lowpulseoccupancy+duration;
if ((millis()-starttime) > sampletime_ms)//if the sampel time == 30s
{
ratio = lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100
Serial.print(ratio);
lowpulseoccupancy = 0;
starttime = millis();
}
}
------------------------------------------
2개 합친만든 소스
#include <Wire.h>
#include <SoftwareSerial.h>
#include <Stepper.h>
int pin = 4;
int pin2 = 7;
unsigned long duration;
unsigned long duration2;
unsigned long starttime;
unsigned long sampletime_ms = 30000; //딜레이 초(ms)
//unsigned long sampletime_ms1 = 30001; //딜레이 초(ms)
unsigned long lowpulseoccupancy = 0;
unsigned long lowpulseoccupancy2 = 0;
float outside = 1;
float inside = 0;
int a = 0;
unsigned int mode = 0;
char automatic = 'r';
// 회전각도 설정 = 2048:한바퀴(360도), 1024:반바퀴(180도)
const int stepsPerRevolution = 2048; //360도
Stepper myStepper(stepsPerRevolution, 11, 9, 10, 8);
int blueTx = 3;
int blueRx = 2;
SoftwareSerial BTserial(blueTx, blueRx);
void window_set() {
if (outside > inside && mode == 1 && a == 1) {
mode = 0; // 창문닫음
}
if (outside > inside && mode == 2 && a == 0) {
mode = 2;
}
if (outside > inside && mode == 2 && a == 1) {
mode = 0;
}
if (outside > inside && mode == 0 && a == 0) {
mode = 2;
}
///////////////////////////////////////////////////////////
if (inside > outside && mode == 0 && a == 0) {
mode = 1;
}
if (inside > outside && mode == 1 && a == 1) {
mode = 2;
}
if (inside > outside && mode == 2 && a == 0) {
mode = 1;
}
if (inside > outside && mode == 2 && a == 1) {
mode = 2;
}
}
void sensor_set() {
duration = pulseIn(pin, LOW);
duration2 = pulseIn(pin2, LOW);
lowpulseoccupancy = lowpulseoccupancy + duration;
lowpulseoccupancy2 = lowpulseoccupancy2 + duration2;
if ((millis() - starttime) > sampletime_ms) {
outside = lowpulseoccupancy / (sampletime_ms * 10.0); // 먼지량으로 바꿔주는 수식
inside = lowpulseoccupancy2 / (sampletime_ms * 10.0); // 먼지량으로 바꿔주는 수식
lowpulseoccupancy = 0;
lowpulseoccupancy2 = 0;
starttime = millis();
}
}
void setup()
{
Serial.begin(9600);
BTserial.begin(9600);
Wire.begin();
myStepper.setSpeed(14); //모터의 회전속도 설정
pinMode(13, INPUT); // outside
pinMode(7, INPUT); // inside
starttime = millis();
}
void loop()
{
sensor_set();
window_set();
Serial.println("기달");
if (BTserial.available()>0){
automatic = BTserial.read();
Serial.println("데이터 전송");
Serial.println(automatic);
delay(1);
}
////////////////////////////////////////////////수동제어
if (automatic == 'o' && a == 0){
sensor_set();
Serial.println("창문열림");
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
a = 1;
BTserial.println("열림");
Serial.println(a);
automatic = 'r';
}
if (automatic == 'o' && a == 1){
sensor_set();
Serial.println("병신임?");
Serial.println(a);
automatic = 'r';
}
if (automatic == 'c' && a == 1){
sensor_set();
Serial.println("창문닫힘");
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
a = 0;
BTserial.println("닫힘");
automatic = 'r';
}
if (automatic == 'c' && a == 0){
sensor_set();
Serial.println("병신임?");
automatic = 'r';
}
if (automatic == 'r' && a == 1)
{
sensor_set();
Serial.print("실외 먼지량 : ");
Serial.println(outside);
Serial.print("실내 먼지량 : ");
Serial.println(inside);
BTserial.print("outside : ");
BTserial.println(outside);
BTserial.print("inside : ");
BTserial.println(inside);
}
if (automatic == 'r' && a == 0)
{
sensor_set();
Serial.print("실외 먼지량 : ");
Serial.println(outside);
Serial.print("실내 먼지량 : ");
Serial.println(inside);
BTserial.print("outside : ");
BTserial.println(outside);
BTserial.print("inside : ");
BTserial.println(inside);
}
///////////////////////자동제어부///////////////////////////////////////////
if (mode == 0 && automatic == 'y') //
{
sensor_set();
Serial.println("창문닫음 ");
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);
myStepper.step(-stepsPerRevolution);// 방향 움직임.
a = 0; //창문닫힘
BTserial.println("닫힘");
Serial.print("mode : ");
Serial.println(mode);
Serial.print("a : ");
Serial.println(a);
Serial.print("실외 먼지량 : ");
Serial.println(outside);
Serial.print("실내 먼지량 : ");
Serial.println(inside);
BTserial.print("outside : ");
BTserial.println(outside);
BTserial.print("inside : ");
BTserial.println(inside);
}
if (mode == 2 && automatic == 'y')
{
sensor_set();
Serial.print("모드 : ");
Serial.println(mode);
Serial.print("a : ");
Serial.println(a);
Serial.print("실외 먼지량 : ");
Serial.println(outside);
Serial.print("실내 먼지량 : ");
Serial.println(inside);
BTserial.print("outside : ");
BTserial.println(outside);
BTserial.print("inside : ");
BTserial.println(inside);
}
if (mode == 1 && automatic == 'y')
{
sensor_set();
Serial.println("창문열림 ");
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);
myStepper.step(stepsPerRevolution);// 방향 움직임.
a = 1; //창문열림
BTserial.println("열림");
Serial.print("모드 : ");
Serial.println(mode);
Serial.print("a : ");
Serial.println(a);
Serial.print("실외 먼지량 : ");
Serial.println(outside);
Serial.print("실내 먼지량 : ");
Serial.println(inside);
BTserial.print("outside : ");
BTserial.println(outside);
BTserial.print("inside : ");
BTserial.println(inside);
}
}
댓글 0
조회수 10,320등록된 댓글이 없습니다.