- Необходимые компоненты
- Датчик Sharp GP2Y1014AU0F
- Модуль дисплея OLED
- Принципиальная электрическая схема
- Построение схемы на Perf Board
- Пояснение кода для анализатора качества воздуха
- Тестирование взаимодействия датчика Sharp GP2Y1014AU0F с Arduino
Загрязнение воздуха является серьезной проблемой во многих городах, и индекс качества воздуха ухудшается с каждым днем. Согласно отчету Всемирной организации здравоохранения, больше людей погибает преждевременно от воздействия опасных частиц, присутствующих в воздухе, чем от автомобильных аварий. По данным Агентства по охране окружающей среды (EPA), воздух в помещении может быть в 2-5 раз токсичнее, чем воздух снаружи. Итак, мы строим проект по мониторингу качества воздуха путем измерения плотности частиц пыли в воздухе.
Итак, в продолжение наших предыдущих проектов, таких как детектор LPG, детектор дыма и монитор качества воздуха, здесь мы собираемся соединить датчик Sharp GP2Y1014AU0F с Arduino Nano для измерения плотности пыли в воздухе. Помимо датчика пыли и Arduino Nano, для отображения измеренных значений также используется OLED-дисплей. Датчик пыли GP2Y1014AU0F от Sharp очень эффективен при обнаружении очень мелких частиц, таких как сигаретный дым. Он разработан для использования в очистителях воздуха и кондиционерах.
Необходимые компоненты
- Ардуино Нано
- Датчик Sharp GP2Y1014AU0F
- 0,96 'SPI OLED-дисплей
- Перемычки
- Конденсатор 220 мкФ
- Резистор 150 Ом
Датчик Sharp GP2Y1014AU0F
Sharp GP2Y1014AU0F - это крошечный шестиконтактный оптический датчик качества воздуха / пыли с аналоговым выходом, предназначенный для обнаружения частиц пыли в воздухе. Работает по принципу лазерного рассеяния. Внутри модуля датчика инфракрасный излучающий диод и фотодатчик расположены по диагонали рядом с отверстием для впуска воздуха, как показано на изображении ниже:
Когда воздух, содержащий частицы пыли, попадает в камеру датчика, частицы пыли рассеивают свет ИК-светодиода в сторону фотодетектора. Интенсивность рассеянного света зависит от пылевых частиц. Чем больше в воздухе пылинок, тем больше яркость света. Выходное напряжение на выводе V OUT датчика изменяется в зависимости от интенсивности рассеянного света.
Распиновка датчика GP2Y1014AU0F:
Как упоминалось ранее, датчик GP2Y1014AU0F поставляется с 6-контактным разъемом. На приведенном ниже рисунке и в таблице показано назначение контактов GP2Y1014AU0F:
S. NO. |
Имя контакта |
Описание контакта |
1 |
V-LED |
Светодиод Vcc Pin. Подключите к 5 В через резистор 150 Ом |
2 |
LED-GND |
Вывод заземления светодиода. Подключиться к GND |
3 |
СВЕТОДИОД |
Используется для включения / выключения светодиода. Подключитесь к любому цифровому выводу Arduino |
4 |
S-GND |
Контакт заземления датчика. Подключитесь к GND Arduino |
5 |
V ВЫХОД |
Вывод аналогового выхода датчика. Подключите к любому аналоговому выводу |
6 |
V CC |
Положительный вывод питания. Подключите к 5V Arduino |
Технические характеристики датчика GP2Y1014AU0F:
- Низкое потребление тока: макс.20 мА
- Типичное рабочее напряжение: от 4,5 В до 5,5 В
- Минимальный обнаруживаемый размер пыли: 0,5 мкм
- Диапазон измерения плотности пыли: до 580 мкг / м 3
- Время обнаружения: менее 1 секунды
- Размеры: 1,81 x 1,18 x 0,69 дюйма (46,0 x 30,0 x 17,6 мм)
Модуль дисплея OLED
OLED (Organic Light-Emitting Diodes) - это технология самосветового излучения, созданная путем размещения ряда органических тонких пленок между двумя проводниками. Яркий свет возникает, когда на эти пленки подается электрический ток. В OLED используется та же технология, что и в телевизорах, но в них меньше пикселей, чем в большинстве наших телевизоров.
В этом проекте мы используем монохромный 7-контактный OLED-дисплей SSD1306 0,96 дюйма. Он может работать по трем различным протоколам связи: трехпроводной режим SPI, четырехпроводной режим SPI и режим I2C. Контакты и их функции описаны в таблице ниже:
Мы уже подробно рассматривали OLED и его типы в предыдущей статье.
Имя контакта |
Другие названия |
Описание |
Gnd |
Земля |
Контакт заземления модуля |
Vdd |
Vcc, 5 В |
Вывод питания (допустимое напряжение 3-5 В) |
SCK |
D0, SCL, CLK |
Действует как штифт часов. Используется как для I2C, так и для SPI |
ПДД |
D1, MOSI |
Вывод данных модуля. Используется как для IIC, так и для SPI |
ВИЭ |
RST, СБРОС |
Сбрасывает модуль (полезно во время SPI) |
ОКРУГ КОЛУМБИЯ |
A0 |
Вывод команды данных. Используется для протокола SPI |
CS |
Выбор чипа |
Полезно, когда по протоколу SPI используется более одного модуля |
OLED Технические характеристики:
- Микросхема драйвера OLED: SSD1306
- Разрешение: 128 х 64
- Угол обзора:> 160 °
- Входное напряжение: 3,3 В ~ 6 В
- Цвет пикселя: синий
- Рабочая температура: -30 ° C ~ 70 ° C
Узнайте больше об OLED и его взаимодействии с различными микроконтроллерами, перейдя по ссылке.
Принципиальная электрическая схема
Схема подключения датчика Sharp GP2Y1014AU0F к Arduino приведена ниже:
Схема очень проста, поскольку мы подключаем только датчик GP2Y10 и модуль OLED-дисплея к Arduino Nano. Датчик GP2Y10 и модуль OLED-дисплея питаются от +5 В и заземления. Вывод V0 соединен с выводом A5 Arduino Nano. Вывод светодиода датчика подключен к цифровому выводу 12 на Arduino. Поскольку модуль OLED-дисплея использует связь SPI, мы установили связь SPI между модулем OLED и Arduino Nano. Подключения показаны в таблице ниже:
S.No |
Вывод модуля OLED |
Штырь Arduino |
1 |
GND |
Земля |
2 |
VCC |
5В |
3 |
D0 |
10 |
4 |
D1 |
9 |
5 |
ВИЭ |
13 |
6 |
ОКРУГ КОЛУМБИЯ |
11 |
7 |
CS |
12 |
S.No |
Датчик Пин |
Штырь Arduino |
1 |
Vcc |
5В |
2 |
V O |
A5 |
3 |
S-GND |
GND |
4 |
СВЕТОДИОД |
7 |
5 |
LED-GND |
GND |
6 |
V-LED |
5 В через резистор 150 Ом |
Построение схемы на Perf Board
После пайки всех компонентов на монтажной плате она будет выглядеть примерно так, как показано ниже. Но его можно построить и на макете. Я припаял датчик GP2Y1014 на той же плате, что и датчик SDS011. Во время пайки убедитесь, что провода припоя находятся на достаточном расстоянии друг от друга.
Пояснение кода для анализатора качества воздуха
Полный код этого проекта приведен в конце документа. Здесь мы объясняем некоторые важные части кода.
Код использует Adafruit_GFX , и Adafruit_SSD1306 библиотеки. Эти библиотеки можно загрузить из Менеджера библиотек в Arduino IDE и установить оттуда. Для этого откройте IDE Arduino и перейдите в Sketch <Include Library <Manage Libraries . Теперь найдите Adafruit GFX и установите библиотеку Adafruit GFX от Adafruit.
Аналогичным образом установите библиотеки Adafruit SSD1306 от Adafruit.
После установки библиотек в Arduino IDE запустите код, включив необходимые файлы библиотек. Датчик пыли не требует какой-либо библиотеки, поскольку мы считываем значения напряжения непосредственно с аналогового вывода Arduino.
#включают
Затем определите ширину и высоту OLED. В этом проекте мы используем OLED-дисплей 128 × 64 SPI. Вы можете изменить переменные SCREEN_WIDTH и SCREEN_HEIGHT в соответствии с вашим отображением.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Затем определите контакты связи SPI, к которым подключен OLED-дисплей.
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13
Затем создайте экземпляр дисплея Adafruit с шириной и высотой, определенной ранее с помощью протокола связи SPI.
Отображение Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
После этого определите датчики пыли и контакты светодиода. Смысловой вывод - это выходной вывод датчика пыли, который используется для считывания значений напряжения, а вывод светодиода используется для включения / выключения ИК-светодиода.
int sensePin = A5; int ledPin = 7;
Теперь внутри функции setup () инициализируйте Serial Monitor со скоростью 9600 бод для целей отладки. Также инициализируйте OLED-дисплей с помощью функции begin () .
Serial.begin (9600); display.begin (SSD1306_SWITCHCAPVCC);
Внутри функции loop () считайте значения напряжения с аналогового вывода 5 Arduino Nano. Сначала включите ИК-светодиод, а затем подождите 0,28 мс, прежде чем снимать показания выходного напряжения. После этого считайте значения напряжения с аналогового вывода. Эта операция занимает от 40 до 50 микросекунд, поэтому перед выключением светодиода датчика пыли следует ввести задержку в 40 микросекунд. Согласно спецификациям, светодиод должен включаться один раз каждые 10 мс, поэтому дождитесь оставшейся части цикла 10 мс = 10000 - 280 - 40 = 9680 микросекунд .
digitalWrite (ledPin, LOW); delayMicroseconds (280); outVo = analogRead (sensePin); delayMicroseconds (40); digitalWrite (ledPin, HIGH); delayMicroseconds (9680);
Затем в следующих строках вычислите плотность пыли, используя выходное напряжение и значение сигнала.
sigVolt = outVo * (5/1024); dustLevel = 0,17 * sigVolt - 0,1;
После этого установите размер и цвет текста с помощью setTextSize () и setTextColor () .
display.setTextSize (1); display.setTextColor (БЕЛЫЙ);
Затем в следующей строке определите позицию, с которой начинается текст, с помощью метода setCursor (x, y) . И распечатайте значения плотности пыли на OLED-дисплее с помощью функции display.println () .
display.println («Пыль»); display.println («Плотность»); display.setTextSize (3); display.println (dustLevel);
И, наконец, вызовите метод display () для отображения текста на OLED-дисплее.
display.display (); display.clearDisplay ();
Тестирование взаимодействия датчика Sharp GP2Y1014AU0F с Arduino
Как только оборудование и код готовы, пора проверить датчик. Для этого подключите Arduino к ноутбуку, выберите плату и порт и нажмите кнопку загрузки. Как вы можете видеть на изображении ниже, плотность пыли будет отображаться на OLED-дисплее.
Полное рабочее видео и код приведены ниже. Надеюсь, вам понравился урок и вы узнали что-то полезное. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев или воспользуйтесь нашим форумом для других технических вопросов.