Точный монитор качества воздуха на датчике Sharp GP2Y1010AU0F
Компоненты и материалы
| Arduino Nano R3 | × | 1 |
| Конденсатор 220 мкФ | × | 1 |
| Резистор 150 Ом (втыкной) | × | 1 |
Инструменты
- Паяльник
Приложения и сервисы
- Arduino IDE
- Processing (The Processing Foundation) — для визуализации на ПК
О проекте
Оптический датчик пыли Sharp GP2Y1010AU0F отлично обнаруживает сверхмелкие частицы (табачный дым) и используется в очистителях воздуха. ИК-светодиод и фототранзистор расположены диагонально для детекции рассеянного света от частиц.
Ранее показывал мониторы на DSM501A и PPD42NS. Теперь — на Sharp GP2Y1010AU0F, также дешёвом (~$5). Схема проста (см. ниже). Датчик потребляет мало (макс 20 мА, типично 11 мА) — можно питать от Arduino. Выход — аналоговое напряжение, пропорциональное плотности пыли, чувствительность 0.5В / 0.1 мг/м³.
Модифицировал примерный код от DFRobot для вывода в мкг/м³. Написал Processing-код на базе библиотеки meter — значения отображаются на экране ПК как большой аналоговый прибор.

Сравнение трёх датчиков
Тестировал DSM501A, PPD42NS и Sharp GP2Y1010AU0F в одинаковых условиях. Победитель — Sharp GP2Y1010AU0F. Преимущества:
- Больше чувствителен к очень низким концентрациям
- Очень низкое потребление — питание прямо от Arduino
- Простой и легко модифицируемый код
- Аналоговый выход — можно подключить прямо к измерительному прибору без доп. электроники
Покупка на AliExpress: ссылка
Код
Arduino код
/* Standalone Sketch for Arduino UNO + Sharp Optical Dust Sensor GP2Y1010AU0F */
int measurePin = 0; // A0
int ledPower = 2; // D2 — управление ИК-светодиодом датчика
int samplingTime = 280;
int deltaTime = 40;
int sleepTime = 9680;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
void setup(){
Serial.begin(9600);
pinMode(ledPower, OUTPUT);
}
void loop(){
digitalWrite(ledPower, LOW); // ВКЛ ИК-светодиод (активный LOW)
delayMicroseconds(samplingTime);
voMeasured = analogRead(measurePin); // чтение
delayMicroseconds(deltaTime);
digitalWrite(ledPower, HIGH); // ВЫКЛ ИК-светодиод
delayMicroseconds(sleepTime);
// 0-5V -> 0-1023
calcVoltage = voMeasured * (5.0 / 1024.0);
// Линейное уравнение от https://www.howmuchsnow.com/arduino/airquality/ (Chris Nafis 2012)
dustDensity = 170 * calcVoltage - 0.1;
Serial.println(dustDensity); // мкг/м³
delay(1000);
}
Processing код (визуализация)
/* Meter as a partial circle. Based on Bill (Papa) Kujawa example. Public domain. */
import processing.serial.*;
import meter.*;
Serial port;
String[] list;
Meter m;
void setup() {
size(1150, 910);
background(255, 255, 200);
port = new Serial(this, "COM4", 9600); // поменяйте COM-порт
m = new Meter(this, 125, 25, true);
m.setMeterWidth(850);
m.setFrameColor(color(100, 0, 0));
m.setTitleFontColor(color(0, 200, 0));
m.setPivotPointColor(color(255, 0, 0));
m.setArcColor(color(0, 0, 200));
m.setScaleFontColor(color(200, 100, 0));
m.setTicMarkColor(color(217, 22, 247));
m.setArcMinDegrees(90.0);
m.setArcMaxDegrees(360.0);
m.setArcThickness(5);
m.setNeedleThickness(4);
m.setMinScaleValue(0.0);
m.setMaxScaleValue(800.0);
m.setInputSignalOutOfRangeFontColor(color(0, 255, 0));
m.setMinInputSignal(0);
m.setMaxInputSignal(800);
m.setHighSensorWarningActive(true);
m.setHighSensorWarningValue((float)200.0);
String[] scaleLabelsA = {"0", "100", "200", "300", "400", "500", "600", "700", "800"};
m.setScaleLabels(scaleLabelsA);
m.setTitle("Airquality (ug/m3)");
m.setDisplayDigitalMeterValue(true);
}
void draw() {
if (port.available() > 0) {
String val = port.readString();
list = split(val, ',');
float air = float(list[0]);
println("Airquality: " + air + " mg/m3 ");
m.updateMeter(int(air));
}
}
Схемы

Производственный процесс
- Bosch Sensortec представляет AI-сенсор качества воздуха BME688 для снижения риска передачи вирусов
- Сборка станции качества воздуха и погоды на Raspberry Pi с InfluxDB и Grafana
- Измерение качества воздуха с OpenSensors: руководство по Arduino и Python
- Солнечный датчик качества воздуха на Helium: руководство по проектированию и развёртыванию
- Система мониторинга качества воздуха Smart City на базе LoRa
- Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
- Проект с датчиком DHT11: индикация температуры светодиодами и пьезо-динамиком на Arduino
- Умная система мониторинга качества воздуха и заполненности мусорных баков
- Датчик CO2 K30: мониторинг качества воздуха в реальном времени на Arduino
- Продвинутый углеродный датчик NO₂ улучшает мониторинг качества воздуха в помещениях