에듀이노-코딩교육 전문 쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰

학교, 공공기관이라면 후불결제하세요!

 
현재 위치
  1. 게시판
  2. 묻고답하기

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 미세먼지 부저
작성자 gjm9834 (ip:)
  • 작성일 2019-07-09
  • 추천 추천하기
  • 조회수 156

메뉴얼 대로 코드 DUST 5번째꺼 쓰고


부저를 이용하여 미세먼지 센서가 151이상이 되면 소리가 나게 코딩하고싶은데요 ㅠㅠ어떻게 할지몰라서
그리고 수동부저를 꼽아야하나요 능동부저를 꼽아야하나요?
만약 어떤 부저를 꼽으면 빵판어디와 우노의 어디와 연결해야하나요?


#include <Wire.h>                        // i2C 통신을 위한 라이브러리

#include <LiquidCrystal_I2C.h>        // LCD 1602 I2C용 라이브러리

#include <DHT11.h>                      // 온습도 센서 사용을 위한 라이브러리


int dust_sensor = A0;   // 미세먼지 핀 설정

int pin = A1;           // 온습도 센서 핀 설정


int rgb_red = 5;    // rgb 핀 빨간색 핀

int rgb_green = 6;  // rgb핀 녹색색 핀

int rgb_blue = 9;  // rgb핀 파란색 핀


float dust_value = 0;  // 센서에서 입력받은 미세먼지 값

float dustDensityug = 0;  // ug/m^3 값을 계산


int sensor_led = 12;      // 미세먼지 센서 안에 있는 적외선 led 핀 번호

int sampling = 280;       // 적외선 led를 키고, 센서값을 읽어들여 미세먼지를 측정하는 샘플링 시간

int waiting = 40;   

float stop_time = 9680;   // 센서를 구동하지 않는 시간


double five_dust[5] = {0};

double recent_dust = 0, total_dust = 0;


DHT11 dht11(pin);               // 온습도 센서사용을 위한 객체 생성

LiquidCrystal_I2C lcd(0x27,16,2);     // 접근주소: 0x3F or 0x27 1602 Display


 byte humi[8] = {     // 물컵모양 출력

  0b00000,

  0b10001,

  0b10001,

  0b10001,

  0b11111,

  0b11111,

  0b11111,

  0b11111,

};

 byte temp[8] = {     // 온도계 모양 출력

  0b00100,

  0b01010,

  0b01010,

  0b01010,

  0b01010,

  0b10001,

  0b11111,

  0b01110,

};

 byte char_temp[8] = {     // 온도 단위 출력

  0b10000,

  0b00110,

  0b01001,

  0b01000,

  0b01000,

  0b01000,

  0b01001,

  0b00110,

};


void setup(){

  lcd.init();                     // LCD 초기화

  lcd.backlight();                // 백라이트 켜기

  lcd.createChar(1, temp);          // 온도계모양 출력

  lcd.createChar(2, humi);          // 물컵 모양 출력

  lcd.createChar(3, char_temp);     // 온도 단위 출력

  pinMode(sensor_led,OUTPUT);     // 미세먼지 적외선 led를 출력으로 설정

  pinMode(4, OUTPUT);

 

  pinMode(rgb_red, OUTPUT);     // 3색 LED 모듈 출력으로 설정, 붉은색

  pinMode(rgb_green, OUTPUT);   // 녹색

  pinMode(rgb_blue, OUTPUT);    // 파란색

 

  Serial.begin(9600);            // 시리얼 모니터 시작, 속도는 9600  

}



void loop(){

  digitalWrite(sensor_led, LOW);    // LED 켜기

  delayMicroseconds(sampling);      // 샘플링해주는 시간.


 

  int count=0;

  dust_value = analogRead(dust_sensor); // 센서 값 읽어오기

   

  delayMicroseconds(waiting);       // 너무 많은 데이터 입력을 피해주기 위해 잠시 멈춰주는 시간.

 

  digitalWrite(sensor_led, HIGH);   // LED 끄기

  delayMicroseconds(stop_time);     // LED 끄고 대기  

 

  recent_dust = (0.17 * (dust_value * (5.0 / 1024)) - 0.1) * 1000;    // 미세먼지 값 계산

  five_dust[4] = recent_dust;   // 새로운 미세먼지 값 입력

  total_dust = five_dust[4];               // 5개의 미세먼지 값을 저장할 변수

 

  for(int i=0; i<4; i++)

  {

    total_dust += five_dust[i];

    five_dust[i] = five_dust[i+1];  // 0~4번째까지 미세먼지 값 저장을 위해 4번째 배열 비워주기

  }


  if(five_dust[0] != 0)

  {

    dustDensityug = total_dust / 5;

    Serial.print("Dust Density [ug/m^3]: ");            // 시리얼 모니터에 미세먼지 값 출력   

    Serial.println(dustDensityug);

  }


  int i;

  float humi, temp;               //온도, 습도 값을 위한 변수.

 

  if((i = dht11.read(humi, temp)) == 0) {  // 습도, 온도 값을 읽어오면 시리

    Serial.print("humidity:");          // ‘시리얼 플로터’ 사용위해 이부분 주석 필요

    Serial.print(humi);                  // 습도값 출력

    Serial.print("\t temperature:");       // ‘시리얼 플로터’ 사용위해 이부분 주석 필요

    Serial.println(temp);                  // 온도값 출력

  }

  else{             // 온습도 값을 읽어오지 못했을 때

    Serial.print("Error:");                   

    Serial.print(i);                         

  }

  Serial.println();

 

  lcd.setCursor(0,0);             // 1번째, 1라인  

  lcd.write(byte(1));             // 온도계 출력

  lcd.setCursor(2,0);             // 3번째, 1라인

  lcd.print((int)temp);           // 온도 출력

  lcd.setCursor(5,0);              // 6번째 1라인

  lcd.write(byte(3));             // 온도 단위 출력

 

  lcd.setCursor(8,0);             // 9번째, 1라인

  lcd.write(byte(2));             // 물컵 출력

  lcd.setCursor(10,0);            // 11번째, 1라인

  lcd.print(humi);                // 습도 출력

  lcd.setCursor(14,0);            // 15번째, 1라인

  lcd.print("%");                 // % 출력

 

  lcd.setCursor(0,1);             // 1번째, 2라인

  lcd.print("F.Dust");            // fine dust 글자 출력

  lcd.setCursor(7,1);             // 6번째, 2라인

  lcd.print(dustDensityug);       // 미세먼지 출력

  lcd.setCursor(11,1);

  lcd.print("ug/m3");


 

  if(dustDensityug <= 30.0)       // 대기 중 미세먼지가 좋음 일때 파란색 출력

     light(0, 0, 255);

  else if(30.0 < dustDensityug && dustDensityug <= 80.0)     // 대기 중 미세먼지가 보통 일때 녹색 출력

     light(0, 255, 0);   

  else if (80.0 < dustDensityug && dustDensityug <= 150.0)    // 대기 중 미세먼지가 나쁨 일때 노란색 출력

     light(255, 80, 1);

  else                                                     // 대기 중 미세먼지가 매우 나쁨 일때 빨간색 출력

     light(255, 0, 0);

   

  delay(900);

}


void light(int a, int b, int c){

  analogWrite(rgb_red, a);

  analogWrite(rgb_green, b);

  analogWrite(rgb_blue, c);   

}

게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

평점 0점
첨부파일
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
댓글 수정

비밀번호 :

수정 취소

/ byte

비밀번호 : 확인 취소

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

댓글 입력

댓글달기이름 :비밀번호 :

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

«
»