Библиотеки Ардуино

Создаем детектор пыли на основе Ардуино

Сохраняйте здоровье, следя за уровнем загрязнения воздуха в вашем доме с помощью детектора пыли на основе Arduino.

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

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

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

Датчик имеет крошечный шестиконтактный интерфейс подключения, и обычно он поставляется с коннектором. Датчик генерирует аналоговый выходной сигнал на выводе pin5 -Vo, он не требует никаких внешних компонентов для работы и требует только источник питания 3,3 В, что облегчает взаимодействие с платой Arduino. Некоторые примеры применения этого датчика включают в себя:

  • Очиститель воздуха
  • Кондиционер воздуха
  • Монитор воздуха
  • Детектор PM2.5
Sharp GP2Y1010AU0F
Sharp GP2Y1010AU0F

Почему GP2Y1010AU0F

Я выбрал этот датчик пыли по следующим причинам:

  • Он использует новейшие технологии для зондирования, включая инфракрасный светодиод, набор линз, фотодиодный детектор и электромагнитный экран.
  • Он имеет высокую чувствительность к пыли, а также быстрое время отклика между датчиком и микроконтроллером.
  • Благодаря трем проводам (VCC, GND и сигнал), ведущим к микроконтроллеру, этот датчик может быть подготовлен с использованием простой аппаратной структуры, что облегчает взаимодействие новичков с Arduino.
  • Небольшой размер датчика позволяет легко установить его в устройство контроля качества воздуха или в любой другой небольшой проект.

Как работает датчик пыли?

Датчик пыли использует метод оптического зондирования для обнаружения пыли. Фотодатчик и инфракрасный светодиод, известный как ИК-светодиод, оптически расположены в модуле датчика пыли. Фотодатчик (PT) обнаруживает отраженные инфракрасные лучи светодиодов, которые отражаются от частиц пыли в воздухе.

Модуль GP2Y1010AU0F может распознавать мельчайшие частицы в воздухе, что позволяет обнаруживать даже сигаретный дым. Высокий выходной импульс от датчика срабатывает при обнаружении пыли.

Комплектующие

  • Arduino Nano или Arduino UNO
  • OLED 128 x 32
  • Датчик пыли GP2Y1010AU0F
  • Макет
  • Резистор 100 Ом
  • Конденсатор 220 мкФ
  • Ингалятор
  • Труба
  • Круглый кусок пластика
  • Горячий клеевой пистолет

Сборка Ингалятора

Возьмите старый ингалятор и найдите круглый кусок пластика (сработает даже крышка от бутылки). Приклейте одну сторону трубы к ингалятору горячим клеевым пистолетом. Другая сторона трубы идет к детектору области пыли.

Схема соединений

Подключите датчик пыли к Arduino, как показано на рисунке ниже.

Соединения:

  • Подключите контакт 3.3V / 5V платы Arduino к контакту Vcc модуля датчика пыли.
  • Подключите V-светодиод датчика к резистору 100 Ом. Подключите выводы LED-GND и S-GND датчика к заземляющему выводу Arduino.
  • Вывод светодиода датчика должен быть соединен с цифровым выводом Arduino pin12, который известен как выходной вывод модуля датчика пыли.
  • Вывод V0, который является аналоговым выводом, должен быть подключен к аналоговому выводу Arduino A0. Код Arduino выведет уровень концентрации пыли датчика на OLED 128X32.

Для Arduino Uno, подключите контакт Vo GP2Y1010AU0F к контакту A0 Uno. Контакт V-LED и контакт Vcc GP2Y1010AU0F могут быть подключены к 5 В или 3,3 В Uno. То же самое относится и к Vcc OLED-дисплея. Используйте контакты A4 и A5 в качестве интерфейса SDA и SCL.

На фото выше итоговый результат нашего собранного устройства анализа уровня пыли на Ардуино.

Код проекта

Код для нашего анализатора уровня пыли Arduino вы можете скопировать ниже:

#include <Arduino.h>
#include <U8g2lib.h>
#include <SPI.h>
#include <Wire.h>

U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); 
int measurePin = A0;
int ledPower = 12;

unsigned int samplingTime = 280;
unsigned int deltaTime = 40;
unsigned int sleepTime = 9680;

float voMeasured = 0;
float calcVoltage = 0;
float dustDensity = 0;

void setup(){
  Serial.begin(9600);
  u8g2.begin();
  pinMode(ledPower,OUTPUT);
  u8g2.clearBuffer();          // clear the internal memory
   u8g2.setFont(u8g2_font_logisoso24_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
   u8g2.drawStr(8,29,"Welcome");  // write something to the internal memory
   u8g2.sendBuffer();         // transfer internal memory to the display
   delay(800);

   u8g2.clearBuffer();         // clear the internal memory
   u8g2.setFont(u8g2_font_logisoso24_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
   u8g2.drawStr(40,26,"TO");  // write something to the internal memory
   u8g2.sendBuffer();         // transfer internal memory to the display
   delay(800);
   u8g2.clearBuffer();         // clear the internal memory
   u8g2.setFont(u8g2_font_logisoso20_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
   u8g2.drawStr(16,26,"Maker.Pro");  // write something to the internal memory
   u8g2.sendBuffer();         // transfer internal memory to the display
   delay(2000);
}

void loop(){
  
  
  digitalWrite(ledPower,LOW);
  delayMicroseconds(samplingTime);

  voMeasured = analogRead(measurePin);

  delayMicroseconds(deltaTime);
  digitalWrite(ledPower,HIGH);
  delayMicroseconds(sleepTime);

  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);
   u8g2.clearBuffer();         // clear the internal memory
   u8g2.setFont(u8g2_font_pxplusibmvga9_tr);  // choose a suitable font at https://github.com/olikraus/u8g2/wiki/fntlistall
   u8g2.drawStr(0,15,"Dust Density ");  // write something to the internal memory
   u8g2.setCursor(0, 31);
   u8g2.print(dustDensity); 
  // u8g2.drawStr(0,31,"AHHH123");  // write something to the internal memory
   
//   u8g.print("Hello World!")
   u8g2.sendBuffer();         // transfer internal memory to the display

  delay(1000);
}

В начале кода мы подключаем необходимые библиотеки. После загрузки кода на экране дисплея вы увидите показания вашего устройста.

/ 02.09.2019

Ардуино+