에듀이노-아두이노 전문 교육쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰
뒤로가기

묻고답하기

제목

미세먼지 부저

작성자 gjm9834(ip:)

작성일 2019-07-09

조회 156

평점 0점  

추천 추천하기

내용

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

}

첨부파일

비밀번호
수정

비밀번호 입력후 수정 혹은 삭제해주세요.

댓글목록

등록된 댓글이 없습니다.

댓글 수정

이름

비밀번호

내용

/ byte

수정 취소

비밀번호 :

확인 취소

댓글 입력

이름

비밀번호

내용

/ byte

평점

왼쪽의 문자를 공백없이 입력하세요.

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

댓글 입력

이름

비밀번호

내용

/ byte

왼쪽의 문자를 공백없이 입력하세요.

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

고객센터

    1670-9626

  • 팩스.063-902-6678
  • 이메일.eduino@robodyne.co.kr
  • Kakao. 에듀이노
  • 운영시간 : AM 10:00 ~ PM 16:30
  • 점심시간 : PM 12:00 - PM 13:00 토/일/공휴일 휴무
  • 고객센터 연결하기
입금계좌
  • 예금주: (주)로보다인시스템
  • 국민. 754801-01-760296
  • 농협. 301-0234-1423-01
  • IBK기업은행. 506-080015-01-016
배송 안내
  • 배송 방법 : 택배
  • 배송 지역 : 전국지역
  • 배송 비용 : 조건부 무료 : 주문 금액 100,000원 미만일 때 배송비 3,000원을 추가합니다.
  • 배송 기간 : 1일 ~ 2일
  • 배송 안내 :
    - 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.
    고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.
교환/반품 안내
교환 및 반품이 가능한 경우
- 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의
  경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.
- 공급받으신 상품 및 용역의 내용이 표시.광고 내용과
  다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우
- 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여
  포장 등을 훼손한 경우는 제외
- 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우
  (예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에
  따른 반품/교환은 제조사 기준에 따릅니다.)
- 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을
  제공한 경우에 한 합니다.
- 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품등의 포장을 훼손한 경우
  (자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
  (색상 교환, 사이즈 교환 등 포함)
«
»