РадиоКот :: Простой велокомпьютер с цветным 320x240 LCD
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Измерительная техника >

Теги статьи: Велокомпьютер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 раскомментировать одну строчку, чтобы немного повернуть/отзеркалить изображение на экране).

Собственно, это вся нужная информация. Всё прочее можно будет обсудить в форуме.

Всем удачи в повторении.


Файлы:
Прошивка


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

69 4 1

Эти статьи вам тоже могут пригодиться: