인투피온 강좌/아두이노 팁(Tip)

아두이노 미세먼지 센서 LED LCD 출력하기

인투피온 2021. 11. 26. 14:36

 

 

안녕하세요~!

저번 시간에는 미세먼지 센서 사용법에 대해 알아보았는데요.

이때는 시리얼 모니터로만 측정값 확인이 가능해서

컴퓨터가 없으면 안 됐었습니다.

그래서 오늘은 미세먼지 측정값을 보기 위해 I2C LCD 와 RGB LED를 추가해

눈으로 쉽게 볼 수 있도록 해보겠습니다.

 

 

위 움짤처럼 바로 볼 수 있게끔 말이죠

 

미세먼지 농도를 LCD, LED로 확인하기

 

 

 

회로도

 

 

위 회로를 따라 연결해 주세요.

선이 많아 보여도 막상 연결해보면 뚝딱!

 

 

아두이노 코딩하기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
 
#define BLUE 9      // RGB LED Module
#define GREEN 10
#define RED 11
 
LiquidCrystal_I2C lcd(0x27162); // I2C LCD 주소값 확인
 
 
int DustPin = 8;    //먼지 센서 
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 30000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;
float ugm3 = 0;
 
int redValue = 0;     //RGB LED
int greenValue = 0;
int blueValue = 0;
 
void setup() {
  Serial.begin(9600);
 
  pinMode(DustPin ,INPUT);      // 먼지센서
  starttime = millis();
  
  lcd.init();                   // LCD
  lcd.backlight();
  lcd.setCursor(0,0);           //
  lcd.print("  Dust Density "); 
 
  pinMode(RED, OUTPUT);         // RGB LED
  pinMode(GREEN, OUTPUT);
  pinMode(BLUE, OUTPUT);
  digitalWrite(RED, LOW);
  digitalWrite(GREEN, LOW);
  digitalWrite(BLUE, HIGH);
}
 
void loop() {
  
  redValue = 0
  greenValue = 0;
  blueValue = 0;
 
  duration = pulseIn(DustPin , LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;
 
  if ((millis()-starttime) > sampletime_ms)
  {
    ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=>100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62// using spec sheet curve
    ugm3= concentration * 100 /13000;
    
    Serial.print("ugm3 = " ); //미세먼지 시리얼모니터
    Serial.print(ugm3);
    Serial.println("ug/m3" );
    
    lcd.setCursor(0,1);       //미세먼지 LCD 출력
    lcd.print("  ");
    lcd.print(ugm3);
    lcd.print(" ug/m3  ");
 
    if(ugm3<30)  //각 수치에 따른 LED 색상 
    {
      greenValue = 20;
      blueValue = 255;
      redValue = 0
      analogWrite(GREEN, greenValue);
      analogWrite(BLUE, blueValue);
      analogWrite(RED, redValue);
    }
      else if(ugm3<80)
      {
        greenValue = 255;
        blueValue = 20;
        redValue = 0
        analogWrite(GREEN, greenValue);
        analogWrite(BLUE, blueValue);
        analogWrite(RED, redValue);
        
      }
        else if(ugm3<150)
        {
          redValue = 250
          greenValue = 60;
          blueValue = 0;
          analogWrite(RED, redValue);
          analogWrite(GREEN, greenValue);
          analogWrite(BLUE, blueValue);
        }
            else if(ugm3>150)
          {
            redValue = 220;     
            greenValue = 0;
            blueValue = 0;
            analogWrite(RED, redValue);
            analogWrite(GREEN, greenValue);
            analogWrite(BLUE, blueValue);  
          }
     
    lowpulseoccupancy = 0;
    starttime = millis();
  }
}
 

 

 

이제 이 소스를 업로드하면 결과가...!?

 

 

 

 

LED의 색상은 위의 기준을 적용했습니다

평소에는 정상적인 수치를 기록하지만 이물질이나 먼지를 넣게 되면

수치가 증가하는 것을 볼 수 있습니다.

여기까지 미세먼지 측정 센서 활용법을 알아보았고,

다음에는 블루투스를 통해 핸드폰으로 값을 받아보는 것을 차근차근 알아보겠습니다!!

 

 

 

 

전자부품 전문 쇼핑몰 인투피온입니다.
필요한 자재에 관한 문의는 홈페이지를 통한 견적 신청, 혹은 전화나 메일로 주시면 빠른 회신을 드릴 수 있도록 하겠습니다.

▶ 홈페이지: http://intopion.com/
▶ 전화: 02-2615-7278
▶ FAX : 02-6124-4242
▶ 메일: intopion@hanmail.net