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

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

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

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 미세먼지 부저
작성자 CS / 배송 (ip:)
  • 작성일 2019-07-09
  • 추천 추천하기
  • 조회수 280
안녕하세요 에듀이노입니다.
수동부저를 사용하시는것을 추천드립니다.
부저를 결합할 땐 브레드보드에 꼽으신후 +라고 써져있는 부분이 핀할당부분이고
나머지 한부분이 GND에 연결하시면 됩니다.
감사합니다.
[ Original Message ]

메뉴얼 대로 코드 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

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

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

«
»