CAFE

이산화탄소 센서 &빗물 감지 센서 중간 보고서

작성자김여진|작성시간26.06.10|조회수14 목록 댓글 0

<이산화탄소 센서 &빗물 감지 센서 그룹>

 

구성원: 조수아, 윤아영, 김여진

 

사용한 물품: 이산화탄소 센서, 빗물 감지 센서, 저항, 아두이노, 브레드보드, 점퍼선. 스텝모터(구동부와 연결시 사용 예정)

 

1.빗물 감지 센서

1-1.코드

//스텝모터를 활용한 빗물감지 센서 코드

 

#include <Stepper.h>

//28BYJ-48 의 모터드라이버 연결 핀 IN1 - D8 / IN2- D9 / IN3- D10 / IN4- D11

//빗물감지_ AO -A0

 

//모터 핀 설정

#define OUTPUT1 8 // Connected to the Blue coloured wire

#define OUTPUT2 10 // Connected to the Pink coloured wire

#define OUTPUT3 9 // Connected to the Yellow coloured wire

#define OUTPUT4 11 // Connected to the Orange coloured wire

 

//빗물 감지 센서 핀 설정, 임곗값 설정.

const int rainPin = A0;

const int threshold = 700;

 

 

 

// 1회전 당 스텝 수 정의

const int stepsPerRotation = 2048; //28BYJ-48 1회전당 스텝수 2048

 

bool windowOpen = true;

 

// OUTPUT1, OUTPUT3이 한 코일에, OUTPUT2, OUTPUT4가 다른 코일에 연결 됨

Stepper myStepper(stepsPerRotation, OUTPUT1, OUTPUT3, OUTPUT2, OUTPUT4);

 

void setup() {

pinMode(rainPin, INPUT);

// 분당 회전수 설정

myStepper.setSpeed(15); // 15 RPM

}

 

void loop() {

int sensorValue = analogRead(rainPin);

 

 

// 닫는 방향을 +로 두었다.

if (sensorValue <= threshold && windowOpen == true){

myStepper.step(stepsPerRotation / 2);

delay(1000);

windowOpen = false;}

 

else if (sensorValue > threshold && windowOpen == false){

myStepper.step(-stepsPerRotation / 2);

delay(1000);

windowOpen = true; }

else{

windowOpen = true;

}

}

 

1-2. 동작 원리 및 코드 구현

위 코드는 우천 시 빗물을 실시간으로 감지하여 창문을 자동으로 닫고, 비가 그치면 다시 열리도록 설계한 시스템이다. 빗물 감지 센서는 표면에 수분이 닿을수록 아날로그 출력값이 감소하는 특성을 가진다.

센서 값이 설정한 임곗값인 700 이하가 되면 우천 상태로 판단한다. 이때 창문이 열린 상태라면(windowOpen == true), 스텝 모터를 1024스텝(180도) 정회전시켜 창문을 닫고 상태를 닫힘(false)으로 변경한다.

반대로 센서 값이 700을 초과하여 비가 그친 것으로 판단되고 창문이 닫혀 있는 상태라면, 모터를 1024스텝 역회전시켜 창문을 다시 열고 상태를 열림(true)으로 변경한다. 또한 상태 변수와 조건문을 함께 활용하여 동일한 상태가 유지되는 동안 모터가 반복적으로 작동하지 않도록 하였다.

 

1-3. 사용한 핀(수정할 때 보고하세요)

[빗물센서(AO) - A0핀 - rainPin]

[모터IN1 - D8핀 - OUTPUT1]

[모터IN2 - D9핀 - OUTPUT3]

[모터IN3 - D10핀 - OUTPUT2]

[모터IN4 - D11핀 – OUTPUT4]`

 

 

2.이산화탄소 센서

2-1코드

#include <MG811.h>

 

MG811 mySensor(A0);

 

long sum = 0;

int count = 0;

 

bool windowOpen = false;

 

const int OPEN_THRESHOLD = 315;

const int CLOSE_THRESHOLD = 335;

 

void setup()

{

Serial.begin(9600);

}

 

void loop()

{

int value = analogRead(A0);

 

Serial.print("Current Value : ");

Serial.println(value);

 

sum += value;

count++;

 

if (count >= 10)

{

int average = sum / count;

 

Serial.print("Average : ");

Serial.println(average);

 

if (average <= OPEN_THRESHOLD && !windowOpen)

{

windowOpen = true;

Serial.println("OPEN SIGNAL");

}

 

else if (average >= CLOSE_THRESHOLD && windowOpen)

{

windowOpen = false;

Serial.println("CLOSE SIGNAL");

}

 

Serial.print("Window : ");

 

if (windowOpen)

Serial.println("OPEN");

else

Serial.println("CLOSE");

 

Serial.println("--------------------");

 

sum = 0;

count = 0;

}

 

delay(1000);

}

 

2-2. 동작 원리 및 코드 구현

본 코드는 실내 이산화탄소 농도를 실시간으로 측정하여 창문을 자동으로 개방·폐쇄하도록 설계한 시스템이다. MG811 센서는 이산화탄소 농도가 높아질수록 아날로그 출력값이 감소하는 특성을 가진다. 센서 측정 과정에서 발생할 수 있는 노이즈에 의한 오작동을 줄이기 위해 1초 간격으로 측정한 값을 누적하고, 10초 동안의 평균값을 계산하여 제어 기준으로 활용하였다.

또한 창문 개폐 기준값 부근에서 모터가 반복적으로 작동하는 현상을 방지하기 위해 히스테리시스 제어를 적용하였다. 실내 공기질이 악화되어 평균 센서값이 315 이하로 감소하면 창문 개방 신호(OPEN SIGNAL)를 출력하고, 환기를 통해 평균값이 335 이상으로 증가하면 창문 폐쇄 신호(CLOSE SIGNAL)를 출력한다.

이와 같은 제어 방식을 통해 창문이 불필요하게 반복 개폐되는 문제를 방지하였으며, 시스템은 10초마다 시리얼 모니터에 평균 공기질 수치와 창문의 현재 상태를 출력하여 실시간 자동 환기를 수행한다.

 

다음검색
현재 게시글 추가 기능 열기
  • 북마크
  • 신고 센터로 신고

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼