Блок с датойБлок с временемБлок с возрастом сайта
Mr.ALB

    Анатолий Беляев (aka Mr.ALB). Персональный сайт

    Да пребудут с вами Силы СВЕТА!

     

    Ардуино (Arduino). #12

    Погодная станция на BME280/BMP280
    + DS18B20 + Барограф + Меню настройки

    Используя раннюю разработку программы Барометр c разными системами измерения давления создаю небольшую, можно сказать, карманную погодную станцию.



    Основа погодной станции – датчик BME280. В этом датчике, в отличие от датчика BMP280, имеется чувствительный элемент для измерения ещё и относительной влажности.

    Добавив цифровой датчик ф. Даллас DS18B20 к уже имеющемуся датчику BME280 получаем, что наше устройство может измерять, обрабатывать и показывать:

    • Абсолютное атмосферное давление (в мм рт. ст. или в кПа).
    • Предыдущее значение абсолютного давления и разницу между текущим и предыдущим давлениями (в мм рт. ст. или в кПа). Можно судить о скорости изменения давления.
    • Высоту (относительную, в метрах).
    • Высоту относительно уровня моря (в метрах).
    • Внутреннюю температуру с BME280 (в °С).
    • Относительную влажность (в %).
    • Внешнюю температуру (в °С, через DS18В20) + показывать минимальное и максимальное измеренное значение.

    Для смены единиц измерения давления необходимо удержание кнопки Установка уровня 0 метров 2...3 секунды, после отпускания кнопки – давление будет измеряться альтернативными единицами измерения.


    Схема погодной станции

    Схема погодной станции была создана на основе: Arduino Pro Mini (можно использовать любую: Arduino UNO, Arduino Nano и подобные им), датчике атмосферного давления и влажности BME280 (не путать с BMP280) и цифровом датчике температуры семейства DS1820.

    Внешнее питание +9В подаётся на пин RAW Ардуино.

    Схема погодной станции v3.5
    Pic 1. Схема погодной станции v3.5

    Отличия схемы варианта v3.14:

    1. Добавлены диоды VD1, VD2 для питания датчика BME280 от +5В;
    2. Внешнее питание подаётся сразу на VCC Ардуино (+5В).

    Датчик DS18B20 включен по паразитной схеме питания (начиная с версии v3.5), что избавляет от необходимости точно позиционировать вилку датчика при подключении к розетке погодной станции, т.к. крайние выводы объединены и подключены к GND, а центральный вывод – информационный.

    Схема погодной станции v3.14
    Pic 2. Схема погодной станции v3.14

    Отличия схемы варианта v3.16-v3.18:

    1. Добавлена кнопка SB3 – BAROGRAPH
    2. Добавлен делитель R1, R2 через который измеряется напряжение подключенного аккумулятора. Опорное напряжение AREF внутреннее 1,1 В.
    3. В цепи питания подсветки дисплея где-то добавлял диод 1N4148, а где-то просто резистор 100 Ом. В обоих случаях работает нормально.
    4. Датчик BME280/BMP280 применил на напряжение питания 5 В. Для Ардуино Pro Mini это наилучший вариант.

    Датчик DS18B20 включен по активной схеме питания (некоторые экземпляры не всегда работают по паразитной схеме).

    Схема погодной станции v3.18
    Pic 3. Схема погодной станции v3.18

    Датчик ф. Даллас семейства DS1820 и ему подобные имеет достаточную точность в широком диапазоне температур. Такой датчик я уже использовал при разработке МТР-1.2 – хороший, надёжный датчик. Если использовать герметичное исполнение, то можно измерять и температуру жидкостей, к примеру, воды.

    Погодная станция может работать от встроенного аккумулятора Li-Ion +3.7 В, или от внешнего источника напряжением +6...+9 В (+5В на контакт VCC в версиях v3.13 и выше), тогда, в этом случае, напряжение питания необходимо подавать на контакт RAW. При работе от аккумулятора, используется повышающий DC-DC преобразователь MT3608 (можно любой повышающий). На его выходе установлено напряжение +4.5...+5 В. Во избежании повреждения Ардуино, BME280, TFT экрана – следует обратить внимание, что перед подключением преобразователя к устройству, необходимо заранее выставить на его выходе указанное напряжение.

    Если у вас напряжение питания не точно +5.0 В, а, к примеру, +4.5 В, то для точного измерения напряжения питания аккумулятора необходимо в строке [462] указать ваше напряжение питания на контакте VCC Ардуино.

    Используемый мной образец BME280 работает в диапазоне напряжений +1.8...+5 В, что избавляет от необходимости применять стабилизатор на +3.3 В. Если у вас образец BME280 на напряжение +3.3 В, то добавьте для него стабилизатор на требуемое напряжение.


    Скетч

    Скетч имеет подробные пояснения, надеюсь будет легко понять как работает программа. Основа скетча – предыдущие разработки и опыты по использованию датчиков BME280 и DS1820.

    Опубликованый скетч является последней версией v3.13. Историю доработок смотрите в подразделе Доработки. Предыдущие версии и последнюю версию и используемые библиотеки можно скачать в подразделе Приложение.


    Реализация

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

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

    Основой послужила монтажная плата с металлизированными отверстиями, что удобно для двухстороннего монтажа. Печатную плату разрабатывать не стал, сберёг своё личное время улыбка. Это устройство единичное и не имеет смысла делать какие-то печатные платы. Размер монтажной платы 63 * 50 мм. Куплена в Китае.

    С нижней стороны платы установлена панелька на 24 контакта для Arduino Pro Mini. Там же смонтирован преобразователь DC-DC MT3608, и плата, на основе TP4056, для зарядки литиевого аккумулятора. Преобразователь использовал покупной, какой был под рукой, но можно использовать любой, хоть бы и самодельный, который выдаёт на выходе напряжение от +4.5 В до +5 В.

    На нижней стороне платы смонтированы конденсаторы С1 и С2.

    Нижняя сторона платы
    Pic 4. Нижняя сторона платы

    С верхней стороны платы размещены: датчик BME280, TFT экран 1.8", аккумулятор 3,7 В 400 мАч.

    Вся разводка выполнена цветными одножильными монтажными проводками.

    Верхняя сторона платы
    Pic 5. Верхняя сторона платы

    Напоминаю, что перед установкой платы Ардуино, BME280 и TFT экрана, заранее проверьте и выставите напряжение на выходе преобразователя DC-DC, чтобы случайно не повредить компоненты устройства.

    Когда всё проверено, установите в панельки все компоненты. Подключите Ардуино к компьютеру и залейте в него программу.

    Сборка верхней стороны платы
    Pic 6. Сборка верхней стороны платы

    При включении устройства на экране выводится заставка, где указывается дата и версия прошивки. Последняя версия v3.13 2020-08-31.

    Заставка при включении
    Pic 7. Заставка при включении

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

    Заставка при подключенном <i>DS1820</i>
    Pic 8. Заставка при подключенном DS1820

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

    Смена единиц измерения давления происходит при удержании кнопки Установка уровня 0 метров. Удерживать 2...3 секунды. При кратком нажатии на кнопку, происходит установка нулевого уровня для текущего атмосферного давления.

    Измерение давления в кПа
    Pic 9. Измерение давления в кПа

    Основной режим измерения задан в мм рт. ст. Если вам необходимо чтобы погодная станция по умолчанию измеряла в кПа, то в программе в строке [184] установите флаг измерения в кПа flagPa=true;.

    Измерение давления в мм рт. ст.
    Pic 10. Измерение давления в мм рт. ст.

    Если подключен внешний датчик температуры DS1820, то на экране внизу дополнительно выводится строчка с измеренным значением с этого датчика. Дополнительно в верху экрана указывается, что используется датчик DS1820 (левее пиктограммы батарейки). Значение температуры с датчика BME280 выводится мелким шрифтом, перед строкой со значением влажности (Humidity).

    Вывод температуры с внешнего датчика
    Pic 11. Вывод температуры с внешнего датчика

    Модуль закончен и вполне функционален. Удобен в использовании и легко можно его модернизировать, к примеру добавить ещё кнопочку, или обновить прошивку.

    В процессе разработки соединений модуля
    Pic 12. В процессе разработки соединений модуля

    Для полного завершения этой конструкции требуется изготовить корпус. Как и прежде, буду его делать из пластика ABS. Когда корпус будет изготовлен, то добавлю фото, а пока так как есть.

    Размеры получившегося модуля: 64 * 50 * 32 мм (ширина * высота * глубина). Потом размеры несколько увеличатся за счёт толщины пластика корпуса.

    2020-01-02

    Корпус

    Закончил изготовление корпуса. Теперь погодная станция обрела законченный вид. Ниже на фото этапы изготовления корпуса. Хотелось его изготовить как можно меньше по габаритам. В итоге получился размерами 70 * 63 * 38 мм.

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

    Начало изготовления
    Pic 13. Начало изготовления

    Модуль погодной станции вставлен в нижнюю часть. Пока примерка. Не стал устанавливать защитное стекло перед экраном. Решил на экран наклеить защитную плёнку, которая используется для экранов смартфонов.

    Модуль в нижней части корпуса
    Pic 14. Модуль в нижней части корпуса
    Вид слева на разъём для <i>DS1820</i>
    Pic 15. Вид слева на разъём для DS1820
    Вид спереди на разъём для зарядки аккумулятора
    Pic 16. Вид спереди на разъём для зарядки аккумулятора
    Вид справа
    Pic 17. Вид справа

    Закончено изготовление частей корпуса и толкателей для кнопок управления. В нижней крышке есть отверстие-окно для индикации процесса зарядки аккумулятора. Когда аккумулятор зарядится, то включается синий светодиод, а пока идёт процесс заряда, в этом окне видно свечение красного светодиода.

    Вид на части корпуса и сам модуль
    Pic 18. Вид на части корпуса и сам модуль

    Всё собрано вместе. Подключен внешний датчик температуры DS1820. На экране видны все надписи.

    Вид общий
    Pic 19. Вид общий
    Вид на клавишу включения
    Pic 20. Вид на клавишу включения
    Вид на разъём для внешнего датчика температуры DS1820
    Pic 21. Вид на разъём для внешнего датчика температуры DS1820

    Подключен блок питания для зарядки аккумулятора. Идёт процесс заряда.

    Вид снизу. Идёт зарядка аккумулятора
    Pic 22. Вид снизу. Идёт зарядка аккумулятора
    2020-02-07

    Доработки

    • Версия v3.7 Доделал немного программу. Теперь на экран выводится минимальная и максимальная температура с датчика DS1820. Также на главный экран выводится конкретный тип подключенного датчика DS18xx. Немного улучшил возможность для точного измерения напряжения аккумулятора.
    • Версия v3.8 Доработка по оптимизации кода. Добавил гашение экрана на минимум через минуту с момента включения или после любого нажатия любой кнопки, что позволяет экономить энергию аккумулятора. Переделал функцию центрирования строки.
    • Версия v3.9 Модернизация. Уменьшение яркости экрана через 30 секунд.
    • Версия v3.10 Программа переделана. Добавлено:
      • Сохранение в EEPROM предыдущего давления.
      • Сравнение предыдущего давления с текущим. Если разность между текущим давлением и предыдущим положительная – идёт рост давления, то значение разности выводится красным цветом. Если разность между текущим давлением и предыдущим отрицательная – идёт падение давления, то значение разности выводится голубым цветом. По цвету разности легко ориентироваться, что происходит с атмосферным давлением – рост или падение.
      • При включении погодной станции происходит считывание предыдущего сохранённого давления и запись текущего давления.
      • При смене системы измерения, значение предыдущего давления выводится в установленной системе измерения.
      • При длительном (2-3 секунды) нажатии на кнопку Подсветка/Light происходит принудительная запись в EEPROM текущего давления и текущей системы измерения. При последующем включении, на экране будет выводиться давление в сохранённой системе измерения, что удобно для тех, кто предпочитает смотреть давление в кПа.
      Версия v3.10. Давление в кПа
      Pic 22. Версия v3.10. Давление в кПа
      Версия v3.10. Давление в мм рт.ст.
      Pic 23. Версия v3.10. Давление в мм рт.ст.
    • Версия v3.11 Оптимизация в значениях знаков после запятой при выводе на экран.
    • Версия v3.12 Доработка функции dark_light (яркость экрана на минимум через 30 секунд). Теперь после того, как экран был переведён в сберегающий режим, по нажатии на кнопку SB2 (Light) происходит возврат в яркий режим подсветки с сохранением ранее выбранной настройки яркости. Дополнительно в вызове функции bme.begin(0x76) адресс платы 0x76 указан явно.
    • Версия v3.12
      Pic 24. Версия v3.12
    • Версия v3.13
      1. Использование циклического буфера для компенсации колебания значений высоты и напряжения батареи;
      2. Подключение DS18B20 на паразитное питание, т.е.: VCC DS18B20 (3) соединить с GND(1), а выход OUT(2) через 4.7к на VCC Arduino. Такая доработка позволяет не обращать внимание на правильность подключения крайних выводов разъёма датчика DS18B20;
      3. Обнуление высоты при включении;
      4. Вывод высоты относительно уровня моря, что позволяет узнать высоту вашего положения над уровнем моря.
    • Версия v3.14 Настройка фильтрации, точности измерения и интервала измерения в BME280.
    • Версия v3.16. Особенности версии:
      1. Отказ от цифровых фильтров и усреднения для значений.
      2. Переделка и оптимизация функций и переменных.
      3. Отказ от паразитного питания DS18B20, т.к. китайские датчики не работают в таком режиме.
      4. Применение массива с давлениями измеренными через заданный интервал времени.
      5. Настройка у самого модуля давления фильтрации, точности и интервала измерения.
      6. Возможность использования модуля BMP280 или BME280 (Настройка через условную компиляцию скетча). При использовании модуля BMP280 влажность устанавливается в 50%.
      7. Возможность калибровки значений модуля давления: коррекция значения индикации давления, температуры и влажности.
      8. Для точного измерения напряжения аккумулятора применил внутренний ИОН* на 1,1 В и делитель из резисторов 200 кОм + 51 кОм.
      9. Добавлена кнопка Барограф – при нажатии на эту кнопку происходит переключение в экран барографа и обратно к основному экрану со значениями. На экране барографа выводятся: название, версия программы, два последних значения давления, график давления через заданный интервал времени, уровни: минимальный, нормальный, максимальный, оставшееся время до следующего измерения. Если последнее значение давления меньше предыдущего, то его цвет голубой, если же последнее давление больше предыдущего, то оно выводится жёлтым цветом.
      10. Подключение датчика DS1820 в любой момент времени. Оптимизация кода.

    • Финальная версия v3.18

      Полный функционал.
      Модуль давления BMP280/BME280 + Барограф + МЕНЮ настройки + Сохранение параметров в EEPROM:
      • Измеритель BMP280 или BME280 и DS18B20:
          - Давление*, мм рт.ст. / кПа;
          - Высота относительная, метры;
          - Высота относительно уровня моря, метры.
          - Температура внутренняя*, °С;
          - Влажность относительная*, %;
          - Температура внешняя*, °С. 
        
      • Две системы измерения: мм рт.ст. / кПа.
      • Барограф в двух системах измерения.
      • МЕНЮ: 7 параметров настройки.
      • Сохранение параметров в EEPROM.
      • Управление тремя кнопками:
        • Кнопка 1: LIGHT / MENU.
            Краткое нажатие: Регулировка яркости
            Долгое нажатие:  Переход к МЕНЮ настройки
          
        • Кнопка 2: Set "0" / <<*.
            Краткое нажатие: Обнуление высоты
            В режиме МЕНЮ:   Уменьшение значения
          
        • Кнопка 3: BAROGRAPH / >>*.
            Краткое нажатие: Переход к экрану Барографа и обратно
              В режиме МЕНЮ: Увеличение значения
            Долгое нажатие:  Обнуление массива барографа
          

      Конструкция погодной станции v3.18

      Стартовая страница, на которой выводится используемый модуль давления, автор, версия, дата версии.

      Версия v3.18. Разные виды
      Pic 25. Версия v3.18. Разные виды

      Страница вывода информации о подключенном датчике DS1820.

      Версия v3.18. Разные виды
      Pic 26. Версия v3.18. Разные виды

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

      Версия v3.18. Разные виды
      Pic 27. Версия v3.18. Разные виды

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

      Версия v3.18. Разные виды
      Pic 28. Версия v3.18. Разные виды
      Версия v3.18. Разные виды
      Pic 29. Версия v3.18. Разные виды

      Меню. Активный пункт подсвечен жёлтым цветом.

      Кнопками << >> изменяется значение активного пункта.

      Кнопкой MENU осуществляется переход к следующему пункту меню.

      Выход из меню на последнем пункте по нажатию на любую из кнопок << >>.

      Версия v3.18. Разные виды
      Pic 30. Версия v3.18. Разные виды

    Обновлённый скетч можно скачать ниже.



    Приложение

    Используемые библиотеки и программы:

    На развитие сайта и проектов Arduino

    Ниже на форме выберите/укажите сумму и источник перевода:
        Кошелёк Ю-money или
        Карта банка: Visa, MasterCard, МИР, Alfa-bank


    Yoomoney.ru (Яндекс.Деньги)  
    9516

    Другим способом оказать помощь на развитие сайта.


    Заключение

    Вот и закончен проект, который у меня растянулся на два года и несчитанное количество часов программирования и отладки созданного скетча. Зато испытываю чувство удовлетворения, что то, что задумывал два года назад, смог реализовать и вместить в 8-битный микроконтроллер ATMega328P на модуле Arduino Pro Mini.

    Если вы захотите повторить мой проект, то все необходимые библиотеки и сам скетч публикую в свободном доступе. Захотите меня поблагодарить за труд, буду рад, не захотите – что ж...


    P.S. Однако прошло времени уже почти два года после того, как сделал версию v3.18.7. Каждодневное пользование выявило ряд неточностей и желание всё же доделать до более оптимального варианта. Собрался с силами и окунулся вновь в программу этого проекта... пришлось много чего переделать, что-то убрать, что-то добавить и сейчас, глядя на макет уже нового устройства v5.2, испытываю радость, что сумел в этот микроконтроллер ATMega328P впихнуть, под завязку, улучшенный функционал... схема, описание и т.д. уже на другой странице. Корпус и монтаж переделывать не нужно, обновление программное.

    2024-08-01

    Анатолий Беляев

    . Mr.ALB
    Предыдущая страница Страница 13 Далее