Всех неистово приветствую!
Периодически я довольно активно накручиваю педали по местным паркам. И тут до меня снизошло, что, возможно, я не очень правильно их накручиваю. Стал изучать вопрос. Велопедия утверждает, что частота педалирования в среднем должна быть от 80 до 110 об/мин. Ок. Значит нужен велокомп с датчиком каденса. Китай брать не хотелось. Нарыл Sigma 16.12 STS + Cadence за 2900руб. Цена не копеечная, а на дворе крЫзис и сам я, так-сказать, безработный B-) Прикинул и решил… По сути роль велокомпа у меня выполняет связка из айфона, программы Циклометр и часов Casio STB-1000 — и эта связка меня вполне устраивает. Да и показания каденса нужны лишь некоторое время. Затем тело привыкает и постоянно его отслеживать смысла нет. Одним словом пришло понимание, что надо собрать временную лабуду
Идея: на руль помещаем два светодиода — зелёный и красный. Зелёный — каденс в норме. Красный, соответственно, нет. Затем пришёл к идее, что красный будет гореть только когда обороты выше нормы. Так и батарейки меньше жрать будет.
Реализация:
— на «перо» геркон из соседнего радио-магазина, на «шатун» неодимовый магнит
— светодиоды запихну в валяющийся китайский габарит
— роль контроллера исполнит Arduino Pro Mini 3.3V 8MHz
Собрал всё это дело на макетке с UNO (легче шить и дебажить). Заместо геркона тактовая кнопка.
И залил скетч с выводом данных в порт.
Тестовый скетч:
int cadInt = 0; // задаём вывод геркона 0=pin2
int ledGreen = 10; // вывод зелёного светодиода
int ledRed = 11; // вывод красного светодиода
int count = 0; // счётчик оборотов
int lastCount; // переменная хранящая последнее значение счётчика оборотов
int count4period; // количество оборотов совершённое за период
// ниже переменные чисто для дебага и доп инфо в сериал порте:
long time; // переменная которой присваивается значение внутреннего счётчика времени
long lastTime; // переменная хранящая последнее значение счётчика времени
int period; // период времени отработки
void setup() {
pinMode (cadInt, INPUT); // пин датчика (геркона) на вход
pinMode (ledGreen, OUTPUT); // пин светодиода на выход
pinMode (ledRed, OUTPUT); // второго тоже
attachInterrupt(cadInt, swap, RISING);
lastTime = millis(); // после дебага удалить или закоментить
Serial.begin(9600); // после дебага удалить или закоментить
}
void swap() {
count = count+1;
}
void loop() {
delay(5000);
count4period = count - lastCount;
time = millis(); // после дебага удалить или закоментить
period = time - lastTime; // после дебага удалить или закоментить
Serial.println(period); // после дебага удалить или закоментить
Serial.println(count4period); // после дебага удалить или закоментить
if (count4period >= 6 && count4period <= 9)
{
Serial.println ("Green"); // после дебага удалить или закоментить
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
} else {
if(count4period > 9){
Serial.println ("Red"); // после дебага удалить или закоментить
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
} else {
Serial.println ("LOW CADENCE"); // после дебага удалить или закоментить
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
}
}
lastTime = time; // после дебага удалить или закоментить
lastCount = count;
}
Всё норм. Всё работает.
Затем всё это пересобрал на макетке и воткнул миньку.
Кстати, вот схема:
Вот только батареек у меня три, ибо двух будет мало, а Фритз три не показывает.
А вот как выглядит китайский велогабарит:
В разборе и процессе перепайки:
Перепаять пришлось только один светик, тк второй прозрачный на самом деле красный.
Вот так он выглядел по окончанию операции:
В процессе продумывания проекта надумалось, что вместо зелёного и красного светодиодов — можно воткнуть два RGB, но в ближайшем электро-шопе таких не оказалось, потому имеем что имеем.
Ну, а геркон я засунул в какую-то полиэтиленовую трубочку и загерметизировал
И так, что по затратам… Потратиться пришлось лишь на геркон (15р.), три элемента питания АА (86р.) и неодимовые магниты (их сцуко дорого купил ибо искать было впадлу, а с Али ждать не готов (160р.)). Остальное всё валялось по коробочкам и ждало применения. Вот даже провод мажорный от сдохшей кулермастеровской мышки применил:
Естчё фото кому мало...
Внимание! Буду рад увидеть буханку с рогами в комментариях ;) Но давайте серьёзно. На самом деле можно было спокойно вместо целой ардуины применить Atmega8L и отказаться от двух резюков на светики, а управлять ими ШИМом. Но, в загашнике у меня только обычная и нет держателя под аккум 18650 чтобы это дело питать. Может быть позже…
… Финальный скетч. (Не бейте «программиста» он пишет как может):
Cadence_1.0
int cadInt = 0; // задаём вывод геркона 0=pin2
int ledGreen = 10; // вывод зелёного светодиода
int ledRed = 11; // вывод красного светодиода
int count = 0; // счётчик оборотов
int lastCount = 0; // переменная хранящая последнее значение счётчика оборотов
int count4period = 0; // количество оборотов совершонное за период
void setup() {
pinMode (cadInt, INPUT); // пин датчика (геркона) на вход
pinMode (ledGreen, OUTPUT); // пин светодиода на выход
pinMode (ledRed, OUTPUT); // второго тоже
attachInterrupt(cadInt, swap, RISING);
}
void swap() {
count = count+1;
}
void loop() {
delay(5000);
count4period = count - lastCount;
if (count4period >= 6 && count4period <= 9) {
digitalWrite(ledGreen, HIGH);
digitalWrite(ledRed, LOW);
} else {
if(count4period > 9){
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, HIGH);
} else {
digitalWrite(ledGreen, LOW);
digitalWrite(ledRed, LOW);
}
}
lastCount = count;
}
Фото на объекте:
… и во весь рост
На закуску видео:
PS Статью перепечатывать без спроса нельзя — типа ©. Проект улучшать и перерабатывать можно. Всем плодотворной рабочей недели! А я — кататься на велике!
PPS Сегодня сделал тестовый заезд. Выводы:
— Всё отлично работает. Сбой был замечен лишь один раз. Видимо, проскочил дребезг.
— Стоит применять RGB светодиоды — на ярком солнце будет наглядней.