Схема часов с барометром и MP3-плеером на Arduino

Схемы радиоаппаратуры

Вы находитесь здесь: Схемы радиоаппаратуры Любительские схемы Часы Часы с барометроми и MP3-плеером на Arduino

Часы с барометром и MP3-плеером на Arduino

Последние веяния времени не обошли стороной и меня. Я имею ввиду всем известный конструктор "Arduino". Захотелось попробовать свои силы и в этой области радиолюбительства. Привлекает меня в этом большой простор для творчества - можно при небольших затратах "железа" получить много пользовательских функций. Правда, для этого надо освоить хотя бы азы программирования. Мне помогло давнее изучение Бейсика во времена аналогичного повального увлечения "Синклером". Все-таки все языки программирования высокого уровня строятся на одинаковых базовых принципах.

Итак, представляю на суд общественности мое первое творение на Arduino - часы с двумя будильниками, барометром, термометром, MP3-плеером, двухступенчатой автоматической регулировкой яркости, дистанционным управлением и цифровой настройкой хода (ЦНХ):




Кнопок часы не имеют, вся настройка производится через пульт дистанционного управления. В основном режиме они показывают время с точностью до секунд, дату, день недели, атмосферное давление в миллиметрах ртутного столба и температуру в помещении с разрешением 0,1 °C. Термодатчик совмещен с барометром (модуль BMP280) и находится внутри корпуса, поэтому имеет температуру на пару градусов выше комнатной. Чтобы приблизить показываемую температуру к истинной, введена настраиваемая поправка температуры от 0 до -5 °C, которая подбирается экспериментально путем сравнения показаний с другим термометром. Конечно, точность падает при этом примерно до одного градуса, но для комнаты этого достаточно. Вот так часы выглядят при коррекции температуры:




Поправка температуры - желтые цифры, а синие - это поправка ЦНХ. Она стала возможной благодаря примененному модулю часов DS3231. В нем есть так называемый регистр старения (кварца), содержимое которого влияет на точность хода часов. Записать в него можно значения от -128 до 127, что соответствует коррекции ±1,1 с в сутки.

А это вид часов при работе плеера или будильника:




Желтые цифры - номер трека (максимум - 999), синие - время от начала трека (до 99 мин. 59 с). Музыкальные файлы размещаются на карте памяти микро-SD, вставляемой снизу. Использованный модуль DFPlayer Mini нумерует треки не по алфавиту, а в порядке записи на карту памяти. Это надо учитывать при поиске нужного трека по номеру.

Желтый светодиод слева внизу показывает, что включен случайный выбор трека. Красный и синий слева вверху - это индикаторы будильников.

Для будильников, кроме времени, можно выбрать дни срабатывания: РБ - рабочие, ВХ - выходные, ВСЕ - все. Также можно задать длительность работы, громкость и номер трека:




Переходим к схеме часов:



Блок питания взят мощный, с запасом, чтобы его хватило и на индикаторы, и на максимальную громкость (3 Вт). Экономичный модуль УНЧ построен на микросхеме PAM8403, работающей в классе D.

Я выбрал в качестве основы устройства модуль Arduino Pro Mini из-за его малых габаритов. Для этих часов подойдет только вариант с контроллером ATmega328 (у него памяти больше).

HARD UART - разъем программирования, в скетче эти выводы не используются. Выводы D8 и D9 - это SOFT UART, виртуальный COM-порт для MP3-плеера.

Транзистор 2N7002 возле барометра - это двунаправленный преобразователь уровня (5/3,3 В) для сигнала SDA. Сигналу SCL достаточно однонаправленного преобразователя на диоде. Подтягивающие резисторы не установлены, т. к. они уже есть в модулях барометра и часов.

Так выглядит задняя плата в сборе:




Поскольку это мое первое устройство на Arduino, я решил модули не паять, а ставить на разъемы для легкой замены и отладки. Справа вверху виден разъем под приемник RRD-102, но он не установлен, потому что мне по неопытности не хватило памяти для скетча, включающего и приемник. Из-за этого же не сделаны еще некоторые мелочи. Например, поправка ЦНХ может меняться только в непрерывном режиме, а одиночными нажатиями - нет.

А это передняя плата:




Вот ее схема:



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



Небольшое замечание: если бы у меня были матричные индикаторы другой полярности (с семью катодами и пятью анодами), можно было бы управлять ими обоими с помощью всего одной микросхемы TM1638. Я купил индикаторы LM-57HR07CC вместо LM-57HR07C из-за ошибки в файле LM-57XX07.pdf. У них перепутана маркировка. Этот файл с ошибкой размещен на многих сайтах в интернете (даже у меня!). Учтите это на будущее! Хотя возможен и другой вариант - ошибочная маркировка на самих индикаторах.



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

Пульт дистанционного управления - от колонки "Atlanfa". Можно взять и другой, лишь бы его понимал фотоприемник ДУ. Кроме того, понадобится заменить в скетче коды кнопок. Определить коды нового пульта можно с помощью вспомогательного скетча из архива для скачивания. В этом же архиве есть таблицы с описанием режимов работы часов, картой памяти EEPROM (где что запоминается), сам скетч часов, использованные библиотеки, описание индикаторов и печатные платы в формате Sprint Layout 6.

По поводу печатных плат есть замечание. Когда я их рисовал, я исходил из того, что в библиотеках TM1638.cpp и TM1638QYF.cpp порядок цифр индикаторов с общим катодом и общим анодом один и тот же. Суровая действительность оказалась совсем другой, в результате чего мне пришлось в готовой плате резать дорожки и соединять проводами разряды индикаторов с ОА в обратном порядке (это видно даже на фото). Хороший программист мог бы это исправить в самой библиотеке TM1638QYF.cpp, но мне это пока не по силам. Третий вариант выхода из этой ситуации - использовать только индикаторы с ОК, четвертый - перерисовать печатную плату перед повторением проекта.

Есть в печатных платах и другие мелкие недоработки, исправленные проводами. Это подключение точек в секундах, сигнала Busy от MP3-плеера и выхода приемника ДУ. Правильно так, как на электрической схеме, потому что она рисовалась после отладки часов.

И еще по поводу печатных плат. Когда я разводил подключение матричных индикаторов (день недели), я упростил себе жизнь и развел проводники по кратчайшему пути, не считаясь с нумерацией разрядов и сегментов. Единственное, что я выполнил, - это чтобы аноды шли на выводы SEG, а катоды - на GRID. В результате мне пришлось немного поизвращаться с порядком линий и колонок индикаторов, а также с файлом фонта TM16XXFonts.h. Вся информация есть в архиве, но вникать в это не надо. Главное - оно работает!

Пояснение насчет регулировки яркости. Теоретически микросхема TM1638 позволяет установить 8 разных уровней яркости, но уровни от 3-го до 7-го почти неразличимы. Зеленые индикаторы (часы, минуты и секунды) светят намного тусклее остальных, поэтому, чтобы выровнять яркость всех индикаторов, пришлось использовать только две градации - 2 и 7 для зеленых индикаторов, 0 и 1 для остальных.

Скетч часов имеет подробные комментарии. Если кто-нибудь захочет его изменить, сложностей не должно быть. Перед программированием контроллера стоит на всякий случай очистить EEPROM (Файл / Примеры / EEPROM / eeprom_clear). Я использовал версию Arduino IDE 1.8.2.

Напоследок справедливости ради хочу добавить, что часы имеют и недостатки. Во-первых, они почему-то не работают без карты микро-SD, скетч зависает еще в setup'е при первом же обращении к плееру. Во-вторых, при отсутствии питания счет времени сохраняется, но будильники не работают.

P. S. Последняя модификация скетча - 26.05.18.

Скачать схему часов с барометром и MP3-плеером.











Основные разделы:

Подразделы любительских схем:

География посетителей:


Flag Counter

Рейтинг@Mail.ru Яндекс.Метрика