라즈베리파이 4B에 PMS5003ST 붙이기

지난 글(라즈베리파이 4B에 MH-Z19B 붙이기)에 이어, 라즈베리파이 4B에 PMS5003ST 를 붙여서 작업중인 디지털 앨범에 온습도, 미세먼지 지수 등도 출력될 수 있도록 진행하려고 합니다. 디지털 앨범은 이 센서까지만 붙이고 조금만 예쁘게 정리한 뒤에 마무리하면 될 것 같아요.


PMS5003ST: 온습도, 미세 먼지 측정 센서

사실 온습도 센서와 미세 먼지 센서를 각각 구매해서 붙일 예정이였는데, PMS5003ST 는 하나의 센서에서 온습도와 미세 먼지를 모두 측정 가능해서 크게 고민없이 바로 구매하게 됐습니다. 

본 센서의 특징을 간단히 정리하면 다음과 같습니다.

  • 온, 습도 측정
  • 미세 먼지(PM1.0, PM2.5, PM10) 측정
  • 포름알데히드 측정
  • 동작 전압: 5V
  • 소모 전류: < 100mA
  • 센서 출력 방식: UART
  • 많이 쓰이는 센서여서인지, 8핀 출력 포트에서 UART 핀만 편하게 빼주는 인터페이스 보드도 같이 판매해서 구매함.
PMS5003ST 사진


라즈베리파이 4B 와 PMS5003ST 연결

라즈베리파이 4B 에는 총 6개의 UART 포트가 있습니다. 제 경우 UART0 는 CO2 측정 센서가, UART1 는 Mini UART 가 사용 중이므로 UART2 ~ UART6 까지 4개의 포트가 남았네요.

이번에도 지난 글에서 UART0 에 붙였던 CO2 센서(MH-Z19B)처럼 남는 UART 포트에 PMS5003ST를 붙이려 했지만, 이번엔 센서 찾아보면서 처음 알게된 UART to USB 케이블을 써서 USB 포트에 한번 붙여보기로 했습니다. 추후 구현할 프로그램 입장에서는 USB나 UART나 통신할 디바이스만 달라지는 것 뿐일테구요.

따라서 Datasheet 찾아볼 필요도 없이 아래 "1번)" 순서대로 부품들 조립해서 USB 포트에 꼽기만 했는데, 확실히 편하더라구요. "2번)" 순서는 지난 글의 CO2 센서연결 순서인데, 비교 차원에서 적어봤습니다.

이번 PMS5003ST 센서 연결은 CO2 센서 대비 양쪽 모두 암놈인 케이블 한쪽 잘라서 정리하고, 브레드보드에 꼽고, 점퍼 선 따서 라즈베리파이에 붙이고 하는 과정들이 생략됐네요.

1번) PMS5003ST -> 8핀 케이블 -> 인터페이스 보드 -> USB to UART 케이블 -> 라즈베리파이 4B
2번) MH-Z19B   -> 7핀 케이블 -> 브레드 보드     -> 점퍼 선            -> 라즈베리파이 4B

실제 연결 사진은 다음과 같습니다. 막상 연결하고 보니... 직접 점퍼 날렸던 CO2 센서가 더 단정한 느낌이 드네요. USB to UART 케이블의 USB 쪽은 아래 사진의 SSD 밑에 꼽아뒀습니다.

라즈베리파이 4B <-> PMS5003ST 연결 사진


PMS5003ST 센서 값 출력해보기

회사에서 근 8년간 Java 만 쓰다보니.. 이젠 C 나 C++ 이 많이 어색합니다. 물론 센서 값 받아오는 프로그램 같은 걸 Java 로 짠다는 것도 어색하긴 한데, 뭐 그냥 편한게 좋은거라고 생각하겠습니다. 

Java 어플리케이션 속도의 경우, 라즈베리파이 같은 요즘 싱글 보드 컴퓨터들의 스펙이 많이 좋아져서인지, 빌드나 구동 시 크게 느리다는 느낌은 못받겠더라구요. SSD 에서 돌리는 덕분일 수도 있는데 SSD 를 붙일 수 있다는 것도 하나의 스펙으로 볼 수 있을 것 같습니다.

구현할 어플리케이션은 아쉽게도 지난번처럼 이미 구현된 코드를 구할수가 없었고, 그나마 라즈베리파이 3B 에서 본 센서와 비슷한 PMS7003 의 센서값 받아오는 코드를 찾아 참고했습니다.

다음은 구현한 어플리케이션을 간단히 정리한 내용이고, 코드는 https://github.com/alprogs/pms5003st-tool 에 업로드 해 두었습니다.

  • Gradle 기반 Java 프로젝트
  • 라이브러리 사용: jSerialComm, lombok, slf4j
  • 센서 동작 모드(Active, Standby) 모두 지원

다음은 Passive 모드로 동작시킨 센서값이 출력되는 예시이며, Active 모드도 센서 동작만 다를뿐 출력 내용은 동일합니다.

$ gradle run

> Task :run
[main] INFO pms5003st.App - START
[main] INFO pms5003st.driver.PMS5003STDriver - Initializing serial port.
[main] INFO pms5003st.driver.PMS5003STDriver - Serial port initialized with {PORT_STATE=true, PARITYBITS=0, STOPBITS=1, TIMEOUT=0, PORT_NAME=/dev/ttyUSB0, BAUDRATE=9600, DATABITS=8}.
[main] INFO pms5003st.driver.PMS5003STDriver - Change sensor operating mode to PASSIVE_MODE
[main] INFO pms5003st.driver.PMS5003STDriver - Mode was changed to PASSIVE_MODE.
[main] INFO pms5003st.App -
PMS5003ST Measurement Result ==============
PM 1.0(CF1) : 11
PM 2.5(CF1) : 17
PM 10.0(CF1) : 23
PM 1.0(ATMO) : 11
PM 2.5(ATMO) : 17
PM 10.0(ATMO) : 23
PM 0.3(COUNT): 1992
PM 0.5(COUNT): 595
PM 1.0(COUNT): 143
PM 2.5(COUNT): 11
PM 5.0(COUNT): 6
PM 10.0(COUNT): 6
FORMALDEHYDE : 0.011
TEMPERATURE : 23.2
HUMIDITY : 57.8
===========================================

[main] INFO pms5003st.App -
PMS5003ST Measurement Result ==============
PM 1.0(CF1) : 11
PM 2.5(CF1) : 17
PM 10.0(CF1) : 23
PM 1.0(ATMO) : 11
PM 2.5(ATMO) : 17
PM 10.0(ATMO) : 23
PM 0.3(COUNT): 1992
PM 0.5(COUNT): 595
PM 1.0(COUNT): 143
PM 2.5(COUNT): 11
PM 5.0(COUNT): 6
PM 10.0(COUNT): 6
FORMALDEHYDE : 0.011
TEMPERATURE : 23.2
HUMIDITY : 57.8
===========================================
...


* Environment

- HW: Raspberry Pi 4 Model B 8G
- OS: Raspberry Pi OS Buster 64bit
- openjdk-14-jdk
- Gradle 6.6


* References

Raspberry Pi Model 4B Datasheet (Release 1, 2019.06.21)
PMS5003ST Datasheet (Ver 2.6, 2017.02.01)


1 thought on “라즈베리파이 4B에 PMS5003ST 붙이기”

  1. 거실에 투야커넥트 때문에 라즈베리파이를 설치할까 고민중이었는데 이렇게도 활용이 가능하군요..
    정말 놀라움의 연속입니다.. 나중에 한번 꼭 도전해보고 싶네요..

    응답

Leave a Comment

%d 블로거가 이것을 좋아합니다: