Измерение концентрации углекислого газа (CO2) с помощью Arduino и датчика MQ-135

Уровень концентрации углекислого газа (CO2) в атмосфере Земли увеличивается с каждым годом, что косвенно приводит к проблеме глобального потепления. Также углекислый газ играет важную роль в процессах, происходящих в современном мире. Поэтому измерение его концентрации в окружающем воздухе является достаточно важной и актуальной задачей.

Внешний вид подключения датчика MQ-135 к плате Arduino

В данной статье мы рассмотрим подключение датчика MQ-135 к плате Arduino и измерение с его помощью концентрации углекислого газа (CO2). Ранее на нашем сайте мы уже рассматривали измерение концентрации CO2 с помощью инфракрасного датчика, но инфракрасный датчик достаточно дорого стоит, поэтому в данном проекте мы для измерения концентрации CO2 будем использовать значительно более дешевый датчик MQ-135. Мы уже рассматривали его подключение к плате Arduino в проекте системы мониторинга качества воздуха, но этот проект будет немного отличаться – в нем мы будем использовать для отображения концентрации CO2 OLED дисплей и не будем передавать эти данные в сеть интернет. Также на нашем сайте вы можете посмотреть другие проекты, в которых рассматривается измерение каких либо веществ в окружающем воздухе:

Необходимые компоненты

  1. Плата Arduino Nano (купить на AliExpress).
  2. Датчик газа MQ135 (купить на AliExpress).
  3. 0.96’ SPI OLED Display Module – модуль OLED дисплея с диагональю 0.96’ и поддержкой интерфейса SPI (купить на AliExpress - если будете покупать по приведенной ссылке, то выбирайте модель OLED дисплея с 7 контактами).
  4. Резистор 22 кОм (купить на AliExpress).
  5. Макетная плата.
  6. Соединительные провода.

Модуль OLED дисплея (0.96’ OLED Display Module)

OLED (Organic Light-Emitting Diodes, органический светоизлучающий диод) – это светоизлучающая технология, которая применяется в большинстве современных телевизоров. В OLED дисплеях используется тот же принцип формирования изображения, что и в современных телевизорах, только количество пикселей в них значительно меньше.

Внешний вид модуля OLED дисплея с поддержкой интерфейса SPI

Для нашего проекта мы использовали монохромный 7-ми контактный OLED дисплей SSD1306 с диагональю 0.96”. Он может использовать 3 различных коммуникационных протокола: 3-х проводный SPI, 4-х проводный SPI и I2C.

Назначение его контактов (распиновка) приведены в следующей таблице.

Номер контакта Название контакта Альтернативное название контакта Назначение контакта
1 Gnd Ground земля (общий провод)
2 Vdd Vcc, 5V напряжение питания (в диапазоне 3-5 В)
3 SCK D0, SCL, CLK контакт синхронизации (clock pin). Применяется в интерфейсах I2C и SPI
4 SDA D1, MOSI контакт данных. Применяется в интерфейсах I2C и SPI
5 RES RST, RESET контакт сброса модуля. Применяется в интерфейсе SPI
6 DC A0 контакт команд (Data Command pin). Применяется в интерфейсе SPI
7 CS Chip Select (выбор чипа) используется когда несколько устройств взаимодействуют по интерфейсу SPI

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

Технические характеристики OLED дисплея SSD1306:

  • драйвер микросхемы OLED: SSD1306;
  • разрешение: 128 x 64;
  • угол зрения: >160°;
  • входное напряжение: 3.3V ~ 6V;
  • цвет пикселов: синий;
  • диапазон рабочих температур: -30°C ~ 70°C.

Подготовка датчика MQ-135 к измерению углекислого газа

Датчик газа MQ-135 способен обнаруживать широкий диапазон различных газов в окружающем воздухе: NH3, NOx, алкоголь, бензол, дым и углекислый газ (CO2). Датчик MQ-135 можно купить как в виде модуля, так и в виде отдельного датчика. В нашем проекте мы будем использовать его в виде модуля для измерения концентрации CO2 в единицах PPM (parts per million – частей на миллион). Схема модуля датчика MQ-135 показана на следующем рисунке:

Схема модуля датчика MQ-135

В этой схеме весьма важную роль играет нагрузочный резистор RL – его сопротивление может изменяться в зависимости от концентрации газа. В соответствии с даташитом на датчик MQ-135 сопротивление нагрузочного резистора может изменяться от 10 кОм до 47 кОм. Даташит рекомендует чтобы вы калибровали датчик для 100ppm NH3 или для 50ppm концентрации алкоголя в воздухе и использовали значение нагрузочного резистора RL примерно 20 кОм. Но если вы внимательно посмотрите на плату модуля MQ-135, то вы увидите что значение резистора RL на ней составляет 1 кОм (102).

Местоположение нагрузочного резистора RL на плате модуля датчика MQ-135

Поэтому, чтобы корректно измерять концентрацию CO2, вам необходимо заменить этот резистор 1 кОм на резистор сопротивлением 22 кОм.

Схема проекта

Схема подключения датчика MQ-135 к плате Arduino представлена на следующем рисунке.

Схема подключения датчика MQ-135 к плате ArduinoКак видите, схема достаточно проста, в ней необходимо подключить к плате Arduino датчик MQ-135 и OLED дисплей. Датчик газа MQ-135 и OLED дисплей оба запитываются от контактов +5V и GND платы Arduino. Аналоговый выход датчика MQ-135 подключен к контакту A0 платы Arduino Nano. OLED дисплей подключен к плате Arduino Nano по интерфейсу SPI, схема их соединений показана в следующей таблице.

OLED дисплей Плата Arduino
GND Ground
VCC 5V
D0 10
D1 9
RES 13
DC 11
CS 12

После сборки схемы на макетной плате у нас получилась конструкция следующего вида:

Внешний вид собранной конструкции проекта

Расчет значения Ro датчика MQ135

Теперь, когда мы знаем сопротивление резистора RL, давайте рассмотрим как рассчитать значение Ro для чистого воздуха. В нашем проекте бы будем использовать библиотеку MQ135.h для измерения концентрации CO2 в окружающем воздухе. Скачайте указанную библиотеку и дайте датчику MQ-135 прогреться в течение 24 часов перед считыванием значений Ro. После завершения процесса предварительного прогрева используйте следующий код программы для считывания значений Ro:

Теперь, когда вы получили значение Ro, откройте папку Documents > Arduino > libraries > MQ135-master, в ней откройте файл MQ135.h и в нем измените значения RLOAD и RZERO.

После этого прокрутите файл вниз и замените в нем значение ATMOCO2 на текущее (в настоящее время) значение концентрации CO2 в атмосфере - 411.29.

Объяснение программы для измерения концентрации CO2 с помощью Arduino и датчика MQ-135

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В коде программы мы будем использовать библиотеки Adafruit_GFX, Adafruit_SSD1306 и MQ135.h. Первые две из них можно скачать и установить с помощью менеджера библиотек (Library Manager) Arduino IDE. Для этого запустите Arduino IDE и в ней откройте пункт меню Sketch < Include Library < Manage Libraries. Откроется окно, в нем запустите поиск Adafruit GFX, после ее нахождения установите библиотеку Adafruit GFX от компании Adafruit.

Установка библиотеки Adafruit GFX

Аналогичным образом установите библиотеку Adafruit SSD1306 от компании Adafruit. Библиотеку MQ135 можно скачать по этой ссылке.

После этого укажем в программе ширину и высоту OLED дисплея, в нашем случае мы используем дисплей 128×64 с поддержкой интерфейса SPI. Вы можете изменить значения SCREEN_WIDTH и SCREEN_HEIGHT если используете OLED дисплей с другим разрешением.

Затем укажем контакты платы Ардуино, к которым дисплей подключен по интерфейсу SPI.

После этого создадим объект OLED дисплея с необходимыми характеристиками.

Затем дадим название контакту, к которому подключен датчик MQ-135.

После этого в функции setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки. Также инициализируем OLED дисплей с помощью функции begin().

Внутри функции loop() мы будем считывать значение с выхода датчика MQ-135 на выходе АЦП контакта A0 с помощью функции analogRead().

Затем мы будем вызывать функцию gasSensor.getPPM() для расчета значения углекислого газа в единицах PPM (частей на миллион), которое рассчитывается на основе сопротивления нагрузочного резистора, значения Ro и считанного с контакта A0 значения.

После этого установим размер текста и его цвет на OLED дисплее с помощью функций setTextSize() и setTextColor().

Затем установим позицию курсора с помощью функции setCursor(x,y) и будем выводить значения концентрации CO2 на экран OLED дисплея с помощью функции display.println().

И, наконец, вызовем функцию display() для отображения необходимого текста на экране OLED дисплея.

Тестирование работы проекта

После того как аппаратная часть проекта будет готова, загрузите программу в плату Arduino. Затем откройте окно монитора последовательной связи (serial monitor) и подождите некоторое время, необходимое для предварительного прогрева датчика. После этого вы в окне монитора последовательной связи сможете наблюдать окончательные (правильные) значения CO2. Также эти значения будут отображаться и на экране OLED дисплея:

Отображение значения концентарции CO2 в единицах PPM на экране OLED дисплея

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

(Проголосуй первым!)
Загрузка...
1 838 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *