Всех неистово приветствую!
Периодически я довольно активно накручиваю педали по местным паркам. И тут до меня снизошло, что, возможно, я не очень правильно их накручиваю. Стал изучать вопрос. Велопедия утверждает, что частота педалирования в среднем должна быть от 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р.)). Остальное всё валялось по коробочкам и ждало применения. Вот даже провод мажорный от сдохшей кулермастеровской мышки применил:
![](https://habrastorage.org/files/6b7/0fb/ab4/6b70fbab424c4523812b9d21af63709e.jpg)
![](https://habrastorage.org/files/b47/eb1/e95/b47eb1e951044bd6ab32bacc1d1f1718.jpg)
![](https://habrastorage.org/files/801/d16/9aa/801d169aae504c19a5e6bfc5740d43b4.jpg)
![](https://habrastorage.org/files/798/f39/493/798f3949321f41148ac529377e50ebca.jpg)
![](https://habrastorage.org/files/7ea/6d7/977/7ea6d797726d468aa89e3a736bece59d.jpg)
Внимание! Буду рад увидеть буханку с рогами в комментариях 😉 Но давайте серьёзно. На самом деле можно было спокойно вместо целой ардуины применить Atmega8L и отказаться от двух резюков на светики, а управлять ими ШИМом. Но, в загашнике у меня только обычная и нет держателя под аккум 18650 чтобы это дело питать. Может быть позже…
Ну и на последок…
![](https://habrastorage.org/files/63d/099/0fc/63d0990fcbdf4507a48984b9b62866bc.jpg)
И маленькое видео…
Ах, да… Финальный скетч… не бейте «программиста» он пишет как может )))
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; }
И на последок… Статью перепечатывать нельзя — типа ©. Проект улучшать и перерабатывать можно. Всем плодотворной рабочей недели! А я кататься на велике! :-Р
ссылка на оригинал статьи http://geektimes.ru/post/250894/
Добавить комментарий