空氣污染是許多城市的主要問題,空氣質量指數每天都在惡化。根據世界衛生組織的報告,由于空氣中存在的有害顆粒的影響而過早死亡的人比死于車禍的人多。根據環境保護署 (EPA) 的說法,室內空氣的毒性可能是室外空氣的 2 到 5 倍。因此,我們在這里構建了一個設備,通過測量空氣中的 PM2.5 和 PM10 顆粒來監測空氣質量。
我們之前使用 MQ135 氣體傳感器進行空氣質量監測,使用夏普 GP2Y1014AU0F 傳感器測量空氣中的灰塵密度。這次我們使用 帶有 Arduino Nano 的 SDS011 傳感器來構建空氣質量分析儀。SDS011傳感器可以計算空氣中PM2.5和PM10顆粒物的濃度。在這里,實時 PM2.5 和 PM 10 值將顯示在OLED 顯示屏上。
所需組件
Arduino納米
Nova PM 傳感器 SDS011
0.96‘ SPI OLED顯示模塊
跳線
Nova PM 傳感器 SDS011
SDS011 傳感器是 Nova Fitness 開發的最新空氣質量傳感器。它利用激光散射原理工作,可以得到空氣中0.3~10μm的顆粒濃度。該傳感器由小風扇、進氣閥、激光二極管和光電二極管組成。空氣通過進氣口進入,光源(激光)照亮顆粒,散射光通過光電探測器轉換為信號。然后對這些信號進行放大處理,得到 PM2.5 和 PM10 的顆粒物濃度。
SDS011 傳感器規格:
輸出:PM2.5、PM10
測量范圍:0.0-999.9μg/m3
輸入電壓:4.7V 至 5.3V
最大電流:100mA
睡眠電流:2mA
響應時間:1秒
串行數據輸出頻率:1次/秒
粒徑分辨率:≤0.3μm
相對誤差:10%
溫度范圍:-20~50°C
0.96’ OLED顯示模組
OLED(有機發光二極管)是一種自發光技術,通過在兩個導體之間放置一系列有機薄膜構成。當向這些薄膜施加電流時會產生明亮的光。OLED 使用與電視相同的技術,但像素比我們的大多數電視少。
對于這個項目,我們使用單色 7 針 SSD1306 0.96” OLED 顯示屏。它可以在三種不同的通信協議上工作:SPI 3 線模式、SPI 四線模式和 I2C 模式。下表對引腳及其功能進行了說明:
通過以下鏈接了解有關 OLED 及其與不同微控制器接口的更多信息。
空氣質量分析儀電路圖
使用 Arduino 測量 PM2.5 和 PM10 顆粒的電路圖非常簡單,如下所示。
SDS011 傳感器和 OLED 顯示模塊均采用 +5V 和 GND 供電。SDS011 的發送器和接收器引腳連接到 Arduino Nano 的 D3 和 D4 引腳。由于 OLED Display 模塊使用SPI 通信,我們在 OLED 模塊和 Arduino Nano 之間建立了 SPI 通信。連接如下表所示:
在性能板上構建電路
我還焊接了性能板上的所有組件,使其看起來整潔。但你也可以在面包板上制作它們。我做的板子如下。焊接時,請確保不要對電線進行分類。我焊接的性能板如下圖所示:
空氣質量監測儀代碼說明
該項目的完整代碼在文檔末尾給出。在這里,我們將解釋代碼的一些重要部分。
該代碼使用SDS011、Adafruit_GFX和Adafruit_SSD1306 庫。這些庫可以從 Arduino IDE 中的庫管理器下載,也可以從那里安裝。為此,打開 Arduino IDE 并轉到Sketch 》 Include Library 》 Manage Libraries。現在搜索 SDS011 并安裝R. Zschiegner 的 SDS Sensor 庫。
同樣,安裝 Adafruit 的Adafruit GFX和Adafruit SSD1306庫。
將庫安裝到 Arduino IDE 后,通過包含所需的庫文件來啟動代碼。
?
#include#include #include #include
?
在接下來的幾行中,定義兩個變量來存儲 PM10 和 PM2.5 值。
?
浮動 p10,p25;
?
然后,定義 OLED 的寬度和高度。在這個項目中,我們使用的是128×64 SPI OLED 顯示屏。您可以?根據您的顯示更改SCREEN_WIDTH?和SCREEN_HEIGHT變量。
?
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
?
然后定義連接 OLED 顯示器的 SPI 通信引腳。
?
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
?
然后,使用之前使用 SPI 通信協議定義的寬度和高度創建一個 Adafruit 顯示實例。
?
Adafruit_SSD1306 顯示器(SCREEN_WIDTH、SCREEN_HEIGHT、OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);
?
現在在setup()函數中,以 9600 的波特率初始化串行監視器以進行調試。此外,使用begin()函數初始化 OLED 顯示器和 SDS011 傳感器。
?
my_sds.begin(3,4); 序列號.開始(9600); display.begin(SSD1306_SWITCHCAPVCC);
?
在void loop() 中,從 SDS011 傳感器讀取 PM10 和 PM2.5 值,并在串行監視器上打印讀數。
?
無效循環(){ 錯誤 = my_sds.read(&p25,&p10); 如果(!錯誤){ Serial.println("P2.5:"+String(p25)); Serial.println("P10:"+String(p10));
?
之后,使用setTextSize()和setTextColor()設置文本大小和文本顏色。
?
display.setTextSize(2); display.setTextColor(白色);
?
然后在下一行中,使用?setCursor(x,y)方法定義開始文本的位置。在這里,我們將在 OLED 顯示屏上顯示 PM2.5 和 PM10 值,因此第一行從 (0,15) 開始,而第二行從 (0, 40) 坐標開始。
?
display.setCursor(0,15); display.println("PM2.5"); display.setCursor(67,15); 顯示.println(p25); display.setCursor(0,40); display.println("PM10"); display.setCursor(67,40); display.println(p10);
?
最后,調用display()方法在 OLED Display 上顯示文本。
?
顯示.顯示(); display.clearDisplay();
?
Arduino 空氣質量監測儀測試
硬件和代碼準備就緒后,就可以測試設備了。為此,將 Arduino 連接到筆記本電腦,選擇板和端口,然后點擊上傳按鈕。如下圖所示,它將在 OLED 顯示屏上顯示 PM2.5 和 PM10 值。
#include
#include
#include
#include
浮動 p10,p25;
內部錯誤;
SDS011 my_sds;
#define SCREEN_WIDTH 128 // OLED 顯示寬度,以像素為單位
#define SCREEN_HEIGHT 64 // OLED 顯示高度,以像素為單位
// 使用軟件 SPI 連接的 SSD1306 顯示器的聲明(默認情況):
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 顯示(屏幕寬度,屏幕高度,
OLED_MOSI、OLED_CLK、OLED_DC、OLED_RESET、OLED_CS);
無效設置(){
my_sds.begin(3,4);
序列號.開始(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
顯示.顯示();
}
無效循環(){
錯誤 = my_sds.read(&p25,&p10);
如果(!錯誤){
Serial.println("P2.5:"+String(p25));
Serial.println("P10:"+String(p10));
display.setTextSize(2);
display.setTextColor(白色);
display.setCursor(0,15);
display.println("PM2.5");
display.setCursor(67,15);
顯示.println(p25);
display.setCursor(0,40);
display.println("PM10");
display.setCursor(67,40);
display.println(p10);
顯示.顯示();
display.clearDisplay();
}
延遲(100);
}
評論