- Thành phần bắt buộc
- Cảm biến Nova PM SDS011 để đo PM2.5 và PM10
- Kiến thức cơ bản về Mô-đun màn hình OLED 0,96 '
- Chuẩn bị Cảm biến MQ-7 để đo Carbon Monoxide (CO)
- Tính toán chỉ số chất lượng không khí
- Sơ đồ mạch
- Xây dựng mạch hệ thống giám sát chất lượng không khí trên Perf Board
- Thiết lập IO Adafruit
- Giải thích mã cho
- Vỏ in 3D cho Hệ thống giám sát AQI
- Kiểm tra Hệ thống Giám sát AQI
Khi mùa đông đến, không khí bao trùm lên người chúng ta dày đặc với khói và khí thải từ các cánh đồng cháy, nhà máy công nghiệp và phương tiện giao thông, cản trở ánh nắng mặt trời và khiến bạn khó thở. Các chuyên gia nói rằng mức độ ô nhiễm không khí cao và đại dịch COVID-19 có thể là một hỗn hợp nguy hiểm có thể gây ra hậu quả nghiêm trọng. Sự cần thiết của việc giám sát chất lượng không khí theo thời gian thực là rất rõ ràng.
Vì vậy, trong dự án này, chúng tôi sẽ xây dựng Hệ thống giám sát chất lượng không khí ESP32 sử dụng cảm biến Nova PM SDS011, cảm biến MQ-7 và cảm biến DHT11. Chúng tôi cũng sẽ sử dụng mô-đun Màn hình OLED để hiển thị Giá trị chất lượng không khí. Các Chất lượng Index Air (AQI) ở Ấn Độ được dựa trên tám ô nhiễm, PM10, PM2.5, SO2 và NO2, CO, Ozone, NH3, và Pb. Tuy nhiên, không nhất thiết phải đo tất cả các chất ô nhiễm. Vì vậy, chúng tôi sẽ đo nồng độ PM2.5, PM10 và Carbon Monoxide để tính Chỉ số Chất lượng Không khí. Giá trị AQI sẽ được công bố trên Adafruit IO để chúng tôi có thể theo dõi nó từ bất cứ đâu. Trước đây, chúng tôi cũng đã đo nồng độ khí LPG, khói và khí Amoniac bằng Arduino.
Thành phần bắt buộc
- ESP32
- Cảm biến Nova PM SDS011
- Mô-đun màn hình OLED 0,96 'SPI
- Cảm biến DHT11
- Cảm biến MQ-7
- Dây nhảy
Cảm biến Nova PM SDS011 để đo PM2.5 và PM10
Cảm biến SDS011 là một cảm biến chất lượng không khí mới được phát triển bởi Nova Fitness. Nó hoạt động trên nguyên tắc tán xạ laser và có thể có nồng độ hạt trong không khí từ 0,3 đến 10μm. Cảm biến này bao gồm một quạt nhỏ, van đầu vào không khí, điốt laze và điốt quang. Không khí đi vào cửa hút gió nơi một nguồn sáng (Laser) chiếu sáng các hạt và ánh sáng tán xạ được chuyển thành tín hiệu bởi một bộ tách sóng quang. Các tín hiệu này sau đó được khuếch đại và xử lý để có được nồng độ hạt PM2.5 và PM10. Trước đây, chúng tôi đã sử dụng Cảm biến Nova PM với Arduino để tính toán nồng độ của PM10 & PM2.5.
Thông số kỹ thuật cảm biến SDS011:
- Đầu ra: PM2.5, PM10
- Phạm vi đo: 0,0-999,9μg / m3
- Điện áp đầu vào: 4.7V đến 5.3V
- Dòng điện tối đa: 100mA
- Ngủ hiện tại: 2mA
- Thời gian phản hồi: 1 giây
- Tần số đầu ra dữ liệu nối tiếp: 1 lần / giây
- Độ phân giải đường kính hạt: ≤0.3μm
- Lỗi tương đối: 10%
- Phạm vi nhiệt độ: -20 ~ 50 ° C
Kiến thức cơ bản về Mô-đun màn hình OLED 0,96 '
OLED (Organic Light Emitting Diode) là một loại Diode phát sáng được sản xuất bằng cách sử dụng các hợp chất hữu cơ kích thích khi dòng điện được phép chạy qua chúng. Các hợp chất hữu cơ này có ánh sáng riêng do đó chúng không yêu cầu bất kỳ mạch đèn nền nào như LCD thông thường. Bởi vì lý do này, công nghệ màn hình OLED tiết kiệm điện và được sử dụng rộng rãi trong Ti vi và các sản phẩm màn hình khác.
Nhiều loại OLED khác nhau có sẵn trên thị trường dựa trên màu sắc của màn hình, số lượng chân cắm, kích thước và IC điều khiển. Trong hướng dẫn này, chúng tôi sẽ sử dụng mô-đun OLED 7 chân SSD1306 0,96 ”màu xanh đơn sắc, rộng 128 pixel và dài 64 pixel. OLED 7 chân này hỗ trợ giao thức SPI và IC điều khiển SSD1306 giúp OLED hiển thị các ký tự nhận được. Tìm hiểu thêm về OLED và giao diện của nó với các bộ vi điều khiển khác nhau bằng cách nhấp vào liên kết.
Chuẩn bị Cảm biến MQ-7 để đo Carbon Monoxide (CO)
Mô-đun cảm biến khí Carbon Monoxide MQ-7 CO phát hiện nồng độ CO trong không khí. Cảm biến có thể đo nồng độ từ 10 đến 10.000 ppm. Cảm biến MQ-7 có thể được mua dưới dạng mô-đun hoặc chỉ là cảm biến đơn lẻ. Trước đây, chúng tôi đã sử dụng nhiều loại cảm biến Gas khác nhau để phát hiện và đo lường các loại khí khác nhau, bạn cũng có thể kiểm tra chúng nếu bạn quan tâm. Trong dự án này, chúng tôi đang sử dụng mô-đun cảm biến MQ-7 để đo nồng độ Carbon Monoxide trong PPM. Sơ đồ mạch cho bảng MQ-7 được đưa ra dưới đây:
Điện trở tải RL đóng vai trò rất quan trọng giúp cảm biến hoạt động. Điện trở này thay đổi giá trị điện trở của nó theo nồng độ của khí. Bảng cảm biến MQ-7 đi kèm với Điện trở tải 1KΩ vô dụng và ảnh hưởng đến các kết quả đọc của cảm biến. Vì vậy, để đo các giá trị nồng độ CO thích hợp, bạn phải thay điện trở 1KΩ bằng một điện trở 10KΩ.
Tính toán chỉ số chất lượng không khí
AQI ở Ấn Độ được tính toán dựa trên nồng độ trung bình của một chất ô nhiễm cụ thể được đo trong một khoảng thời gian tiêu chuẩn (24 giờ đối với hầu hết các chất ô nhiễm, 8 giờ đối với carbon monoxide và ozone). Ví dụ: AQI cho PM2.5 và PM10 dựa trên nồng độ trung bình trong 24 giờ và AQI cho Carbon Monoxide dựa trên nồng độ trung bình trong 8 giờ). Các tính toán AQI bao gồm tám chất ô nhiễm là PM10, PM2.5, Nitrogen Dioxide (NO 2), Sulfur Dioxide (SO 2), Carbon Monoxide (CO), ozone tầng mặt đất (O 3), Amoniac (NH 3), và Chì (Pb). Tuy nhiên, tất cả các chất ô nhiễm không được đo ở mọi vị trí.
Dựa trên nồng độ môi trường xung quanh đo được trong 24 giờ của một chất ô nhiễm, một chỉ số phụ được tính toán, là hàm tuyến tính của nồng độ (ví dụ: chỉ số phụ cho PM2.5 sẽ là 51 ở nồng độ 31 µg / m3, 100 ở nồng độ 60 µg / m3 và 75 ở nồng độ 45 µg / m3). Chỉ số phụ tệ nhất (hoặc tối đa của tất cả các tham số) xác định AQI tổng thể.
Sơ đồ mạch
Sơ đồ mạch cho Hệ thống giám sát chất lượng không khí dựa trên IoT rất đơn giản và được đưa ra dưới đây:
Cảm biến SDS011, DHT11 và cảm biến MQ-7 được cấp nguồn + 5V trong khi mô-đun Màn hình OLED được cấp nguồn 3.3V. Chân máy phát và chân nhận của SDS011 được kết nối với GPIO16 & 17 của ESP32. Chân Analog Out của cảm biến MQ-7 được kết nối với GPIO 25 và chân dữ liệu của cảm biến DHT11 được kết nối với cảm biến GPIO27. Vì mô-đun Màn hình OLED sử dụng giao tiếp SPI, chúng tôi đã thiết lập giao tiếp SPI giữa mô-đun OLED và ESP32. Các kết nối được hiển thị trong bảng dưới đây:
S. không |
Pin mô-đun OLED |
Chân ESP32 |
1 |
GND |
Đất |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
DC |
4 |
7 |
CS |
5 |
S. không |
SDS011 Pin |
Chân ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
16 |
S. không |
DHT Pin |
Chân ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Dữ liệu |
27 |
S. không |
MQ-7 Pin |
Chân ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Xây dựng mạch hệ thống giám sát chất lượng không khí trên Perf Board
Như bạn có thể thấy từ hình ảnh chính, ý tưởng là sử dụng mạch này bên trong Vỏ in 3D. Vì vậy, mạch hoàn chỉnh hiển thị ở trên được hàn vào một bảng mạch hoàn thiện. Đảm bảo sử dụng dây để đủ khoảng cách để gắn OLED và Cảm biến. Bo mạch hoàn thiện của tôi được hàn vào OLED và mô-đun cảm biến được hiển thị bên dưới.
Thiết lập IO Adafruit
Adafruit IO là một nền tảng dữ liệu mở cho phép bạn tổng hợp, trực quan hóa và phân tích dữ liệu trực tiếp trên đám mây. Sử dụng Adafruit IO, bạn có thể tải lên, hiển thị và giám sát dữ liệu của mình qua internet và kích hoạt IoT cho dự án của bạn. Bạn có thể điều khiển động cơ, đọc dữ liệu cảm biến và tạo các ứng dụng IoT thú vị qua internet bằng Adafruit IO.
Để sử dụng Adafruit IO, trước tiên hãy tạo một tài khoản trên Adafruit IO. Để thực hiện việc này, hãy truy cập trang web Adafruit IO và nhấp vào 'Bắt đầu miễn phí' ở trên cùng bên phải của màn hình.
Sau khi kết thúc quá trình tạo tài khoản, hãy đăng nhập vào tài khoản và nhấp vào 'View AIO Key' trên góc trên cùng bên phải để lấy tên tài khoản và khóa AIO.
Khi bạn nhấp vào 'AIO Key', một cửa sổ sẽ xuất hiện với tên người dùng và Tên người dùng và Khóa IO AIO Adafruit. Sao chép khóa và tên người dùng này, nó sẽ được sử dụng trong mã.
Bây giờ, sau khi nhận được các phím AIO, hãy tạo nguồn cấp dữ liệu để lưu trữ dữ liệu cảm biến DHT. Để tạo nguồn cấp dữ liệu, hãy nhấp vào 'Nguồn cấp dữ liệu.' Sau đó nhấp vào 'Tác vụ', rồi chọn 'Tạo nguồn cấp dữ liệu mới' từ các tùy chọn có sẵn.
Sau đó, một cửa sổ mới sẽ mở ra, nơi bạn cần nhập Tên và Mô tả của nguồn cấp dữ liệu. Viết mô tả là tùy chọn.
Nhấp vào 'Tạo', sau đó; bạn sẽ được chuyển hướng đến nguồn cấp dữ liệu mới được tạo.
Đối với dự án này, chúng tôi đã tạo tổng cộng sáu nguồn cấp dữ liệu cho các giá trị PM10, PM2.5, CO, Nhiệt độ, Độ ẩm và AQI. Làm theo quy trình tương tự như trên để tạo phần còn lại của nguồn cấp dữ liệu.
Sau khi tạo nguồn cấp dữ liệu, bây giờ chúng ta sẽ tạo tính năng bảng điều khiển Adafruit IO để trực quan hóa dữ liệu cảm biến trên một trang. Đối với điều đó, trước tiên, hãy tạo một trang tổng quan và sau đó thêm tất cả các nguồn cấp dữ liệu này vào trang tổng quan đó.
Để tạo trang tổng quan, hãy nhấp vào tùy chọn Trang tổng quan và sau đó nhấp vào 'Hành động', sau đó nhấp vào 'Tạo Trang tổng quan mới.'
Trong cửa sổ tiếp theo, nhập tên của trang tổng quan và nhấp vào 'Tạo'.
Khi bảng điều khiển được tạo, bây giờ chúng ta sẽ sử dụng các khối Adafruit IO như Gauge và Slider để trực quan hóa dữ liệu. Để thêm một khối, hãy nhấp vào dấu '+' ở góc trên cùng bên phải.
Sau đó, chọn khối 'Gauge'.
Trong cửa sổ tiếp theo, chọn dữ liệu nguồn cấp dữ liệu mà bạn muốn trực quan hóa.
Ở bước cuối cùng, hãy thay đổi cài đặt khối để tùy chỉnh nó.
Bây giờ hãy làm theo quy trình tương tự như trên để thêm các khối hình ảnh hóa cho phần còn lại của nguồn cấp dữ liệu. Trang tổng quan IO Adafruit của tôi trông như thế này:
Giải thích mã cho
Mã hoàn chỉnh cho dự án này được đưa ra ở cuối tài liệu. Ở đây chúng tôi đang giải thích một số phần quan trọng của mã.
Mã này sử dụng SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, và DHT.h thư viện. Các thư viện SDS011, Adafruit_GFX và Adafruit_SSD1306 có thể được tải xuống từ Trình quản lý Thư viện trong Arduino IDE và cài đặt từ đó. Để làm điều đó, hãy mở Arduino IDE và đi tới Sketch <Bao gồm Thư viện <Quản lý Thư viện . Bây giờ hãy tìm kiếm SDS011 và cài đặt thư viện Cảm biến SDS của R. Zschiegner.
Tương tự, cài đặt thư viện Adafruit GFX và Adafruit SSD1306 của Adafruit. Adafruit_MQTT.h và DHT11.h có thể được tải xuống từ các liên kết nhất định.
Sau khi cài đặt các thư viện vào Arduino IDE, hãy bắt đầu mã bằng cách bao gồm các tệp thư viện cần thiết.
#include
Trong các dòng tiếp theo, hãy xác định chiều rộng và chiều cao của màn hình OLED. Trong dự án này, tôi đã sử dụng màn hình OLED 128 × 64 SPI. Bạn có thể thay đổi SCREEN_WIDTH , và SCREEN_HEIGHT biến theo hiển thị của bạn.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Sau đó, xác định các chân giao tiếp SPI nơi Màn hình OLED được kết nối.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Sau đó, tạo một phiên bản cho màn hình Adafruit với chiều rộng và chiều cao và giao thức truyền thông SPI đã được xác định trước đó.
Màn hình Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Sau đó, bao gồm thông tin đăng nhập WiFi và Adafruit IO mà bạn đã sao chép từ máy chủ IO Adafruit. Chúng sẽ bao gồm máy chủ MQTT, Số cổng, Tên người dùng và Khóa AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Sau đó, thiết lập các nguồn cấp IO của Adafruit để lưu trữ dữ liệu cảm biến. Trong trường hợp của tôi, tôi đã xác định sáu nguồn cấp dữ liệu để lưu trữ dữ liệu cảm biến khác nhau, đó là: Chất lượng không khí, Nhiệt độ, Độ ẩm, PM10, PM25 và CO.
Adafruit_MQTT_Client mqtt (& client, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Nhiệt độ"); Adafruit_MQTT_Publish Humidity = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humidity"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Bây giờ bên trong hàm setup () , hãy khởi tạo Serial Monitor ở tốc độ truyền 9600 cho mục đích gỡ lỗi. Đồng thời Khởi tạo màn hình OLED, cảm biến DHT và cảm biến SDS011 bằng hàm begin () .
void setup () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
Các vòng lặp for bên trong thiết lập chức năng được sử dụng để thu thập các giá trị lên đến một số định nghĩa và sau đó thiết lập bộ đếm đến số không.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Đọc các giá trị cảm biến:
Bây giờ bên trong hàm vòng lặp, sử dụng phương thức millis () để đọc các giá trị cảm biến sau mỗi một giờ. Mỗi cảm biến khí đầu ra một giá trị tương tự từ 0 đến 4095. Để chuyển đổi giá trị này thành điện áp, sử dụng phương trình sau: RvRo = MQ7Raw * (3.3 / 4095); trong đó MQ7Raw là giá trị tương tự từ chân tương tự của cảm biến. Ngoài ra, đọc các chỉ số PM2.5 và PM10 từ cảm biến SDS011.
if ((unsigned long) (currentMillis - beforeMillis)> = khoảng) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + String (p10)); }}
Chuyển đổi các giá trị:
Các giá trị PM2.5 và PM10 đã ở dạng µg / m 3 nhưng chúng ta cần chuyển đổi các giá trị Carbon Monoxide từ PPM sang mg / m 3. Công thức chuyển đổi được đưa ra dưới đây:
Nồng độ (mg / m 3) = Nồng độ (PPM) × (Khối lượng phân tử (g / mol) / Thể tích mol (L))
Trong đó: Khối lượng phân tử của CO là 28,06 g / mol và Khối lượng mol là 24,45L ở 25 0 C
Nồng độINmgm3 = MQ7ppm * (28,06 / 24,45); Serial.println (Nồng độINmgm3);
Tính toán mức trung bình trong 24 giờ:
Sau đó, trong các dòng tiếp theo, hãy tính trung bình 24 giờ cho số đọc PM10, PM2.5 và 8 giờ trung bình cho các bài đọc Carbon Monoxide. Trong dòng đầu tiên của mã, lấy tổng hiện tại và trừ phần tử đầu tiên trong mảng, bây giờ lưu giá trị này thành tổng mới. Ban đầu, nó sẽ là Zero. Sau đó, lấy các giá trị cảm biến và thêm số đọc hiện tại vào tổng và tăng chỉ số số. Nếu giá trị của chỉ mục bằng hoặc lớn hơn numReadings, thì hãy đặt chỉ mục về không.
totalPM10 = totalPM10 - số lần đọcPM10; bài đọcPM10 = p10; totalPM10 = totalPM10 + số lần đọcPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Sau đó, cuối cùng, xuất bản các giá trị này trên Adafruit IO.
if (! Temperature.publish (nhiệt độ)) {delay (30000); } if (! Humidity.publish (độ ẩm)) {delay (30000); ………………………………………………………. ……………………………………………………….
Vỏ in 3D cho Hệ thống giám sát AQI
Tiếp theo, tôi đo kích thước của thiết lập bằng cách sử dụng máy đo của mình và cũng đo kích thước của cảm biến và OLED để thiết kế vỏ. Thiết kế của tôi trông giống như thế này dưới đây, một khi nó được hoàn thành.
Sau khi tôi hài lòng với thiết kế, tôi xuất nó dưới dạng tệp STL, cắt nó dựa trên cài đặt máy in, và cuối cùng là in nó. Một lần nữa, tệp STL cũng có sẵn để tải xuống từ Thingiverse và bạn có thể in vỏ bằng cách sử dụng nó.
Sau khi in xong, tôi tiến hành lắp ráp dự án được thiết lập trong một bao vây cố định để lắp đặt nó trong một cơ sở. Với kết nối hoàn chỉnh được thực hiện, tôi đã lắp ráp mạch vào vỏ của mình và mọi thứ đều rất vừa vặn như bạn có thể thấy ở đây.
Kiểm tra Hệ thống Giám sát AQI
Khi phần cứng và mã đã sẵn sàng, đã đến lúc kiểm tra thiết bị. Chúng tôi đã sử dụng bộ chuyển đổi 12V 1A bên ngoài để cấp nguồn cho thiết bị. Như bạn có thể thấy, thiết bị sẽ hiển thị Nồng độ PM10, PM2.5 và Carbon Monoxide trên Màn hình OLED. Nồng độ của PM2.5 và PM10 tính bằng µg / m 3 trong khi nồng độ của Carbon Monoxide là mg / m 3.
Các bài đọc này cũng sẽ được xuất bản trên Adafruit IO Dashboard. Tối đa của tất cả các tham số (PM10, PM2.5 & CO) sẽ là AQI.
Giá trị AQI của 30 ngày qua sẽ được hiển thị dưới dạng biểu đồ.
Đây là cách bạn có thể sử dụng cảm biến SDS011 và MQ-7 để tính Chỉ số chất lượng không khí. Hoạt động hoàn chỉnh của dự án cũng có thể được tìm thấy trong video được liên kết bên dưới. Hy vọng bạn thích dự án và cảm thấy thú vị khi xây dựng của riêng bạn. Nếu có bất kỳ thắc mắc nào, hãy để lại trong phần bình luận bên dưới.