Вчера мы познакомились с Arduino и рассмотрели небольшой пример скетча для Arduino Uno. Сегодня попробуем собрать простейший датчик CO2 и написать скетч для передачи данных в COM-порт.
Для того, чтобы собрать наш анализатор нам понадобиться следующие железки:
- Макетная плата (breadboard)
- Датчик MQ135
- Arduino Uno
- Шесть проводов «папа — папа»
Прежде, чем я покажу итоговую сборку, скажу пару слов об используемом железе, чтобы в дальнейшем было понятно почему различные устройства подключаются именно так, а не иначе.
Макетная плата
Как известно, для сборки устройств разрабатываются и создаются печатные платы, например, вот такие:
Понятно, что самостоятельно делать такую плату ради прикола, как в моем случае, вряд ли захочется, тем более, что это может занять достаточно много времени. Поэтому для быстрой сборки различных электрических схем без пайки существуют макетные платы (они же — макетные доски, они же breadboard’ы).
Выглядит макетная плата вот таким незамысловатым образом:
Внутри макетной платы расположены медные пластины-рельсы. При этом, крайние рельсы (помеченные красным и синим цветом) расположены вдоль макетной платы, а остальные (помеченные латинскими буквами и цифрами) — поперёк макетной платы. Такое расположение рельс позволяет собирать самые разнообразные электрические схемы, подключая различные элементы схемы как последовательно, так и параллельно:
Датчик MQ135
Датчик MQ135 — это, насколько я понял из различных описаний этого устройства, полупроводниковый газочувствительный резистор (если не прав — поправьте). Принцип работы датчика MQ135 основан на изменении сопротивления тонкопленочного слоя диоксида олова (SnO2) при его контакте с молекулами определяемого газа.
Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки расположен нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. При этом, чувствительность к разным газам достигается изменением состава примесей в чувствительном слое.
В свое время, я покупал MQ135 на плате FC-22 со всей необходимой обвязкой. Выглядит датчик следующим образом:
Результат работы датчика выдается на аналоговый выход (A0), в то время как на цифровой выход (D0), по идее, должен выдаваться сигнал (1) при превышении концентрацией вещества заданного предела (предел регулируется подстроечным резистором). Питается датчик MQ135 от 5В.
К особенностям работы подобных датчиков мы ещё вернемся в одной из следующих статей, а пока перейдем к следующей нашей «железке» — Arduino Uno, которую я показывал в прошлый раз.
Arduino Uno
Я не буду подробно останавливаться на том, какие бывают Arduino Uno (оригинальные, китайские поделки, разные ревизии т.д.), а также подробным образом расписывать технические характеристики. Скажу только, что у меня китайская Arduino Uno, которая выглядит примерно так как на рисунке:
На платформе расположены 14 контактов (pins), которые могут быть использованы для цифрового ввода и вывода и 6 аналоговых (A0-A5). Какую роль исполняет каждый контакт — зависит от вашей программы. Все они работают с напряжением 5 В и рассчитаны на ток до 40 мА. Также каждый контакт имеет встроенный, но отключённый по умолчанию резистор на 20–50 кОм.
Теперь, показав вкратце, что и как выглядит и из чего состоит, можно попробовать собрать наш первый анализатор CO2 и посмотреть его в работе.
Собираем анализатор CO2 на базе Arduino Uno
Вообще, для себя, как для человека достаточно далекого от электроники, хотя и любящего иногда повозиться с оной, я при работе с Arduino придерживаюсь старого доброго правила, описанного в замечательной повести Анджея Сапковского «Ведьмак». Кто читал эту книгу, тот наверняка вспомнит изречение медика Русти:
«Шейте красное с красным, желтое с желтым, белое с белым. Так наверняка будет хорошо…»
Вот и Arduino точно так же — соединяем VCC на датчике с VCC на Arduino Uno, аналоговые выходы с аналоговыми входами — так наверняка заработает.
Попробуем реализовать это правило в деле. Я соединил выход A0 на датчике с пином A0 на Arduino Uno, выход D0 на датчике с пином D4, ну и, соответственно, подвел питание 5В. Получилась вот такая хрупкая конструкция:
Судя по тому, что на датчике загорелся светодиод питания, а датчик пусть и не сильно, но нагрелся, можно сказать, что с аппаратной частью работы мы более менее справились. Теперь набросаем небольшой скетч, суть которого будет заключаться в том, чтобы отправить в COM-порт показания датчика MQ135.
Скетч для считывания показаний датчика
Итак, судя по тому, что удалось найти (см. выше) по работе датчика MQ135, наша задача получить значение сопротивления с аналогового выхода и каким-либо образом преобразовать значение этого сопротивления в значение концентрации интересующего нас вещества. В нашем случае — это CO2.
Скетч у меня получился вот такой:
#define analogPin A0 // аналоговый выход MQ135 подключен к пину A0 Arduino #define digitalPin 4 // цифровой выход подключен к пину 3 float analogValue; // для аналогового значения byte digitalValue; // для цифрового значения void setup() { Serial.begin(9600); // инициализация последовательного порта pinMode(analogPin, INPUT); // режим работы аналогового пина pinMode(digitalPin, INPUT); // режим работы цифрового пина delay(5000); // даём датчику небольшое время на разогрев } void loop() { analogValue = analogRead(analogPin); // чтение аналогового значения digitalValue = digitalRead(digitalPin); // чтение цифрового значения Serial.print("Analog value: "); // вывод аналогового значения в последовательный порт Serial.println(analogValue); Serial.print("Digital Value: "); // вывод цифрового значения в аналоговый порт Serial.println(digitalValue); delay(5000); // задержка перед выводом следующего значения }
Теперь загружаем скетч в Arduino Uno так, как я показывал в прошлой статье и открываем в меню Arduino IDE «Инструменты — Монитор порта». Через несколько секунд в мониторе порта появились следующие значения:
Во время работы датчика я на него немного подышал и по картинке видно, что датчик сработал. Однако, что он показывает для нас пока остается загадкой. Точнее даже не так — остается загадкой значение концентрации CO2 в атмосфере моей комнаты.
Завтра приступим к «расшифровке» данных датчика MQ-135, посмотрим как можно интерпретировать получаемые значения, а заодно разберем один вопрос, который не дает мне покоя уже достаточно долгое время.