Как мне измерить обороты колеса?

15

Я пытаюсь создать бортовую систему для своего велосипеда, используя платы Arduino или Lilypad.

Я думаю, что я должен использовать датчик эффекта Холла, но любая альтернатива также хороша.

Я хочу вывести свою скорость на ЖК-дисплей, и мне интересно, как это сделать.

mad_z
источник

Ответы:

12

Использование датчика эффекта Холла, как предложил Starliner, будет одним из способов взаимодействия с колесом. Тем не менее, предложение Ахима и Шуттердрона использовать геркон имеет больший смысл, учитывая, что вспомогательное оборудование требует, чтобы датчик эффекта Холла получал чистый цифровой сигнал.

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

В вики Arduino есть страница о сигналах ReadingRPM . Чтобы рассчитать скорость, умножьте значение числа оборотов в минуту на окружность колеса (2 * пи * радиус [в метрах]). Результат будет в метрах в минуту.

Изменить: я заметил, что связанный код предназначен для систем с двумя импульсами на оборот. Одного магнита достаточно для вашей задачи. Кроме того, для велосипедного компьютера вы, вероятно, захотите, чтобы результат был в KPH (или MPH, если вы живете где-то, кто все еще думает, что это цивилизованно). Я сделал несколько (непроверенных) модов для кода в вики, чтобы распечатать KPH и вставить их ниже.

volatile byte revolutions;

unsigned int rpmilli;
float speed;


unsigned long timeold;

void setup()
{
  Serial.begin(9600);
  attachInterrupt(0, rpm_fun, RISING);

  revolutions = 0;
  rpmilli = 0;
  timeold = 0;
}

void loop()
{
  if (revolutions >= 20) { 
    //Update RPM every 20 counts, increase this for better RPM resolution,
    //decrease for faster update

    // calculate the revolutions per milli(second)
    **rpmilli = (millis() - timeold)/revolutions;** EDIT: it should be revolutions/(millis()-timeold)

    timeold = millis();
    **rpmcount = 0;** (EDIT: revolutions = 0;)

    // WHEELCIRC = 2 * PI * radius (in meters)
    // speed = rpmilli * WHEELCIRC * "milliseconds per hour" / "meters per kilometer"

    // simplify the equation to reduce the number of floating point operations
    // speed = rpmilli * WHEELCIRC * 3600000 / 1000
    // speed = rpmilli * WHEELCIRC * 3600

    speed = rpmilli * WHEELCIRC * 3600;

    Serial.print("RPM:");
    Serial.print(rpmilli * 60000,DEC);
    Serial.print(" Speed:");
    Serial.print(speed,DEC);
    Serial.println(" kph");
  }
}

void rpm_fun()
{
  revolutions++;
}

Кроме того, я включил «сообщество вики» по этому вопросу, что, я думаю, означает, что другие пользователи могут редактировать его. Если моя математика неверна (и вы можете это доказать!), Прыгайте и исправьте это для меня. :)

Адам
источник
10

На самом деле Ахим сделал очень хорошее замечание здесь.

Существует большая разница между герконовым (магнитным) реле (переключателем) и датчиком Холла.

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

Код, показанный выше, будет работать только «напрямую» с реле Рида, что не означает, что он вообще не будет работать с датчиком эффекта Холла, но что это создаст дополнительные проблемы при использовании датчика Холла.

Основной проблемой будет то, что вы рассматриваете аналоговое устройство как цифровое - ожидая срабатывания при нарастании импульса. Теперь сигнал не будет импульсным - он будет в целом похож на колокольчик со всеми видами колебаний. Вы можете отключить минимальное напряжение для высокого сигнала (около 3,5 В, IIRC?) Несколько раз, когда магнит проходит датчик Холла.

Конечно, наш первый инстинкт при использовании чего-то вроде датчика эффекта Холла заключается в использовании АЦП и считывании уровня напряжения на аналоговом выводе. Однако на аналоговом выводе вы ограничены примерно 10 000 операций чтения примерно в секунду (каждое чтение занимает 100 мкс). Это также предполагает, что все, что вы делаете - это зацикливание и считывание значений - у вас не останется много времени для обновления отображения, вычисления и т. Д. Не говоря уже о том, что если вы читаете в неправильное время, вы пропустили свой сигнал!

Я уверен, что можно использовать прерывания, как-то связанные с АЦП, но таких знаний у меня нет.

Вместо этого, если вы хотите использовать настоящий датчик эффекта Холла, я бы предложил подать его в триггер Шмитта, чтобы преобразовать его в цифровой (вкл / выкл) сигнал на калиброванном уровне, который указывает «прямо под магнитом». Кроме того, в зависимости от уровня гистерезиса, реализованного в триггере Шмитта, вам может потребоваться выполнить некоторый отскок, который изменит скорость отскока в зависимости от текущей скорости. Тогда вы могли бы относиться к этому как к обычному реле Рида.

! с

shutterdrone
источник
1
Вы можете получить лучшее из обоих миров. Компоненты ATMega8 можно настроить для обеспечения доступа к внутреннему компаратору. С помощью подходящего опорного напряжения (с регулируемым скажем, Подстроечный), вы можете иметь прерывания на нарастающих (или спадающих или оба) край аналогового сигнала. ссылка на тему форума, объясняющая только это: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination
Существуют устройства с эффектом Холла с пороговым выходом Шмитта-триггера. Они довольно распространены. Кроме того, с помощью герконового переключателя вам в любом случае придется отсеивать вывод.
Коннор Вольф
7

Здесь наиболее упоминаются датчики Холла и герконы, и они являются лучшим решением.

Геркон будет дешевле, но может дать вам ложные импульсы , когда велосипед получает шок. Если это только одна из поездок по обочине, программное обеспечение может легко отфильтровать ее, но она отличается, когда вы едете по булыжникам, что может постоянно давать вам ложные импульсы. Для более ударопрочных герконов потребуется более сильное магнитное поле для активации, но неодимовый магнит это исправит.



77

Переключатель эффекта Холла не имеет этих недостатков, но несколько дороже.


T

vзнак равноπDT

DT

sзнак равносчетчик импульсов×π×D

D

stevenvh
источник
5

Магнит может быть установлен на краю обода колеса, а датчик эффекта Холла установлен очень близко (но не соприкасается) с магнитом. Когда колесо вращается и магнит проходит через датчик, датчик улавливает изменение магнитного поля.


источник
3

Если вы все еще хотите перейти в твердотельное состояние, это много «переключателей с эффектом Холла», которые включают датчик эффекта Холла и триггер Шмитта с гистерезисом для обеспечения чистого цифрового выхода без отказов. Они переключаются всякий раз, когда достигается некоторая пороговая плотность потока (указана в техническом описании). Вы можете рассчитать хорошую комбинацию магнита и переключателя или просто поэкспериментировать.

Этот сайт расскажет вам намного больше.

user1120
источник
2

Детали в велосипедных компьютерах являются герконами, а не датчиками эффекта Холла. Они совершенно разные. Но я думаю, что вы все говорите о тростниковых контактах.

Ахим
источник
1

Магнит можно закрепить на спице, а датчик - на одной из вилок или на цепочке.

Вместо того, чтобы умножать на пи и т. Д., Мой метод, предложенный моим последним велокомпьютером, состоял в том, чтобы измерить линейное расстояние одного оборота (мел на шине, мера между двумя метками мела), затем вы можете просто умножить обороты на прямую окружности.

[РЕДАКТИРОВАТЬ] Я только что нашел это руководство на сайте списка для реализации велосипедного компьютера с использованием PIC, может быть, некоторая информация может быть полезной для вас.

амосс
источник