Новгородское Вече радиолюбителей

Пожалуйста, войдите или зарегистрируйтесь.

Расширенный поиск  

Новости:


Автор Тема: Часы-метеостанция на Ардуино и графическом индикаторе  (Прочитано 12675 раз)

RN1TU Александр

  • Модератор
  • Ветеран
  • *****
  • Карма: +14/-0
  • Оффлайн Оффлайн
  • Сообщений: 350

В процессе баловства с Ардуинкой иногда появляются и законченные проекты.
Вот например, я сделал вполне себе рабочую версию часов-метеостанции. Что было целью? Использовать валяющийся без дела китайский графический индикатор, Поиграться с датчиком давления, а заодно применить его с пользой. Вспомнить основы программирования, которые когда-то были успешно подзабыты.
Ну а на выходе получились часы, которые можно использовать, например, для рыбалки (прогноз изменения давления).
Реализация ни в какой мере не претендует на идеальную. Делал для себя и использовал самые простые варианты решения поставленной задачи. Из явных минусов можно отметить необходимость установки часов программным методом по команде с терминала или при подключении к компьютеру, что снижает точность. Можно ввести кнопки и корректировать вручную, но пока я поленился ;)  Скетч выложу здесь. Если хотите, то используйте в своих конструкциях, изменяйте как хотите.
Да и вообще доведите до совершенства ;)
Сам скетч я постарался хорошо задокументировать.
Записан

RN1TU Александр

  • Модератор
  • Ветеран
  • *****
  • Карма: +14/-0
  • Оффлайн Оффлайн
  • Сообщений: 350

Для установки часов реального времени используйте пример, входящий в библиотеку iarduino_RTC . Сам модуль часов необходимо доработать, поскольку изначально он должен работать от аккумулятора. Такая доработка хорошо известна в Интернете. Выпаиваются диод и один резистор. Можно выпаять также светодиод и его резистор, но уже необязательно. Ну, например, сделать как здесь https://mysku.ru/blog/aliexpress/38678.html
Библиотека модуля BMP280 должна быть доработана, поскольку фирменный и китайский модули отличаются адресом I2C. В прицепе уже доработанная библиотека.
Подключение индикатора выполнил как на сайте iarduino 
https://iarduino.ru/shop/Displei/lcd-128x64-graficheskiy-siniy-cvet-podsvetki.html
Ссылка на необходимую для индикатора библиотеку U8glib (довольно большая)
https://iarduino.ru/file/300.html
Записан

RN1TU Александр

  • Модератор
  • Ветеран
  • *****
  • Карма: +14/-0
  • Оффлайн Оффлайн
  • Сообщений: 350

Использованные модули:
1. Arduino UNO
2. Индикатор графический 12864ZW
3. Часы реального времени DS3231
4. Модуль измерения давления и температуры BMP280

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

Что в планах? Подключить к Интернету по Wi-Fi (для корректировки времени), затем подключить выносной датчик температуры.
Записан

RN1TU Александр

  • Модератор
  • Ветеран
  • *****
  • Карма: +14/-0
  • Оффлайн Оффлайн
  • Сообщений: 350

Собрал новую версию своих часов. Получил из Китая модуль 12864B и решил осуществить синхронизацию по интернету. Пишу программу сам. Основная цель - не крутизна кода а максимальная простота при удовлетворительной точности.
Использованные в новой версии модули:
1. ESP 8266 Node MCU
2. Индикатор графический 12864B
3. Часы реального времени DS1307
4. Модуль измерения давления и температуры BME280
Процессорный модуль заменил для удобства получения информации о времени из Интернета через WiFi роутер. Индикатор - просто какой понравился внешне. Да и большой он. Модуль часов подойдет и DS1307 и DS3231 без замены кода. Но зачем брать дороже, если синхронизируемся через интернет. Датчик более подходящий для дома, на нем еще и влажность теперь измеряем. Зачем? Если может, то пусть будет. Кнопок нет. Получаем время из Интернета и записываем в модуль часов. Если нас не будет устраивать точность (за неделю убежит на минуту) То просто выключаем и включаем питание часов. Пока так. Потом допилю код, чтобы сам получал раз в сутки новую информацию.
Записан

RN1TU Александр

  • Модератор
  • Ветеран
  • *****
  • Карма: +14/-0
  • Оффлайн Оффлайн
  • Сообщений: 350

Соединение ESP8266 и дисплейного модуля ST7920 (12864B)
библиотека u8g2
строка инициализации  U8G2_ST7920_128X64_F_HW_SPI u8g2(U8G2_R0, /* CS=*/ 15, /* reset=*/ 16); // Feather HUZZAH ESP8266, E=clock=14, RW=data=13, RS=CS
соединение:

VSS    VIN
GND    GND
RS     D8 (GPIO15)
R/W    D7 (GPIO13)
E      D5 (GPIO14)
PBL    GND
BLA    3V3 (либо 200 ом с 5 вольт)
BLK    GND 

используется HW SPI     

P.S. Скетч доделал. Теперь при старте, если нет WiFi, то время берется из модуля часов реального времени (т.е. нет зависания на соединении). Один раз в сутки синхронизируется. Код незамысловатый, но рабочий. Можно пользоваться или переделывать. Доделывайте. Присылайте результаты своих экспериментов. А мне пока баловаться с часами надоело. Возьмусь за что-нибудь другое.   
Записан
 

SimplePortal 2.3.7 © 2008-2024, SimplePortal