Проект часы с метеостанцией в деревянном корпусе, стилизованные под телевизор, подойдет для начинающих программистов и радиолюбителей.
Рис. 1 Часы в корпусе
Для проекта были использованы следующие компоненты:
- Модуль часов реального времени DS3231
- Модуль энкодера (круглый). Можно взять любой энкодер который нравится, главное - правильно его подключить и использовать рабочую библиотеку.
- ЖК дисплей LCD12864B V2.0.
- Датчик атмосферного давления, температуры и влажности BME280 (5 В). Можно использовать такой же датчик на 3,3 В, но необходимо будет правильно подвести питание.
- Контроллер Mega 2560 Pro (Embed) CH340G/ATmega2560.
Нужно отметить, что контроллер может быть практически любой, главное - чтобы хватило Flash-памяти для загрузки скетча. Отладка осуществлялась на плате MEGA 2560 R3 (Arduino совместимый контроллер), но её размеры оказались велики для конечного устройства. Первоначально предполагалось использовать плату контроллера NANO 3.0 CH340G, но в процессе реализации проекта мы столкнулись с проблемой нехватки Flash-памяти, так как весь наш скетч занимал чуть больше 50 Кб. В итоге контроллер NANO 3.0 нам не подошёл, так как максимально возможный скетч должен занимать не более 30 Кб, а оптимизацией заниматься не хотелось.
Самым сложным в этом проекте оказалось подключение LCD дисплея. При подключении графического дисплея LCD12864B V2.0 необходимо обратить внимание на используемые библиотеки и подключение разъёмов.
Ниже приведен пример для подключения дисплея к Arduino совместимому контроллеру Mega 2560 Pro (Embed) CH340G/ATmega2560, который мы использовали в проекте.
Для подключения ЖК дисплея используем аппаратный интерфейс SPI. На плате MEGA 2560 под аппаратный SPI выделены пины 50 – 53. Мы использовали 51(MOSI) для вывода R/W и 52(SCK) для вывода E. Подключение вывода дисплея RS можно произвести к любому свободному цифровому пину. В нашем случае мы использовали 49 пин.
Внимание! Для того, чтобы активировать режим работы по интерфейсу SPI необходимо на плате дисплея LCD12864B V2.0 вывод PSB замкнуть на землю (GND).
Не забудьте в своём скетче, если будете подключать другие пины, изменить строчку:
U8GLIB_ST7920_128X64_4X u8g(49);
Если Вы подсоедините дисплей без потенциометра регулировки контрастности, то можете не увидеть изображение. Как вариант, используйте потенциометр RV09 с короткой ручкой 10K B103. Подсоедините его, как нарисовано на схеме. Регулировку яркости и контрастности цифр и экрана можно произвести с помощью потенциометра и переменного резистора на обратной стороне LCD дисплея.
Рис. 2 Схема соединения LCD дисплея и контроллера
Для работы с дисплеем Вам понадобится библиотека U8glib. Модификаций данной библиотек существует множество, мы же использовали вариант U8glib, который можно скачать по ссылке в самом конце статьи.
Теперь давайте подсоединим модуль часов, энкодер и датчик температуры, влажности, давления.
Рис. 3 Схема соединения LCD дисплея, контроллера, модуля часов и датчика температуры, влажности, давления
Модуль часов и датчика подключаем к шине I2C. На плате это пины D21 – SCL и D20 – SDA. Для работы этих модулей нам потребуется библиотеки iarduino_RTC (взята с сайта iarduino.ru) для часов реального времени и Adafruit_BME280 для датчика BME280.
Работа энкодера обеспечивается библиотекой GyverEncoder, которую мы позаимствовали на одноимённом сайте. Подключать энкодер можно к любым цифровым выводам. Главное укажите в коде какой пин отвечает за кнопку (KEY), а какой за поворот энкодера вправо или влево:
#define CLK 31 // Поворот энкодера (S2). Здесь ваш номер пина и название переменной
#define DT 30 // Поворот энкодера (S1). Здесь ваш номер пина и название переменной
#define SW 29 // Кнопка (KEY). Здесь ваш номер пина и название переменной
Encoder enc(CLK, DT, SW);
В коде мы не меняли название переменных энкодера, чтобы избежать путаницы и не править библиотеку.
Скачать скетч можно по этой ссылке.
Скачать схему.
Библиотеки:
Для модуля часов - iarduino_RTC, взятая с сайта iarduino.ru
Комментарии
Компиляция проходит нормально
для Piranha ULTRA после обновления библиотеки Adafruit.