Всех неистово приветствую!

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

Комментарии (73)


  1. Lerg
    25.05.2015 02:05
    +2

    Самое важное-то не сказали — в результате его работы вы стали крутить педали правильнее? Заметили ли улучшение?


    1. makaroff Автор
      25.05.2015 10:43

      На этот вопрос я смогу ответить лишь через месяц-два…


      1. makaroff Автор
        25.05.2015 19:42

        Как оказалось моя частота педалирования как раз находиться в зелёной зоне (катался до этого подсчитывая обороты в голове). Однако периодически забываешься и каденс падает. Индикатор напоминает и заставляет набрать темп.


  1. eta4ever
    25.05.2015 02:18

    По-моему, ATTiny13 хватит «за глаза». В мелком (SOIC) корпусе, чтобы конструкция была минимальных габаритов.


    1. makaroff Автор
      25.05.2015 10:21

      Посмотрел одним глазом дата шит «тринадцатой». Внешние прерывания вроде как обрабатывает, но вот мой код тупо из IDE Arduino в тиньку не зальёшь — памяти маловато. А на Си я не умею.
      ЗЫ А вот в 2313 — влезет! )


      1. eta4ever
        25.05.2015 12:12

        Если прямо так хочется ардуину, то можно ATTiny45 habrahabr.ru/post/245429
        Ну а вообще, на C не сложнее, чем на ардуине.


        1. makaroff Автор
          25.05.2015 12:40

          Ага, спасибо за ссылку. Если будет лишнее время, может и пересоберу.


  1. ivlis
    25.05.2015 02:28
    +1

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


    1. makaroff Автор
      25.05.2015 10:28

      Думал об этом. Но пришёл к выводу, что мне этого не нужно. По не горящему зелёному я и так пойму, что частота недостаточна. При этом я же не спортсмен и достаточно часто есть участки где особо не попедалируешь и вот на них красный свет будет:
      а) раздражать
      б) вызывать привыкание.


      1. Gumanoid
        25.05.2015 18:21

        Но в том и суть, что на таких участках тоже надо крутить с каденсом 80-110, но на меньших передачах. Не-спортсмены чаще вредят своим коленям заниженным каденсом, а не завышенным.


        1. makaroff Автор
          25.05.2015 19:35

          Сегодня сделал тестовый заезд. Никаких проблем. Кинул взгляд на педометр каденсометр, нет сигналов — поддал жару или скинул передачу.


  1. nomadmoon
    25.05.2015 05:30
    +1

    Вот объясните мне одну вещь:
    от 80 до 110 об/мин

    это значит что пока я скажу «раз» я уже должен полтора-два раза прокрутить педали. Но по факту я почти никогда не видел настолько бешено вкручивающих лисапедистов. Они что, все ездят неправильно?


    1. Zeratul
      25.05.2015 07:30
      +1

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

      Еще за каденсом следят бегуны, у них считается оптимальным каденс — около 90 (число для одной ноги) и 180 (для двух) касаний в минуту.


    1. Emili013
      25.05.2015 08:32

      Речь про спортсменов и увлеченных любителей (т.е. тех, кто ездит много и далеко). Если человек катает пару раз в месяц в прогулочном темпе на 10-20-30 км, то заморачиваться с каденсом ему наверное нет смысла. А вот если вы проезжаете по 100+ км за день, то стоит начать думать о своем здоровье. А это и техника кручения, и правильная вода/еда, одежда и т.п.


    1. Emili013
      25.05.2015 08:37
      +1

      Кстати, 80-100 — это еще совсем не бешено (так можно вполне спокойно крутить даже без контактов), бешено это вот так — www.youtube.com/watch?v=h5a3C2MC87g


    1. MaksVasilev
      25.05.2015 10:35
      +4

      80-90 — это не бешено, это как раз комфортный каденс, независимо от того, как вы ездите. 90-110 — это хороший каденс, который будет комфортным для большинства, кто регулярно активно катается, неважно как и где.

      Различные сити-байки, круизёры и прочие чисто прогулочные велосипеды, накладывают некоторую специфику на саму манеру передвижения и на усилия прилагаемые для этого. Плавно, меланхолично и вальяжно ползая по парку на круизёре вы не стараетесь прилагать усилия и напрягаться, даже в малейшей степени и скорость пешехода обычно вас устраивает, как и то, что вся ваша прогулка обычно не занимает больше, чем пару десятков минут, по этому вопрос каденса тут не стоит вообще.

      Если вы двигаетесь, чуть более активно, чем полусонно по парку или тротуарам, то имеет смысл контролировать свой каденс. Самое главное, что надо контролировать — это низкий каденс. Если вы ездите на работу не спеша или прогуливаетесь вечером на велосипеде для поднятия тонуса, то старайтесь всё равно держать каденс не ниже 80. Поверьте — это не много и это совершенно не сложно. Почему низкий каденс плохо — написано очень много всего и можно лишь вкратце перечислить: разрушение суставов коленей, разрушение мелкой кровеносной капиллярности в мышцах, гипертрофия и деградация венозной структуры, деградация энерго-транспортной системы мышц.

      Почему новичку не стоит обращать внимание на высокий каденс? Очень просто — поддержание высокого каденса для новичка требует работы над координацией. Как это ни странно для некоторых звучит, но техника езды на велосипеде гораздо сложнее, чем кажется на первый взгляд. Поддерживая высокий каденс (выше комфортного, а не запредельный) вы работаете над координацией движения ног и одновременно тренируете сердечно-сосудистую систему, поскольку повышая саму скорость движения ног, вы повышаете пульс, даже если работа происходит частично в холостую. Но постепенно увеличивается капиллярность в мышцах и повышается эффективный объём сердца и сглаживается координация и комфортным становится более высокий каденс, чем раньше.

      Не вдаваясь в физиологические выкладки, оптимальный каденс это компромисс между силой и сердцем:

      1) низкий каденс аналогичен приседаниям со штангой, т.е. высокая нагрузка на мышцы и суставы, очень быстрое накопление молочной кислоты, но относительно невысокая нагрузка на сердечно-сосудистую систему. Никто не приседает со штангой по 30-40 минут непрерывно, а вот на велосипеде многие новички ездят в таком режиме.

      2) высокий каденс — бОльшая нагрузка на сердечно-сосудистую систему (не только сердце, а на всю инфраструктуру, включая мелкие каппиляры), требует лучшей и более правильной координации, но существенно снижается разрушающая нагрузка на суставы и мышцы работают в режиме хорошего снабжения кровью и не забиваются продуктами распада топлива.


      1. Magister7
        27.05.2015 01:25

        Спасибо за подробный ответ. Понял, что надо заниматься собой… я постоянно с низким катаюсь, и привык уже давно так. Впрочем, езжу немного, но тем не менее…
        При поднятии начинаю уставать намного быстрее, хотя теоретически энергии не должно тратиться сильно больше. Или должно?


        1. makaroff Автор
          27.05.2015 08:46
          +1

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


        1. MaksVasilev
          27.05.2015 09:46
          +1

          Энергия тратится по разному, когда вы крутите педали медленно на низком каденсе, вы тратите больше сил на продавливание педали. Когда вы вращаете быстро педали на высоком каденсе, вы тратите меньше сил на саму педаль, но увеличиваются «накладные расходы» на то, что бы быстро передвигать сами ноги в воздухе. Если у вас совершенно не тренированная сердечно-сосудистая система, то эти накладные расходы будут больше и тогда да, при более высоком каденсе энергии в целом будет тратится больше, но при этом существенно снижаются риски травматизма. Но поддерживая постоянно каденс чуть-чуть выше, вы тренируете сердечно-сосудистую систему и очень быстро вы начнёте уставать гораздо меньше вообще и на высоком каденсе в частности.


          1. Magister7
            28.05.2015 13:04

            Спасибо за ответ, буду тренироваться.
            В принципе в любом случае при высоком каденсе энергии уйдет больше — элементарно надо больше раз поднимать ноги вверх, вот тут и будет проигрыш. Но зато меньше нагрузка на колени плюс тренировка сердечно-сосудистой системы. Это аргумент серьезнее:)


    1. m0Ray
      25.05.2015 20:50

      Это не бешено, это вполне себе «рабочий» ритм по более-менее ровной дороге. Я когда в сельпо езжу, даже на грунтовке примерно такой каденс и имею.


    1. makaroff Автор
      26.05.2015 10:54


  1. Alexeyslav
    25.05.2015 09:43

    Классика… 3000 это дорого но зато айфон и Casio…


    1. makaroff Автор
      25.05.2015 10:39
      +2

      Не считайте чужие деньги ;) И да, три рубля в общем-то не деньги и я уже хотел купить ту сигму, однако:
      — деньги есть куда пристроить
      — через месяц-два эти показания мне будут уже не нужны
      — в чемоданчике без дела валяются 6шт ардуин.


      1. Alexeyslav
        25.05.2015 12:53
        +1

        Это уже веские аргументы.
        Об этом и надо было написать а не «дорого».


  1. DimmoNz
    25.05.2015 10:57

    Была где-то у меня удобная таблица, но не нашёл, но вот калькулятор каденса velo-kursk.ru/velo_calc.htm
    Выбрать часто используемые передачи и просто поглядывая на скорость контролировать свой каденс, зная какую минимум скорость нужно выдерживать.
    Это так, самый экономный вариант, если часто кататься, то потом все это уже не нужно и все на автомате.


  1. mcleod095
    25.05.2015 11:04
    +1

    Буквально в субботу делал уроки по обучению для ардуино. Сделал примерно аналогичную макетку. При нажатии на кнопку по прерыванию на спад увеличивалось значение переменной. И вот там столкнулся с одной большой проблемой называемой дребезг контактов. То есть на одно нажатие могло быть до 10 операций инкремента.
    Вопрос, как в данном решении решен данный момент?


    1. makaroff Автор
      25.05.2015 12:42

      Резистор + конденсатор. Классика! ;)


      1. mcleod095
        25.05.2015 12:44

        Извиняюсь, слепой я, не заметил конденсатор )))


  1. uterr
    25.05.2015 11:09

    Покажите как ваш каденсометр выглядит на самом велике и на педалях и как выглядят провода на велике!
    Интересно глянуть как получилось, без ехидства. Изображения и в статье смотрелись бы интересно. :)


    1. makaroff Автор
      25.05.2015 12:44

      Вы меня опередили )) Хотел попозже этим заняться, но ради Вас вытащил вел на улицу и провёл фото сессию. Держите!


  1. nerudo
    25.05.2015 12:01
    +4

    Напомню, как должен выглядеть идеальный велосипедист


    1. MaksVasilev
      25.05.2015 12:13

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


  1. madhead
    25.05.2015 12:35

    Сразу оговорюсь, я начинающий ардуинщик, в схемотехнике не шарю. Воник вопрос, зачем нужен конденсатор на кнопке? Ведь вы уже поставили резистор, этого недостаточно для защиты от дребезга? Плюс ко всему, почему нельзя использовать pinMode(cadInt, INPUT_PULLUP) — судя по документации, все пины уже обородованы подтягивающим резистором, который остаётся лишь активировать.


    1. mcleod095
      25.05.2015 12:47

      Есть два вида подключения кнопок к микроконтроллерам.
      Первый это так как указано на схеме.
      Второй это как раз подача низкого сигнала на ногу, вот тогда и надо переводить ножку в состояние PULLUP.
      Посмотрите документацию на ардуино, там указано.
      Не всегда хватает встроенного резистора.


      1. madhead
        25.05.2015 13:12

        Я совсем запутался. Вот тут ребята подают 5V на ножку через внутренний резистор без конденсатора.


        1. makaroff Автор
          25.05.2015 13:22

          Ну правильно! На пальцах: они к пину тянут, через кнопку, минус. А у меня в схеме к пину (через кнопку) подведён плюс.
          Т.е. если порт контроллера должен отрабатывать по низкому уровню (-), то можно использовать внутренний подтягивающий резистор, а если по высокому (+), то обвязка делается снаружи.


        1. Alexeyslav
          25.05.2015 13:28

          И правильно, подключать надо БЕЗ конденсатора.
          В данной схеме конденсатор просто маскирует проблему добавляя новую проблему, более серьёзную.

          А внутренний резистор не всегда хорош, у него слишком большой номинал и схема начинает ловить помехи, от мобильника например. Это решение хорошо когда кнопка сразу возле контроллера, а когда она на проводах и далеко… надо подтяжка посильнее и ЗАЩИТУ ОТ СТАТИКИ. Попробуйте проехаться с незащищенной схемой под ЛЭП например — конец схеме в 99% случаев.


          1. makaroff Автор
            25.05.2015 13:44

            Может и правильно, но без кондера дребезг дай боже. По хорошему, как кто-то писал, надо вообще через триггер Шмитта, но у меня с ним не взлетело. «Свариться» геркон — буду разбираться.


            1. Alexeyslav
              25.05.2015 14:48

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


              1. makaroff Автор
                25.05.2015 16:00

                Ой, Alexeyslav не читайте мой предыдущий ответ (#comment_8381924) — не правильно понял Ваш. Сообразил, что Вы имели ввиду, что нельзя навешивать кондер когда идёт управление через 0.
                Геркон в норме. Я вообще сначала же всё на макетке с кнопкой собрал, которой и имитировал работу нормально разомкнутого геркона.
                Про триггер взял отсюда:

                Про триггер взял отсюда:


                1. Alexeyslav
                  25.05.2015 19:46

                  Собственно что через "+" что через "-" один фиг, кондёр параллельно кнопке — это плохо. Не знаю откуда это повелось, но еще во времена больших компьютеров все кнопки были зашунтированы конденсаторами, как с того видео. Кнопки обгорали за месяц-другой при том что конденсатор там был 0.1мкФ и эти кондеры оттуда постоянно выкусывали, без них кнопки были вечные. Причем кнопки эти были не клавиатурные, а концевики которые редко срабатывают — на открытие дверцы и т.д.
                  Наверно смотрят что 40 лет назад таким образом боролись с дребезгом значит и мы будем, тогда ведь не дураки проектировали.

                  Как минимум, в таком случае надо ограничивать ток через кнопку. резистор в 100...500 Ом последовательно с кнопкой погоды не сделает, зато очень сильно уменьшат ток разряда через кнопку.


    1. makaroff Автор
      25.05.2015 12:53

      Я сам гуманитарий ;) За 2 года из «Электроника шаг за шагом» Рудольфа Свореня осилил лишь 60 страниц.
      А по схеме… Эксперементальным путём было установлено, что резистора мало и нужен конденсатор. Так же было выявлено что INPUT_PULLUP в моей схеме не работает. С чем связано — разбираться не стал. С опытом пришёл к пониманию фразы: «Не тронь, что работает».


      1. makaroff Автор
        25.05.2015 12:55

        p.s. О! Выше уже ответили. mcleod095 СПС! )


      1. Alexeyslav
        25.05.2015 13:38

        Нельзя так делать! Это просто ужасно. Уберите конденсатор оттуда. Резистора достаточно, а дребезг подавлять надо программно.
        Ваше решение конечно же решает проблему дребезга, но за ней вы не замечаете главного — конденсатор раз за разом разряжается через контакты, они просто обгорают и очень скоро настанет время когда обгорят настолько что перестанет контачить вообще. Герконы тоже подвержены этому воздействию.

        Программно подавить дребезг просто — в момент когда зарегистрировали замыкание отключайте реакцию на кнопку на время 1мС и только после истечения этого времени надо принимать во внимание состояние кнопки.


        1. mcleod095
          25.05.2015 13:51

          Вот тут-то и кроется сам подвох.
          Для данной задачи в принципе достаточно даже решения через каждые 50мс проверять состояние ноги.
          На прерывании тоже достаточно отключить при вхождении в обработчик прерывания обработку прерывания (масло масляное). Сделать задержку в 50мс и после чего инкрементировать переменную с последующим включением обработчика прерываний.
          Что-то вроде того.

          void swap() {
            noInterrupts();
            delay(50);
            count++;
            interrupts();
          }
          


          Но вот что делать когда у меня два таких прерывания могут быть? И мало того, вся схема питается от батареи, и желательно на время ожидания уводить ее в глубокий сон. Ставить микросхему триггера — понижать время жизни от батареи.


          1. Alexeyslav
            25.05.2015 14:53

            Так и сделай. настрой таймер с периодом в 10мс и фиксируй состояние контактов. Можно даже подтяжкой управлять — между проверками она НЕ НУЖНА, но может быть ситуация что надолго остановишься в момент замыкания контакта и высадит всю батарейку.
            Прерывание будет реально коротким — считать с порта и проверить состояние кнопки — если состояние изменилось — выполнить необходимые действия иначе спать. На всё-про-всё 20...30 тактов.


          1. mcleod095
            26.05.2015 10:13

            Не делайте так никогда.
            Я по незнанию так написал.
            Контроллеры AVR на время обработки прерывания сами блокируют выполнение других прерываний. Так что в принципе кода

            void swap() {
              delay(50);
              count++;
            }
            


            Может быть вполне достаточно.


            1. makaroff Автор
              26.05.2015 10:43

              Не было достаточно такого кода — я пробовал. Причём значение delay ставил 100.


              1. mcleod095
                26.05.2015 10:51

                Я имел ввиду что не надо отключать прерывания в функции обработчике прерываний.
                А так да, при дребезге контактов даже с задержкой 1 секунда мы получим зачастую две операции ингредиента.
                После того как придет первый сигнал на обработку, будет снят бит прерывания, и функция будет делать то что ей сказали, а именно ждать. Но в это время произойдет спад сигнала и снова подъем, естественно это выставит бит прерывания опять. Все последующие изменения сигнала просто не будут обработаны.
                После того как завершится функция обработки прерывания, МК увидит что стоит опять бит прерывания и запустит данную функцию еще раз.
                более правильным выходом наверное будет все таки не по прерыванию считать, а в основном цикле программы, но тогда время работы от батареи будет намного меньше.
                Наверное выход в обработчике прерываний конфигурировать прерывание по таймеру и уже в обработчике прерывания по таймеру делать операцию ингредиента и вгонять МК в сон.
                Хотя все конечно надо проверять и тестировать.


                1. Alexeyslav
                  26.05.2015 17:26
                  +1

                  Сбросить признак прерывания после задержки.
                  Да и задержка вовсе не необходима — запустили таймер, который отсчитает милисекунды и разрешит внешнее прерывание перед этим его сбросив. Это будет программный аналог одновибратора по входу. Кстати, можно не запрещать прерывания — пусть с каждым импульсом таймер перезапускается, и как только импульсов не будет больше 1 милисекунды — таймер досчитает до нуля, вызовет прерывание в котором уже можно анализировать состояние контакта. Пожалуй, такой режим будет экономичней чем постоянный опрос.


                  1. mcleod095
                    26.05.2015 17:33
                    +1

                    то что сбросить бит прерывания я вот что-то и не подумал, хотя как сделать это на arduino C не знаю, видел как сделать такое на асме.
                    Но схема с таймером мне нравится больше.
                    Даже предложенный Вами вариант с перезапуском таймера в принципе будет довольно интересным решением. Надо теперь воплотить в макете и проверить работу.


  1. makaroff Автор
    25.05.2015 12:54

    del


  1. dron_k
    25.05.2015 14:28

    Кстати вот схема
    Для тех кто захочет повторить было бы неплохо разместить Электрическую принципиальную схему


  1. LastDragon
    25.05.2015 15:41

    Каденс конечно важен, но пульс гораздо важнее, особенно если ведете малоподвижный образ жизни и/или если есть лишний вес — покупка пульсометра может привести к весьма печальным выводам типа — чсс в районе 180 во время всей поездки. Это плохо. Очень плохо (гуглим «спортивное сердце»). Поэтому настоятельно рекомендую всем начинающим (и не очень) внимательно наблюдаться за своим мотором и не перегружать его.

    ЗЫ: Интересно, сколько катается автор? Похоже не очень много (ну или велосипед новый) — стандартные кубовские педали полное УГ и обычно одна из них дохнет после первой тысячи км…


    1. makaroff Автор
      25.05.2015 16:14

      Накатано как раз в районе тысячи. Пока вроде норм. Вел купил в 2011 и тогда катал часто. Потом женился… Сейчас думаю восстановить форму.


      1. LastDragon
        25.05.2015 19:47

        У меня тоже норм было (если, конечно, не считать того что они очень скользкие), а потом взяла и умерла :) (сточился конус)


    1. Magister7
      27.05.2015 01:32

      А сколько максимальный допустимый пульс при поездке? У меня как раз малоподвижный образ жизни — программист как никак.
      При увеличении каденса как раз растет пульс, и устаю быстрее. Где граница?


      1. LastDragon
        27.05.2015 08:55
        +1

        От целей зависит, гуглим «пульсовые зоны» :) Если хочется избавиться от лишнего жира то ~130 (только по началу это очень медленно, возможно, даже быстрым шагом)… Кстати, еще про питание не надо забывать forum.velomania.ru/showthread.php?t=193599


        1. Magister7
          28.05.2015 13:07

          В смысле ~130 это быстрым шагом? Или это если вообще никогда не катался — то так будет? Я в принципе с детства на велосипеде катаюсь (не профессионально, а так — по городу), поэтому не совсем новичек. Просто последние года 4 практически забил, теперь вот решил восстанавливаться.


          1. LastDragon
            28.05.2015 13:25

            В смысле что если ведете сидячий образ жизни и есть пару десятков лишних кг — то вполне возможно что пульс 130 будет уже при быстром шаге (на велосипеде, соответственно, это легко может быть и 160 и 170 и выше, даже при совсем смешных нагрузках) — поэтому и пишу что пульсометр очень желателен.


            1. Magister7
              28.05.2015 13:39

              Понял, спасибо за уточнение.


      1. makaroff Автор
        27.05.2015 09:07
        +1

        То что устаете — это хорошо )))
        Если не влезать в дебри профессионального спорта, то вообще есть два уровня пульса при кардио нагрузках. Первый направлен на сжигание жира, а второй на тренировку сердца. Расчитываются они по формуле. Формулы можете поискать в интернете — статей посвещенных теме over 9000. Не знаю Ваш возраст, но если он в районе 33+-, то для начала советовал бы держать в диапазоне 115-140. Тут главное не переусердствовать на начальном этапе — как говорил один известный человек: «Лучше меньше, да лучше».


        1. Magister7
          28.05.2015 13:09

          Понял, спасибо за развернутый ответ. Правда пульсометра нет, буду «на глаз» оценивать.


          1. Antibug
            28.05.2015 19:52

            Если под рукой часы или смартфон, то считаете количество ударов за 10 секунд и множите на 6. Получается очень быстро.


            1. Alexeyslav
              29.05.2015 08:17

              Лучше за 6 секунд и умножать на 10. 6 секунд отсчитать легче чем умножить на 6.


              1. Antibug
                29.05.2015 09:06

                Зато точность ниже. Один «недосчет» приведет к десяти «потерянным» ударам сердца. Часто так и бывает, что удар приходится, например, на конец счета, стоишь и сомневаешься, включать ли его в расчет.
                А что насчет умножения — через несколько тренировок наизусть помнишь типовые значения и результат сразу всплывает в памяти.
                Хотя в целом, конечно, это компромисс. Либо точность, либо скорость.


                1. Alexeyslav
                  29.05.2015 09:09

                  Так можно примерно прикинуть фазу на которой истекла 6-я секунда и сделать корректировку.


                  1. Antibug
                    29.05.2015 09:30

                    Я перфекционист. Могу зависнуть на этом шаге:)


    1. vlivyur
      03.06.2015 17:02

      Наш физрук говорил что если начинаете дышать ртом, то пульс поднялся выше 140.


  1. igorkam
    25.05.2015 17:46

    Тема каденса важна.
    Когда-то тоже задавался этим вопросом, но у меня были цели считать каденс без паяльников.
    Была написана Java програмулька для мобилки, которая считала каденс исходя из текущей передачи и скорости.
    Та прога давно потерялась, но живет ее порт на андроид: goo.gl/CWrKSz
    В поездках по дорогах, конечно же, вещь совсем не удобная, даже если снимать скорость с GPS, но вот позанимавшись с прогой на станке, потом быстро запоминаешь соотношение передачи/скорости и уже знаешь, когда тебе пора переключится. При этом затрат 0, ничего паять/покупать не надо.

    Еще можно катать с метрономом. Включил в наушники и вперед.


  1. kibergus
    25.05.2015 23:44

    А я когда-то еще проще сделал: kibergus.su/node/40
    Геркон замыкает сопротивление, подключенное к микрофонному входу гарнитуры. Программа на телефоне пишет звук и считает щелчки. P.S. я тогда знал только про чип и дип, поэтому цены указаны конские. На самом деле детали дешевле.


  1. Equin0x
    26.05.2015 17:31

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