공기정화시 본체

 

공기정화기의 본체는 제작이라고 할 것도 없이 강력 에어서귤레이터와 헤파필터를 구매해서 부착시키기만 하면 된다.

 

 

 

                     +     

 

|

|

V

 

마침 위 두가지를 한꺼번에 판매하는 사이트가 있어 일괄로 구매했는데 비용은 12만원 정도 소요된다. 구매할 때 당시 에는 헤파 필터가 사각형 밖에 없었는데 최근에는 원형으로 된 헤파필터도 있어 좀 더 깔끔하게 에어 서큘레이터에 부착할 수 있게  되었다.   

구매한 사이트 :  https://smartstore.naver.com/mdhong/products/2649155354

 

 

 

시스템 제작

 

공기정화기 자체는 위와 같이 간단히 구성되었지만 원하는 기능을 구현하기 위해 다음과 같은 제어 판을 구성하였다.

 

1. ON-OFF 자동제어용 기능  

 

  -공기정화기를 가동시킬 FAN의 POWER를 ON시키는 기준이 될 미세먼지 농도 수치 그리고 이 수치를 조정할 수 있는 UP/DOWN용 스위치 

 

 -공기정화기를 가동시킬 FAN의 POWER를 OFF시키는 기준이 될 미세먼지 농도 수치 그리고 이 수치를 조정할 수 있는 UP/DOWN용 스위치 

 

 -즉, ON 기준 수치가 50이고 OFF 기준 수치가 20이라면 실내공기 미세먼지 농도가 50 uG이상이 되면 FAN이 자동으로 켜져 공기 정화가 시작되고 공기가 정화되어 20uG미만이 되면 자동으로 꺼진다. 

 

2. 공기정화 효과 확인용 기능

 

-FAN으로 유입되기 공기 즉 헤파필터를 거치기 전 미세먼지 농도를 측정하여 입력으로 표시하고 헤파필터로 부터 나오는 공기의 미세먼지 농도를 출력으로 표시한다. 

 

-그리고 입력되는 미세먼지 농도와 출력되는 미세먼지 농도를 비교하여 제거 효율을 퍼센트 단위로 표시한다.

 

 

3. 시스템 회로 구성

 

 

-제어용 MCU는 아두이노 메가 2560기종을 사용했다.

 

-미세먼지 센서는 PMS 7003 두개을 공기 입력측과 출력측에 각각 부착했다.

 

-각종 수치 디스플레이용으로는 7-segment Display (TM1637)을 5개 사용했다.

 

-ON/OFF 제어 수치 조정용으로는 4개의 택트 스위치를 사용했다.

 

-두개의 RGB LED (WS2812)를 이용하여 입력되는 공기의 미세먼지 농도와 출력되는 미세먼지 농도를 컬러로 표시하였다. 

 

-에어 서큘에이터 전원은 릴레이를 통해 연결하여 FAN 파워를 ON/OFF 하였다.  

 

 

4. 프로그램 샘플

 

 

 

 

시스템 제작 및 사용 후기  

 

 

 

-실제 운영해 보면 헤파필터로 출력되는 공기의 미세먼지 농도는 가동 초기에는 입력 공기의 농도와 비슷하다가 곧 바로 떨어져 0로 표시된다. 따라서 처리효율이 100%가 되어 버리기 때문에 이를 정확히 계산하기 위해서 PMS7003 센서 정보 중에서 마이크로그램 단위가 아닌 파티클 갯수 정보를 사용했다.  즉, PMS 7003 미세먼지 센서에서는 미세먼지 파티클의 갯수를 기준으로 농도를 계산하여 출력해 주지만 동시에 계산에 사용된 파티클의 갯수도 제공되는데 미세먼지 농도가 0uG이라고 해도 파티클의 갯수는 0~200의 수치로 구분되므로 이를 이용하면 정교한 계산을 할 수 있다   

 

-헤파필터에서 출력되는 공기의 미세먼지 수치는 0로 곧바로 낮아 지지만 입력측 공기의 농도는 생각보다 쉽게 낮아 지지 않고 서서히 낮아진다. 즉 실내 공기 전체를 정화하는데에는 상당한 시간이 필요하다.  

 

-시스템을 만들어 놓고 보니 99%의 미세먼지를 정화시키는 효과를 직접 수치로 확인할 수 있어 속이 시원하고 실제로 공기중 미세먼지가 99% 제거되고 있다는 믿음이 간다.     

ESP32는 입출력핀의 갯수와 용도도 많을 뿐더러 이를 응용한 모듈의 유형도 많아 입출력핀을 사용하는 방법이 좀 복잡하다.

 

아래는 ESP32칩을 사용한 기본 모듈인 WROOM32의 핀배열이고 각각의 용도를 표시한 것이다.

 

 

그러나 위 WROOM 32 모듈은 제품 양산용으로서 일반적인 아두이노 메이커들이 직접 사용하여 개발하기에는 불편하기 떄문에 여기에 USB연결장치, 정전압 레귤레이터, 2.54mm 사이즈 핀배열 기능을 추가한 ESP32개발용 보드들을 사용하게 되는데 이 개발용 보드들도 여러 종류가 있어 혼동스럽다. 다음은 일반적으로 많이 사용하는 36핀 ESP32 개발용 보드의 핀인데, 다른 개발용 보드들은 이와는 다른 핀배열을 가질 수 있으므로 반드시 보드에 표시된 GPIO번호를 정확히 확인하고 회로를 구성해야 한다.

 

 

 

ESP32 개발용보드에 표시된 각각의 GPIO핀들의 용도는 다음과 같다.

 

1.입력전용핀

 

GPIO34 에서 GPIO39 까지 6개의 핀은 입력전용으로 출력용도로 사용하면 안된다.

 

2.FLASH메모리 전용핀

 

GPIO6 에서 GPIO11 까지 6개의 핀은 WROOM-32 기본 모듈에서 FLASH메모리용으로 이미 사용하고 있는 핀이다. 개발용 보드에 간혹 이 GPIO6~GPIO11까지의 핀이 연결되어 표시된 경우가 있는데 이를 임의로 사용하면 안된다.

   -GPIO 6 ( SCK/CLK )

   -

3.터치센서용 핀

 

ESP32에는 10개의 터치센서가 내장되어 있다. 즉, 손가락으로 GPIO핀을 터치하면 정전용량를 감지하여 센서로 작동되므로 이 GPIO핀에 구리판 등을 연결하여 터치센서로 사용할 수 있다. 또한 이 터치센서 핀들은 Deep Sleep모드에서 깨어나기 위한 Wake up으로 사용될 수 있으므로 예를 들어 절전sleep 모드에 있다가 사람이 터치하면 깨어나 작동되는 자동화된 기기를 손쉽게 제작할 수 있게 된다.  

 

T0 (GPIO 4)
T1 (GPIO 0)
T2 (GPIO 2)
T3 (GPIO 15)
T4 (GPIO 13)
T5 (GPIO 12)
T6 (GPIO 14)
T7 (GPIO 27)
T8 (GPIO 33)
T9 (GPIO 32)    

 

4.ADC ( Analog to Digital Converter ) 핀

 

ESP8266에서는 10 bit 해상도의 ADC가 1개 있었는데 ESP32에서는 12bit 해상도 ADC가 무려 18 채널이 지원된다. 

12bit 해상도이므로 0~4095까지 구분( 10bit일떄에는 0~1023) 구분할 수 있다. 즉 0V는 0로 3.3V는 4094로 구분되므로훨씬 정교한 제어가 가능해 진다. 

 

ADC1_CH0 (GPIO 36)
ADC1_CH1 (GPIO 37)
ADC1_CH2 (GPIO 38)
ADC1_CH3 (GPIO 39)
ADC1_CH4 (GPIO 32)
ADC1_CH5 (GPIO 33)
ADC1_CH6 (GPIO 34)
ADC1_CH7 (GPIO 35)
ADC2_CH0 (GPIO 4)
ADC2_CH1 (GPIO 0)
ADC2_CH2 (GPIO 2)
ADC2_CH3 (GPIO 15)
ADC2_CH4 (GPIO 13)
ADC2_CH5 (GPIO 12)
ADC2_CH6 (GPIO 14)
ADC2_CH7 (GPIO 27)
ADC2_CH8 (GPIO 25)
ADC2_CH9 (GPIO 26)

   

 

5.DAC ( Digital to Analog Converter ) 핀

 

ESP32에는 8 bit 해상도의 2개의 DAC채널이 있어 디지털값을 아날로그 Volt값 출력으로 변환할 수 있다.

DAC1 (GPIO25)
DAC2 (GPIO26) 

 

6.RTC ( Real Time Clock ) 핀

 

ESP32는 RTC GPIO기능이 지원된다. ESP32 메인 프로세서가 deep sleep모드일 때에도 RTC GPIO핀들은 Ultra Low power co-Processor를 통해 메인 프로세서를 깨울 수가 있는데 다음과 같은 핀들을 통해 외부에서 이 wake up신호를 줄 수 있다.

 

RTC_GPIO0 (GPIO36)
RTC_GPIO3 (GPIO39)
RTC_GPIO4 (GPIO34)
RTC_GPIO5 (GPIO35)
RTC_GPIO6 (GPIO25)
RTC_GPIO7 (GPIO26)
RTC_GPIO8 (GPIO33)
RTC_GPIO9 (GPIO32)
RTC_GPIO10 (GPIO4)
RTC_GPIO11 (GPIO0)
RTC_GPIO12 (GPIO2)
RTC_GPIO13 (GPIO15)
RTC_GPIO14 (GPIO13)
RTC_GPIO15 (GPIO12)
RTC_GPIO16 (GPIO14)
RTC_GPIO17 (GPIO27)

 

7.PWM ( Digital to Analog Converter ) 핀

 

ESP32에는 16개의 PWM 채널이  지원되는데 각각의 채널은 각자 다른 특성의 PWM 신호를 생성할 수 있다. 즉 PWM 신호를 생성하려면 다음 사항을 지정해야 한다.  

 

PWM신호의 주파수

Duty cycle ( 출력하려는 값 )

PWM채널

PWM신호를 출력하려는 GPIO핀 번호    

 

PWM출력용 GPIO핀은 임의의 출력핀을 사용하면 되므로 입력전용핀인 GPIO 34 ~ 39번을 제외한 임의의 핀을 사용하면 된다.   

 

DAC1 (GPIO25)
DAC2 (GPIO26) 

 

8.I2C 통신용 핀

 

ESP32를 아두이노 IDE에서 사용할 때에는 다음과 같은 GPIO핀을 사용해야 한다.

 

GPIO 21 (SDA)
GPIO 22 (SCL)

 

9.SPI 통신용 핀

 

SPI용 핀은 다음과 같이 배치되어 있다.

 

SPI MOSI MISO CLK CS
VSPI GPIO 23 GPIO 19 GPIO 18 GPIO 5
HSPI GPIO 13 GPIO 12 GPIO 14 GPIO 15

10.인터럽트 

 

ESP32의 모든 GPIO핀은 인터럽트용으로 사용할 수 있다.

 

 

구매좌표 : 

 

 

ESP32-S3 Development Boards with Expansion Adapter Kit 2.4G Wifi BT Module ESP32-S3-1 N8R2 N16R8 44Pin Type-C ESP32-S3 - AliExpr

Smarter Shopping, Better Living! Aliexpress.com

www.aliexpress.com

 

ESP32개발환경을 설치하고난 후  아두이노 다른 프로그램을 그대로 Load하여 컴파일하면 대부분 에러없이 진행되나 PWM출력을 위한 analogWrite 문장에서 에러가 발생된다. 이는 ESP32에서는 다양한 방식의 PWM출력을 지원하기 위해 PWM채널이라는 개념이 추가되어 호출방법이 달라졌기 때문이다.

 

 PWM 채널 설정

 

1. ESP32에서는 16개의 독립적인 PWM채널을 사용할 수 있게 되었으며 어느 채널을 사용할 지 선택해야 한다.

 

2 사용하고자 하는 채널의 PWM 주파수를 지정해 주어야 한다. 즉 1초에 몇번 ON/OFF를 반복할 것인지를 지정해야 하는데 통상 LED밝기 조절의 경우 5000Hz 정도면 충분하고, 참고로  아두이노 우노의 경우 490 Hz 또는 980 Hz이다.

 

3. PWM해상도를 지정해 주어야 한다. 아누이노 우노에서는 8 bit 해상도 이었기 때문에 0~255까지의 숫자로 세기를 지정할 수 있었는데 ESP32환경에서는 1bit에서 16 비트까지 임의로 지정해서 사용할 수 있다. 예를 들어 16bit로 지정하면 0~65535까지 좀더 정밀하게 세기를 지정할 수 있게 된다.

 

ESP32에서 채널의 설정은 다음과 같은 문장으로 지정한다.

 

ledcSetup(ch, freq, resolution);   // ch: PWM channel (0~15), freq: PWM 주파수, resolution: PWM  해상도

 

PWM신호 출력하기

 

1. PWM채널을 설정했으면 setup함수에서 PWM신호를 출력할 ESP32 핀번호를 지정한다.

 

     ledcAttachPin(gpio, ch);   // gpio : GPIO 핀 번호,  ch : PWM channel

 

2. 실제 PWM신호를 출력하고자 할 때에 analogWrite문장 대신 다음과 같이 ledcWrite문장으로 지정하면 된다.

 

     ledcWrite(ch, duty); // ch : PWM channel, duty : Duty cycle

 

샘플프로그램

 

 

2 line : 0번 채널에 5000 Hz, 해상도 8bit( 0~255 )를 설정한다.

3 line : GPIO 15번 핀에 PWM 0번 채널을 할당한다.

6~9 line : PWM신호세기를 0~255까지 바꿔가며 출력한다.

샤프 GP2Y1010 미세먼지 센서는 이전에 소개한 PMS7003에 비해 4분의1가격의 적외선방식의 저가형 미세먼지 센서이다. 가격이 저렴하고 구조가 단순한 만큼 측정한계가 있으나 적절한 용도가 있다면 용도에 맟추어 활용할 수 있다.

 

 

GP2Y1010 미세먼지 센서 구조 

 

GP2Y1010 미세먼지 센서는 위와 같은 구조로서 1~3번단자까지를 이용하여 적외선LED를 발광시키고, 미세먼지에의해 반사되는 적외선의 양을 4~6번 단자를 통해 측정하는 방식이다.   

 

그런데 적외선 LED를 요건에 맞춰 구동시키기 위해서는 다음과 같이 220uF 짜리 커패시티와 150옴 저항으로 다음과 같이 회로를 구성해 주어야 한다. 따라서 통상 GP2Y1010 미세먼지 센서를 판매할 때에는 이 커패시티와 저항을 함께 포함해서 판매하는데 간혹 제외되어 있는 경우가 있으므로 주의해야 한다.  

 

 

회로를 구성하고 3번 단자에 신호를 주면 미세먼지 농도에 따라 5번단자의 전압이 변화되는데 다음은 제작사에서 제시한 미세먼지 농도별 전압변화 그래프이다. 즉 미세먼지 농도가 0 ~ 500 ㎍/m³ 로 변할 때 5번 단자 전압은 0.6 ~ 3.5V 로 변하므로 5번 단자 전압을 측정하면 미세먼지 농도를 추산할 수 있다는 것이다.  

 

 

아두이노와의 연결

 

 

위와 같이 회로를 구성하고 적외선 LED신호용 3번 단자는 아두이노 디지털출력핀 (여기에서는 10번), 전압을 읽기 위한 5번 단자는 아두이노 아날로그 입력핀(여기에서는 A5)에 연결한다

 

샘플프로그램

 

 

측정된 값

 

위 샘플프로그램으로 측정된 값을 아두이노 시리얼플로터 챠트로 출력해 보면 다음과 같은데 측정값 변동치가 너무 커서 알아보기가 힘들다.

 

 

 

개선된 프로그램

23 line : 20회 이동평균값으로 수치를 smooth시킨다.

 

개선된 샘플프로그램 측정값

 

 

GP2Y1010 미세먼지 센서의 한계

 

위와 같이 이동평균값으로 비교적 안정된 수치를 얻는다 해도 여전히 다음과 같은 한계가 있다.

 

1) 영점보정의 문제 : 각각의 센서는 영점보정이 안된 상태로서 기준점이 애메하여 출력되는 수치를 신뢰할 수 없다. 즉, 미세먼지가 전혀 없는 상태에서 출력값이 0이 되도록 조정하는 영점보정 작업을 센서별로 따로 해 주어야 한다. 

 

2)적외선 간섭문제 : 적외선 반사량을 측정하는 방식이므로 센서에 햇빛이나 다른 센 불빛이 비춰질 경우 측정값이 교란될 수가 있다. 즉 실내에서 측정했을 때와 실외에서 햇빛 아래에서 측정할 때가 각각 달라질 수 있다는 것이다.

 

위와 같은 한계에도 불구하고 가격이 저렴하기 때문에 적당한 용도 예를 들어 담배연기탐지나 납땜연기 탐지 등과 같이 정확한 수치보다는 개략적인 미세먼지 변화를 탐지하기 위한 용도로는 다양하게 활용할 수 있다.     

+ Recent posts