Hacer un contador de rpm

Hola;
Quiero hacer un contador de rpm, tipo velocímetro de una bicicleta y no tengo muy claro como plantear el proyecto.
En primer lugar, no sé que tipo de sensor irá mejor, si un IR (tipo seguidores de línea), o un sensor de efecto hall (que detecte un pequeño imán por cada vuelta), o un módulo tipo fotointerruptor, o un módulo detector de obstáculos (también IR).
Quiero calcular velocidad, distancia,.... y sacar los datos por pantalla LCD. Una de las principales dudas que tengo es cómo "meter el reloj" para contabilizar los tiempos y poder calcular todo.
Alguien me puede echar una mano.
Muchas gracias.

Comments

  • Los sensores IR tienen que estar bien protegidos de la luz exterior, de lo contrario pueden saltarse pasos. A parte de esto, no es difícil encontrar ruedas en thingiverse o similares aptas para estos sensores.

    A qué te refieres con "meter el reloj"? quieres poner un RTC? para qué? o quizás te estés refiriendo a contar los milisegundos que pasan desde que el sensor (IR, hall, etc) detecta un paso hasta el siguiente?

    Si es lo segundo, lo que se suele hacer es asociar el pin digital del sensor a una interrupción (típicamente el pin 2 o 3, aunque pueden ser otros), que aumenta el contador de pasos. Fuera de la función de la interrupción tienes que controlar el momento en el que ha pasado la interrupción con el inmediatamente anterior, para calcular la velocidad (no lo puedes hacer dentro de la función por que milis no funciona).

    Pero arduinoblocks no da soporte para interrupciones, que yo sepa, así que tendrás que hacer una programación no bloqueante, sin interrupciones, que te permita llevar el conteo de los pasos y del tiempo, sin que nada se bloquee. Un muy buen tutorial sobre esto lo tienes en:
    https://learn.adafruit.com/multi-tasking-the-arduino-part-1/overview
  • Hola,
    desde hace unos días se añadió un bloque para utilizar interrupciones externas,
    es cierto que la función millis() deja de contar dentro de la interrupción, pero se podría intentar hacer algo así...

    no lo he probado, la idea sería poner un sensor "reed" o similar para detectar el paso de un imán en cada giro de la rueda. Como millis (el cronómetro) deja de contar dentro de la interrupción el código dentro de ésta debe ser mínimo. Se pierden unos ticks, pero el error puede ser mínimo y para aplicaciones tipo "velocímetro para bicicleta" creo que funcionaría... a ver quien se anima a montarlo y probarlo...




  • Muchas gracias Rafael, intentaré hacerlo con un sensor de efecto hall y un pequeño imán, pero la idea es hacerlo con ArduinoBlocks, no con el IDE de Arduino.
    Voy a intentar lo que propone Juanjo, mañana hago todo el montaje y os comento los resultados...

    Muchas gracias a los dos.
  • edited November 2018
    Perfecto Juanjo. Ahora habrá que probar esta nueva funcionalidad y ver qué tal va. El siguiente aspecto que estaría muy bien tener sería el tema del deep sleep y despertarlo o con interrupciones, o con el wathdog timer o por UART. Estaría muuuuy bien! ;-)

    Jaez, ya me imagino que lo quieres hacer con arduinoblocks, por eso estás preguntándolo aquí. Sólo te he puesto información para que veas hacía donde tiene que tender tu programación, aunque finalmente la hagas con bloques. A mi me gusta aprender mirando páginas que explican cosas, normalmente con código, y despues mirar de implementarlo aquí, con bloques, para ayudar a mis alumnos en clase. Esperamos tus resultados.
  • Hola Juanjo y Rafael;

    El contador va perfecto, al final coloqué un módulo foto-interruptor. (http://shop.innovadidactic.com/index.php?id_product=602&controller=product)
    El sensor de efecto Hall no servía, falseaba mucho.
    Este es el programa que finalmente utilicé.


    Está contando 600-850 rpm sin problemas....

    Muchas gracias a los dos....
    ArduinoBlocks es la caña!!!...

    J. Andrés
Sign In or Register to comment.