Метеостанция на ардуино с дисплеем. Создание метеостанции на Arduino с датчиком BME280 и дисплеем: пошаговая инструкция

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

Содержание

Компоненты для сборки метеостанции на Arduino

Для создания простой домашней метеостанции на базе Arduino потребуются следующие компоненты:

  • Плата Arduino (например, Arduino Nano или Arduino Uno)
  • Датчик BME280 для измерения температуры, влажности и атмосферного давления
  • ЖК-дисплей 16×2 символов с I2C интерфейсом
  • Соединительные провода
  • Источник питания 5В

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

Подключение компонентов метеостанции

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


  • BME280:
    • VCC → 3.3В
    • GND → GND
    • SCL → A5
    • SDA → A4
  • ЖК-дисплей I2C:
    • VCC → 5В
    • GND → GND
    • SCL → A5
    • SDA → A4

Как видно, датчик BME280 и дисплей подключаются по шине I2C, что упрощает монтаж. Обратите внимание, что BME280 работает от 3.3В, а дисплей от 5В.

Программирование метеостанции на Arduino

Для работы с компонентами метеостанции потребуются следующие библиотеки:

  • Adafruit_BME280 — для работы с датчиком BME280
  • LiquidCrystal_I2C — для управления ЖК-дисплеем
  • Wire — для работы с I2C интерфейсом

Базовый скетч для метеостанции может выглядеть так:

«`cpp #include #include #include Adafruit_BME280 bme; LiquidCrystal_I2C lcd(0x27, 16, 2); void setup() { Serial.begin(9600); if (!bme.begin(0x76)) { Serial.println(«BME280 не найден!»); while (1); } lcd.init(); lcd.backlight(); } void loop() { float temp = bme.readTemperature(); float hum = bme.readHumidity(); float pres = bme.readPressure() / 100.0F; lcd.clear(); lcd.setCursor(0, 0); lcd.print(«T:»); lcd.print(temp, 1); lcd.print(«C H:»); lcd.print(hum, 0); lcd.print(«%»); lcd.setCursor(0, 1); lcd.print(«P:»); lcd.print(pres, 1); lcd.print(» hPa»); delay(2000); } «`

Этот код инициализирует датчик и дисплей, считывает данные с BME280 и выводит их на экран каждые 2 секунды. Температура отображается с точностью до 0.1°C, влажность округляется до целых процентов, а давление выводится в гектопаскалях.


Калибровка датчика BME280

Для повышения точности измерений рекомендуется выполнить калибровку датчика BME280. Как это сделать?

  • Температура: сравните показания с точным термометром и внесите поправку в код.
  • Влажность: откалибруйте по двум точкам — в сухом и влажном воздухе.
  • Давление: сверьтесь с официальными метеоданными для вашего региона.

Калибровочные коэффициенты можно добавить в скетч:

«`cpp float tempOffset = -1.2; float humOffset = 2.5; float presOffset = 3.7; float temp = bme.readTemperature() + tempOffset; float hum = bme.readHumidity() + humOffset; float pres = (bme.readPressure() / 100.0F) + presOffset; «`

Точные значения коэффициентов нужно подобрать экспериментально для вашего конкретного датчика.

Расширение функционала метеостанции

Базовую версию метеостанции можно улучшить, добавив новые возможности:

  • Отображение графиков изменения параметров
  • Прогнозирование погоды по тенденции изменения давления
  • Подключение к Wi-Fi для отправки данных в облако
  • Добавление часов реального времени
  • Управление дополнительными датчиками (CO2, пыли и т.д.)

Например, для прогнозирования погоды можно отслеживать изменение давления за последние несколько часов:


«`cpp #define PRESSURE_SAMPLES 12 float pressureArray[PRESSURE_SAMPLES]; int pressureIndex = 0; void updatePressureHistory() { pressureArray[pressureIndex] = bme.readPressure() / 100.0F; pressureIndex = (pressureIndex + 1) % PRESSURE_SAMPLES; } String getForecast() { float pressureDelta = pressureArray[(pressureIndex — 1 + PRESSURE_SAMPLES) % PRESSURE_SAMPLES] — pressureArray[pressureIndex]; if (pressureDelta > 1.5) return «Улучшение»; else if (pressureDelta < -1.5) return "Ухудшение"; else return "Без изменений"; } ```

Этот код сохраняет историю изменения давления за последние 6 часов (при обновлении каждые 30 минут) и на основе тренда делает простой прогноз погоды.

Корпус для метеостанции

Для защиты электроники и удобства использования метеостанции рекомендуется поместить ее в подходящий корпус. Какие варианты можно рассмотреть?

  • 3D-печатный корпус по индивидуальному дизайну
  • Готовый пластиковый корпус для электроники
  • Деревянный корпус ручной работы
  • Корпус из оргстекла или акрила

При разработке корпуса важно обеспечить:


  • Хорошую вентиляцию для точных измерений
  • Удобный доступ к дисплею
  • Отверстия для кнопок управления (если есть)
  • Возможность легкой замены батарей (для автономной версии)

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

Подключение метеостанции к интернету

Для отправки данных в облачные сервисы или на собственный веб-сервер можно дополнить метеостанцию Wi-Fi модулем. Как это реализовать?

  • Использовать плату ESP8266 или ESP32 вместо Arduino
  • Добавить отдельный Wi-Fi модуль к Arduino (например, ESP-01)
  • Подключить Arduino к Raspberry Pi по USB

Пример кода для отправки данных на сервер ThingSpeak с помощью ESP8266:

«`cpp #include #include const char* ssid = «YOUR_WIFI_SSID»; const char* password = «YOUR_WIFI_PASSWORD»; unsigned long channelID = YOUR_CHANNEL_ID; const char* apiKey = «YOUR_API_KEY»; WiFiClient client; void setupWiFi() { WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print(«.»); } Serial.println(«WiFi подключен»); ThingSpeak.begin(client); } void sendData(float temp, float hum, float pres) { ThingSpeak.setField(1, temp); ThingSpeak.setField(2, hum); ThingSpeak.setField(3, pres); ThingSpeak.writeFields(channelID, apiKey); } «`

Этот код подключается к Wi-Fi сети и отправляет данные на сервер ThingSpeak. Не забудьте заменить заглушки на реальные данные вашей сети и аккаунта ThingSpeak.


Оптимизация энергопотребления метеостанции

Для создания автономной метеостанции, работающей от батарей, важно оптимизировать энергопотребление. Какие методы можно использовать?

  • Использование режима сна Arduino между измерениями
  • Отключение неиспользуемых модулей и периферии
  • Снижение частоты обновления данных
  • Использование энергоэффективных компонентов

Пример кода с использованием режима сна:

«`cpp #include #include void setup() { // Настройка периферии } void loop() { // Измерение и отображение данных // Подготовка к сну lcd.noBacklight(); bme.setSampling(Adafruit_BME280::MODE_FORCED); // Сон на 5 минут for (int i = 0; i < 37; i++) { LowPower.powerDown(SLEEP_8S, ADC_OFF, BOD_OFF); } // Пробуждение lcd.backlight(); } ```

Этот код использует библиотеку LowPower для перевода Arduino в режим сна на 5 минут между измерениями, что значительно снижает энергопотребление.


Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN.

В этом проекте сделаем мини-метеостанцию используя ESP32 (Arduino) и датчик барометрического давления BME280, который может предоставлять информацию об атмосферном давлении, температуре и влажности в режиме реального времени. С помощью BME280 также можно измерить высоту над уровнем моря. Полученные значения выведем на дисплей DWIN.

Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

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

Виды датчиков BME280 (BMP280).

Датчик BME280 имеет несколько разновидностей и в зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5В.

Как узнать, какое рабочее напряжение модуля? Если на плате есть стабилизатор, его можно запитать от источника напряжением 5В. Если на плате нет стабилизатора, то подключить можно только к источнику питания 3В.

На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный продавец не поставил галочку? Они отличаются по корпусу датчика:Информация о типах модулей взята с сайта.

Датчики я покупал себе с сопутствующим товаром на будущее и информацию предварительно не почитал. Я повёлся на низкую стоимость и в результате стал счастливым обладателем BMP280. Кстати, покупал 2 модуля, и галочки нет ни на одном. Это, конечно, не критично, но есть некоторые сложности с тем, чтобы заставить датчик работать. Помогла библиотека Гайвера.

Распиновка модуля BME280 без стабилизатора на борту.

Интерфейс BME280 I2C использует следующие контакты:

  • VCC: от 1,71 В до 3,6 В
  • GND: подключение к GND
  • SCL: последовательные часы (SCK)
  • SDA: последовательные данные (SDI)
  • CSB: должен быть подключен на VDDIO, чтобы выбрать интерфейс I2C.
  • SDO: контакт определяет I2C адрес устройства. Если SDO подключается к GND (0), то адрес равен 0x76. Если он подключается к VDDIO(1), то адрес равен 0x77. В этом модуле мы подключили его к VDDIO, поэтому адрес должен быть 0x77.

Интерфейс I2C.

Модуль оснащён простым двухпроводным интерфейсом I2C, который можно легко соединить с любым выводом I2C микроконтроллера. Адрес I2C модуля BME280 по умолчанию 0x76, и его можно легко изменить на 0x77.

На рынке доступен ещё один модуль, который имеет только 4 контакта. Чтобы изменить его адрес I2C, найдите перемычку для пайки рядом с микросхемой.

Благодаря данной перемычке можно изменить адрес I2C.

По умолчанию средний медный контакт площадки подключён к левой контактной площадке. Поэтому вам нужно поцарапать соединение между средней и левой медными контактными площадками, чтобы отсоединить их. Затем вы можете добавить каплю припоя между средней и правой медными площадками, чтобы соединить их. Это позволит вам установить адрес I2C 0x77.

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

Схема подключения дисплея DWIN, модуля BME280 к ESP32.

Датчик барометрического давления BME280 взаимодействует с ESP32 для создания простой мини-метеостанции.

Подключите контакты SDA SCL BME280 к соответствующим контактам ESP32, то есть к контактам GPIO22 и GPIO21 соответственно. Дисплей DWIN подключаем ко второму UART порту ESP32, то есть к контактам GPIO16 и GPIO17.

Библиотека для работы с BME280.

Самая распространённая библиотека для работы с BME280 является Adafruit BME280 (для работы также нужно установить Adafruit Sensor). Но она не работает с BMP280, поэтому пришлось искать альтернативное решение.

GyverBME280 – библиотека более удобная и лёгкая. Также поддерживает датчики BMP280. То, что мне требовалось для данного проекта.

Библиотеку можно установить через менеджер библиотек или скачать с официального сайта разработчика. Также прикреплю библиотеку внизу статьи в разделе «Файлы для скачивания».

Код метеостанции на DWIN, модуле BME280 и ESP32.

В коде менять ничего не нужно. Максимум посмотреть, чтобы был выключен DEBUG. В противном случае вместо влажности воздуха у вас будет выводиться информация со счётчика. Счётчик я добавил для того, чтобы можно было отследить, что всё работает и информация обновляется на дисплее. А также в связи с тем, что у меня датчик BMP280 и значение влажности выводит 0.

Остальные данные меняйте по мере необходимости. Например, адрес устройства по умолчанию 0x76. Возможно, вам нужно будет поменять на 0x77.

Прошивка для дисплея DWIN.

Для данного проекта подайте дисплей без сенсора. Благо, практически для всех моделей дисплеев DWIN доступна версия без сенсора.

Для вывода информации будем использовать всего один инструмент — «Data variables». С данным инструментом мы уже знакомы из проекта «Панель управления подсветкой на дисплее DWIN».

Но его мы использовали только для вывода целочисленных значений. Сегодня в проекте будем выводить дробные значения.

Для этого данные для вывода нужно настроить следующим образом.

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

Мини-метеостанция на Arduino и BME280 с выводом данных на дисплей DWIN.

И если у вас нет в наличии ESP32, можно сделать проект, используя классическую отладочную плату Arduino UNO или Arduino NANO.

Код для Arduino NANO (UNO).

Внизу статьи в разделе «файлы для скачивания» вы можете скачать код для Arduino NANO (UNO). Обратите внимание, что данный код я не тестировал на железе. Если у вас будут вопросы, пишите в комментариях.

Схема подключения дисплея DWIN и модуля BME280 к Arduino NANO.

Подключаем электронику дисплея DWIN, модуля BME280 к Arduino NANO по схеме.

Вывод.

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

Понравился проект Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Спасибо за внимание!

Технологии начинаются с простого!

Фотографии к статье

Файлы для скачивания

Скачивая материал, я соглашаюсь с Правилами скачивания и использования материалов.

Код метеостанции на DWIN, модуле BME280 и ESP32.zip2 Kb 367Скачать
Код Мини-метеостанция для Arduino NANO (UNO). zip2 Kb 360Скачать
Прошивка для дисплея DWIN. Мини-метеостанция.zip 331 Kb 322Скачать
Библиотека для работы с BME280. GyverBME280.zip13 Kb 278Скачать

Метеостанция с часами на ардуино

Skip to content

                                                                  Задача

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

                                                                      Сборка

Итак, было решено использовать ардуино про мини, дисплей 1602, датчик BME280 и часы реального времени DS3231. Все модули покупались в Робошопе.

Сборка оказалась достаточно простой. Все модули соединяются по шине I2C с платой контроллера. Единственная проблемка заключалась в том, что хотелось регулировать яркость подсветки дисплея. Для этого надо было снять перемычку, отключающую подсветку, на модуле I2C дисплея, и соединить вход подсветки с выходом ШИМ ардуино. Яркость регулируется кнопкой и имеет четыре значения, которые можно изменить в скетче.

Далее был куплен корпус в ЧиД. Главным критерием выбора было, чтобы нормально установился дисплей и плата с модулями, и чтобы осталось немножко места под возможные хотелки. А хотелки уже есть. Первоначально

метеостанция собиралась без возможности корректировки времени. Действительно модуль DS3231 оказался очень точным, за полтора года, с момента запуска на постоянную работу, часы отстали всего на 35 секунд.

И вот теперь хочется сделать корректировку, но не кнопками, а через интернет. В ближайших планах добавить модуль Wi-Fi ESP-01, для коррекции времени по NTP-серверам и для отправки данных на сайт.

Ардуино про мини и модуль часов были установлены на монтажной плате. Там же установлены разъёмы для датчика BME280 и дисплея. Также на этой монтажке собран стабилизатор на 3,3В для питания датчика и, в будущем, для ESP. Кнопка и разъём питания вынесены на заднюю стенку корпуса, а датчик на боковую. Запитаны метеочасы от блока питания 5В 1А (не зарядка).

В процессе отладки выяснилось, что датчик, установленный внутри корпуса, завышает температуру примерно на 1,5 градуса. Пришлось внести в скетч коррекцию.

Выше фото самой метеостанции, а в конце статьи скетч и библиотеки, использованные в проекте. Скетч писался по примерам из библиотек и компилировался в ардуино ИДЕ 1. 0.6

meteochasy_v2_1

SparkFun_BME280

LiquidCrystal_I2C1602V1

DS3231

 

 

BME280DS3231ардуинометеостанция

janis72 Ардуино

ОШИБКА — 404 — НЕ НАЙДЕНА

  • Главная
  • Мне очень жаль, но…

Наши серверные гномы не смогли найти страницу, которую вы ищете.

Похоже, вы неправильно набрали URL-адрес в адресной строке или перешли по старой закладке.

Возможно, некоторые из них могут вас заинтересовать?

Провода-перемычки Premium 6″ M/M — 20 AWG (10 шт. в упаковке)

В наличии ПРТ-11709

2

Избранное Любимый 13

Список желаний

Трубка — алюминий (5/8 «НД x 10″ Д x 0,569» ID)

18 в наличии РОБ-12254

Избранное Любимый 0

Список желаний

Датчик SparkFun RedBot — акселерометр

23 в наличии SEN-12589

2

Избранное Любимый 7

Список желаний

SparkFun Inventor’s Kit Bridge Pack для micro:bit

В наличии КОМПЛЕКТ-14719

42,95 $

1

Избранное Любимый 8

Список желаний

GPS против GNSS

15 февраля 2022 г.

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

Избранное Любимый 1

Последний взгляд на 2022 год

31 декабря 2022 г.

Прощаясь с 2022 годом, давайте посмотрим в зеркало заднего вида на все захватывающие моменты SparkFun, которые сделали этот год незабываемым.

Избранное Любимый 1

ОШИБКА — 404 — НЕ НАЙДЕНА

  • Главная
  • Четыре-но-четыре

Наши серверные гномы не смогли найти страницу, которую вы ищете.

Похоже, вы неправильно набрали URL-адрес в адресной строке или перешли по старой закладке.

Возможно, некоторые из них могут вас заинтересовать?

Кнопочная площадка 2×2 — печатная плата Breakout

В наличии COM-09277

2

Избранное Любимый 11

Список желаний

Комплект SparkFun Qwiic OpenLog

27 в наличии КОМПЛЕКТ-18350

74,95 $

Избранное Любимый 3

Список желаний

MIKROE Бесколлекторный 2 Click

Нет в наличии РОБ-20240

16,95 $

Избранное Любимый 0

Список желаний

MIKROE Светодиодная вспышка Click

Нет в наличии DEV-20265

44,95 $

Избранное Любимый 0

Список желаний

Использование u-blox GPS для большей точности

14 июля 2020 г.

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

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