Самодельный велоспидометр на ARDUINO UNO (ATMEGA328)


Здесь описывается цифровой прибор на микроконтроллере, измеряющий скорость движения велосипеда. Индикатором служит ЖК-дисплей типа 1602А, он стандартный, на основе контроллера HD44780.

Обозначение 1602А фактически значит, что он на две строки по 16 символов в строке. Используется только одна его верхняя строка.

Принципиальная схема

В основе схемы прибора лежит готовая плата ARDUINO UNO, на которой расположен микроконтроллер ATMEGA328, а так же вся его «обвязка», необходимая для его работы, включая USB-программатор и источник питания. Скорость велосипеда измеряется по периоду вращения его колеса. Затем из периода вычисляется скорость.

Для этого на колесо установлен датчик скорости, сделанный из «извещателя положения двери», предназначенного для охранных систем.

Этот «извещатель» состоит из двух частей, - в одной геркон, в другой магнит. Часть с герконом нужно расположить на вилке колеса, а часть с магнитом на двух спицах колеса, так чтобы при вращении колеса часть с магнитом проходила мимо рабочей поверхности части с герконом таким образом, чтобы геркон каждый раз при этом замыкал контакты.

Схема самодельного велоспидометра на ARDUINO UNO, микроконтроллер ATMEGA328

Рис. 1. Схема самодельного велоспидометра на ARDUINO UNO, микроконтроллер ATMEGA328.

Этот датчик расположен как можно ближе к оси колеса, потому что там он менее подвержен грязи и влаге и линейная скорость движения ниже.

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

Понимаю, что не лучший вариант, и возможно потом переделаю как-то более капитально. Схема показана на рисунке 1. Датчик скорости - это SD1.

Он подключен к порту D8 через цепь R1-C3-R2 служащей для подавления дребезга его контактов. Программа на C++ с подробными комментариями приведена в таблице 1.

Программа

Таблица 1.

Программа для микроконтролера к самодельному велоспидометру

/*

велоспидометр

*/

#include

LiquidCrystal led(2, 3, 4, 5, 6, 7); // порты ДЛЯ дисплея

int Htime1; // длительность положительного полупериода датчика скорости

int Ltime1; // длительность отрицательного полупериода датчика скорости

float Ttime1; // период датчика скорости

float frequency1; //скорость движения

void setup ()

}

pinMode (8, INPUT); // вход измерения скорости это порт 8

led.begin(16,2); // дисплей 16 символов 2 строки

}

void loop() {

Htime1 = pulseln(8, HIGH); // измерение полож полупериода датчика скорости

Ltime1 = pulsein(8, low) ; // измерение отриц полупериода датчика скорости

Ttime1 = Htime1 + Ltime1; // вычисление периода датчика скорости

frequency1 = 5760000 / Ttime1; // вычисление скорости движения

led.clear(); // очистка памяти дисплея

led.setCursor(0,0); // установка курсора дисплея на верхнюю строку

led.print(frequency1 ,0); // печать целого значения скорости движения

lcd.print("km/h"); // печать единицы измерения скорости движения

delay(500); // период обновления 0,5 секунды

}

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

Для работы используется функция pulsein , которая измеряет в микросекундах длительность положительного либо отрицательного перепада входного импульса. Так что, для того чтобы узнать период нужно сложить длительность положительного и отрицательного полупериодов.

Поскольку датчик дает один импульс на один оборот колеса нужно узнать длину окружности колеса, то есть, сколько метров колесо проходит за один оборот. Размер колеса был 20 дюймов.

Это диаметр 51 см, далее по известной со школы формуле находим длину окружности. Получается 1,6 метра. Впрочем, длину окружности можно и просто измерить рулеткой.

Теперь нужно узнать сколько оборотов колеса будет на один километр, для чего 1000 / 1,6 = 625. Таким образом, датчик дает 625 импульсов на один километр.

Теперь нужно найти число, которое нужно разделить на период, чтобы получить значение скорости в привычных километрах в час. Обозначим это число X, а количество импульсов на километр N. Тогда X можно рассчитать по такой формуле:

X = 3600000000/N

В данном случае:

X = 3600000000 / 625 = 5760000

В результате получаем формулу, необходимую для перехода от значения периода к скорости в километрах в час:

F = 5760000 / Т

Затем, результат выводится на первую строку ЖК-дисплея. Единицы измерения указаны как «km/h». Если входного сигнала нет, например, велосипед стоит, то на дисплее будет надпись «inf».

Налаживание

В принципе, налаживания не требуется. Если конечно не считать налаживанием расчет значения «X» для конкретного размера колеса велосипеда. Если прибор дает сбои, может потребоваться подбор параметров R1, R2, C3 или оптимизация конструкции датчика.

Каравкин В. РК-02-2019.


1 657 На микроконтроллерах
arduino avr микроконтроллер микроконтроллер спидометр
Оставить комментарий:

cashback