Mình chia sẻ quá trình tự DIY một chiếc máy đo chất lượng không khí chất lượng cao. Bản thân nội dung bài mình tập trung vào xây dựng phần cứng và phần mềm giúp thiết bị hoạt động, mọi thứ ở dạng module dễ thay thế.
Thành phẩm hiện tại chưa có yếu tố thẩm mỹ, mình cũng chưa có bất cứ ý tưởng gì về việc làm cho nó đẹp ở giai đoạn này, nên máy đo chất lượng không khí của mình đang xấu, mà xấu cũng được, trước tiên phải hoạt động đã. Vì thế, nếu cần đẹp hơn, các bạn hãy tiếp tục sáng tạo và Do It Yourself nhé.
Lưu ý bài dài: Bài này chia sẻ chi tiết từ việc chọn linh kiện, xử lý, lắp ráp phần cứng, cài đặt phần mềm… nên sẽ không ngắn.
Mình là người quan tâm đến chất lượng không khí, đặc biệt là chất lượng không khí trong nhà, vì vậy mình luôn sử dụng máy đo chất lượng không khí. Tuy nhiên, trên thị trường có quá nhiều máy đo chất lượng không khí giá rẻ nhưng gần như không ai biết về độ chính xác của những máy đo này. Và thường do giá rẻ, nên thường chỉ được trang bị cảm biến chất lượng thấp, có thể sai số ngay từ đầu hoặc sau một thời gian sử dụng. Các cảm biến không khí tích hợp sẵn trong máy lọc không khí cũng vậy, muôn hình vạn trạng, không ai dám chắc về độ chính xác (theo thời gian).
Mình không hề muốn mua một chiếc máy đo mà lại không chính xác hoặc. Vì thế, mình đã từng mua mẫu máy đo Qingping Air Monitor 2 với giá khá cao, khoảng 3 triệu đồng để dùng thử, đây là một mẫu được đánh giá khá tốt vì sử dụng nhiều cảm biến chất lượng tương đối cao.
Thành phẩm hiện tại chưa có yếu tố thẩm mỹ, mình cũng chưa có bất cứ ý tưởng gì về việc làm cho nó đẹp ở giai đoạn này, nên máy đo chất lượng không khí của mình đang xấu, mà xấu cũng được, trước tiên phải hoạt động đã. Vì thế, nếu cần đẹp hơn, các bạn hãy tiếp tục sáng tạo và Do It Yourself nhé.
Lưu ý bài dài: Bài này chia sẻ chi tiết từ việc chọn linh kiện, xử lý, lắp ráp phần cứng, cài đặt phần mềm… nên sẽ không ngắn.
Nhu cầu sử dụng
Mình là người quan tâm đến chất lượng không khí, đặc biệt là chất lượng không khí trong nhà, vì vậy mình luôn sử dụng máy đo chất lượng không khí. Tuy nhiên, trên thị trường có quá nhiều máy đo chất lượng không khí giá rẻ nhưng gần như không ai biết về độ chính xác của những máy đo này. Và thường do giá rẻ, nên thường chỉ được trang bị cảm biến chất lượng thấp, có thể sai số ngay từ đầu hoặc sau một thời gian sử dụng. Các cảm biến không khí tích hợp sẵn trong máy lọc không khí cũng vậy, muôn hình vạn trạng, không ai dám chắc về độ chính xác (theo thời gian).
Mình không hề muốn mua một chiếc máy đo mà lại không chính xác hoặc. Vì thế, mình đã từng mua mẫu máy đo Qingping Air Monitor 2 với giá khá cao, khoảng 3 triệu đồng để dùng thử, đây là một mẫu được đánh giá khá tốt vì sử dụng nhiều cảm biến chất lượng tương đối cao.
Tuy nhiên, Qingping Air Monitor 2 khá khó mua vì gần như chưa có ai ở VN bán, hầu như phải đặt hàng qua Taobao hoặc Aliexpress, và giá thành cũng không hề rẻ. Để tích hợp vào Home Assistant cũng mất khá nhiều thời gian và phải mày mò nhiều.
Giờ mình muốn có thêm thiết bị theo dõi chất lượng không khí cho một vài khu vực khác trong nhà, nên mình đã thử sức tự DIY một chiếc máy đo, với giá thành dễ chịu hơn, mà vẫn đáp ứng được nhu cầu sử dụng.
Mình có một số nhu cầu như sau:
- Sử dụng cảm biến chất lượng cao, đây là yếu tốt tiên quyết. Trong dự án DIY này, toàn bộ cảm biến mình dùng sẽ từ Sensirion, một thương hiệu cảm biến nổi tiếng của Thụy Sỹ, chuyên cung cấp cảm biến công nghiệp với độ chính xác cao và bền bỉ trong nhiều năm (đa phần là trên chục năm).
- Có thể kết nối Wifi để đẩy dữ liệu về Home Assistant. Giải pháp là sử dụng một bảng mạch ESP32 để kết nối với các cảm biến, mình sẽ dùng ESPHome để nạp phần mềm cho ESP32. Tin vui là toàn bộ cảm biến mình dùng đều tương thích với ESP32 và ESPHome, đồng thời việc kết nối giữa ESPHome và Home Assistant có thể diễn ra tự động, nên rất dễ tích hợp và làm việc với nhau.
- Có thể đo các thông số: Bụi mịn (PM), nồng độ CO2, nhiệt độ, độ ẩm, VOC – tương tự như máy Qingping Air Monitor 2 mà mình đang dùng. Các bạn nếu muốn tiết kiệm chi phí có thể dùng ít cảm biến hơn hoặc mua dần dần bổ sung thêm theo nhu cầu.
Chuẩn bị phần cứng
Đây là danh sách phần cứng cần chuẩn bị, tất cả mọi linh kiện mình đều mua trên Shopee được.
Linh kiện thiết yếu:
- Bảng mạch ESP32: ESP32-WROOM-32D (chọn phân loại TypeC-D sẽ có sẵn anten wifi và dùng cổng TypeC) – hoặc các bạn có thể sử dụng các bảng mạch ESP32 khác tùy ý, miễn sao có chân 5V, 3.3V, GND, GPIO 21 và 22. [~100,000đ]
- Cảm biến bụi mịn: Sensirion SPS30 (mình mua tại shop này thấy ok, có kèm dây để cắm cảm biến. Một số shop khác có thể sẽ không kèm dây, hoặc không giao hàng) [~450,000đ]
- Cảm biến CO2, nhiệt độ, độ ẩm: Sensirion SCD30 [~300,000đ]
- Cảm biến VOC: Sensirion SPG4x (SPG40 chỉ đo VOC, SPG41 đo VOC và NOx) [~170,000đ]
- Update: Màn hình hiển thị (tùy chọn): OLED 0.96 inch 128×64 [~50,000đ]
Một số món linh kiện bổ sung:
- Breadboard MB-102 (chọn phân loại 2 cái 400 lỗ)
- Dây cắm mạch (chọn phân loại Đực – Đực 10cm, để cắm )
- Jump Đực Đơn Thẳng 2.54mm 40p – (để sau này hàn vào SCD30)
- Một bộ mỏ hàn (để hàn Jump vào cảm biến)
Quảng cáo
Tổng chi phí phụ tùng cho mọi thứ là hơn 1 triệu đồng, chỉ bằng 1/3 so với mua 1 sản phẩm cảm biến hoàn chỉnh như Qingping, mà Qingping cũng mới chỉ dùng cảm biến CO2 Sensirion SCD40, cảm biến VOC Sensirion SPG40 và cảm biến bụi mịn đến từ thương hiệu Grandway, là cảm biến bụi mịn ở phân khúc thấp hơn nếu so với Sensirion SPS30.
Tất nhiên Qingping còn đắt tiền do đã được thiết kế hoàn chỉnh, có màn hình cảm ứng, có ứng dụng độc lập v.v… Nhưng đó cũng là những thứ mà mình chưa cần ở chiếc máy DIY, hiện mình chỉ cần có kết nối Wifi và làm việc được với Home Assistant.
Nguyên lý hoạt động
Trước khi bắt tay vào làm, chúng ta cần hiểu một chút về nguyên lý hoạt động. Mình build bộ này là để sử dụng chung với Home Assistant (HASS) mà mình đang host sẵn ở trên NAS, vì vậy ngoài những phần cứng mình đã liệt kê ở trên, nếu bạn chưa dùng Home Assistant, sẽ cần thêm 1 mini server (ví dụ như Raspberry Pi) để chạy Home Assistant và ESPHome – hoặc các bạn có thể chạy 2 món đó trên một chiếc PC / Mini PC mà các bạn đang sử dụng (thông qua Docker).
Về nguyên lý hoạt động chung: ESP32 sẽ chạy phần mềm được nạp từ ESPHome, trong đó sẽ nhận tín hiệu từ các cảm biến và rồi gửi dữ liệu về Home Assistant. Trên Home Assistant chúng ta sẽ cấu hình để hiển thị các thông số đo đạc được, cũng như có thể theo dõi chất lượng không khí theo thời gian.
Mình chọn ESP32-WROOM-32D vì đây là một bảng mạch phát triển khá đầy đủ, cả về chức năng lẫn các chân kết nối, để sau này có thể gắn thêm linh kiện khác, ví dụ như mình muốn gắn thêm màn hình hiển thị, hoặc nút bấm vật lý, có thể sẽ dùng thêm các chân kết nối khác, nên mình chọn bảng mạch này, tuy hơi to nhưng có nhiều chân giao tiếp.
Cảm biến bụi mịn SPS30: Đây là cảm biến đo bụi mịn, sử dụng công nghệ laser cho độ chính xác cao, sai số thấp và độ bền trên 10 năm, các bạn có thể tham khảo thêm về thông tin của cảm biến này trên trang chủ của Sensirion, đặc biệt là datasheet và guideline lắp ráp phần cứng. Cảm biến này có quạt bên trong để hút không khí vào cho cảm biến đo bụi mịn. Các bạn có thể xem lại bài so sánh nguyên lý của hai loại cảm biến bụi mịn hồng ngoại và laser mình từng chia sẻ.
Quảng cáo
Cảm biến CO2, nhiệt độ, độ ẩm: Mình chọn SCD30, dùng công nghệ đo CO2 cũ hơn SCD40 và SCD41, nhưng lại có độ chính xác cao hơn và ít phải cân chỉnh hơn. Mình giải thích lý do tại post trên FB, các bạn có thể xem lại. Ngoài ra nên tham khảo datasheet và guideline lắp ráp phần cứng tại trang chủ Sensirion.
Cảm biến VOC: về bản chất, cảm biến này sẽ cho ra VOC Index, là một chỉ số thể hiện sự có mặt của các hợp chất hữu cơ trong không khí, nhằm giúp chúng ta có cái nhìn tổng quan về chất lượng không khí nói chung, không phải là để đo từng chất hữu cơ đơn lẻ. Các bạn có thể tham khảo thêm thông tin về SPG40 và SPG41.
Các cảm biến trên sẽ giao tiếp với ESP32 thông qua giao thức I2C, hiểu đơn giản là chúng ta chỉ cần nối 2 chân dữ liệu SDA-SCL của cảm biến vào 2 chân GPIO21 và GPIO22 của ESP32, và khai báo địa chỉ của từng cảm biến là ESP32 có thể gửi nhận dữ liệu với cảm biến rồi.
Update: Màn hình hiển thị, loại mình sử dụng cũng dùng giao thức I2C, vì vậy cũng chỉ cần kết nối 2 dây nguồn và 2 dây dữ liệu tương tự các cảm biến là có thể hiển thị được thông tin. Có thể code để dùng 2 chân GPIO khác cũng được, tránh gây nhiễu tín hiệu của các cảm biến.
Còn ESPHome và Home Assistant có giao thức ngầm để tự động hoạt động với nhau nên bộ đôi này rất hợp nhau và hợp cho dự án này.
Xử lý phần cứng
Khi mua về, các phần cứng sẽ cần được xử lý một chút trước khi ráp mọi thứ lại với nhau. Với cảm biến bụi mịn SPS30, đi kèm sẽ có dây để cắm vào cảm biến, tuy nhiên đầu dây còn lại đang chưa có gì, các bạn có thể hàn vào jump đực hoặc hàn vào dây cắm mạch, mục đích là để dễ dàng cắm được xuống Breadboard.
Đối với cảm biến CO2 SCD30 và VOC SGP40 cũng vậy, có sẵn các lỗ chờ, các bạn sẽ cần hàn jump đực vào để có thể cắm được vào bảng mạch.
Như những hình trên là những gì mà mình nhận được khi đặt hàng.
Và dưới đây là hình ảnh sau khi đã xử lý, mình hàn chân jump đực vào các bo mạch của cảm biến.
Lắp ráp phần cứng
2 cái Breadboard, các bạn có thể gắn giống như hình dưới đây, mỗi một hàng chân của ESP32 sẽ nằm trên một Breadboard, như vậy sẽ có nhiều lỗ để cắm dây kết nối hơn. Các cảm biến các bạn cũng có thể cắm vào tương tự.
Có một lưu ý của Sensirion đó là khi gắn cảm biến SCD30, mặt dưới của cảm biến cũng cần phải hở ra một chút như hình, về cơ bản khi hàn jump đực vào là đủ khoảng trống, ngoài ra, mặt dưới góc chữ S cũng là cảm biến độ ẩm và nhiệt độ, nên tránh xa nguồn nhiệt và ở vị trí thoáng.
Ở ESP32 các bạn chỉ cần dùng đến các chân kết nối sau: 5V, 3V3, GND, GPIO21 và GPIO22, những chân này đều đã được ghi rõ trên bảng mạch.
Và sau đó, có thể tiến hành kết nối dây.
Cảm biến bụi mịn SPS30
Đây là layout các chân của cảm biến, có 5 chân lần lượt như hình, các bạn kết nối vào ESP32 như bảng mình để bên dưới. Lưu ý chân số 4 – SEL nhất định phải nối vào GND để chọn chế độ I2C cho cảm biến, nếu không chân 2 và chân 3 sẽ ra điện 5V có thể làm hư bảng mạch ESP32 đang chạy điện 3.3V ở chân GPIO21 và 22.
Cảm biến CO2 SCD30
Cảm biến SCD30 có nhiều chân, nhưng chúng ta chỉ sử dụng: VDD, GND, SCL, SDA, SEL. Trong đó, chân SEL cũng cần kết nối GND tương tự như cảm biến bụi mịn. Các bạn có thể kết nối như bảng dưới.
Cảm biến VOC SPG40/41
Trên cảm biến VOC sẽ có 5 chân, nhưng chúng ta chỉ dùng 4 chân 3.3V, GND, SCL, SDA và kết nối như bảng dưới
Sau khi kết nối toàn bộ các linh kiện, các bạn kiểm tra kĩ lại 1 lượt các chân kết nối, lưu ý 2 chân SEL của cảm biến bụi mịn và cảm biến CO2 phải được nối vào GND, và chân nguồn của cảm biến VOC sử dụng điện 3.3V chứ không phải 5V như 2 cảm biến còn lại.
Đối với cảm biến bụi mịn SPS30, nếu đặt cảm biến nằm ngang, mặt vỏ kim loại sẽ phải quay lên trên như hướng dẫn của Sensirion, để layout của các lỗ hút khí như ảnh dưới đây. Nếu các bạn đặt dọc, hãy vào trang chủ của Sensirion để xem hướng dẫn lắp đặt, họ có guide khá kĩ để đảm bảo đường gió vào và ra giúp cảm biến hoạt động chính xác.
Các bạn có thể dùng băng keo 2 mặt để cố định cảm biến bụi mịn. Hoặc nếu vẫn muốn nhấc ra để sau này design thêm case ngon lành, thì có thể tạm cố định bằng vài khúc jump tại 4 cạnh của cảm biến như mình.
Update: Màn hình
Màn hình mình chọn có kích thước khá nhỏ, vì vậy sẽ có 2 giải pháp. Giải pháp 1 là sử dụng 1 màn hình nhưng về sau sẽ code để có thể lật trang nhằm hiển thị nhiều thông tin lần lượt. Giải pháp 2 là sử dụng nhiều màn hình và mỗi màn hình hiển thị một vài thông tin.
Bản thân mình chọn giải pháp sử dụng 2 màn hình, trong đó màn hình 1 sẽ thường trực hiển thị thông số bụi mịn, màn hình 2 sẽ luân phiên hiển thị độ ẩm, nhiệt độ và nồng độ CO2, VOC.
Màn hình cũng đã có sẵn 4 chân, các bạn chỉ cần cắm vào Breadboard và nối dây là được.
Trong trường hợp các bạn sử dụng nhiều màn hình, vì các màn hình đều dùng chung giao tiếp I2C và có cùng 1 địa chỉ, vì thế giải pháp là cấu hình thêm chân GPIO khác để giao tiếp với màn hình thứ 2 (ví dụ mình dùng giao thức I2C với chân GPIO 16 và GPIO 17 cho màn hình thứ 2)
Cài đặt phần mềm
Chúng ta sẽ cần:- Home Assistant: các bạn có thể xem guide hướng dẫn cài Home Assistant tại trang chủ. Nếu bạn nào dùng NAS Synology có thể tham khảo thêm bài hướng dẫn chi tiết của mình tại đây.
- ESPHome: Mình cài đặt ESPHome bằng docker trên NAS luôn. Về cơ bản cũng rất dễ. Còn nếu dùng phần cứng khác như Raspberry Pi cài Home Assistant OS, các bạn có thể cài ESPHome Device Builder trong Add-on của Home Assistant.
- Để nạp phần mềm (nạp code) cho ESP32 lần đầu, các bạn có thể cắm thẳng ESP32 vào thiết bị đang chạy ESPHome, đây là cách dễ nhất.
- Một cách khác (như mình sử dụng) là cắm ESP32 vào máy tính, rồi truy cập ESPHome Device Builder từ máy tính và nạp phần mềm thông qua máy tính. Cách này sẽ phức tạp hơn vì các bạn sẽ phải tạo tên miền và dùng chứng chỉ SSL cho ESPHome. Vì vậy mình khuyến nghị dùng cách cắm trực tiếp sẽ dễ hơn.
- Các lần nạp code sau có thể update OTA thông qua Wifi vì ESPHome sẽ hỗ trợ giao thức này.
- Trong trường hợp cắm ESP32 vào máy tính mà không nhận, các bạn cần cài đặt driver. Với bảng mạch ESP32-WROOM-32D mà mình dùng trong bài này, sử dụng chip giao tiếp CP2102, các bạn có thể tải tại trang driver CP210x của Silicon Labs
- Trong trường hợp ESPHome nhận mà các bạn nạp phần mềm không được hoặc bị lỗi, có thể sử dụng công cụ nạp online tại đây https://web.esphome.io/ để mồi trước phần mềm và cấu hình Wifi, sau đó quay lại ESPhome của các bạn để Take Control thiết bị.
Sau đó một bảng Install sẽ hiện ra, các bạn có thể chọn Skip this step.
Tiếp đến, có một bảng các bo mạch ESPHome hỗ trợ hiện ra, các bạn chọn ESP32.
Cuối cùng khi ESPHome hiện chúc mừng, các bạn tiếp tục Skip. Mục đích là để chúng ta vào Edit code bên trong.
Các bạn chọn Edit, sẽ thấy giao diện để các bạn sửa code (file yaml). Các bạn có thể tham khảo code của mình (Nội dung sau dấu # là để các bạn tự tùy biến hoặc giải thích ý nghĩa của dòng code). Hoặc có thể tham khảo code mẫu từ ESPHome tại đây: SPS30, SPG4x và SCD30
Chi tiết code khá dài nên mình để link bài viết gốc trên website của mình để anh em có thể tiện xem và copy nếu cần thiết nhé. Hoặc anh em có thể tải file yaml tại đây (mình upload lên file.kiwi để share với anh em)
Sau khi hoàn thiện code xong, các bạn ấn Save lại. Sẽ quay lại màn hình chính của ESPHome. Lúc này hãy chọn menu và ấn Validate, để ESPHome kiểm tra lại code của các bạn đã đúng chưa.
Nếu tất cả đã đúng, các bạn sẽ nhận được dòng xanh lá như hình INFO Configurartion is valid, còn nếu sai, sẽ hiện màu đỏ và thông tin về dòng code bị sai.
Khi code đã đúng rồi, các bạn có thể cắm ESP32 vào và nạp code này vào ESP32 bằng nút Install. Khi cắm ESP32 vào máy, các bạn cần phải vào bootloader bằng cách nhấn giữ nút Boot và nhấn nút EN trên ESP32 để reboot vào chế độ bootloader.
Lần đầu nạp code sẽ phải cắm qua USB và có thể sẽ mất nhiều thời gian (có thể lên tới 15-20 phút tùy tốc độ mạng và tốc độ của thiết bị đang host ESPHome) vì ESPHome sẽ phải tải về khá nhiều thư viện và thực hiện compile code của chúng ta thành file software (file bin) để nạp vào ESP32, các bạn cứ kiên nhẫn trong lần đầu Install nhé.
Sau khi nạp xong code, các bạn sẽ thấy trạng thái của thiết bị trên ESPHome từ Offline sang Online. Về cơ bản như vậy là đã thành công. Giờ kể cả các bạn rút ESPHome ra khỏi máy tính và cắm nguồn độc lập, sau khi khởi động xong (sau vài giây) ESPHome cũng sẽ hiện Online, các bạn có thể nạp code hoặc xem Log qua Wifi (chức năng OTA).
Các bạn có thể ấn Logs để theo dõi trạng thái thiết bị. Những dòng màu tím thể hiện quá trình khởi động, các bạn sẽ nhìn thấy các cảm biến, tình trạng Wifi…
Cũng có thể thấy những dòng Logs màu xanh thể hiện việc gửi nhận dữ liệu giữa ESP32 và cảm biến.
![[IMG]](https://photo2.tinhte.vn/data/attachment-files/2026/05/9020829_ngonboxe-diy-air-quality-monitor-27.png)
Khi toàn bộ bảng mạch và cảm biến đã hoạt động. Các bạn chỉ cần vào Home Assistant là sẽ thấy hiện thiết bị ESPHome được phát hiện. Các bạn chỉ cần add vào Home Assistant là xong, có thể sẽ cần điền Encryption Key của ESPHome mà các bạn để trong code. Khi đó, các giá trị cảm biến và nút bấm sẽ hiện lên đầy đủ trong Home Assitant như các bạn đã cấu hình trong ESPHome.
Sau đó các bạn có thể tự tùy biến, add các thông số (entities) của cảm biến ra trang chủ Dashboard / Overview của Home Assistant là xong.
Như vậy là đã có thể sử dụng chiếc máy đo chất lượng không khí DIY này rồi. Đó là những thứ cơ bản nhất về phần cứng và phần mềm để có thể tự DIY một chiếc máy đo chất lượng không khí. Mình chia sẻ để các bạn có thể tham khảo.
Tương lai, có thể mình sẽ tiếp tục nghiên cứu thêm để tăng tính thẩm mỹ cho chiếc máy, ví dụ như dùng mạch PCB hoặc có thêm một lớp vỏ đẹp đẽ. Mình sẽ tiếp tục cập nhật trên website và facebook của mình.
Cảm ơn các anh em đọc bài viết của Ngon Bổ Xẻ trên Tinh Tế, mình cũng có Website, Facebook, YouTube và Group chia sẻ deal hời. Ngon Bổ Xẻ - Reviewer độc lập.


