Спидометр для велосипеда на Arduino

Содержание

Хотите отследить скорость на велосипедной прогулке? Тогда эта инструкция для вас!

В проекте используется магнитный выключатель (геркон) для измерения скорости вращения колеса велосипеда. Arduino, в свою очередь, рассчитывает скорость перемещения в милях/час и передает эту информацию на LCD дисплей. Установить данную систему вы можете на любой велосипед/колесо. Для этого достаточно указать радиус колеса для правильного расчета.

Необходимые элементы

  • 1 плата Arduino
  • 1 геркон
  • 1 резистор на 10 кОм, 1/4 ватта
  • 1 Батарея на 9 вольт
  • 1 Провод
  • 1 Макетная плата для распайки
  • 1 LCD дисплей
  • 2 Переключателя
  • Дополнительные материалы:
  • Фанера, винты и т.п.
  • Программа для Arduino Arduino IDE

Электросхема

Электросхема проекта приведена ниже.

Она состоит из трех переключателей:

1. Один подключен к питанию 9 вольт

2. Второй переключатель — к LCD экрану для его включения/выключения

3. Магнитный выключателя (геркон), который замыкает цепь каждый раз, когда колесо совершает полный оборот.

LCD монитор Parallax, который используется в проекте, подключается к Arduino по трем пинам. Один идет к 5 В, один к земле, третий — к серийному выходу (TX) на плате Arduino на цифровом пине 1.

Резисторы на 10 кОм подключены к переключателям и подсветке монитора, чтобы избежать превышения допустимой силы тока между 5 В и землей (ни в коем случае не подключайте 5 В и землю напрямую к Arduino).

Распайка шилда спидометра

Распайка шилда спидометра

Установите три ряда коннекторов на макетной плате таким образом, чтобы они сели на плату, как это показано ниже.

Электроника 1 Электроника 2

Геркон

Геркон состоит из двух частей, выключателя и магнита. С самого выключателя (собственно, там и расположен геркон), выходит два провода. В момент, когда магнит располагается неподалеку, небольшой механический элемента внутри геркона перемещается и замыкает цепь.

Установите токоограничивающий резистор на 10 кОм между пином A0 и землей на вашей макетной плате. Концы провода подключите к пину A0 и 5V. Этот провод вы протянете в дальнейшем вдоль всего велосипеда к переключателям.

Геркон 1 Геркон 2
Геркон 3 Геркон 4
Геркон 5 Геркон 6
Геркон 7 Геркон 8

Установка геркона на велосипед

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

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

1023, в ином случае будет отображаться 0. Откройте серийный монитор (Tools — Serial Monitor) в оболочке Arduino IDE и запустите проверку. Если магнит не генерирует сигнал на герконе, измените его положение или используете более сильный магнит.

//arduino спидометр для велосипеда

#define reed A0//пин, который подключен к геркону

//переменная для хранения данных

reedVal = analogRead(reed);//получаем значение с A0

Установка геркона на велосипед 1 Установка геркона на велосипед 2
Установка геркона на велосипед 3 Установка геркона на велосипед 4

Проверка работоспособности

Загрузите код, приведенный ниже на плату Arduino. Активируйте серийный монитор. У вас должно отбражаться число 0.00. Начните крутить колесо велосипеда. Каждую секунду долгы отображаться данные текущей скорости в милях/час.

// максимальная скорость 35 миль/час =

// максимальная угловая скорость =

#define reed A0// пин, который подключен к геркону

long timer;// время между одним полным оборотом (в мс)

float radius = 13.5;// радиус колеса (в дюймах)

int maxReedCounter = 100;// минимальное время (в мс) одного оборота

// НАСТРОЙКА ТАЙМЕРА — таймер позволяет точно отслеживать время между сигналами геркона

cli();// остановка прерываний

// устанавливаем прерывания timer1 с частотой 1кГц

TCCR1A = 0;// устанавливаем внутренний TCCR1A регистр на 0

TCCR1B = 0;// то же самое для TCCR1B

// устанавливаем инкремент счетчика времени на 1 кГц

OCR1A = 1999;// = (1/1000) / ((1/(16*10^6))*8) — 1

// активируем режим CTC

reedCounter -= 1;// декремент reedCounter

reedCounter -= 1;// декремент reedCounter

mph = 0;// если новые с геркона не поступают новые импульсы, значит колесо не вращется, значит скорость равна 0 м/час

timer += 1;// инкремент таймера

// отображаем мили в час раз в секунду

Проверка работоспособности

LCD дисплей

Для установки дисплея вам понадобится дополнительный шилд. Припаяйте рельсу с контактами мама на выходе на protoshield. Три контакта будут использлваться для для подключения жидкокристаллического дисплея. LCD экран должен плотно установиться на рельсах.

LCD дисплей 1 LCD дисплей 2
LCD дисплей 3 LCD дисплей 4
LCD дисплей 5

Установка LCD

Подключите Arduino 5V, Ground, и TX (Arduino цифровой пин 1) к LCD сокету. Не забудьте проверить правильность установки экрана на основании меток на плате дисплея.

На задней части экрана Parallax LCD есть два переключателя и потенциометр. Потенциометр используется для ручной регулировки контраста дисплея. Переключатели надо установить в положения, которые приведены на фото ниже.

Установка LCD 1 Установка LCD 2
LCD дисплей 3

Проверка LCD для спидометра

Проверьте код, который приведен ниже. Лично у меня при первом запуске на экране появились совершенно невразумительные, хаотичные символы. Пришлось снять монитор, перезалить скетч и установить экран заново. Со второго раза все заработало. Возможно, проблема была в некорректной прошивке Arduino.

На LCD экране должна отобразиться надпись "Hello World".

//Проверка Parallax 2×16 lcd

//Результат выполнения данного скетча — надпись "Hello World" на вашем LCD экране. Свитч подсветки должен быть подключен к цифровому пину 2

//Serial.write(13);// новая строка

Проверка LCD для спидометра

Тумблер подсветки спидометра

Подключите тумблер как это показано на рисунке ниже. Не забудьте соединить резистор на 10 кОм с черным и зеленым проводами. Потом эти провода подключаются к одному из контактов переключателя. Ко второму контакту подключаем красный провод.

Красный провод подключаем к Arduino 5V, вторую сторону резистора к земле, зеленый провод — к D2.

Тумблер подсветки спидометра 1 Тумблер подсветки спидометра 2
Тумблер подсветки спидометра 3

Окончательная программа для спидометра

Загрузите приведенный код на Arduino. Проверьте работу переключателя подсветки и насколько корректно отображается скорость.

Уточните радиус вашего коле в дюймах и вставьте это значение в строку: float radius = »»’;

В этой части кода я использовал прерывания, чтобы переменная "timer" увеличивала свое значение с частотой 1 кГц.

//Спидометр для велосипеда с использованием геркона

//скорость велосипеда отображается на LCD экране

//максимальная скорость 35 миль/час =

//максимальная угловая скорость =

#define reed A0// пин, к которому подключен геркон

float radius = 13.5;// радиус колеса (в дюймах)- измените это для своем велосипеде

long timer = 0;// время одного полного оборота (в милисекундах)

int maxReedCounter = 100;// минимальное время (в милисекундах) одного оборота

pinMode(2,OUTPUT);// свич подсветки

cli();// остановка прерываний

// устанавливаем прерывание timer1 на частоте 1 кГц

TCCR1A = 0;// устанавливаем внутренний регистр TCCR1A в 0

TCCR1B = 0;// то же самое для TCCR1B

// устанавливаем инкремент для счетчика 1 кГц

OCR1A = 1999;// = (1/1000) / ((1/(16*10^6))*8) — 1

// активируем режим CTC

reedCounter -= 1;// декремент reedCounter

reedCounter -= 1;// декремент reedCounter

mph = 0;// если не поступают импульсы от геркона, значит скорость равна 0

timer += 1;// инкремент таймера

// отображаем mph раз в секунду

Питание

Подключите последовательно коннектор для батареи и переключать как это показано на первом рисунке ниже. Красный провод от переключателя подключите к контакту Vin на Arduino, а черный контакт от коннектора для батареи — к земле на Arduino.

Питание спидометра 1 Питание спидометра 2

Корпус для спидометра на Arduino

Бокс для спидометра был вырезан из фанеры толщиной 1/4". Использовалась лазерная резка мощностью 120 Ватт. Размеры бокса — 3.5"x4"x2". Бокс был спроектирован в AutoCAD. Для генерации файлов для лазерной резки использовался софт Autodesk 123D Make. Потом были добавлены два отверстия для переключателей и прямоугольное отверстие для LCD экрана. Кроме того, были добавлены отверстия на нижней части бокса, чтобы проще осуществить крепеж к велосипеду.

Стенки бокса крепятся между собой на клей. Углы надо зачистить наждачкой. Можно использовать какое-то покрытие для фанеры, чтобы придать боксу надлежащий вид и защитить от влаги.

Скачать необходимые детали для бокса можно по ссылкам ниже:

Корпус для спидометра 1 Корпус для спидометра 2
Корпус для спидометра 3 Корпус для спидометра 4

Установка Arduino и обвязки в бокс

Переключатели фиксируются в корпусе с помощью гаек. LCD экран садится на клей или с фиксируется с помощью винтов на передней панели бокса. Arduino и Protoboard устанавливаются рядом с бетарейкой. Опять-таки, можно использовать клей для фиксации или предусмотреть крепеж на винтах.

Установка Arduino в корпус 1 Установка Arduino в корпус 2
Установка Arduino в корпус 3

Устанавливаем спидометр на велосипед

Бокс со спидометром на Arduino устанавливаем на руль велосипеда. Можно использовать пластиковые стяжки и sugru для фиксации. Провода, которые идут от платы к геркону надо пустить таким образом, чтобы они не мешали вам при поездке и при этом была возможность поворачивать руль.

Спидометр на велосипеде 1 Спидометр на велосипеде 2
Спидометр на велосипеде 3 Спидометр на велосипеде 4

Велосипед со спидометром на дороге!

Не забывайте про правила поведения велосипедистов на дороге! Несмотря на ваш прекрасный Arduino спидометр, следите за транспортом и людьми!

Велосипед со спидометром на Arduino

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!


Источник: arduino-diy.com