hola a todos, a ver el tema es el siguiente ...hace tiempo que tengo el arduino pero trasteo poco con el y voy muy despactiooo, la cuestion es que para empezar queria intentar medir las revuliciones de un motor cualqiuera y e empezado haciendo un montaje sobre un ventilardor de pc,un brazo que sobresale del eje con una raya blanca ....y un CNY70 colocado debajo del brazo , como a 0,5 mm ..... bueno de esta manera parece fucionarece recojer un pulso por cada vuelta del brazo y encender un led cada vez que el brazo pasa por el CNY............ mi duda es ....con este montaje puedo hacer algo sencillito para empezar ha hacer un cuentaRPM ...lo e estado mirando pero la verdad es que me hago con el codigo, no se bien usar la funcion millis ...ni muchas otras por que no tengo ni P de programacion ..asi que si alguien me pudiera dar alguna pista sobre las formulas que debo utilizar para obtener las RPM y la forma de aplicarlas al codigo le estaria muy agradecido!
ESPERO QUE LOS REYES OS TRAIGAN MUCHOS CACHARRITOS PARA CHEMAR ESTE AÑO!!
hola, e probado mi montaje con la parte del codigo de Igor que me interesaba ....pero la verdad no termino de entender la formula que utiliza (uno que es mu cortito con las mates ..jeje..) que hace?recoje el numero de revoluciones que se producen en los 100 milis de delay y las divide entre esos 100 milis ?? entonces por que el 2* milis de la formula , por que 2? alguien me saca de mi ignorancia jeje? Aparte habla de que el recoje 4 pulsos por vuelta , yo solo 1.. y eso no veo en que parte del codigo se refleja ... GRacias!!
El link que ha puesto Chiva, es lo más "pro", que es usar un timer para medirlo, pero para empezar con algo fácil, usando interrupciones lo haces muy sencillo y con código Arduino (Wiring).
La cuenta que tienes que hacer es:
¿Cuantas revoluciones gira en un minuto? Es decir, cuantas vueltas da en un determinado tiempo?
Es importante declarar la variable que incrementas en la rutina de la interrupción como volatile: volatile unsigned long cont_rpm;
El "2" en las cuentas de mi montaje, como viene explicado en el texto, es porque estoy midiendo la velocidad en el arbol de levas, que va al doble de velocidad que el cigüeñal y tengo 4 pulsos por vuelta. Resumiendo, nada que ver para tu aplicación.
Para terminar, la operación a realizar, es tan sencilla como dividir en número de pulsos entre el tiempo en el cual se han producido. Como quieres tener rpm, pues el tiempo tiene que estar en minutos. Y como tienes 1 pulso cada vuelta, no tienes que hacer nada más....
bueno, he seguido probando y mas o menos he entendido el rollo jeje, pero como lo que queria, mas que otra cosa era escribir mi propio miniprogramita he probado a escribirlo con pulseIn ...tal que asi:
asi deberia funcionar, con menos precision, pero mas o menos no??
bueno y el que caso es ese.... que "mas o menos" funciona , he probado a distintas velocidades y siempre Rpm es el doble de lo que deberia! justo el doble(con una diferencia de 10 Rpm +-) de lo que me da si mido con con el codigo del playground, eso es lo que no entiendo, por que el doble?alguna explicacion??
De donde viene la cuenta rpm = 30*1000/(millis() - timeold)*rpmcount;
millis son milisegundos
rpmcount son pulsos
Esto no es algo de programacion...
Ya te aviso,que como tu tienes 1 pulso por vuelta, es diferente la operacion que tienes que hacer....
Te deberia ayudar el comentario que hay en el codigo:"//Each rotation, this interrupt function is run twice"
Es decir, con lapiz y papel.... Problema: Como calculo las revoluciones por minuto de un objeto que gira y me da 1 pulso por cada vuelta.
lo divide entre medio minuto (30*1000) por que rpmcount es el doble de al tener dos pulsos por vuelta???
a mi con saber cuanto tarda en dar una vuelta,osea con saber que tiempo tarda en dar una vuelta, y dividir un minuto entre lo que tarda en darla en valdria no??? ....... lo que hacia dividiendo 60000000/pulseIn ......
puffff que tonto me estoy empezando a sentir :'(...
Como tiene 2 pulsos por vuelta, pues tiene que ser la mitad... Por eso a ti te sale el doble,ya que en tu montaje tienes un pulso por vuelta....Es decir, tienes que modificar el codigo para tener 60.
La operacion es tan facil como dividir vueltas entre tiempo.
Las vueltas las obtienes segun tu contador de pulsos, que en tu caso concreto tienes 1 pulso por cada vuelta.