Пыль – твердые микрочастицы. Они настолько малы, что невидимы человеческому глазу, но так же опасны как и яд. Поэтому важно, чтобы воздух, каким дышит человек, был чистым. Для детектирования пыли в электронике разработаны различные датчики пыли. Датчики пыли различают по принципу действия: оптические и лазерные.
В этой статье рассмотрим оптический датчик фирмы 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);
}






