Оглавление
- Теги
- Код Arduino
- Пример работы для Arduino и XOD
- Как работает датчик газа?
- Элементы платы
- Как работает дымовая сигнализация?
- Подробности про датчики качества воздуха
- Характеристики оборудования, его настройка, примечания
- Что такое датчик газа MQ-2?
- Испытание газового детектора
- Датчик утечки газа MQ2 на Ардуино
- Элементы платы
- Как подключить датчик MQ2 к Ардуино
- Схемы соединения и скетчи
- Объяснение программы для измерения концентрации CO2 с помощью Arduino и датчика MQ-135
- Проектирование детектора дыма в виде платы расширения для Arduino
Теги
ArduinoMCUДатчикДатчик газаДатчик дымаМикроконтроллерГлавная > Проекты > Подключение датчика газа MQ-2 к Arduino
Датчик газа MQ-2 позволяет регистрировать концентрацию таких газов как водород, дым и горючие углеводородные газы (метан, пропан, бутан). Датчик относится к распространенному семейству датчиков MQ. Это семейство датчиков, благодаря своей низкой стоимости и простоте использования завоевало популярность. Датчик имеет аналоговый и цифровой выход. На цифровой выход сигнал подается при превышении определенного порога концентрации газа, который настраивается подстроечным резистором. Датчик прост в подключении, имеет высокую чувствительность и малое время отклика.
<center>
Датчик представляет из себя небольшую плату, с передней стороны которой расположен чувствительный газоанализатор (детектор), а на обратной стороне располагаются 4 ножки для подключения датчика, индикаторы питания и выходного сигнала, а также потенциометр.
Применяют датчики MQ-2 в системах умного дома, в системах обнаружения газа или дыма на промышленных или частных объектах, в автомобильных вентиляционных фильтрах и т.д.
Характеристики
- Напряжение питания: 5В;
- Потребляемый ток (ток нагревателя): 180мА;
- Диапазон чувствительности 300-10000 ppm;
- Газ, для которого нормируется датчик: изобутан, 1000ppm;
- Время отклика: менее 10 с;
- Рабочая температура: от -10 до +50 °C;
- Рабочая влажность воздуха: не более 95% RH;
- Интерфейс: аналоговый и цифровой;
Принцип работы
Принцип работы датчика основан на чувствительном детекторе из смеси оксидов алюминия и олова, в котором за счет нагревания происходит химическая реакция. Именно поэтому в процессе работы газоанализатор существенно нагревается, так что не стоит пугаться. В результате химической реакции изменяется сопротивление элемента и передается сигнал. В зависимости от чувствительности элемента к определенным газам достигается эффект их обнаружения.
Концентрация газа измеряется в ppm. Она расшифровывается, как parts per million (частей на миллион). Таким образом 1ppm соответствует концентрации в 0,0001%. Что бы получить точное значение измеренной концентрации газа ppm, необходимо выполнить сложное нелинейное преобразование напряжения на аналоговом выходе датчика по таблицам преобразования из документации на датчик, с учетом температуры окружающего воздуха.
С помощью потенциометра можно изменять порог чувствительности цифрового выхода датчика. Имейте ввиду что для разных газов порог чувствительности будет не один и тот же.
Индикаторы, расположенные на датчике, уведомляют нас подключенном питании и превышении порога чувствительности цифрового выхода.
Подключение
Подключить датчик можно к плате Arduino или напрямую к модулю реле. В первом случае используется аналоговый выход А0 датчика, который подключают к аналоговому входу на плате Arduino. В случае с реле используют цифровой выход датчика.
<center>
Внимание. Не подавайте на датчик напряжение питания более 5В, избегайте попадания влаги и щелочи на газоанализатор, избегайте обморожения датчика при очень низких температурах
Схема подключения представлена на картинке ниже:
<center>
Программный код для Arduino IDE
Пример исходного кода проверки работоспособности датчика для Arduino представлен ниже. Код выводит в монитор порта текущее значение АЦП аналогового входа и информацию о превышении порогового значения. В строчке кода #define smokePin A0 вы можете задать номер пина Arduino, к которому подключен аналоговый выход датчика. Пороговое значение концентрации газа в воздухе вы можете задать самостоятельно.
Код Arduino
Код очень прост, и, в основном, он просто читает аналоговое напряжение на выводе A0. При обнаружении дыма он выводит сообщение на мониторе последовательного порта. Посмотрите скетч, прежде чем мы начнем его подробный разбор.
Скетч начинается с определения вывода Arduino, к которому подключен аналоговый вывод датчика газа MQ-2. Переменная под названием определена для хранения значения датчика.
В функции мы инициализируем последовательную связь с ПК и ждем 20 секунд, чтобы дать датчику прогреться.
В функции значение датчика считывается функцией и отображается в мониторе последовательного порта.
Когда концентрация газа достаточно высока, датчик обычно выдает значение, превышающее 300. Мы можем отслеживать это значение с помощью оператора . И когда значение датчика превысит 300, мы отобразим сообщение «Smoke detected!» (Обнаружен дым!).
Вывод в мониторе последовательного порта выглядит так:
Рисунок 13 – Вывод в мониторе последовательного порта скетча для работы с модулем датчика газа MQ-2
Пример работы для Arduino и XOD
В качестве мозга для считывания показаний с датчика рассмотрим платформу из серии Arduino, например Uno.
-
Как начать работу с Arduino?
-
Как начать работу с XOD?
Схема устройства
Подключите датчик качества воздуха к пинам шины I²C — SDA и SCL платформы Arduino Uno. Для коммуникации используйте выходной провод от сенсора совместно с
соединительными проводами «папа-папа».
Для быстрой сборки и отладки устройства возьмите плату расширения Troyka Shield, которая надевается сверху на Arduino Uno методом бутерброда. Для коммуникации используйте выходной провод от сенсора.
Код для Arduino IDE
- sensor-co2-ccs811-with-case-arduino-read-data.ino
-
// библиотека для работы с датчиком качества воздуха CCS811 #include "Adafruit_CCS811.h" // создаём объект для работы с датчиком Adafruit_CCS811 ccs; void setup() { // открываем Serial-порт Serial.begin(9600); Serial.println("Amperka CCS811 test..."); // если датчик не прошел проверку, дальше не идем и крутимся в цикле if(!ccs.begin()){ Serial.println("Failed to start sensor! Please check your wiring."); while(1); } } void loop() { // если пришли новые данные if(ccs.available()) { // считываем данные if(!ccs.readData()) { // выводим в Serial-порт показания концентрации CO2 // и количество летучих органических веществ Serial.print("CO2: "); Serial.print(ccs.geteCO2()); Serial.print("ppm, TVOC: "); Serial.println(ccs.getTVOC()); } else { Serial.println("ERROR..."); while(1); } } delay(500); }
После загрузки скетча, в Serial-порт будет выводиться количество углекислого газа в и летучих органических веществ в .
Как работает датчик газа?
Когда диоксид олова (частицы полупроводника) нагревается на воздухе до высокой температуры, на его поверхности адсорбируется кислород. В чистом воздухе донорные электроны диоксида олова притягиваются к кислороду, который адсорбируется на поверхности чувствительного материала. Это предотвращает протекание электрического тока.
В присутствии восстановительных газов поверхностная плотность адсорбированного кислорода уменьшается, так как он реагирует с восстановительными газами. Из-за чего электроны высвобождаются в диоксид олова, что позволяет току свободно течь через датчик.
Элементы платы
Датчик газа MQ-135
Датчик MQ-135 относиться к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.
Выбор режима питания нагревателя
В сенсоре предусмотрено два режима работы, переключаемых джампером.
- Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
- Управление нагревателем программно.
1 группа
- Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
- Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
- Земля (G) — Соедините с пином микроконтроллера.
2 группа
- Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
-
Питание (H) — Питание нагревателя. Соедините с пином
- Земля (G) — Соедините с пином микроконтроллера..
Как работает дымовая сигнализация?
Датчик дыма MQ-2 имеет выход в форме аналогового сигнала. Мы установили в нашем коде условие, при котором, если выходное значение датчика больше 400 зуммер начнет подавать звуковой сигнал и загорится красный светодиод; и если выходное значение датчика меньше 400, то зуммер будет молчать, а загорится зеленый светодиод.
Используемый здесь ESP8266 создаст веб-страницу по IP-адресу и отправит данные на этотадрес и выведет там данные. После загрузки кода этот IP-адрес можно увидеть на последовательном мониторе, как показано ниже.
Когда вы вводите этот IP-адрес в своем браузере, то увидите страницу как на рисунке ниже:
Подробности про датчики качества воздуха
Окружающий нас воздух в атмосфере состоит из:
- 78% азота (N2)
- 21% кислорода (O2)
- 1% приходится на долю различных примесей, например инертные газы, углекислый газ, угарный газ и другие органические летучие вещества ЛОВ (от англ. total volatile organic compounds, TVOC).
Несмотря на то, что в процентном соотношении количества примесей мало, изменение их концентрации может оказаться очень неприятным и даже опасным для человека.
Ранее для оценки качества воздуха TOVC применяли датчики CO2: сначала вычисляли концентрацию углекислого газа CO2, а далее высчитывали TVOC. Но традиционные датчики CO2 нечувствительны на курение, бытовую химию, чистящие средства, лакокрасочные материалы и другую парфюмерию.
Датчик качества воздуха CCS811 высчитывает концентрацию летучих органических веществ (TVOC), а затем только вычисляет эквивалентное значения углекислого газа (eCO2): эквивалентное, т.к. количество углекислого газа (CO2) считается расчётным путём из концентрации летучих органических веществ (TVOC).
Характеристики оборудования, его настройка, примечания
Здесь начать стоит непосредственно с преобразователя аналогового сигнала в цифровой, а конкретно с платы-посредника между Arduino и тензодатчиками — HX711:
Основное назначение устройства в конвертации объема поступающего тока в бинарный формат. Причем чувствительность аппарата непосредственно зависит от установленного режима усиления линии:
Коэффициент | Пиковый ток |
---|---|
32 | ± 80 мА |
64 | ± 40 мА |
238 | ± 20 мА |
В тех случаях, когда на вход АЦП поступает ток меньше нижней границы диапазона, на его выходе будет выдано 800000h, а если больше верхней — 7FFFFFh.
К сожалению, есть у преобразователя HX711 определенные проблемы. К примеру, точность его работы сильно зависит от температуры окружающей среды. Дополнительно, даже в нормальном режиме, происходит изменение определяемых аналоговых значений. То есть, результирующие коды все время «бегают» в определенных, достаточно сильных пределах:
Один из немногих дельных советов для таких случаев, выясненный при помощи интернет, — использовать для питания ровно 5 В в отношении датчиков и самого АЦП, а также снизить частоту определения до 10 Гц. Кроме того, пользователи названой платы применяют линейные фильтры на вводе и рекомендуют делать больший упор в конструкциях на канал B — он менее шумный. Также хорошим стабилизатором показаний будет опрос 10 значений и вывода среднего. Вариантом можно применить сборки на основе АЦП HX710A. Названый конвертер дополнительно оснащен сенсором температуры, корректирующим выходные данные.
К Ардуино преобразователь соединяется четырьмя контактами, два из которых питание, а остальные применяются в деле передачи данных:
Arduino | HX711 |
---|---|
5V | VCC |
GND | GND |
DT | Цифровой вывод |
SCK | Цифровой вывод |
Закончив с конвертером аналога в цифру для Ардуино, перейдем к характеристикам, которыми обладают сами тензодатчики:
На выходе полу мостового тензодатчика три провода, которыми он подключается к HX711. Классически они имеют следующее цветовое разделение:
Контакт | Цвет |
---|---|
А+ | Белый |
E- | Черный |
E+ | Красный |
У мостового детектора четыре исходящих контакта, имеющих следующую цветовую дифференциацию:
Контакт | Цвет |
---|---|
А+ | Белый |
E- | Черный |
E+ | Красный |
A- | Зеленый |
На обоих видах резистивных детекторов присутствуют отверстия под крепежные болты M4/5.
Что такое датчик газа MQ-2?
MQ-2 является одним из наиболее часто используемых датчиков газа из серии датчиков MQ. Это датчик газа типа металл-оксид-полупроводник (МОП, MOS), также известный как химрезистор (химический резистор), поскольку обнаружение основано на изменении сопротивления чувствительного материала, когда газ вступает в контакт с этим материалом. Используя простую цепь делителя напряжения, можно измерить концентрацию газа.
Рисунок 2 – Датчик газа MQ-2
Датчик газа MQ-2 работает при постоянном напряжении 5 В и потребляет около 800 мВт. Он может обнаруживать концентрации LPG (сжиженного нефтяного газа), дыма, алкоголя, пропана, водорода, метана и угарного газа от 200 до 10000 ppm (миллионных долей).
Чему равен 1 ppm?
При измерении газов, таких как углекислый газ, кислород или метан, термин концентрация используется для описания количества газа по объему в воздухе. Двумя наиболее распространенными единицами измерения являются миллионная доля (ppm) и процентная концентрация.
Миллионная доля (сокращенно ppm) – это соотношение одного газа к другому. Например, 1000 ppm CO означает, что если бы вы могли сосчитать миллион молекул газа, 1000 из них были бы моноокисью углерода, а 999 000 молекул – какими-то другими газами.
Вот полный список технических характеристик:
Рабочее напряжение | 5 В |
Сопротивление нагрузки | 20 кОм |
Сопротивление нагревателя | 33 Ом ± 5% |
Потребляемая мощность | мВт |
Сопротивление чувствительности | 10 кОм — 60 кОм |
Измерение концентрации | 200 — 10000 ppm |
Время разогрева | более 24 часов |
Для более подробной информации, пожалуйста, обратитесь техническому описанию.
Скачать техническое описание MQ-2
Совет
Датчик чувствителен к нескольким газам – но не может сказать, какой из них он обнаружил! Это нормально; большинство датчиков газа такие. Таким образом, он лучше всего подходит для измерения изменений концентрации известного газа, а не для определения концентрация какого газа изменилась.
Испытание газового детектора
Для тестирования будем использовать зажигалку, заправленную пропан-бутановой смесью.
Ардуино и датчик определения газов — тестирование
В отсутствии примеси, определяемых газов, на аналоговом выводе датчика имеется низкий уровень напряжения, а на цифровой установлен в режим логической единицы.
Датчик MQ2 — результаты теста
Если из зажигалки выпустить немного газа рядом с датчиком, то показания датчика тут же изменятся. Напряжение на аналоговом выходе сильно возрастает, а на цифровом выводе появляется логический сигнал низкого уровня.
Датчик MQ2 — результаты теста с газом
При работе датчик MQ2 заметно нагревается. Производитель рекомендует прогреть датчик в течении 20 с перед началом работы. Видимо с этим связано то, что постепенно уровень напряжения на аналоговом канале падает с начального значения в 1,5 В до примерно 0,2 В. Но этот процесс занимает не 20 секунд, а примерно пол часа. При размещении датчика следует иметь в виду, что метан и, тем белее, водород имеют плотность меньше плотности воздуха, а потому будут собираться в верхней части помещения. Метан является основным компонентом природного газа, который подается по газовой распределительной сети. Так же себя поведет и горячий, насыщенный дымом, воздух при пожаре. Пропан и бутан, которые используются в горелках с баллонным питанием, гораздо плотнее воздуха и будут собираться в нижней части помещения. Так же интересную информацию по аналогичным датчикам можно найти в других источниках .
Датчик утечки газа MQ2 на Ардуино
Принцип сенсора основан на детекторе, изготовленного из сплава оксида олова и алюминия, который в процессе работы сенсора существенно нагревается. В результате химической реакции, происходящей при попадании молекул углеводородных газов на чувствительный элемент, изменяется сопротивление сенсора. Измеряя изменения сопротивления, можно узнать точное значение концентрации газа в воздухе.
При измерении газов, термин «концентрация» используется для описания количества газа в воздухе по объему. Наиболее распространенными единицами измерения являются доли на миллион и процентная концентрация. Доли на миллион (ppm) — это отношение одного газа к другому. Например, концентрация 1000 ppm CO означает, что на 999 000 молекул газа, 1000 из них будут относится к углекислому газу.
Характеристики датчика MQ2 Ардуино
- Питание: 5 Вольт;
- Потребляемый ток: 180мА;
- Чувствительность: 300-10000 ppm;
- Рабочая температура: от -10 до +50 °C;
- Влажность воздуха: не более 95%;
- Интерфейс: аналоговый и цифровой.
Схема и распиновка датчика газа MQ2
Распиновка сенсора утечки газа MQ2 на Ардуино
Напряжение аналогового выхода изменяется пропорционально концентрации дыма или газа. Чем выше концентрация газа, тем выше выходное напряжение. Логический сигнал можно откалибровать, держа датчик рядом с дымом, который вы хотите обнаружить. Далее вращайте потенциометр по часовой стрелке (для увеличения чувствительности сенсора), пока не загорится красный светодиод на модуле.
Элементы платы
Датчик газа MQ5
Датчик MQ5 относиться к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.
Выбор режима питания нагревателя
В сенсоре предусмотрено два режима работы, переключаемых джампером.
- Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
- Управление нагревателем программно.
1 группа
- Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
- Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
- Земля (G) — Соедините с пином микроконтроллера.
2 группа
- Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
- Питание (H) — Питание нагревателя. Соедините с пином .
- Земля (G) — Соедините с пином микроконтроллера.
Как подключить датчик MQ2 к Ардуино
Для этого занятия нам потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- датчик газа MQ2;
- макетная плата;
- светодиод;
- резистор 220 Ом;
- провода «папа-папа», «папа-мама».
Схема подключения датчика MQ2 к Ардуино Уно
MQ2 | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
OUT | A1 | A1 | A1 |
Рассмотрим несколько вариантов кода для сенсора. Первый вариант — без библиотеки и еще два примера с библиотеками MQ2.h и TroykaMQ.h от Амперки. Обе библиотеки можно скачать на нашем сайте здесь
Обратите внимание, что при установке сразу двух библиотек будет происходить конфликт и Arduino IDE выдаст ошибку при компиляции. Загрузите первый пример, после сборки схемы, представленной на картинке выше
Скетч. Применяем датчик MQ2 без библиотеки
#define PIN_MQ2 A1 // имя пина для подключения MQ2 #define LED 13 // имя пина для подключения светодиода int value; void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); pinMode(PIN_MQ2, INPUT); } void loop() { // записываем полученные данные с датчика value = analogRead(PIN_MQ2); // выводим информацию на монитор порта Serial.println("VALUE - " + String(value)); Serial.println(" "); // включаем светодиод при превышении определенного значения if (value > 200) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(200); }
Пояснения к коду:
- в этом примере необходимо будет откалибровать датчик, т.е. настроить включение светодиода при заданном пороге концентрации газа. При этом датчик не распознает газы, поэтому лучше использовать библиотеки для MQ2.
Датчик широкого спектра газов MQ-2 и Ардуино
Для следующего примера следует переключить пин A1 на логический порт сенсора газа (цифровой сигнал). Если вы используете датчик широкого спектра газов MQ-2 от компании Амперка, то подключите его к микроконтроллеру, согласно схеме. При этом у сенсора должен быть включен нагрев (замкнута перемычка на плате датчика). После подключения датчика к Arduino, загрузите следующую программу в плату.
Скетч. Подключение датчика с библиотекой MQ2.h
#include <MQ2.h> // библиотека для датчика #define PIN_MQ2 A1 // имя пина для подключения MQ2 #define LED 13 // имя пина для подключения светодиода MQ2 mq2(PIN_MQ2); // создаём объект для работы с датчиком int lpg, co, smoke; void setup() { Serial.begin(9600); mq2.begin(); pinMode(LED, OUTPUT); } void loop() { float* values = mq2.read(true); // получаем информацию с датчика // выводим данные на монитор порта lpg = mq2.readLPG(); co = mq2.readCO(); smoke = mq2.readSmoke(); // включаем светодиод при превышении концентрации CO if (co > 1000) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } delay(200); }
Пояснения к коду:
- информация с датчика выводится на монитор порта Arduino IDE;
- порог включения светодиода можно изменить в операторе if и настроить программу на определение концентрации другого газа (в примере указан CO).
Скетч. MQ2 от Амперки с библиотекой TroykaMQ.h
#include <TroykaMQ.h> // библиотека для датчика #define PIN_MQ2 A1 // имя пина для подключения датчика MQ2 mq2(PIN_MQ2); // создаём объект для работы с датчиком void setup() { Serial.begin(9600); // выполняем калибровку датчика mq2.calibrate(); // выводим сопротивление датчика в чистом воздухе (Ro) Serial.println("Ro = " + String(mq2.getRo())); } void loop() { // выводим значения газов в ppm Serial.println("LPG: " + String(mq2.readLPG()) + " ppm"); Serial.println("Methane: " + String(mq2.readMethane()) + " ppm"); Serial.println("Smoke: " + String(mq2.readSmoke()) + " ppm"); Serial.println("Hydrogen: " + String(mq2.readHydrogen()) + " ppm"); Serial.println(" "); delay(200); }
Пояснения к коду:
- в представленном примере информация по концентрации газов выводится в последовательный порт, без включения светодиода;
- сенсор должен находится в режиме постоянного нагрева (перемычка замкнута).
Схемы соединения и скетчи
Сами тензодатчики подключаются по схеме в зависимости от их типа — полу-, или мостового, а также общего количества чувствительных элементов. На плате HX711 размещены два аналоговых входа, соответственно к АЦП можно присоединить или четыре половинчатых детектора или два полных.
Соединение с единичным датчиком полумоста
Соответственно скетч его калибрующий и опрашивающий: // Указываем соответствующие контакты, к которым присоединен сенсор #define pSCK 2 #define pDT 3 #include «HX711.h» HX711 HX711ctl; // создаем объект float CF = -0.6; // поправочный коэффициент подобранный к конкретным датчикам float UNC,GR; // Унции и граммы void setup() { Serial.begin(57600); HX711ctl.begin(pDT, pSCK); // инит детектора HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний детектора HX711ctl.set_scale(CF); // Настройка поправочного значения } void loop() { UNC = HX711ctl.get_units(10); // Делаем 10 проб и получаем усредненное значение GR = UNC * 0.035274; // Конвертация унция → грамм Serial.print(«Volume: «); Serial.print(GR); Serial.println(» Gr»); }
Соединение с четырьмя полумостовыми тензодатчиками
По причине того, что в цепях с участием HX711 важным фактором служит только физическое соединение чувствительных элементов, никакого отличия от предыдущего скетча по получению показаний — нет.
Соединение с одним мостовым тензодатчиком
Опять же, и для представленной схемы скетч изменений не требует. Есть только у некоторых специалистов замечание, по вычислению и установке CF — переменной поправки: void setCF() { HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний датчика const WOS = 200; // вес платформы float CFM,CF=0,CR=0.035274; for (int j=0;j < 10; j++){ CFM = HX711ctl.get_units(1) / (WOS / CR); CF += CFM; } CF=CF/10; HX711ctl.set_scale(CF); }
Соответственно изменится и остальной код: // Указываем соответствующие линии, к которым присоединен детектор #define pSCK 2 #define pDT 3 #include «HX711.h» HX711 HX711ctl; float UNC,GR; // Унции и граммы void setup() { Serial.begin(57600); HX711ctl.begin(pDT, pSCK); // инит детектора HX711ctl.set_scale(); // — // HX711ctl.tare(); // Очистка показаний датчика setCF(); // Настройка поправочного значения ← измененная часть } void loop() { UNC = HX711ctl.get_units(10); // Делаем 10 проб и получаем усредненное значение GR = UNC * 0.035274; // Конвертация унция → грамм Serial.print(«Volume: «); Serial.print(GR); Serial.println(» Gr»); }
Объяснение программы для измерения концентрации 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 SSD1306 от компании Adafruit. Библиотеку MQ135 можно скачать по этой ссылке.
Arduino
#include «MQ135.h»
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
1 |
#include «MQ135.h» #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> |
После этого укажем в программе ширину и высоту OLED дисплея, в нашем случае мы используем дисплей 128×64 с поддержкой интерфейса SPI. Вы можете изменить значения SCREEN_WIDTH и SCREEN_HEIGHT если используете OLED дисплей с другим разрешением.
Arduino
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
1 |
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64 |
Затем укажем контакты платы Ардуино, к которым дисплей подключен по интерфейсу SPI.
Arduino
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
1 |
#define OLED_MOSI 9 #define OLED_CLK 10 #define OLED_DC 11 #define OLED_CS 12 #define OLED_RESET 13 |
После этого создадим объект OLED дисплея с необходимыми характеристиками.
Arduino
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
1 | Adafruit_SSD1306display(SCREEN_WIDTH,SCREEN_HEIGHT,OLED_MOSI,OLED_CLK,OLED_DC,OLED_RESET,OLED_CS); |
Затем дадим название контакту, к которому подключен датчик MQ-135.
Arduino
int sensorIn = A0;
1 | intsensorIn=A0; |
После этого в функции setup() инициализируем последовательную связь со скоростью 9600 бод для целей отладки. Также инициализируем OLED дисплей с помощью функции begin().
Arduino
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
1 |
Serial.begin(9600); display.begin(SSD1306_SWITCHCAPVCC); display.clearDisplay(); |
Внутри функции loop() мы будем считывать значение с выхода датчика MQ-135 на выходе АЦП контакта A0 с помощью функции analogRead().
Arduino
val = analogRead(A0);
Serial.print («raw = «);
1 |
val=analogRead(A0); Serial.print(«raw = «); |
Затем мы будем вызывать функцию gasSensor.getPPM() для расчета значения углекислого газа в единицах PPM (частей на миллион), которое рассчитывается на основе сопротивления нагрузочного резистора, значения Ro и считанного с контакта A0 значения.
Arduino
float ppm = gasSensor.getPPM();
Serial.print («ppm: «);
Serial.println (ppm);
1 |
floatppm=gasSensor.getPPM(); Serial.print(«ppm: «); Serial.println(ppm); |
После этого установим размер текста и его цвет на OLED дисплее с помощью функций setTextSize() и setTextColor().
Arduino
display.setTextSize(1);
display.setTextColor(WHITE);
1 |
display.setTextSize(1); display.setTextColor(WHITE); |
Затем установим позицию курсора с помощью функции setCursor(x,y) и будем выводить значения концентрации CO2 на экран OLED дисплея с помощью функции display.println().
Arduino
display.setCursor(18,43);
display.println(«CO2»);
display.setCursor(63,43);
display.println(«(PPM)»);
display.setTextSize(2);
display.setCursor(28,5);
display.println(ppm);
1 |
display.setCursor(18,43); display.println(«CO2»); display.setCursor(63,43); display.println(«(PPM)»); display.setTextSize(2); display.setCursor(28,5); display.println(ppm); |
И, наконец, вызовем функцию display() для отображения необходимого текста на экране OLED дисплея.
Arduino
display.display();
display.clearDisplay();
1 |
display.display(); display.clearDisplay(); |
Проектирование детектора дыма в виде платы расширения для Arduino
Для проектирования детектора дыма в виде платы расширения для Arduino мы использовали симулятор EasyEDA, в котором мы сначала разработали схему и затем конвертировали ее в слой печатной платы с помощью опции автоматической трассировки (Auto Routing feature) печатной платы в симуляторе EasyEDA.
EasyEDA представляет собой бесплатный онлайн инструмент и может значительно упростить процесс создания вами готового устройства. В нем можно нарисовать схему, поработать с программой моделирования с ориентацией на интегральные схемы (программа SPICE), бесплатно сделать дизайн печатной платы и за сравнительно небольшие деньги изготовить потом эту печатную плату. Редактор этого симулятора содержит большое количество библиотек и компонентов, поэтому вы без труда найдете там то, что вам нужно. Полное руководство по использованию симулятора EasyEDA можно прочитать по этой ссылке – оно на английском языке, но если оно вас заинтересует, пишите об этом к комментариях к данной статье и я могу перевести это руководство на русский язык и разместить на нашем сайте.
А на следующем рисунке представлен скриншот верха нашей печатной платы в симуляторе EasyEDA, но вы на вкладке ‘Layers’ данного симулятора можете посмотреть вид любой стороны печатной платы (верх, низ и т.д.).