За рулем автомобиля легко контролировать скорость, но как насчет велосипеда? На велосипедах нет приборной панели с датчиками и счетчиками. Вы можете примерно измерить свою скорость только по тому, насколько сильно вы крутите педали и насколько быстро вы едете. Но есть действительно простой способ отслеживать пробег на велосипеде для любителей скорости. Это самодельный спидометр, который можно собрать своими руками.
В рамках данного проекта мы сделаем велосипедный спидометр на основе Arduino, который будет определять скорость велосипеда с помощью геркона. Он работает с помощью герконового реле, отмечающего время, которое потребовалось для одного полного вращения колеса. Затем эту отметку мы используем в формуле окружности, которая возвращает скорость.
Схема подключения компонентов велосипедного спидометра на основе Arduino представлена далее.
Вот так может выглядеть сборка на макетной плате.
Для быстрого ввода в эксплуатацию данного спидометра на основе Arduino можно сделать корпус из коробки и разместить всю конструкцию на руле велосипеда. При этом следует также расположить геркон на раме у колеса, а на спице разместить магнит для замыкания герконового реле.
Код программы спидометра на основе Arduino и геркона представлен далее.
#include <LiquidCrystal.h>
int reedSwitch = 2;
int radius = 12.5;
int circumference;
int totaltime;
int Speed;
int timer;
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void isr()
{
timer++;
delayMicroseconds(9600);
}
void setup(){
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(6, 0);
lcd.print("Speed");
attachInterrupt(digitalPinToInterrupt(2), isr, RISING);
pinMode(reedSwitch, INPUT_PULLUP);
timer = 0;
Speed = 0;
totaltime = 0;
circumference = 6.28 * radius;
}
void loop() {
if (millis() - totaltime >= 1000) {
detachInterrupt(digitalPinToInterrupt(2));
Speed = ((8.181818182*circumference)/(millis() - totaltime)*timer);
timer = 0;
totaltime = millis();
attachInterrupt(digitalPinToInterrupt(2), isr, RISING);
lcd.setCursor(8,1);
lcd.print(Speed);
Serial.print("Speed");
Serial.print(Speed);
}
}
© digitrode.ru