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

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

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

     

    Arduino #36

    GPS-clock v2.1
    Часы на GPS-модуле GY-NEO6MV2

    На предыдущей странице Часы на GPS-модуле GY-NEO6MV2 была поднята тема синхронизировать разные устройства по точному спутниковому времени. Всё вылилось уже в более совершенный проект второй версии. Заодно в этом проекте использован монохромный дисплей GMG12864, а его просили использовать некоторые подписчики сайта. Ещё одним интересным решением было потренироваться в освоении новых микроконтроллеров серии ESP32, имеющий 32 битную шину и двухядерный процессор. В проекте применён МК ESP32-WROOM-32D.

    Возможности нового микроконтроллера серии ESP32(ESP32-WROOM-32D) позволили в этих часах воплотить частично погодную станцию и сверхточные часы. МК имеет возможность передавать данные в интернет и возможно проект будет в дальнейшем расширен.

    GPS-часы v2.0
    GPS-часы v2.0

    Описание

    GPS является аббревиатурой, т.е. расшифровывается как: Global Position System. GPS-модуль предназначен для получения сигналов позиционирования со спутников, которые летают над Землёй. Связь, само-собой, осуществляется в одном направлении – на приём. Поэтому при подключении модуля к ESP32 достаточно подключить вывод Tx модуля с Rx ESP32. Преимущество в данном случае ESP32 в том, что у него аппаратно реализованы дополнительные последовательные порты. Для приёма сигналов GPS-модуля использую последовательный порт Rx2/Tx2. Скорость передачи данных с модуля по умолчанию: 9600 бод. Поэтому в скетче для порта устанавливаем такое же значение:

      Serial2.begin(9600, SERIAL_8N1, RXD2, TXD2);
    

    По последовательному порту с приёмника GPS-модуля поступают текстовые символы, поля которых отделены запятыми. В конце строки стоит завершающий символ перевода строки. Формат сообщений соответствует стандарту NMEANational Marine Electronics Association. Несколько подробнее этот формат описан ниже в начале скетча. Отмечу лишь, что посылка с основными данными начинается с кодового слова $GPRMC, поэтому декодировать будем ту сторку, которая имеет вначале это слово.

    Для вывода информации, использую дисплей GMG12864/WO12864D3, просили подписчики, конечно можно использовать любой другой дисплей, можно и цветной, или монохромный, но придётся переделать всю программу вывода информации на этот дисплей. Дисплей GMG12864/WO12864D3 по сравнению с Nokia-5110/3310 более надёжен, никаких проблем с плаванием контрастности и его ширина 128 точек, что позволяет более полно отображать информацию. Библиотека для данного дисплея использована следующая:

     #include <U8g2lib.h>  // Библиотека дисплея WO12864D3
    

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

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

    ОБЩЕЕ

    На дисплее GMG12864 выводятся:

    • Время с учётом поясного времени (изменение в настройках)
    • Дата в международном формате: ГГГГ-ММ-ДД
    • Если GPS-модуль поймал нужное чило спутников, то дополнительно выводится:
      • Широта/Latitude    Север/Юг/N/S
      • Долгота/Longitude Восток/Запад/W/E

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

    • SET/МЕНЮ   - долгое нажатие вход/выход в/из меню настройки
    • SET/МЕНЮ   - короткое нажатие - переход к следующему параметру
    • PLUS /+       - Прибавить значение
    • MINUS/-       - Убавить значение

    Так как эти часы должны синхронизировать внешние устройства, то это реализовано так, что при смене часа на выводе PIN_CORR выдаётся импульс коррекции для любых внешних устройств (часов и т.п.). Настройка длительности в меню настроек. Если установлена длительность 0 мс, то импульс не выдаётся.

    Для физического управления внешними устройствами к выводу PIN_CORR подключен резистор 510 Ом, который соединён с выводом 1 оптрона PC817. Вывод 2 оптрона PC817 соединён с GND.

    Выводы 3, 4 - выход управления на внешнее устройство.

    ВКЛЮЧЕНИЕ

    При вкючении устройства вначале идёт загрузка из EEPROM параметров настройки.

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

    Далее идёт поиск подключенных датчиков температуры DS18B20 (до 2 шт.). Если датчики найдены, то на дисплей выводится номер датчика, его адрес 8 байт в HEX формате и температура. Если датчики температуры не подключены, то выводится соответствующее сообщение. После проверки подключения DS18B20 идёт переход к проверке датчика давления.

    Далее идёт подключение датчика BME280. Если датчик не найден, то стоп программа и соответственное сообщение. Если датчик давления подключен, то на дисплей выводится текущее абсолютное давление в двух системах измерения: мм Рт.ст. и кПа, в которых может работать устройство. Также выводится температура с встроенного датчика температуры и влажность (при условии, что установлен датчик BME280). В заголовке экрана выводится тип используемого датчика давления.

    ЭКРАНЫ

    В этом устройстве использована концепция множественности экранов вывода информации. На каждый такой экран выводится определённая информация.

    Устройство имеет 5 экранов вывода информации на дисплей.

    1. Экран с информацией от GPS-модуля: временем, датой, широтой, долготой.
    2. Экран с временем и датой (просто как часы).
    3. Экран с информацией датчиков температуры (до 2 шт.). Если датчиков 2, то информация с каждого датчика выводится через определённое время (меняется в МЕНЮ настроек).
    4. Экран с информацией от GPS и BME280/BMP280: временем, датой, параметрами барометра:
      • температура °С,
      • давление ммРт/кПа,
      • влажность %.
    5. Экран с Барографом. Выводит изменение давления от времени. Работает в двух системах измерения давления: мм рт. ст. и кПа.

    Если в настройках параметр mode = 0, то при работе происходит автоматическая смена экранов по кругу, время показа экрана устанавливается в настройках.

    В левом верхнем углу выводится номер экрана и при mode=0 через / выводится время показа экрана в секундах.

    Если mode отличное от 0, то выводится соответствующий экран и в левом верхнем углу дисплея номер экрана.

    При mode != 0 возможно быстрое переключение экранов при нажатии кнопок [МИНУС] и [ПЛЮС].

    Нажатие продолжительное. При смене экрана происходит запись нового mode в EEPROM.

    ИНДИКАЦИЯ

    Синий светодиод используется для контроля выдачи импульса синхронизации коррекции внешних устройств. Красный светодиод используется для индикации записи и обновления в EEPROM. Зелёный светодиод указывает на достаточное количество спутников, что позволяет получать координаты местоположения.

    АККУМУЛЯТОР

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

    В пиктограмме внутри батарейки есть 4-е линии, которые соответствуют по 30% заряда.

    • 0%    – нет линий;
    • 30%   – 1-я линия;
    • 60%   – 2-я линия;
    • 90%   – 3-я линия;
    • 100%  – 4-я линия.

    GPS-модуль

    Если спутников недостаточно, то на экране в позиции времени выводится поясная поправка и выводится надпись "Мало спутников". Если некоторые спутники находятся, то выводится время и дата. Если найдено достаточное количество спутников, то выводятся координаты местоположения: широта/долгота.

    DS18B20

    Если найдены 2 датчика, то на экране №3 выводятся у каждого датчика по кругу:

    • Температура °С.
    • Чип.
    • Номер датчика 0/1.
    • Адрес датчика в HEX виде.
    • Точность измерения датчика (9...12).
    • Коэффициент поправки температуры датчика.

    Если нарушена линия подключения датчика, то выводится номер датчика (если их 2) и сообщение "Ошибка данных датчика DS18B20". При восстановлении линии подключения вывод информации возобновляется. Если датчики не были подключены и необходимо их подключть то, чтобы программа установила вновь подключенные датчики требуется перезагрузка устройства. Это можно сделать либо выключением/включением питания, либо нажатием на кнопку Сброс/Reset.

    МЕНЮ/SET

    Переход в настройки и выход из настроек по длительному нажатию на кнопку МЕНЮ/SET. На данный момент 2024-08-25 всего 20 настроек:

    1. Mode - номер экрана 1...4, при 0 - автоматическая прокрутка экранов по кругу.
    2. Light - Подсветка дисплея 0...250.
    3. Contrast - Контраст дисплея 0...100.
    4. PrntTmZn - Вывод поясного времени 0|1.
    5. TimZonH - Поясной час ±12.
    6. TimZonM - Поясные минуты ±59.
    7. TimCorr - Корректирующий импульс, мс 0...2000.
    8. kTerm1 - Поправка температуры DS18B20 №1.
    9. kTerm2 - Поправка температуры DS18B20 №2.
    10. TimeDS - Время индикации температуры с DS18B20.
    11. 0-eng/1-рус - Выбор языка надписей.
    12. TimeMode - Время показа экрана в секундах, при mode=0.
    13. kPress - Поправка давления в мм Рт для BME280 ±10 mmHg.
    14. kTermB - Поправка температуры для BME280 ±10°C.
    15. kHumid - Поправка влажности для BME280 ±20%.
    16. 0-mmH/1-kPa - Система измерения давления ммРт/кПа.
    17. Period, min – Период в минутах между отметками на Барографе.
    18. MaxPress – Максимальное давление.
    19. NormPres – Нормальное давление.
    20. MinPress – Минимальное давление.

    Если в настройках не делались изменения, то при выходе к EEPROM нет обращения. Если сделаны изменения, то данные изменения вносятся в EEPROM и красный светодиод на каждый изменённый параметр выдаёт один длительный импульс. После этого происходит обновление в EEPROM и красный светодиод выдаёт серию коротких импульсов. Это сделано из-за того, что ESP32 не имеет спецальной области EEPROM, а её эмулирует. Световая сигнализация записи в EEPROM для удобства контроля этого процесса.

    Как Вы могли заметить, устройство может работать на двух системах измерения давления. Также можно установить язык интерфейса либо английский, либо русский.


    Описание подключения

    Дисплей GMG12864/WO12864D3, GPS-модуль, датчики DS18B20, датчик BMP280/BME280, оптрон PS817, внешний АЦП ADS1115 подключаются к ESP32-WROOM-D3 по следующей схеме:

      ===================
      ПОДКЛЮЧЕНИЕ МОДУЛЕЙ
      ===================
      GPS-приёмник - часы, дата, координаты
      -------------------------------------
      GY-NEO6MV2  ESP32
        VCC       3V3
        GND       GND
        TX        16/RXD2
        RX        не используется
        LED_GREEN - сигнал приёма координат,
                    подпаять к LED на плате.
                    Через резистор 510 Ом
    
      Выход синхонизации
      -------------------
        ESP32    R      PS817 - оптрон
        GPIO2 -[510 Ом]- 1
        GND      -       2
    
      Датчики температуры (макс 2 шт.)
      --------------------------------
      DS18B20 ESP32
      1 GND - GND
      2 OUT - 15 -[4.7k]- 3V3
      3 VCC - 3V3
    
      Датчик абсолютного давления
      ---------------------------
      BME280 ESP32
      SCL  - 22 SCL
      SDA  - 21 SDA
      VCC  - 3V3
      GND  - GND
    
      Карта использованных контактов ESP32-WROOM
      ------------------------------------------
      15      - OneWire - DS18B20
      16/RXD2 - GPS-reciver TX
      17/TXD2 - GPS-reciver No connect
    
      21      - SDA - Датчики/Модули
      22      - SCL - Датчики/Модули
      
             GMG12864/WO12864D3
      5       - LCD_CS
      18      - LCD_RSE
      19      - LCD_A0
      23      - LCD_SCL
      32      - LCD_SI
      4       - LCD_BL // Подсветка через резистор 220 Ом
    
      13      - KNP_MENU
      12      - KNP_MINUS
      14      - KNP_PLUS
    
      2       - PIN_CORR        LED_BLUE
      27      - LED_SAVE_EEPROM LED_RED
    
      Внешний АЦП для измерения напряжения аккумулятора
      -------------------------------------------------
      ADS1115   ESP32-WROOM
          A1  - к делителю R1(9.89 кОм) - R2(3.33 кОм)
          R1  - к R2 и к входному напряжению (аккумулятору до 4,2В)
          R2  - к R1 и GND
          SDA - SDA
          SCL - SCL
          G   - GND
          V   - 3V3
    

    Схема модуля GPS-модуля GY-NEO6MV2 ниже.


    Схема GPS-модуля GY-NEO6MV2
    Pic 1. Схема GPS-модуля GY-NEO6MV2

    Скетч

    Скетч довольно внушительный и публиковать тут не буду, тем более пока всё в стадии испытаний и доработки программы. Возможны изменения из-за оптимизации или внесения дополнительных возможностей. Для желающих могу за отдельную плату прислать на почту полный (на данный момент) скетч. Обращайтесь либо в ВК, либо на почту.


    Реализация

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

    GPS-часы.
    Pic 2. GPS-часы.

    После проверок работы кнопок и световой индикации идёт поиск подключенных датчиков температуры DS18B20.

    GPS-часы.
    Pic 3. GPS-часы.

    Если датчики температуры подключены и найдены, то выводится информация с них.

    GPS-часы.
    Pic 4. GPS-часы.

    Далее идёт подключение модуля измерения давления BMP280/BME280. Соответственно выводится информация.

    GPS-часы.
    Pic 5. GPS-часы.

    При mode=1 выводится информация первого экрана. На неё выводится время, дата, координаты местоположения с модуля GPS. Как видим ниже на фото, выведено время и дата, но нет координат, это происходит из-за недостаточного количества обнаруженных спутников. Когда спутники обнаружены, то будут выводится и координаты местоположения.

    GPS-часы.
    Pic 6. GPS-часы.

    Если длительно нажать на кнопку [МЕНЮ/SET] то программа перейдёт в меню настроек, где можно произвести настройку 16 параметров устройства. Возвращение к экранам с информацией по длительному нажатию кнопки [МЕНЮ/SET].

    GPS-часы. Меню настроек
    Pic 7. GPS-часы. Меню настроек

    Второй экран выводит время и дату. Цифры часов большие. Этот экран можно использовать как просто часы.

    GPS-часы. Экран №2
    Pic 8. GPS-часы. Экран №2

    На третьем экране выводится информация с датчиков температуры DS18B20. Ниже на фото вывод информации с датчика #0. Замечу, что у него не установлена поправка значения температуры и соответственно нет такого сообщения.

    GPS-часы. Экран №3
    Pic 9. GPS-часы. Экран №3

    Ниже на фото вывод информации с датчика #1. У этого датчика установлена поправка значения температуры и на экране выведено значение поправки. Изменение поправок температуры осуществляется в меню настроек для каждого датчика.

    GPS-часы. Экран №
    Pic 10. GPS-часы. Экран №

    На четвёртом экране выводится время и дата и дополнительно информация с датчика давления: температура, абсолютное давление и влажность.

    GPS-часы. Экран №4
    Pic 11. GPS-часы. Экран №4

    Если устройство работает от аккумулятора, то выводится пиктограммка батарейки с линиями заряда и ниже напряжение на аккумуляторе. Удобно контролировать время автономной работы. Однако само устройство может продолжительно работать от внешнего источника питания +5В.

    После макетирования и отладки программы переходим уже к реализации самого устройства, как законченной конструкции. Она состоит из двух плат. На первой плате установлены дисплей, ESP32, внешний АЦП, модуль датчика давления, разъём для подключения двух датчиков температуры DS18B20, разъём для подключения синхронизируемых внешних устройств, светодиоды индикации, оптрон PS817, на плате дисплея установлена планка с кнопками управления.

    GPS-часы.<br>Плата №1 со стороны разъёма под ESP32-WROOM-32D
    Pic 12. GPS-часы.
    Плата №1 со стороны разъёма под ESP32-WROOM-32D

    На другой стороне платы №1 установлен разъём под дисплей, светодиоды, оптрон PS817 и разъемы подключения внешних устройств.

    GPS-часы.<br>Плата №1 со стороны разъёма под дисплей
    Pic 13. GPS-часы.
    Плата №1 со стороны разъёма под дисплей

    GPS-часы.<br>Плата №2 сторона соединений
    Pic 14. GPS-часы.
    Плата №2 сторона соединений

    На плате №2 установлен модуль GPS с антенной. Так же установлены модуль заряда аккумулятора на мс LP4056 и установлен модуль преобразователя напряжения до +4,5В, которое подаётся на контакт [VIN] платы ESP32-WROOM-32D.

    GPS-часы.<br>Плата №2 сторона модуля GPS
    Pic 15. GPS-часы.
    Плата №2 сторона модуля GPS

    Общие габариты собранного устройства 80*55*46 мм без учёта размеров аккумулятора.


    Видео


    GPS-часы v2.0

    Продолжительность фильма 0:23 [мм:сс]

    Обзор конструкции с разных сторон.

    2024-07-17


    GPS-часы v2.0

    Продолжительность фильма 0:44 [мм:сс]

    Процесс включения. Проверка кнопок в автоматическом режиме, если они не нажимаются, то через определённое время программа идёт дальше. Датчики DS18B20 не подключены.

    2024-07-17


    GPS-часы v2.0

    Продолжительность фильма 1:01 [мм:сс]

    Датчики DS18B20 не подключены, поэтому после показа экрана №2 идёт сразу показ экрана №4. Если подключить датчики DS18B20 и перезагрузить устройство, то информация с них будет выводиться на экран №3.

    2024-07-17


    GPS-часы v2.0

    Продолжительность фильма 2:36 [мм:сс]

    Подключил два датчика DS18B20 и нажал кнопку Сброс/Reset. Происходит тестирование подключенных модулей и датчиков. Далее, так как установлен Mode=0 – происходит автоматическая смена 4-х экранов по кругу.

    2024-07-17

    Сейчас, по мере свободного времени, пишу экран №5 с выводом Барографа – графика изменения давления по времени... процесс идёт медленно, хотя основа и написана, но хочется сделать вывод в двух системах измерения...

    2024-08-23


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

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