Загрязнение воздуха является серьезной проблемой во многих городах, и индекс качества воздуха ухудшается с каждым днем. Согласно отчету Всемирной организации здравоохранения, больше людей погибает преждевременно от воздействия опасных частиц, присутствующих в воздухе, чем от автомобильных аварий. По данным Агентства по охране окружающей среды (EPA), воздух в помещении может быть в 2-5 раз токсичнее, чем воздух снаружи. Поэтому в сегодняшних реалиях желательно иметь под рукой анализатор качества воздух, который мы с вами создадим в рамках данного проекта.

В данном проекте мы собираемся соединить датчик Sharp GP2Y1014AU0F с Arduino Nano для измерения плотности пыли в воздухе. Помимо датчика пыли и Arduino Nano, для отображения измеренных значений также используется OLED-дисплей. Датчик пыли GP2Y1014AU0F компании Sharp очень эффективен для обнаружения очень мелких частиц, таких как сигаретный дым. Он разработан для использования в очистителях воздуха и кондиционерах.

Sharp GP2Y1014AU0F - это крошечный шестиконтактный оптический датчик качества воздуха / пыли с аналоговым выходом, предназначенный для обнаружения частиц пыли в воздухе. Работает по принципу лазерного рассеяния. Внутри модуля датчика инфракрасный излучающий диод и фотодатчик расположены по диагонали рядом с отверстием для впуска воздуха, как показано на следующем изображении.

Когда воздух, содержащий частицы пыли, попадает в камеру датчика, частицы пыли рассеивают свет ИК-светодиода в сторону фотодетектора. Интенсивность рассеянного света зависит от пылевых частиц. Чем больше в воздухе пылинок, тем больше яркость света. Выходное напряжение на выводе VOUT датчика изменяется в зависимости от интенсивности рассеянного света. Распиновка датчика следующая:

1 – V-LED питание светодиода (подключите к 5 В через резистор 150 Ом), 2 – LED-GND вывод заземления светодиода (подключить к GND), 3 – LED используется для включения/выключения светодиода (подключить к любому цифровому выводу Arduino), 4 – S-GND контакт заземления датчика (подключить к GND Arduino), 5 – VOUT вывод аналогового выхода датчика (подключить к любому аналоговому выводу), 6 – VCC положительный вывод питания (подключить к 5V Arduino).
Также в нашем проекте будет использоваться стандартный OLED-дисплей. OLED (Organic Light-Emitting Diodes) – это технология самосветового излучения, созданная путем размещения ряда органических тонких пленок между двумя проводниками. Яркий свет излучается, когда на эти пленки подается электрический ток. OLED-дисплеи используют ту же технологию, что и телевизоры, но имеют меньше пикселей, чем в большинстве наших телевизоров.

Схема подключения датчика Sharp GP2Y1014AU0F и сопутствующих компонентов к Arduino приведена далее:

Схема очень проста, поскольку мы подключаем только датчик GP2Y10 и модуль OLED-дисплея к Arduino Nano. Датчик GP2Y10 и модуль OLED-дисплея питаются от +5 В и заземления. Вывод V0 соединен с выводом A5 Arduino Nano. Вывод светодиода датчика подключен к цифровому выводу 12 на Arduino. Поскольку модуль OLED-дисплея использует связь SPI, мы установили связь SPI между модулем OLED и Arduino Nano. В качестве конденсатора используется конденсатор емкостью 220 мкФ, а резистор взят с сопротивлением 150 Ом.
Теперь перейдем к программной части. В коде используются библиотеки Adafruit_GFX и Adafruit_SSD1306. Эти библиотеки можно загрузить из диспетчера библиотек в среде разработки Arduino и установить оттуда.
Датчик пыли не требует какой-либо библиотеки, так как мы считываем значения напряжения непосредственно с аналогового вывода Arduino. Полный код Arduino приведен далее.
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
int measurePin = A5;
int ledPower = 7;
float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;
void setup(){
Serial.begin(9600);
pinMode(ledPower,OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.display();
}
void loop(){
digitalWrite(ledPower,LOW);
delayMicroseconds(280);
voMeasured = analogRead(measurePin);
delayMicroseconds(40);
digitalWrite(ledPower,HIGH);
delayMicroseconds(9680);
calcVoltage = voMeasured*(5.0/1024);
dustDensity = 0.17*calcVoltage-0.1;
if ( dustDensity < 0)
{
dustDensity = 0.00;
}
Serial.println("Raw Signal Value (0-1023):");
Serial.println(voMeasured);
Serial.println("Voltage:");
Serial.println(calcVoltage);
Serial.println("Dust Density:");
Serial.println(dustDensity);
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(85,22);
display.println("Dust");
display.setCursor(85,38);
display.println("Density");
display.setTextSize(3);
display.setCursor(0,13);
display.println(dustDensity);
display.setCursor(6,43);
display.setTextSize(2);
display.println("ug/m3");
display.display();
display.clearDisplay();
delay(1000);
}
Как только оборудование и код готовы, пора проверить датчик. Для этого подключите Arduino к ноутбуку, выберите плату и порт и нажмите кнопку загрузки. Как вы можете видеть на изображении ниже, плотность пыли будет отображаться на OLED-дисплее.

© digitrode.ru