Сохраняйте здоровье, следя за уровнем загрязнения воздуха в вашем доме с помощью детектора пыли на основе Arduino.
Из-за увеличения загрязнения воздуха и связанных с этим проблем со здоровьем, измерение качества воздуха становится все более необходимым в больших городах. На рынке имеется множество датчиков, позволяющих измерять качество воздуха, и недавно я заказал оптический датчик пыли GP2Y1010AU0F от Sharp. Этот датчик пыли имеет небольшие размеры и может обнаруживать частицы пыли и дыма в окружающей среде. Во время работы он потребляет очень мало энергии, что делает его идеальным для постоянно включенной системы мониторинга.
В этом руководстве рассказывается, как подключить оптический датчик пыли Sharp к Arduino. Показания датчика будет отображаться на OLED-экране. Система упакована в старый ингалятор, который позволяет подавать воздух в датчик для удобства тестирования.
Оптический датчик пыли GP2Y1010AU0F
Датчик имеет крошечный шестиконтактный интерфейс подключения, и обычно он поставляется с коннектором. Датчик генерирует аналоговый выходной сигнал на выводе pin5 -Vo, он не требует никаких внешних компонентов для работы и требует только источник питания 3,3 В, что облегчает взаимодействие с платой Arduino. Некоторые примеры применения этого датчика включают в себя:
- Очиститель воздуха
- Кондиционер воздуха
- Монитор воздуха
- Детектор PM2.5
Почему 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); }
В начале кода мы подключаем необходимые библиотеки. После загрузки кода на экране дисплея вы увидите показания вашего устройста.
15 августа 2021 в 09:18
можно заместь ардуино использовать esp 8266 v3 ?