Задать вопрос

Arduino спидометр

Добрый вечер!
Собственно по замыканию геркона мы считаем сколько прошло с предыдущего замыкания и делим длину окружности колеса на эту величину. Осталось описать условия прерывания.

Ниже предлагаю решение:
  sensorState = digitalRead(gerkon);
  
  if (sensorState == HIGH) {
    if (lastState != HIGH) {
        lastTime = thisTime;
        thisTime = millis();
        spinTime = thisTime - lastTime;
        mySpeed = (wci / spinTime)*3.6 ;  // wci — диаметр колеса, как правильно напомнили в комментариях, умноженный на пи.
        if (mySpeed < 200) {Serial.print(mySpeed);Serial.print(" km/h");} // Периодически пролетают значения за 2000 км/ч, для этого ограничим максимальную скорость. (В данном примере шоссейный велосипед на станке развивает скорость до 100км/ч).
        lastState = HIGH;
    }

  } else { 
   lastState = LOW;
 }

  • Вопрос задан
  • 12437 просмотров
Подписаться 7 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
Сначала выкидываете arduino IDE, затем отказываетесь от библиотек, предоставляемых arduino и читаете мануалы к AVR. И тут окажется, что есть такая штука, как input capture. При замыкании геркона процессор аппаратно помещает в специальный регистр время, когда это произошло, а потом вызывает прерывание.
Только висит IC не на том таймере, который используется для подсчета времени в arduino.

Без использования IC у вас нормально спидометр работать не будет.
Ответ написан
nochkin
@nochkin
Если Arduino, то вот примерный подход:
1. Как привязаться на прерывание:
www.arduino.cc/en/Reference/AttachInterrupt
2. Текущее время можно брать через millis(). Вот на всякий случай для rollover:
www.arduino.cc/playground/Code/TimingRollover

Потом достаточно считать время с момента предыдущего прерывания и находить скорость.
Ответ написан
@sam_satan
Можно поставить конденсатор последовательно геркону, но придется ставить диоды на землю.
Такие схемы используются в тактировании шим контроллеров.
Ответ написан
Комментировать
@sergof
на всякий случай: надо не только диаметр разделить на дельту времени но и еще домножить на пи.
пардон за оффтоп
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы