Sharp GP2Y1010AU0F Оптический датчик пыли

Подробное руководство по датчику пыли Sharp GP2Y1010AU0F: калибровка, схемы для 3.3В и 5В, осциллограмма сигнала и фильтрация шумов.

Качество воздуха Аналоговый

Обзор

Оптический датчик пыли Sharp GP2Y1010AU0F — это эффективное решение для мониторинга чистоты воздуха. Он использует ИК-диод и фототранзистор для обнаружения отраженного света от частиц пыли, что позволяет измерять концентрацию мелкодисперсных частиц.

GP2Y1010AU0F — аналоговый датчик, работающий по принципу оптического рассеивания. Требует точной синхронизации импульса подсветки и замера напряжения для корректного определения концентрации пыли (PM2.5/PM10).

Sharp GP2Y1010AU0F
Быстрая навигация
Основные разделы статьи
Примеры кода
Популярные платформы
Калибровка

Пошаговая инструкция по калибровке

Для получения реальных значений в мг/м³ необходимо определить индивидуальные параметры вашего экземпляра (Base Voltage).

  1. Определение “Чистого воздуха” (Voc): Поместите датчик в герметичный контейнер или продуйте его сжатым воздухом. Зафиксируйте выходное напряжение при отсутствии пыли. Обычно оно составляет 0.1В – 1.1В (типично 0.6В). Это ваше значение Voc.
  2. Масштабирование (Sensitivity): Согласно даташиту, чувствительность составляет 0.5В на каждые 0.1 мг/м³ (т.е. коэффициент 5.0 для перевода В в мг/м³).
  3. Итоговая формула: DustDensity = (V_measured - V_oc) / Sensitivity.
  4. Валидация: Если 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)

  • Питание: Датчик всё равно питаем от .
  • Vo (Pin 5): Выходное напряжение обычно не превышает 3.5В. Для безопасности ESP32 можно использовать делитель напряжения (10к / 20к) или настроить аттенюатор ADC на 11dB.
  • Резистор V-LED: Можно использовать 150 Ом, если 5В стабильные.
Анализ сигнала

Структура выходного сигнала (Осциллограмма)

Понимание того, как выглядит сигнал Vo при подаче импульса на LED:

  1. T = 0 мкс: Подаем HIGH (или LOW, зависит от схемы) на пин LED. Начинается нарастание тока через диод.
  2. T = 0 - 280 мкс: Напряжение на выходе Vo плавно растет, стремясь к значению, пропорциональному отраженному свету. Происходят переходные процессы.
  3. T = 280 мкс: Точка замера. Сигнал максимально стабилен. Именно здесь нужно делать analogRead().
  4. T = 320 мкс: Выключаем LED. Напряжение на Vo начинает спадать.
  5. 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 мкс), качественное экранирование от света и программная фильтрация шумов.