![]() |
|
![]() |
![]() |
Теги статьи: | ВелокомпьютерAVR |
Простой велокомпьютер с цветным 320x240 LCD
Автор: WiseLord, wiselord1983@gmail.com
Опубликовано 18.07.2017
Создано при помощи КотоРед.
В мае этого года так случилось, что приобрёл я себе велосипед, что хотел сделать уже давно, да как-то всё не выходило. Ну и, естественно, захотелось заиметь к нему что-то вроде велокомпьютера - считать пройденную дистанцию, отображать текущую скорость, и так далее.
Покупать что-то готовое, будучи радиолюбителем и умея работать с МК, как-то не комильфо. Да и лежали у меня в закромах когда-то давно купленные на Aliexpress разные платки, которые и решено было пустить в дело. Получилось устройство, которое выглядит на велосипеде как-то так:
Небольшой ролик с обзором функционала на Youtube:
Функционал пока что самый базовый, но, скорее всего, будет расширяться. На текущий момент самое тяжёлое (шрифты, графика) уже реализовано, а у применённой ATmega328p ещё 70% памяти программ свободно. Так что вопрос скорее в том, что бы интересное придумать, а не в том, влезет или нет.
Принципиальная схема очень проста:
На самом деле, она, конечно, сложнее - не прорисовано питание, возможно, желательны какие-то фильтры для кнопок и датчиков (резисторы и конденсаторы, помимо имеющегося программного антидребезга), да даже те же ёмкости по питани. Но на суть это мало влияет - тут каждый может под себя доработать эти цепи.
Правда, у меня вместо микросхемы ATmega328p использовна готовая плата, называемая Arduino Pro Mini, на которой уже есть кое-какая обвязка. Но это только для удобства разработки, используется она именно как микроконтроллер с удобно разведёнными на гребёнку ножками. Никакой средой Arduino и прочими скетчами здесь и не пахнет - проект заточен для обычного микроконтроллера.
В качестве дисплея у меня применён купленный года два назад 320x240 цветной LCD на базе контроллера ILI9341:
Дисплей работает по интерфейсу SPI, поэтому подключить его очень просто. Но есть один нюанс, который стоил мне многих нервов. Дисплей должен работать от напряжения 3.3В. Больше - нельзя. На плате дисплея можно видеть линейный стабилизатор на 3.3В. Я его тоже увидел, и, было, обрадовался. Подключил его к вышеупомянутой плате Arduino, переписал ранее написанный драйвер для STM32 под AVR и поимел странное поведение - дисплей нормально инициализировался и работал где-то в 50% случаев.
В общем, долго мучил я код, пытаясь найти проблему, пока практически случайно не запитал от 3.3В и ATmega. И все баги пропали.
В общем, проблема была в том, что МК, запитанный от 5В, соответственно выдавал это же напряжение лог. 1 на выходы, подключенные к дисплею. А эти ножки дисплея, оказывается, к 5В совсем нетолерантны - отсюда и все проблемы.
Сначала я было подумал подключить дисплей к МК через преобразователь уровня. Но отдельно специальную микросхему заводить не хотелось, а резистивные делители не очень хороши тем, что в ждущем режиме через них будет (на входах с лог. 1) течь ток.
В общем, проще оказалось и МК запитать от 3В (я использовал этот же стоящий на дисплее линейный стабилизатор), и всё заработало чётко.
Можно видеть, что на плате с дисплеем разведён ещё и разъём для SD-карты со своим набором выводов. Мне он был не нужен, плюс делал плату много толще, поэтому я выпаял этот разъём, отклеил сам дисплей от его платы (он там был на чём-то вроде двухстороннего скотча) и отрезал где-то процентов 60 платы, естественно, убедившись что никаких дорожек непосредственно для дисплея там нет.
В итоге на освободившееся место хорошо легла плата Arduino Pro Mini с ATmega328p на борту:
Оба основных компонента - дисплей и плата поместились практически в габаритах крышки от корпуса. Ну и вид с обратной стороны:
Была у меня мысль изготовить нормальную плату, чтобы разместить на ней вообще всё - МК, контакты для шлейфа дисплея, стабилизатор и т.д. Получилось бы, наверное, ещё лучше чем есть. Но очень хотелось всё сделать поскорее и приступить уже к программной части, поэтому я просто соединил всё МГТФ-проводом. Во второй половине корпуса разместилась Li-Ion батарея (купил на рынке, батарея от какой-то Nokia подходящего размера на 1450 мА*ч).
Там же, под батареей (закреплённой на толстом двухстороннем скотче) разместилась и плата для её зарядки:
Десяток таких плат на базе контроллера заряда TP4056 я тоже как-то покупал на Aliexpress. Выглядят они вот так:
На плате имеются два светодиода. Во время зарядки через обычный MicroUSB кабель горит один из светодиодов - красный. Когда зарядка закончена, загорается второй - синий. Плата размещена в корпусе так, чтобы светодиоды были возле стенки, которую я дополнительно в этом месте с помощью фрезы сделал немного тоньше. И вот так теперь выглядит процесс зарядки велокомпьютера:
В ждущем режиме потребление составляет около 100 мкА. В активном режиме потребление всей системы достаточно большое - порядка 90мА. При этом около 75мА потребляет подсветка дисплея.
Конечно, это очень много, но тут уж ничего не поделаешь. Хотя, учитывая ёмкость батареи ч 1450мА*ч, заряда хватает на неделю при катании по 2 часа каждый день. Вполне нормально. Заряжается батарея где-то часа за три.
Для крепления на руль на обратной стороне корпуса были сделаны своего рода салазки:
Нижний элемент - печатная плата. Корпус "застёгивается" на соответствующем креплении на руле, при этом площадки на печатной плате входят в контакт с подведёнными площадками от датчиков.
В качестве датчиков применены миниатюрные герконы. Модель даже и не помню, должны подходить практически любые варианты.
Один геркон закреплён на вилке переднего колеса, другой - на раме возле педали. Соответственно, на спицах переднего колеса и на одной из педалей закреплены магниты. Один из датчиков (на колесе) служит для расчётов скорости и пути, второй (на педали) - для расчёта ритма (каденса).
При подключении велокомпьютера необходимо всего лишь правильно в настройках указать длину окружности колеса (в миллиметрах). Больше ничего, по большому счёту, ничего настраивать и не нужно.
FUSE-биты для МК для avrdude: -U lfuse:w:0xff:m -U hfuse:w:0xd1:m -U efuse:w:0xFF:m. По большому счёту, важно лишь выставить режим работы с кварцевым резонатором, остальное по вкусу. Ну, разве что EESAVE бит поставить, дабы накопленные в EEPROM данные (тот же общий пройденный путь) не затирались при перепрошивке МК.
При использовании Arduino FUSE-биты можно, собственно, и не трогать, так как там уже всё настроено на 16МГц.
Исходный код проекта можно загрузить с GitHub. Там же можно найти проект для Proteus8 (для сборки под симулятор нужно в Makefile раскомментировать одну строчку, чтобы немного повернуть/отзеркалить изображение на экране).
Собственно, это вся нужная информация. Всё прочее можно будет обсудить в форуме.
Всем удачи в повторении.
Файлы:
Прошивка
Все вопросы в Форум.
Эти статьи вам тоже могут пригодиться:
Автомат управления насосом для системы автополива с накопительной ёмкостью