Приветствую Вас, Гость! Регистрация

Персональный сайт Пьяных А.В.

Четверг, 25.04.2024


Главная » Статьи » Электроника » Arduino и т.п.

Продвинутый велокомпьютер. Часть 1. Описание

   Я частенько вкручиваю педали на своем железном коне и пользуюсь обычным, дешевым китайским велокомпьютером за 150 рублей. Основной его задачей был подсчет пройденного расстояния, скорости и времени в пути.  
 

  Позже арсенал "приборов учета" пополнила программа Endomondo для мобильного телефона. Она умеет записывать трек маршрута (при включенном модуле GPS), выводит диаграммы скорости, рекордное время на дистанциях. Я радовался, когда удавалось побить собственные рекорды. По приезду домой и выползанию из ванной включал на мобилке инет и данные тренировки автоматически загружались на сервер программы. Потом можно было попивая чаёк посмотреть где и как я ехал, похвастаться перед женой очередным рекордом времени на стокилометровой покатушке, самым быстрым километром и так далее. Для дальнейшего развития физической формы нужны были данные каденса (скорости вращения педалей). Также знать каденс необходимо из "медицинских" соображений. При длительной езде с небольшим каденсом и большой нагрузкой можно безвозвратно загубить коленные суставы. Существуют велокомпьютеры с функцией измерения каденса, но они значительно дороже и функционал в них также ограничен. Мне хотелось сделать все по моим требованиям. 

   В начале 2015 года я увлекся Arduino и после того как намигался светодиодами, попищал пищалочками, попробовал работу с разными модулями, я захотел чего-то большего. Здесь меня и посетила мысль сделать собственный велокомпьютер на базе Arduino. В начале для уменьшения размера я выбрал контроллер Arduino nano с 32Кб флеш памяти, 2Кб ОЗУ, 1Кб энергонезависимой памятью EEPROM, тактовой частотой 16МГц. К нему были подключены две кнопки. Одна из них имитировала датчик оборота колеса для подсчета скорости и расстояния, а другая - датчик оборота педалей для подсчета каденса. Позже их планировалось заменить стандартными герконовыми датчиками от китайских велокомпьютеров. Информация выводилась на OLED дисплей диагональю 0,96 дюйма. Для полного исключения дребезга контактов кнопок я использовал сборку из 6 независимых инвертирующих триггеров Шмитта в одном корпусе (микросхема 74HC14N). Потом были подключены часы реального времени. Я написал программу, которая считывала данные и выводила скорость, каденс, пройденное расстояние за текущее включение компьютера, суммарный пробег, дату и время. Потом был подключен модуль MP3 с micro SD флешкой, на которой были записаны голосовые сообщения, проигрываемые при определенных событиях. Модуль с управлением через последовательную шину. В настройках можно регулировать громкость проигрывания сообщений. 

   Для правильного подсчета пройденного расстояния компьютер должен знать периметр колеса. Так как у меня несколько видов покрышек для разных дорог, то необходимо менять данные о периметре колеса. Для редактирования настроек были добавлены кнопки Меню, Больше, Меньше и Ввод. Для упрощения ввода параметров и чтения технической информации во время отладки программы и тестовых заездов к контроллеру был подключен bluetooth модуль. Через bluetooth терминал на мобильном телефоне я мог оперативно изменить параметры.  Он также работает через последовательную шину. Память под программу уже заканчивалась. Arduino nano пришлось заменить на контроллер Mega2560, у данного контроллера 4 последовательных порта, больше портов ввода-вывода и больше памяти для программы и хранения переменных (256Кб флеш памяти, 8Кб ОЗУ, 4Кб памяти EEPROM). Здесь уже есть где развернуться.

Свет  

   Для движения в темное время суток на велосипеде была установлена велофара. У нее имелось 4 режима работы: максимальный, нормальный, стробоскоп и режим SOS. При движении на большой скорости по трассе максимальный режим был в самый раз. Иногда встречка, не догадываясь, что я велосипедист, моргала мне, чтобы я переключился на ближний:) Тогда я или переключался на нормальный режим, или опускал фару вниз, чтобы не слепить водителей. В городе даже нормальный режим вызывал панику у пешеходов, да и яркость при неспешной прогулке была излишней. Я решил возложить управление яркостью фары на микроконтроллер, сделав ШИМ регулирование. Для выяснения напряжения и тока работы светодиодов я разобрал фару и подключил приборы для измерения. Выяснил, что в максимальном режиме на светодиодную сборку подавалось около 8Вт мощности (0,58А при 14В), а в нормальном режиме всего 4Вт (0,3А при 13,3В). При попытке узнать паспортные данные на светодиоды я был очень удивлен. В фонаре были установлены ВНИМАНИЕ! 5 светодиодов CREE XM-L T6 по 10Вт каждый. Я не верил глазам. Ставить в фонарь 50Вт светодиодную сборку и подавать на нее 8Вт?!? Я догадывался, что светодиоды работают не на полную мощность для уменьшения тепловыделения, но то, что они работают всего на 8-16% мощности, вызвало у меня удивление. Тут же зачесались руки выжать больше, намного больше люменов. При подаче 12-15Вт фонарь ощутимо нагревался уже через 2-3 минуты. Отрезав часть корпуса фонаря, я прикрутил сборку к довольно массивному радиатору от CPU. При подаче паспортных 50Вт даже этот радиатор нагревался. Опытным путем я установил, что после превышения порога в 30 Вт визуально яркость не сильно меняется, а потребляемый ток и нагрев сильно возрастают. Чтобы не возить с собой автомобильный аккумулятор:), порог мощности я выбрал в 30Вт. К микроконтроллеру был подключен переменный резистор, которым можно было плавно менять яркость фары. Также при включении переднего света сзади велосипеда должен загораться красный габарит, чтобы обозначить мое присутствие на дороге. Все это было реализовано на микроконтроллере. Были случаи, когда я оставался в темное время суток без переднего света в 10-15 км от дома. В городе это не проблема, а вот на трассе это очень опасно. Для примерного расчета времени работы батареи аккумуляторов к МК был подключен датчик тока на микросхеме ACS712. На двух резисторах собран делитель напряжения для измерения напряжения на батарее. При снижении напряжения ниже порогового уровня яркость фонаря программно уменьшается. Затем я добавил еще две кнопки управления сигналами поворота, которые будут установлены спереди на руле и сзади на подседельном штыре или на багажнике. Для питания я планирую использовать батарею из 5 последовательно включенных Li-Ion аккумуляторов емкостью 3,4А. 

   Кроме времени тренировки подсчитывается время, в течении которого велосипед находится в движении, и время вращения педалей. Если за 120 минут катания время движения составило 100 минут, значит я 20 минут стоял на месте. Время вращения педалей 90 минут будет означать, что я в сумме 10 минут двигался накатом по инерции.

Время движения и вращения педалей

Ведение записи данных

   Для подробного лога тренировки требуется довольно много памяти, поэтому был добавлен модуль с SD картой. При каждом включении компьютера создается новый файл. В него записываются все события, будь то нажатие кнопки, сигналы с датчиков. При работе МК в нем работает счетчик отработанных миллисекунд. Переполнение и сброс счетчика происходит примерно через 50 дней после включения компьютера. Это намного больше, чем может длиться одна поездка. Запись в файл ведется построчно в формате X Y Z. X - название события описанное одной буквой (например, С - событие каденса, S - нажатие на тормоз, L - включение фары и т.д.).  Y - значение события (для оборота колеса - это скорость, для оборота педалей - каденс).  Z - время события в миллисекундах, отсчитанных от включения компьютера. Дата и время включения пишутся первой строкой во вновь созданном файле тренировки после включения компьютера. Таким образом есть точка отсчета всех событий во времени. Для чтения файл выглядит не удобно, и он получается довольно объемный. Позже я планирую написать программу, которая должна обрабатывать и анализировать эти данные. 

  Каденс от 51 оборота в минуту до 140 я разбил на 16 диапазонов. Компьютер подсчитывает и выводит в виде диаграммы распределение каденса по зонам. Таким образом можно определить, в каких зонах была совершена основная работа. 

Распределение каденса по зонам

Стоп сигнал и дальномер

   При торможении загорается стоп сигнал и на экран выводится расстояние до объектов сзади, получаемое от ультразвукового дальномера. Задумка была такой. При движении по дорогам на большие расстояния с сокатальцами существует техника "сидения на колесе". Первый велосипедист как бы разрезает воздух и те, кто едет за ним, испытывают меньшее сопротивление воздуха. Чем меньше расстояние между велосипедами, тем меньше сопротивление и тем больше экономия сил. Есть информация, что экономия может достигать 20-30%. На больших расстояниях это очень много. При некотором опыте расстояние между колесами двух велосипедистов может составлять 5-15 см. При таком маленьком расстоянии даже незначительное замедление может привести к столкновению с неприятными последствиями и следами асфальтной болезни на лице:( Оборачиваться и смотреть назад для контроля расстояния между велосипедами не очень удобно, а порой и опасно. Поэтому при легком нажатии на рычаг тормоза (колодки еще не касаются тормозных дисков) включается ультразвуковой дальномер и на экран для оценки выводится расстояние до едущего сзади. При слишком маленьком расстоянии раздается предупреждающий звуковой сигнал. При большом расстоянии можно тормозить с большей силой, при маленьком можно сообщить о своем маневре и избежать аварийной ситуации. Неудобство использования ультразвукового датчика состоит в том, что он при попадании на него грязи выйдет из строя. Закрыть его тоже не получится. Поэтому датчик сейчас не подключен. Вместо него буду ставить оптический датчик. Его можно будет закрыть прозрачным стеклом и при загрязнении нужно будет всего лишь протереть.

   Для регистрации погодных условий есть датчик температуры и давления BMP180. Теоретически его можно приспособить для определения высоты. Точности измерения давления достаточно, что бы определить изменение высоты в 25 см (разрешение датчика 0,03 гектопаскаля). При усреднении нескольких измерений точность и стабильность показаний можно увеличить. Остается вопрос о калибровке, так как давление воздуха постоянно меняется. Плюс к этой погрешности добавляется влияние движения.

Температура и давление воздуха

   Когда выводимых данных стало слишком много, была попытка подключить цветной LCD дисплей 2,2 дюйма диагональю и разрешением 240х320 точек. Попытку считаю неудачной, так как для обновления информации на экране уходило слишком много времени. Если показания скорости еще можно было обновлять раз в 2-3 секунды, то при изменении параметров (увеличении или уменьшении значения) пользоваться компьютером становилось просто невозможно. Если бы я использовал Maple mini с 32 разрядным процессором ARM Cortex-M3 с тактовой частотой 72 МГц против 16 у Mega2560, то с выводом на экран проблем бы не было, но тогда я еще не был знаком с кортексами. Решил проблему подключением второго OLED экрана. Оба работают по шине I2C, поэтому проводов не прибавилось. Информация отображается своевременно и корректно (при частоте обновления на экранах 3 раза в секунду).

Датчик частоты сердечных сокращений

   Для оценки интенсивности тренировки необходимо следить за частотой сердечных сокращений. Предусмотрен вход для подключения датчика сердцебиения. В компьютере есть уставки для разных пульсовых зон. На экране можно наблюдать ЧСС и пульсовую зону, в которой он находится. Датчик сердцебиения я опишу в отдельной статье. ЧСС измеряется методом фотоплетизмографии. Вкратце суть метода состоит в измерении изменения светоотражения/поглощения капилярами кожи излучения инфракрасного диапазона при прохождении пульсовой волны.  В полевых условиях я его не проверял. Собранный на макетной плате он работает хорошо.

Пульс и зоны пульса

А теперь подведем итоги первой части описания. Сформулируем список функций велокомпьютера.

      Измерение, подсчет и вывод:

  • скорости движения
  • средней скорости
  • максимальной скорости
  • отношение текущей скорости к средней
  • пройденного расстояния за тренировку
  • пройденного расстояния за все время
  • времени тренировки
  • времени движения
  • времени вращения педалей
  • среднего каденса
  • распределения каденса по зонам
  • пульса
  • пульсовой зоны
  • расстояния до объектов сзади при торможении
  • температуры окружающей среды
  • атмосферного давления

         Логирование на карту памяти всех событий;

Управление:​

  • велофарой с плавной регулировкой яркости
  • сигналами поворота

  Более подробно о "железе" читайте в следующей статье.

Категория: Arduino и т.п. | Добавил: Zlitos (30.11.2015) | Автор: Пьяных А.В.
Просмотров: 13679 | Комментарии: 2 | Теги: электроника, микроконтроллеры, Велокомпьютер, Ардуино, велосипед | Рейтинг: 5.0/3
Всего комментариев: 1
1 zoloto58  
0

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]