Каденс на ардуино, а можно и дешевле…

от автора

Всех неистово приветствую!
Периодически я довольно активно накручиваю педали по местным паркам. И тут до меня снизошло, что, возможно, я не очень правильно их накручиваю. Стал изучать вопрос. Велопедия утверждает, что частота педалирования в среднем должна быть от 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 чтобы это дело питать. Может быть позже…

Ну и на последок…

Вот фото моего коня (2.96Mb!!!):

И маленькое видео…

Ах, да… Финальный скетч… не бейте «программиста» он пишет как может )))

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;   } 

И на последок… Статью перепечатывать нельзя — типа ©. Проект улучшать и перерабатывать можно. Всем плодотворной рабочей недели! А я кататься на велике! :-Р

ссылка на оригинал статьи http://geektimes.ru/post/250894/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *