Como faço para medir a rotação de uma roda?

15

Estou tentando criar um sistema de bordo para minha bicicleta usando um Arduino ou talvez as placas Lilypad.

Acho que devo usar um sensor de efeito Hall, mas qualquer alternativa também é boa.

Quero imprimir minha velocidade em um monitor LCD e estou pensando na melhor maneira de fazer isso.

mad_z
fonte

Respostas:

12

Usar um sensor de efeito hall, como sugerido pela Starliner, será uma maneira de interagir com o volante. Porém, a sugestão de Achim e Shutterdrone de usar um interruptor de palheta faz mais sentido, dado o hardware de suporte que um sensor de efeito Hall requer para obter um sinal digital limpo.

Você pode pegar um ímã e um sensor em um computador de bicicleta quebrado, mas se não conseguir, uma loja de componentes local deve ter um em estoque. A vantagem de um sensor e ímã reciclado é que você já terá o material de montagem.

Há uma página no wiki do arduino sobre sinais do ReadingRPM . Para calcular a velocidade, multiplique o valor da rotação por circunferência da roda (raio 2 * pi * [em metros]). O resultado será em metros por minuto.

Edit: Eu notei que o código vinculado é para sistemas com dois pulsos por rotação. Um ímã é suficiente para sua tarefa. Além disso, para um computador de bicicleta, você provavelmente desejará que o resultado esteja no KPH (ou MPH, se você mora em algum lugar que ainda acha que é civilizado). Eu fiz alguns mods (não testados) para o código no wiki para imprimir o KPH e colá-los abaixo.

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

Além disso, ativei o 'wiki da comunidade', o que acho que significa que outros usuários podem editá-lo. Se minhas contas estão erradas (e você pode provar!), Entre e corrija-as para mim. :)

Adam
fonte
10

Na verdade, Achim fez um ponto muito bom aqui.

Há uma grande diferença entre um relé (magnético) Reed (interruptor) e um sensor de efeito Hall.

Principalmente, um relé Reed conectará um interruptor sempre que houver força magnética suficiente atuando sobre ele, fornecendo um sinal liga / desliga. Um sensor de efeito Hall fornece um nível de tensão indicando quanta força magnética está sendo aplicada a ele.

O código mostrado acima funcionaria 'diretamente' apenas com um relé Reed, o que não significa que ele não funcione para um sensor de efeito hall, mas forneceria desafios adicionais usando um sensor de efeito hall.

O principal desafio será que você está tratando um dispositivo analógico como digital - esperando disparar com o aumento de um pulso. Agora, o sinal não será pulsado - geralmente será como uma curva em forma de sino, com todos os tipos de flutuações. Você pode ultrapassar a tensão mínima para obter um sinal alto (em torno de 3,5v, IIRC?) Várias vezes enquanto o ímã passa pelo sensor de efeito hall.

Obviamente, nosso primeiro instinto ao usar algo como um sensor de efeito hall é usar o ADC e ler o nível de tensão em um pino analógico. No entanto, você está limitado a 10.000 leituras, aproximadamente, por segundo em um pino analógico (cada leitura leva 100 uS). Isso pressupõe também que tudo o que você faz é repetir e ler valores - não lhe resta muito tempo para atualizar uma exibição, calcular, etc. Sem mencionar que, se você ler na hora errada, perdeu o sinal!

Tenho certeza de que é possível usar interrupções de alguma forma vinculadas ao ADC, mas não tenho esse conhecimento à mão.

Em vez disso, se você deseja usar um sensor Hall Effect real , sugiro alimentá-lo com um gatilho Schmitt para convertê-lo em um sinal digital (on / off) em um nível calibrado que indica "diretamente sob o ímã". Além disso, dependendo do nível de histerese implementado no gatilho Schmitt, pode ser necessário fazer alguns ajustes que alterariam a taxa de rejeição com base na velocidade atual. Então você poderia tratá-lo como um revezamento Reed normal.

! c

shutterdrone
fonte
1
Você pode obter o melhor dos dois mundos. Os componentes do ATMega8 podem ser configurados para fornecer acesso ao comparador interno. Com uma referência de tensão adequada (ajustável, por exemplo, um trimpot), você pode interromper a subida (ou queda ou ambas) da borda do sinal analógico. link para o tópico do fórum que explica exatamente isso: arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1163394545
SingleNegationElimination
Existem dispositivos de efeito hall com uma saída com limite de gatilho schmitt. Eles são bastante comuns. Além disso, com um interruptor de palheta, você terá que devolver a saída de qualquer maneira.
Connor Wolf
7

Os sensores de efeito Hall e os interruptores de palheta são os mais mencionados aqui e são a melhor solução.

o interruptor reed será mais barato, mas poderá gerar pulsos falsos quando a bicicleta sofrer um choque. Se esse é apenas um dos passeios do meio-fio, o software pode filtrá-lo facilmente, mas é diferente quando você anda sobre os paralelepípedos, o que pode gerar pulsos falsos o tempo todo. Chaves de palheta mais resistentes a choques exigirão um campo magnético mais forte para serem ativadas, mas um ímã de neodímio corrigirá isso.

editar em resposta às perguntas de m.Alin
switches Reed são rápidos. Isso ocorre porque a palheta tem uma massa baixa (= baixa inércia) e um curso baixo, geralmente apenas alguns décimos de mm. Este comutador reed possui um tempo de operação de <0,6 ms e um tempo de liberação de <0,1 ms. A 36 km / h, o interruptor viaja 5 mm em 1 ms quando montado na metade do diâmetro da roda. Portanto, é rápido o suficiente para ser ativado quando passa o ímã.
Este documento sobre o mesmo comutador fornece uma expectativa de vida> 107operações, e isso não é tanto quanto parece. Se você percorresse 25 km por dia, alcançaria 107 mudar eventos em 2 anos.
fim de edição

O interruptor de efeito Hall não tem essas desvantagens, mas é um pouco mais caro.


Você ganha tempo Tentre 2 pulsos como informação do sensor. Então

Rapidez v=πDT

em m / s se o diâmetro da roda D é expresso em metros e Tem segundos. Converta para km / h dividindo por 3,6, divida por 5,79 por mph.

distância s=contagem de pulsos×π×D

em metros, se o diâmetro da roda Dé expresso em metros. Divida por 1000 para distância em km, por 1609 por milhas.

stevenvh
fonte
5

Um ímã pode ser montado na borda do aro da roda e o sensor Hall Effect montado muito perto (mas sem entrar em contato) do ímã. À medida que a roda gira e o ímã passa pelo sensor, o sensor capta a variação no campo magnético.


fonte
3

Se você ainda deseja entrar em estado sólido, são muitos "interruptores de efeito Hall", que incluem o sensor de efeito Hall e o gatilho Schmitt com histerese para fornecer uma saída digital limpa sem oscilação. Eles alternam sempre que alguma densidade limite de fluxo (fornecida na folha de dados) é atingida. Você pode calcular uma boa combinação de ímã e interruptor ou simplesmente experimentar.

Este site lhe dirá muito mais.

user1120
fonte
2

As peças nos computadores de bicicleta são contatos de palheta, não sensores de efeito de hall. Eles são completamente diferentes. Mas acho que todos estão falando sobre os contatos de palheta.

Achim
fonte
1

O ímã pode ser montado em um raio e o sensor em um de seus garfos ou no chainstay.

Em vez de multiplicar por pi etc., o método sugerido pelo meu último computador de bicicleta foi medir a distância linear de uma revolução (giz no pneu, medir entre as duas marcas de giz), então você pode simplesmente multiplicar as revoluções pela circunferência direta.

[EDIT] Acabei de encontrar este guia no site da piclist para implementar um computador de bicicleta usando um PIC, talvez algumas informações possam ser úteis para você.

Amos
fonte