Пыль – твердые микрочастицы. Они настолько малы, что невидимы человеческому глазу, но так же опасны как и яд. Поэтому важно, чтобы воздух, каким дышит человек, был чистым. Для детектирования пыли в электронике разработаны различные датчики пыли. Датчики пыли различают по принципу действия: оптические и лазерные.
В этой статье рассмотрим оптический датчик фирмы Sharp GP2Y1010AU0F в составе модуля датчика пыли для ардуино Waveshare Dust Sensor.
Устройство представляет собой автоматически работающий электронный датчик для обнаружения домашней пыли либо сигаретного дыма в воздухе.
Применяется в очистителях воздуха и кондиционерах.
Исследуемый воздух проходит через центральное отверстие, в котором расположены инфракрасный светодиод (передатчик) и ИК-детектор. Диапазон чувствительности датчика согласно технической документации составляет от 0,05 мг/м³ до 3,5 мг/м³ (пыль на кубический метр).
Данный датчик способен определить твердые частицы в воздухе диаметром меньше 2,5 мм, по этому таким датчикам дана маркировка PM2.5.
Модуль подключается к ардуино через специальный разъем JST PH-4 Female.
Схема подключения датчика пыли к ардуино
Красный провод Vcc (питание) | 5В |
---|---|
Черный провод Vdd (земля) | GND |
Синий провод | Аналоговый сигнал от датчика |
Желтый провод | Управление светодиодом на модуле |
Пример программного кода для работы с датчиком пыли
// Определяем ядро платы Arduino // для установки рабочего напряжения #if defined(__AVR__) #define OPERATING_VOLTAGE 5.0 #else #define OPERATING_VOLTAGE 3.3 #endif // Назначаем пины для коммуникации с датчиком пыли constexpr uint8_t PIN_AOUT = A0; constexpr uint8_t PIN_IR_LED = A1; // Нулевой порог напряжения float zeroSensorDustDensity = 0.6; // Переменные для хранения данных с датчика int sensorADC; float sensorVoltage; float sensorDustDensity; void setup() { // Открываем Serial-порт Serial.begin(9600); // Пин с IR-LED в режим выхода pinMode(PIN_IR_LED, OUTPUT); // Выключаем IR-LED digitalWrite(PIN_IR_LED, LOW); } void loop() { // Считываем значение с датчика for (int i = 0; i < 10 ; i++) { digitalWrite(PIN_IR_LED, HIGH); delayMicroseconds(280); sensorADC += analogRead(PIN_AOUT); digitalWrite(PIN_IR_LED, LOW); delay(10); } sensorADC = sensorADC / 10; // Переводим «сырые» значения с АЦП в напряжение sensorVoltage = (OPERATING_VOLTAGE / 1024.0) * sensorADC * 11; // Переводим напряжение в концентрацию пыли // Также учитываем нулевой порог напряжение if (sensorVoltage < zeroSensorDustDensity) { sensorDustDensity = 0; } else { sensorDustDensity = 0.17 * sensorVoltage - 0.1; } // Выводим результат в Serial-порт; Serial.print(sensorVoltage); Serial.print("\t\t"); Serial.print(sensorDustDensity); Serial.println(" ug/m3"); delay(1000); }