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

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

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

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


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


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




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

Автомат управления насосом для системы автополива с накопительной ёмкостью

Дельта-Сигма АЦП для МК на примере ATtiny2313

Универсальный AVR-программатор на Arduino.

Удобный программатор для AVR

Первичные Часы

AVR ISP MK2 - Power Mod / доработка программатора

RS-485 ATmega BootLoader

Контроллер стиралки на ATMEGA8

Доработка программатора HVProg.

Шим для начинающих - аппаратный шим, практическое применение на примере Tiny13A

Термоконтроллер "Мурка"

Простые часы на микроконтроллере.

Термостат для теплых полов.

Автомобильные часы.

Часы из амперметров

"Поехали кататься!" или машинка на радиоуправлении

Одноламповые часы

Очень маленькое, но очень полезное устройство.

Часы "GadgetClock" для офисного стола

Минирадио FM

Часы-термометр на микроконтроллере ATmega8. V 2.0

Портативный FM приемник на радиомодуле RDA5807M с RDS

Миниатюрные часы на вакуумно-люминисцентном индикаторе ИВ-21

Часы на вакуумных лампах ИВ-12