Обзор
Оптический датчик пыли Sharp GP2Y1010AU0F — это эффективное решение для мониторинга чистоты воздуха. Он использует ИК-диод и фототранзистор для обнаружения отраженного света от частиц пыли, что позволяет измерять концентрацию мелкодисперсных частиц.
GP2Y1010AU0F — аналоговый датчик, работающий по принципу оптического рассеивания. Требует точной синхронизации импульса подсветки и замера напряжения для корректного определения концентрации пыли (PM2.5/PM10).
Пошаговая инструкция по калибровке
Для получения реальных значений в мг/м³ необходимо определить индивидуальные параметры вашего экземпляра (Base Voltage).
- Определение “Чистого воздуха” (Voc): Поместите датчик в герметичный контейнер или продуйте его сжатым воздухом. Зафиксируйте выходное напряжение при отсутствии пыли. Обычно оно составляет 0.1В – 1.1В (типично 0.6В). Это ваше значение
Voc. - Масштабирование (Sensitivity): Согласно даташиту, чувствительность составляет 0.5В на каждые 0.1 мг/м³ (т.е. коэффициент 5.0 для перевода В в мг/м³).
- Итоговая формула:
DustDensity = (V_measured - V_oc) / Sensitivity. - Валидация: Если
V_measured < V_oc, считайте концентрацию равной 0.
Влияние внешней засветки и экранирование
Датчик крайне чувствителен к внешнему ИК-излучению (солнечный свет, лампы накаливания).
- Проблема: Фототранзистор “видит” внешний свет через отверстие для воздуха, что завышает показания (эффект “смещения нуля”).
- Способы экранирования:
- Используйте черный матовый корпус для устройства.
- Сделайте Г-образные воздуховоды (лабиринты), чтобы свет не попадал в измерительную камеру напрямую.
- Оклейте внутреннюю поверхность корпуса датчика (вокруг отверстия) черной изолентой или покрасьте матовой краской.
Подробная схема обвязки
Датчик требует внешнего RC-фильтра для питания ИК-диода.
Логика 5В (Arduino Uno/Mega)
- V-LED (Pin 1): Резистор 150 Ом к +5В.
- LED-GND (Pin 2): Общий GND.
- LED (Pin 3): К цифровому пину.
- S-GND (Pin 4): К GND (развязать с Pin 2 для уменьшения шумов).
- Vo (Pin 5): К ADC (0-5V).
- VCC (Pin 6): К +5В.
- Фильтр: Конденсатор 220 мкФ (электролит) между Pin 1 и GND.
Логика 3.3В (ESP32 / ESP8266)
- Питание: Датчик всё равно питаем от 5В.
- Vo (Pin 5): Выходное напряжение обычно не превышает 3.5В. Для безопасности ESP32 можно использовать делитель напряжения (10к / 20к) или настроить аттенюатор ADC на 11dB.
- Резистор V-LED: Можно использовать 150 Ом, если 5В стабильные.
Структура выходного сигнала (Осциллограмма)
Понимание того, как выглядит сигнал Vo при подаче импульса на LED:
- T = 0 мкс: Подаем HIGH (или LOW, зависит от схемы) на пин LED. Начинается нарастание тока через диод.
- T = 0 - 280 мкс: Напряжение на выходе
Voплавно растет, стремясь к значению, пропорциональному отраженному свету. Происходят переходные процессы. - T = 280 мкс: Точка замера. Сигнал максимально стабилен. Именно здесь нужно делать
analogRead(). - T = 320 мкс: Выключаем LED. Напряжение на
Voначинает спадать. - T = 320 - 10000 мкс: Пауза (sleep time). ИК-диод остывает, конденсатор фильтра заряжается.
Примеры кода с фильтрацией
Использование скользящего среднего (Moving Average) для подавления случайных выбросов.
const int measurePin = 34;
const int ledPin = 25;
const int numSamples = 30; // Размер окна фильтрации
float samples[numSamples];
int currentIndex = 0;
float getFilteredValue(float newValue) {
samples[currentIndex] = newValue;
currentIndex = (currentIndex + 1) % numSamples;
float sum = 0;
for(int i = 0; i < numSamples; i++) sum += samples[i];
return sum / numSamples;
}
void setup() {
Serial.begin(115200);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH); // Выкл (для большинства схем)
}
void loop() {
digitalWrite(ledPin, LOW); // Вкл
delayMicroseconds(280);
float rawV = analogRead(measurePin) * (3.3 / 4095.0);
delayMicroseconds(40);
digitalWrite(ledPin, HIGH); // Выкл
float filteredV = getFilteredValue(rawV);
float density = (filteredV - 0.6) * 0.17; // Примерная формула
Serial.printf("Raw: %.2fV | Filtered: %.2fV | Density: %.3f mg/m3\n", rawV, filteredV, max(0.0f, density));
delay(100); // Частота опроса 10 Гц
}
Итоги
Sharp GP2Y1010AU0F — капризный, но надежный датчик при соблюдении трех условий: точный тайминг (280 мкс), качественное экранирование от света и программная фильтрация шумов.