Содержание
Сборка прошивки и загрузка
Если вы читаете данную статью, то вы либо уже собрали устройство, либо находитесь на завершающей стадии сборки. Так или иначе, я предлагаю на выбор 2 способа загрузки: собрать прошивку из исходников с помощью Arduino IDE 2 или загрузить бинарный файл сборки с помощью специальной утилиты.
Сборка прошивки из исходников
В данной процедуре нет совершенно ничего сложного, я попытаюсь построить свое объяснение таким образом, чтобы было ясно даже для тех, кто никогда до этого не работал с платформой Arduino, в любом случае в интернете есть много материалов, которые помогут разобраться в этой теме.
Итак, для начала нам потребуется скачать и установить программу Arduino IDE 2, для этого качайте ее с официального сайта и устанавливайте на свой компьютер. Cкачайте файлы исходников (они находятся на главной странице проекта). Затем откройте скетч desktop_stopwatch.ino. Далее для сборки нам потребуется установить несколько сторонних библиотек, весь список приведен в таблице, на всякий случай я оставил номера версий, которые были использованы и являются совместимыми с исходным кодом, а то вдруг может выясниться, что коды библиотек окажутся несовместимыми после обновления их авторами, так что, если вдруг возникнут какие-то проблемы, то скачайте указанные версии. На момент прочтения некоторые библиотеки могут уже быть обновлены, и как принято в программистском сообществе: если первая цифра в номере версии та же, то код должен оставаться совместимым, но всегда нужно иметь в виду, что никто не обязан следовать данному принципу, он может даже не знать о нем.
| Имя библиотеки | Автор | Версия | Ссылка на репозиторий |
|---|---|---|---|
| EncButton | AlexGyver | 3.6.3 | https://github.com/GyverLibs/EncButton |
| max7219 | Jonathan Evans | 1.0.0 | https://github.com/JemRF/max7219 |
| TimerMs | AlexGyver | 1.2 | https://github.com/GyverLibs/TimerMs |
| GyverTimers | AlexGyver | 1.10 | https://github.com/GyverLibs/GyverTimers |
| BME280 | Tyler Glenn | 3.0.0 | https://github.com/finitespace/BME280 |
| RTC | Manjunath CV | 1.8.0 | https://github.com/cvmanjoo/RTC |
Хорошо, IDE (интегрированную среду разработки) запустили, а скетч открыли, теперь, нажмите на боковой панели на кнопку, которая похожа на стопку книг или нажмите сочетание клавиш Ctrl + Shift + I, затем в поле Filter your search введите имя библиотеки (1), проверьте автора (2), затем нажмите на кнопку Install, дождитесь конца процесса загрузки и установки, затем проделайте те же действия для остальных библиотек.
Далее модифицируйте код в соответствии со своими потребностями.
В строчке кода #define DISPLAY_INVERTED <значение параметра> установите значение параметра:1 - если порядок подключения общих катодов индикаторов к MAX7219 обратный, в текущей схеме устройства он такой, но, если вы подключите обычный модуль, то можете обнаружить, что чередование символов инвертированное; 0 - если не нужно инвертировать порядок символов, установите это значение, если используете заводской дисплейный модуль.
В строчке кода #define USE_RTC_MODULE <значение параметра> установите значение параметра:1 - если установлен модуль DS3231 и необходимо его задействовать (в предыдущих статьях я писал, что есть нюансы при использовании данного модуля совместно с датчиком BME280); 0 - в противном случае.
Следующие параметры рекомендуется редактировать только опытным пользователям:
- DISPLAY_BLINK_PERIOD - период переключения состояния дисплея включен/выключен (мигание) в миллисекундах
- BUZZER_PIN - номер цифрового пина, к которому подключен пьезоизлучатель
- BUZZER_FREQ - частота сигнала, который подается на пьезоизлучатель
- BUZZER_DURATION - продолжительность подачи сигнала в миллисекундах
- BUZZER_DELAY- задержка между звуковыми сигналами в миллисекундах
После того как все параметры установлены, подключите плату ардуино к компьютеру, в моем случае я использовал неофициальную плату ардуино, которая использует для связи с компьютером микросхему CH340, поэтому потребуется установить драйвер на ПК (ссылка на драйвер для Windows). В остальном случае обратитесь к документации для своей платы. После выберите подключенную плату и порт в Tool → Board:<….> → Arduino AVR Board → (выберите совместимую плату). Повторю, что я в данном проекте использована плата Arduino Nano с микроконтроллером Atmega328p, но вы можете использовать другую плату на микроконтроллере AVR, с характеристиками аналогичными или более высокими.
Если плата окажется не совместимой, то код скорее всего не пройдет компиляцию, также после удачной компиляции будет выведена информация о том, сколько процентов постоянной и оперативной памяти будет использовано. Чтобы запустить сборку нажмите на верхней панели на кнопку с галочкой(Verify) или сочетание клавиш Ctrl+R, если сборка прошла успешно, то будет выведено сообщение вроде этого
Как я ранее говорил, будет выведена информация с требованиями к памяти, для платы Arduino Nano необходимо 70% ПЗУ и 35% оперативной памяти. Если кроме этого выводятся сообщения об ошибках, то проверьте все проделанные ранее действия. Если все собирается без проблем, то нажмите кнопку с изображением стрелки (Upload) или Ctrl+U, начнется процесс загрузки, после его завершения устройство будет готово к работе. Как пользоваться устройством читайте в материале Инструкция по эксплуатации.
Загрузка готовой сборки
В архиве Builds.zip находятся бинарные файлы с расширение HEX, всего присутствует 2 варианта: с применение модуля часов реального времени DS3221 (имя файла имеет суффикс «_rtc») и без него. На моем оборудовании были проблемы при наличии в модуле часов батарейки, устройство зависало при запуске, может в вашем случае все будет иначе, в любом случае решайте сами.
Данный способ я не использовал на практике, поэтому не могу с уверенностью сказать как производится загрузка прошивки в микроконтроллер. Один из вариантов загрузки: с помощью утилиты XLoader, с инструкцией по использованию вы можете ознакомиться в этой статье, также в материале описаны другие способы загрузки.
Другие варианты схемы
Данное устройство имеет очень простую схему и для минимальной комплектации достаточно всего трех компонентов: плата ардуино, модуль дисплея на микросхеме MAX7219 и 3 кнопки, на изображении ниже показано устройство, которое я собрал на брэдборде(breadboard)
Также в показанной схеме использован аналог МК AVR, а конкретно LGT8F328P, устройство работает, но есть один нюанс, пользовательские настройки не сохраняются в постоянной памяти, так как данный МК не имеет EEPROM. Но, при желании можно использовать и его, просто необходимые настройки можно задать непосредственно в коде прошивки.
Пользовательские настройки хранятся в структуре struct SetttingsData{…}, все параметры имеют приставку схожую с той, что указана в Инструкция по эксплуатации, p1, p2 и т.д., после знака «=» введите необходимые значения параметров, затем скомпилируйте и загрузите прошивку. Изменить параметры и опробовать их можно в режиме установки пользовательских настроек, только учтите, что при повторное загрузке контроллера будут установлены начальные значения. Для других вариантов конструкции может возникнуть желание и необходимость поместить компоненты устройства в подходящий корпус, этот вопрос вы уже решаете сами, можете переделать предложенный мной вариант корпуса на свое усмотрение.
При должном умении вы можете изменить прошивку, а также добавить дополнительную периферию, для этого я оставил несколько свободных цифровых пинов, например, у меня была идея вывести разъем на заднюю стенку для подключения реле, чтобы включать звонок при срабатывания будильника, также поступали предложения добавить светочувствительный элемент, чтобы яркость дисплея подстраивалась в зависимости от освещения. На самом деле вариантов апгрейда можно придумать бесчисленное количество, все определяется потребностями и материальными возможностями.
Вместо заключения
Спасибо всем, кто уделил время прочтению данных материалов, надеюсь моя разработка окажется полезной не только для меня и вы соберете свой экземпляр устройства, а лучше соберите и для себя, и в подарок для хорошего человека. Вы можете принять участие в усовершенствовании проекта, для этого в конце статьи будет указан адрес, на который вы можете присылать свои замечания и предложения, а чтобы не пропустить новые обновления подписывайтесь на Телеграм канал. Также я подумываю открыть Discord сервер для ведения обсуждений, но в случае, если будет соответствующий запрос от вас.