Детектор утечки газа на arduino

Элементы платы

Датчик газа MQ5

Датчик MQ5 относиться к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.

Выбор режима питания нагревателя

В сенсоре предусмотрено два режима работы, переключаемых джампером.

  • Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
  • Управление нагревателем программно.

1 группа

  • Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
  • Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — Соедините с пином микроконтроллера.

2 группа

  • Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
  • Питание (H) — Питание нагревателя. Соедините с пином .
  • Земля (G) — Соедините с пином микроконтроллера.

Код устройства

Код для Ардуино вы можете скачать или скопировать ниже.

// Air Quality monitoring 
#include 
#include 

// The Thinger.io cloud
#define USERNAME "YOUR_USER_NAME"
#define DEVICE_ID "YOUR_DEVICE_ID"
#define DEVICE_CREDENTIAL "YOUR_CREDENTIAL"

ThingerYun thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

void setup() {
  pinMode(A0, INPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(A3, INPUT);

  // initialize bridge
  Bridge.begin();


  // resource output example (i.e. reading a sensor value, a variable, etc)
  thing >> outputValue(analogRead(A0)); // optional 
  thing >> outputValue(analogRead(A1));
  thing >> outputValue(analogRead(A2));
  thing >> outputValue(analogRead(A3));

  // more details at http://docs.thinger.io/arduino/
}

void loop() {
  thing.handle();
}

Работа схемы

Схема устройства представлена на следующем рисунке.

На представленной схеме можно увидеть плату Arduino, модуль обнаружения утечки газа, звонок и ЖК дисплей 16×2. Arduino контролирует весь процесс функционирования устройства: считывание сигнала с выхода модуля обнаружения утечки газа, передача сообщений в ЖК дисплей и включение звонка. Чувствительность модуля обнаружения утечки газа можно отрегулировать с помощью потенциометра, присутствующего на нем.

Контакт DO модуля обнаружения утечки газа непосредственно соединен с контактом 18 (A4), а его контакты Vcc (питание) и GND (земля) соединены с контактами Vcc и GND Arduino. Модуль обнаружения утечки газа включает в своем составе датчик MQ3, который непосредственно обнаруживает сжиженный нефтяной газ (LPG). Этот датчик включает нагревательный элемент, которому нужно нагреться до определенной температуры чтобы датчик стал функционировать должным образом. Обычно этот процесс занимает около 15 минут. Компаратор в составе модуля обнаружения утечки газа используется для конвертации аналогового значения с выхода датчика MQ3 в цифровое. ЖК дисплей 16×2 соединен с платой Arduino в 4-битном режиме. Управляющие контакты RS, RW и En напрямую подсоединены к контактам 2, GND и 3 Arduino. Контакты для передачи данных D4-D7 подсоединены к контактам 4, 5, 6, 7 Arduino. Звонок подключен к контакту 13 Arduino через транзистор NPN BC547, в базу которого включен резистор сопротивлением 1 кОм.

Дымовые пожарные датчики — «нюх» как у собаки!

Датчики дыма определяют возгорание по косвенным признакам, таким как изменение прозрачности и химического состава воздуха.

Официальное название этих устройств – пожарные дымовые извещатели, но большинство людей продолжает называть их датчиками дыма, что позволяет отделить их от других типов датчиков пожарной сигнализации.

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

Типы датчиков дыма

Пожарные извещатели, реагирующие на дым, в отличии от датчиков пламени, разделяются на следующие типы:

  • оптические;
  • точечные;
  • линейные.

Оптические (оптико-электронные) извещатели дыма

Этот вид извещателей наиболее распространен из-за невысокой цены и небольших габаритов. В основе его работы лежит разная отражающая способность чистого воздуха и дыма. Светодиод небольшой мощности излучает узконаправленный пучок света. Под углом 90º к этому лучу установлен фотоэлемент.

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

Средняя площадь, на которой извещать обеспечивает надежную охрану и быструю реакцию на возгорание не превышает 50 квадратных метров.

Точечный пожарный дымовой извещатель

Этот тип извещателей работает по принципу радара. Специальный светодиод наполняет охраняемое помещение инфракрасным излучением. Из-за малой мощности излучения, его энергии не хватает для того, чтобы вернуться к фотоэлементу, отразившись от стен. Когда в помещении происходит возгорание, в воздух попадают частицы, отражающие инфракрасное излучение.

Достигнув уровня установки датчика, они отражают сигнал светодиода, возвращая его на фотоэлемент, после чего извещатель подает сигнал контроллеру пожарной сигнализации. Средняя цена такого датчика составляет 4500 рублей. Средняя площадь, на которой он обеспечивает надежную охрану составляет 100 квадратных метров (ширина не более 5 метров).

Линейные датчики дыма

В основе работы этого извещателя лежит эффект отражения дымом инфракрасных лучей. На одной из стен комнаты установлен мощный узконаправленный излучатель, работающий в инфракрасном диапазоне. На противоположной стене установлен приемник с фотоэлементом.

Контроллер определяет уровень сигнала с фотоэлемента, соответствующий чистому воздуху, а также допустимое снижение сигнала, связанное с пыльностью и другими факторами. Когда сигнал с фотоэлемента становится слабей минимально допустимого, извещатель передает сигнал тревоги на контроллер пожарной сигнализации. Средняя стоимость такого датчика 6 тысяч рублей.

Средняя площадь, на которой датчик обеспечивает эффективное обнаружение дыма, составляет 1 тысячу квадратных метров (ширина не больше 10 метров).

Как выбрать датчик дыма

В большинстве случаев площадь, на которой любой тип извещателя обеспечивает эффективную защиту, не превышает 50 квадратных метров. В жилом доме в каждой комнате устанавливают самостоятельный датчик. Это связано с особенностями распространения дыма. Для установки в комнатах наиболее подходят оптические датчики – они занимают мало места.

К тому же, радиоканальные устройства работают долгое время от одного комплекта батареек. Для гаража квадратной формы и площадью более 50 квадратных метров наиболее эффективная защита обеспечивается несколькими оптическими датчиками. Если же гараж прямоугольной формы, то тип датчика выбирают исходя из его длины и ширины.

Смотрите как подключить датчики к Arduino на видео ниже.

Максимальная скорость

Максимальная скорость ограничена прежде всего соединением: длиной проводов, наличием экрана, наличием источников помех и прочим. В идеальных условиях скорость будет такая:

При использовании в качестве интерфейса аппаратного Serial скорости могут быть очень большие, вплоть до 1000000 бод.

При использовании в качестве интерфейса программного Serial читайте описание к нему. Ардуиновский софтсериал обещает стабильную передачу на скоростях вплоть до 115200. В то же время он блокирует код и запрещает прерывания, что может быть очень плохо.

При использовании в качестве интерфейса softUART очень важен частый вызов tick(): рекомендуется делать это не реже, чем каждые микросекунд. При наличии в остальном коде задержек или блокирующих выполнение участков на время, превышающее четверть времени бита, передача на высоких скоростях может происходить с ошибками. Можно вызывать tick() по прерыванию таймера. Ещё можно сделать так:

void loop() {
  if (rx.tick() != RECEIVING) {
    // Потенциально "тяжёлый" код.
    // Не выполняем, пока идёт приём!
  }
  // "лёгкий" код
}

При использовании библиотеки GBUSmini.h максимальная скорость ограничена частотой опроса читающих функций (вызывать не реже, чем каждые микросекунд) и точностью настройки коррекции: в GBUSmini.h в секции настроек есть параметры и . Они отвечают за коррекцию задержки в микросекундах на отправку и чтение одного бита. Это значение зависит от частоты тактирования МК (пропорционально!), модели самого МК, версии “ядра” Arduino и подбирается вручную. Также значение коррекции может меняться в зависимости от скорости шины! Привожу некоторые известные:

МК Ядро
ATmega328p (Arduino Nano) Стандартное версии 1.8.3 8 (при 16 MHz) 5 (при 16 MHz)

Максимальная скорость с учётом “пустого” скетча и откалиброванными значениями коррекции задержки, платы соединены на бредборде проводами длиной 10см:

Отправитель – приёмник Макс. скорость
softUART – softUART 25’000
GBUSmini – GBUSmini 10’000
softUART – GBUSmini 15’000
GBUSmini – GBUSmini 10’000

Схема алкотестера на Ардуино Нано с дисплеем


Схема сборки алкотестера на Arduino Nano своими руками

На данном датчике имеется две группы контактов. Первая группа — это питание и выходной сигнал, вторая группа служит для включения/выключения нагревателя. При замкнутой перемычке на плате MQ3, нагреватель находится всегда во включенном состоянии, поэтому вторая группа контактов не используется. После сборки схемы, согласно приведенной картинке, загрузите следующий код в Arduino Nano.

Скетч алкотестера на Ардуино Нано с дисплеем

#include <TroykaMQ.h>                    // библиотека для MQ датчиков

#include <Wire.h>                             // библиотека для протокола I2C
#include <LiquidCrystal_I2C.h>       // библиотека для LCD 1602 
LiquidCrystal_I2C LCD(0x27,20,2);  // присваиваем имя дисплею

MQ3 mq3(A1);

void setup() {
   Serial.begin(9600);   // запускаем монитор порта
   LCD.init();                   // инициализация дисплея
   LCD.backlight();         // включение подсветки
   mq3.calibrate();        // калибровка датчика MQ3
 }

void loop() {
   Serial.print("Alcohol: ");
   Serial.print(mq3.readAlcoholMgL());    // выводим значение на монитор
   Serial.println(" mG/L");

   Serial.print("Alcohol: ");
   Serial.print(mq3.readAlcoholPpm());    // выводим значение на монитор
   Serial.println(" ppm");

   LCD.setCursor(0,0);
   LCD.print("Alcohol: ");
   LCD.print(mq3.readAlcoholMgL());        // выводим значение на дисплей
   LCD.print(" mG/L");

   LCD.setCursor(0,1);
   LCD.print("Alcohol: ");
   LCD.print(mq3.readAlcoholPpm());        // выводим значение на дисплей
   LCD.print(" ppm");

   delay(500);
   LCD.clear();  // очищаем экран дисплея
}

Пояснения к коду:

  1. как и сенсор MQ-2 Arduino, датчик выводит информацию о концентрации паров спирта в долях на миллион (ppm), а также в миллиграммах на литр (mG/L);
  2. оба скетча будут работать на разных платах — Uno и Nano. Главное установить библиотеку TroykaMQ.h, которую можно скачать на нашем сайте здесь.

Принципиальная схема

Прежде всего, подключите модуль ESP8266 к Ардуино. Чтобы правильно подключить ESP8266 к Arduino, мы использовали модуль адаптера ESP-01, который сделает соединение очень простым. Этот адаптерный модуль имеет встроенный регулятор 5В на 3,3 В, что означает, что вам не придется использовать резисторы.

Подключите контакт VCC адаптера ESP-01 к выходу 5V на Arduino и Землю (GND) на ESP-01 к GND на Arduino. Затем подключите вывод TX от адаптера к пину 2 на Ардуино и RX от адаптера к выходу 3 на Arduino.

Дальше подключите датчик MQ-2 к Ардуино. Подключите VCC и GND к датчику к контактам 5V и GND на Arduino. Затем подключите контакт A0 на MQ-2 к A0 на Arduino.

После этого подключите Зуммер и светодиоды к Arduino. Подключите положительный сигнал к зуммеру с контактом 10 на Arduino и отрицательный сигнал на зуммере с GND на Arduino. Затем подключите отрицательную сторону светодиодов к заземлению через резистор 220 Ом и положительную сторону к контактам 8 и 9 на Arduino.

А нужен ли GBUS?

Для передачи между двумя платами через Serial (обычный и software) можно использовать полностью стандартный способ: методы и . Функции принимают байтовые массивы, но на ничего не мешает их обмануть и передавать что угодно, даже структуры:

// Пример отправки и приёма структуры через Serial
// ОТПРАВИТЕЛЬ
// Ардуины соединены так:
// отправитель D11 -> приёмник D10
#include < SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

struct Str {
  byte val_b;
  int val_i;
  long val_l;
  float val_f;
};

void setup() {
  Serial.begin(9600);
  mySerial.begin(4000);
}

void loop() {
  // буфер на отправку
  Str buf;

  // заполняем
  buf.val_b = 123;
  buf.val_i = 12345;
  buf.val_l = 123456;
  buf.val_f = 123.456;

  // отправляем родным write()
  // указываем ему буфер-структуру, но приводим тип к byte*
  // размер можно указать через sizeof()
  mySerial.write((byte*)&buf, sizeof(buf));
  delay(2000);
}
// Пример отправки и приёма структуры через Serial
// ПРИЁМНИК
// Ардуины соединены так:
// приёмник D10 -> отправитель D11
#include < SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

// структура для приёма
// должна соответствовать отпраляемой
struct Str {
  byte val_b;
  int val_i;
  long val_l;
  float val_f;
};

// создаём саму структуру
Str buf;

void setup() {
  Serial.begin(9600);
  mySerial.begin(4000);
}

void loop() {
  // читаем родным методом readBytes()
  // указываем ему буфер-структуру, но приводим тип к byte*
  // размер можно указать через sizeof()
  if (mySerial.readBytes((byte*)&buf, sizeof(buf))) {
    Serial.println(buf.val_b);
    Serial.println(buf.val_i);
    Serial.println(buf.val_l);
    Serial.println(buf.val_f);
  }
}

О других способах читайте в уроке общение по Serial.

GBUS по сути делает то же самое, но предлагает дополнительные возможности:

Датчик утечки газа MQ2 на Ардуино

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

При измерении газов, термин «концентрация» используется для описания количества газа в воздухе по объему. Наиболее распространенными единицами измерения являются доли на миллион и процентная концентрация. Доли на миллион (ppm) — это отношение одного газа к другому. Например, концентрация 1000 ppm CO означает, что на 999 000 молекул газа, 1000 из них будут относится к углекислому газу.

Характеристики датчика MQ2 Ардуино

  • Питание: 5 Вольт;
  • Потребляемый ток: 180мА;
  • Чувствительность: 300-10000 ppm;
  • Рабочая температура: от -10 до +50 °C;
  • Влажность воздуха: не более 95%;
  • Интерфейс: аналоговый и цифровой.

Схема и распиновка датчика газа MQ2


Распиновка сенсора утечки газа MQ2 на Ардуино

Напряжение аналогового выхода изменяется пропорционально концентрации дыма или газа. Чем выше концентрация газа, тем выше выходное напряжение. Логический сигнал можно откалибровать, держа датчик рядом с дымом, который вы хотите обнаружить. Далее вращайте потенциометр по часовой стрелке (для увеличения чувствительности сенсора), пока не загорится красный светодиод на модуле.

Что такое датчик газа 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 молекул – какими-то другими газами.

Вот полный список технических характеристик:

Технические характеристика датчика газа MQ-2
Рабочее напряжение 5 В
Сопротивление нагрузки 20 кОм
Сопротивление нагревателя 33 Ом ± 5%
Потребляемая мощность <800 мВт
Сопротивление чувствительности 10 кОм — 60 кОм
Измерение концентрации 200 — 10000 ppm
Время разогрева более 24 часов

Для более подробной информации, пожалуйста, обратитесь техническому описанию.

Совет

Датчик чувствителен к нескольким газам – но не может сказать, какой из них он обнаружил! Это нормально; большинство датчиков газа такие. Таким образом, он лучше всего подходит для измерения изменений концентрации известного газа, а не для определения концентрация какого газа изменилась.

Вводная информация

Если раньше существовали специализированные конструкторы с ограниченными наборами функций и жёстко заданными параметрами, то сегодняшнее разнообразие конструкторов просто поражает: настоящие микропроцессорные системы, собираемые на коленке, имеют практически неограниченный функционал. Богатая фантазия, широкая элементная база, большие комьюнити фанатов и инженеров и поддержка производителем — основные отличительные особенности таких востребованных рынком наборов для робототехники.

Один из них и наиболее популярный, что естественно, — Ардуино. Конструктор моментальной сборки электронных автоматических устройств любой степени сложности: высокой, средней и низкой. Эту платформу называют иначе «physical computing» за плотное взаимодействие с окружающей средой. Печатная плата с микропроцессором, открытый программный код, стандартные интерфейсы и подключение датчиков к Ардуино — слагаемые его популярности.

Система Ардуино — плата, которая объединяет все нужные компоненты, обеспечивающие полный цикл разработки. Сердце этой платы — микроконтроллер. Он обеспечивает управление всей периферией. Датчики, подключаемые к системе, позволяют системе «общаться» и взаимодействовать с окружением: анализировать, отмечать изменять.

Что измеряет сенсор

Давление — некая физическая величина численно равная перпендикулярно направленной силе действующей на единицу площади поверхности. Сам датчик можно представить своеобразными очень чувствительными весами. Последнее замечание сделано по причине того, что и вода, и газы тоже имеют свою массу, которая влияет на поверхность под ними. На практике, за счет указанного фактора, можно определить глубину погружения (чем ниже, тем больше вес слоя воды) или высоту подъема в атмосферу (чем выше — тем меньше плотность, а значит и слабее воздействие). Кроме того, в отношении давления воздуха не стоит забывать о погодных колебаниях. Резкое падение названой характеристики атмосферы — к дождю или буре.

Опять же, насчет газов и частично жидкостей. Их можно сжимать. Но, уплотненные вещества будут стремиться вернуться в первоначальное состояние. И чем сильнее компрессия, тем мощнее будет конечное давление газа или жидкости внутри сосуда их содержащего.

Собственно, детектор Ардуино о котором идет речь, и измеряет силу воздействия на единицу площади сенсорного элемента прибора. Правда, в большинстве выпускаемых моделей, описанное — не все их функциональные возможности. Бонусом, у многих идет замер температуры окружающей среды, а у некоторых еще и влажности или ускорения.

Элементы платы

Датчик газа MQ-9

Датчик MQ-9 относиться к полупроводниковым приборам. Принцип работы датчика основан на изменении сопротивления тонкопленочного слоя диоксида олова SnO2 при контакте с молекулами определяемого газа. Чувствительный элемент датчика состоит из керамической трубки с покрытием Al2O3 и нанесенного на неё чувствительного слоя диоксида олова. Внутри трубки проходит нагревательный элемент, который нагревает чувствительный слой до температуры, при которой он начинает реагировать на определяемый газ. Чувствительность к разным газам достигается варьированием состава примесей в чувствительном слое.

Выбор режима питания нагревателя

В сенсоре предусмотрено два режима работы, переключаемых джампером.

  • Нагреватель датчика постоянно включён. Таким образом можно обойтись одним трёхпроводным шлейфом.
  • Управление нагревателем программно.

1 группа

  • Сигнальный (S) — Выходной сигнал сенсора. Подключите к аналоговому входу микроконтроллера.
  • Питание (V) — Питание датчика. Соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — Соедините с пином микроконтроллера.

2 группа

  • Сигнальный (E) — Управление питанием нагревателя. Подключите к цифровому пину микроконтроллера.
  • Питание (H) — Питание нагревателя. Соедините с пином .
  • Земля (G) — Соедините с пином микроконтроллера.

Код проекта

Код для нашего анализатора уровня пыли 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);
}

В начале кода мы подключаем необходимые библиотеки. После загрузки кода на экране дисплея вы увидите показания вашего устройста.

Замечания по программе

Функция определяет длину переменной в байтах, т.е. int имеет длину 2 байта, float — 4 байта и т.д.

На принимающей стороне у вас должны быть совпадающие типы данных, потому что на самом деле NRF24 посылает серию байт длиной .

Если попытаться вставить 2 байта в 1 байт в приемной стороне, то получится мусор.

При использовании массива можно отправить несколько фрагментов данных в одном сообщении при условии, что 32-байтовый предел не превышен. Вы можете отправлять данные любого типа, т.е. строки типа , целые числа (integer) или с плавающей точкой (float). Просто убедитесь, что приемник ожидает перехват одного и того же типа данных. В нашем примере, так как мы хотим использовать 3 десятичных значения, мы используем массив из 3 элементов с плавающей точкой. Максимальная длина одного сообщения — 32 байта. Таким образом, 3 элементам с плавающей запятой нужны 12 байт, что оставляет много свободного пространства.

Все контакты, кроме CE и CSN, должны быть подключены в соответствии с инструкциями. Однако, эти два контакта могут быть любыми удобными и объявлены как:

Код Ардуино — чтение данных с датчика BME680

Чтобы прочитать значения с датчика мы воспользуемся примером скетча из библиотеки.

Для этого откройте IDE Ардуино и выберите Файл > Примеры > Библиотека Adafruit BME680 > bme680async.

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include "Adafruit_BME680.h"

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME680 bme; // I2C
//Adafruit_BME680 bme(BME_CS); // hardware SPI
//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println(F("BME680 async test"));

if (!bme.begin()) {
Serial.println(F("Could not find a valid BME680 sensor, check wiring!"));
while (1);
}

// Set up oversampling and filter initialization
bme.setTemperatureOversampling(BME680_OS_8X);
bme.setHumidityOversampling(BME680_OS_2X);
bme.setPressureOversampling(BME680_OS_4X);
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
bme.setGasHeater(320, 150); // 320*C for 150 ms
}

void loop() {
// Tell BME680 to begin measurement.
unsigned long endTime = bme.beginReading();
if (endTime == 0) {
Serial.println(F("Failed to begin reading :("));
return;
}
Serial.print(F("Reading started at "));
Serial.print(millis());
Serial.print(F(" and will finish at "));
Serial.println(endTime);

Serial.println(F("You can do other work during BME680 measurement."));
delay(50); // This represents parallel work.
// There's no need to delay() until millis() >= endTime: bme.endReading()
// takes care of that. It's okay for parallel work to take longer than
// BME680's measurement time.

// Obtain measurement results from BME680. Note that this operation isn't
// instantaneous even if milli() >= endTime due to I2C/SPI latency.
if (!bme.endReading()) {
Serial.println(F("Failed to complete reading :("));
return;
}
Serial.print(F("Reading completed at "));
Serial.println(millis());

Serial.print(F("Temperature = "));
Serial.print(bme.temperature);
Serial.println(F(" *C"));

Serial.print(F("Pressure = "));
Serial.print(bme.pressure / 100.0);
Serial.println(F(" hPa"));

Serial.print(F("Humidity = "));
Serial.print(bme.humidity);
Serial.println(F(" %"));

Serial.print(F("Gas = "));
Serial.print(bme.gas_resistance / 1000.0);
Serial.println(F(" KOhms"));

Serial.print(F("Approx. Altitude = "));
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(F(" m"));

Serial.println();
delay(2000);
}

О проекте

Рейтинг загрязнений воздуха внутри помещений создается Агентством по охране окружающей среды США (EPA) и его Научным консультативным советом. Этот рейтинг входит в пятерку экологических рисков для общественного здоровья.

Средний человек тратит около 90% своего времени в помещении, так что плохое качество воздуха в помещениях (IAQ) представляет значительный риск для общественного здравоохранения. Плохое качество воздуха может вызвать повышенные краткосрочные проблемы со здоровьем, такие как усталость и тошнота, а также хронические респираторные заболевания, сердечные заболевания и рак легких.

По оценкам, ежегодные затраты и потери производительности в США составляют от 10 до 20 млрд. долларов, связанных с синдромом больного здания, который определяется для описания острых последствий для здоровья и дискомфорта, которые, как представляется, связаны с плохим качеством воздуха в помещении и временем, проведенным в здании.

В этом проекте мы собираемся сделать систему контроля качества воздуха внутри помещений. Наша система будет подключена к Интернету, и в результате каждый сможет удаленно визуализировать форму индекса качества воздуха в любом месте.

Американская градация качества воздуха выглядит таким образом:

В левом столбце — Индекс Качества Воздуха. В среднем столбце — Уровень Здоровья Человека. В третьем столбце — цветовой индикатор, который сигнализирует о качестве воздуха.

Структурная схема системы выглядит таким образом:

  • Дома и офисы
  • Промышленные помещения
  • Дистанционное зондирование для пожарных
  • Исследования и сельское хозяйство
  • Больницы и клиники

Оборудование и программы:

  • Широкий диапазон плат IoT с WiFi (MKR1000 и Yún Rev2) и GSM / узкополосная связь (MKR FOX 1200, MKR WAN 1300 и MKR GSM 1400). Для прототипирования этого проекта использована Ардуино Леонардо с шилдоим Yún.
  • Газовые датчики (MQ-2, 3, 7)
  • Датчик качества воздуха (MQ-135)
  • Android-устройство
  • Платформа разработки мобильных приложений
  • IoT облако
  • Перемычки/провода
  • Навыки программирования
  • Arduino IDE / Arduino Web IDE
  • Панель солнечных батарей для экологичного источника питания

Почему GP2Y1010AU0F

Я выбрал этот датчик пыли по следующим причинам:

  • Он использует новейшие технологии для зондирования, включая инфракрасный светодиод, набор линз, фотодиодный детектор и электромагнитный экран.
  • Он имеет высокую чувствительность к пыли, а также быстрое время отклика между датчиком и микроконтроллером.
  • Благодаря трем проводам (VCC, GND и сигнал), ведущим к микроконтроллеру, этот датчик может быть подготовлен с использованием простой аппаратной структуры, что облегчает взаимодействие новичков с Arduino.
  • Небольшой размер датчика позволяет легко установить его в устройство контроля качества воздуха или в любой другой небольшой проект.
Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий