高精度空气质量监测仪:Sharp GP2Y1010AU0F 粉尘传感器 + Arduino Nano
项目简介
Sharp GP2Y1010AU0F 光学粉尘传感器对烟雾等极细颗粒物极其敏感,常用于空气净化器。内部红外发射二极管与光电晶体管对角排列,检测空气中粉尘散射光。相比 DSM501A 与 PPD42NS,该传感器灵敏度更高、功耗极低 (典型 11mA,可直供 Arduino)、模拟电压输出 (0.5V/0.1mg/m³)、代码极简易改。本项目结合 Processing 可视化仪表盘,实现桌面级空气质量实时监测。
硬件清单
- Arduino Nano R3 ×1
- Sharp GP2Y1010AU0F 粉尘传感器模块 ×1
- 220µF 电解电容 ×1(传感器 VCC-GND 滤波,必接)
- 150Ω 电阻 ×1(传感器内部 LED 驱动限流)
- 电烙铁(建议焊接固化)
电路连接
| 传感器引脚 | Arduino 引脚 | 备注 |
|---|---|---|
| V-LED (1) | D2 | 通过 150Ω 电阻驱动内部 IR LED |
| LED-GND (2) | GND | |
| LED (3) | — | 内部引脚,悬空 |
| S-GND (4) | GND | |
| Vo (5) | A0 | 模拟信号输出 |
| VCC (6) | 5V | 并联 220µF 电容滤波 |
测量时序
传感器需脉冲驱动 IR LED:
digitalWrite(ledPower, LOW)点亮 LED (低电平有效)- 延时 280µs (
samplingTime) 采样 analogRead(A0)读取电压- 延时 40µs (
deltaTime) digitalWrite(ledPower, HIGH)熄灭 LED- 延时 9680µs (
sleepTime) 完成 10ms 周期
浓度换算公式
参考 Chris Nafis 线性拟合:
VoMeasured = analogRead(A0);
CalcVoltage = VoMeasured * (5.0 / 1024.0);
DustDensity (µg/m³) = 170 * CalcVoltage - 0.1;
Arduino 代码
/* Standalone Sketch for Sharp GP2Y1010AU0F */
int measurePin = 0;
int ledPower = 2;
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0, calcVoltage = 0, dustDensity = 0;
void setup() {
Serial.begin(9600);
pinMode(ledPower, OUTPUT);
}
void loop() {
digitalWrite(ledPower, LOW);
delayMicroseconds(samplingTime);
voMeasured = analogRead(measurePin);
delayMicroseconds(deltaTime);
digitalWrite(ledPower, HIGH);
delayMicroseconds(sleepTime);
calcVoltage = voMeasured * (5.0 / 1024.0);
dustDensity = 170 * calcVoltage - 0.1;
Serial.println(dustDensity); // µg/m³
delay(1000);
}
Processing 可视化仪表盘
基于 meter 库绘制大型模拟仪表,量程 0-800 µg/m³,刻度 0/100/.../800,红色警戒线 200 µg/m³。实时读取串口数据更新指针,直观展示空气质量动态。
import processing.serial.*;
import meter.*;
Serial port;
Meter m;
void setup() {
size(1150, 910);
background(255, 255, 200);
port = new Serial(this, "COM4", 9600); // 修改为实际端口
m = new Meter(this, 125, 25, true);
m.setMeterWidth(850);
m.setArcMinDegrees(90);
m.setArcMaxDegrees(360);
m.setMinScaleValue(0);
m.setMaxScaleValue(800);
String[] labels = {"0","100","200","300","400","500","600","700","800"};
m.setScaleLabels(labels);
m.setTitle("Airquality (ug/m3)");
m.setDisplayDigitalMeterValue(true);
m.setHighSensorWarningActive(true);
m.setHighSensorWarningValue(200);
}
void draw() {
if (port.available() > 0) {
String val = port.readString();
float air = float(trim(val));
m.updateMeter(int(air));
}
}
三款传感器横评结论
同条件测试:Sharp GP2Y1010AU0F 胜出。优势:极低浓度灵敏、超低功耗直供 Arduino、模拟输出无需额外电路、代码最简洁。约 $5 价格极具性价比。购买链接:AliExpress。
原理图
原理图展示传感器 6 脚定义、150Ω 限流电阻、220µF 滤波电容、Arduino Nano 引脚映射。
制造工艺
- 树莓派打造空气质量与气象站:InfluxDB+Grafana可视化
- 使用 OpenSensors 监测空气质量:Arduino 与 Python 实战指南
- 基于 Helium 网络的太阳能供电空气质量监测站:设计与部署全指南
- 基于LoRa的智慧城市空气质量监测系统
- 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
- DHT11 温湿度传感器项目:LED 指示与压电蜂鸣器报警
- 智能室内空气质量与垃圾监测系统
- K30 CO₂ 传感器:室内空气质量实时监测
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- Bosch Sensortec 推出 AI 赋能 BME688 空气质量传感器,降低病毒传播风险
- 先进碳基 NO₂ 传感器提升室内空气质量监测水平