Electrónica

Arduino – Contador de revoluciones | RPM Counter

18 Jul , 2016  

Contador de revoluciones con Arduino – Contruye un RPM Counter

Hola que tal amigos de Gamelogger, esta ves realizaremos un Contador de Revoluciones, también llamado Tacómetro (RPM – Revoluciones Por Minuto), programado en Arduino y utilizando como sensor un emisor y receptor infrarrojo. Este proyecto es realmente fácil de hacer y sus costos son muy bajos, en este caso se utilizó un Arduino Nano que es aún más barato que un modelo UNO, bueno empecemos con el post.

 

contador

 

El principio básico de funcionamiento de basa en el sensor infrarrojo utilizado, un emisor y un receptor apuntados directamente, cuando el receptor capta el haz infrarrojo (invisible para el humano) éste permite el el flujo de la corriente, la cual podemos manipular a nuestro gusto… en otras palabras, obtenemos un ‘0’ lógico cuando se capta luz infrarroja y un ‘1’ lógico cuando interrumpimos la comunicación entre estos dos componentes.

 


 

Material:

  • Arduino
  • Protoboard
  • Display LCD
  • LED infrarrojo
  • Fotoreceptor infrarrojo
  • Potenciometro 10Kohms
  • Resistencia 330 Ohms
  • Resistencia 220 Ohms
  • Resistencia > 10Kohms
  • Un LED (para probar)
  • Cables

 

Procedimiento:

Empecemos montando el sensor en el protoboard justo como lo indica la imagen de abajo.

contadorClic en la imagen para ampliar.

En mi caso en el emisor infrarrojo use un sensor CNY70 el cual internamente contiene un LED infrarrojo, no es necesario solo que lo use porque no tenia a la mano tal componente, los resultados son los mismos.

En la siguiente imagen se puede observar el funcionamiento del LED infrarrojo, cabe resaltar que solo es posible visualizarlo mediante alguna cámara (celular, etc.)

 

———– ON ————————————- OFF ————–

contadorClic en la imagen para ampliar.

Procedemos a probar el funcionamiento del sensor, la manera en que lo hice fue poner el positivo del LED en la terminal del emisor de mi fotoreceptor y el negativo del LED a GND con una resistencia de 220 Ohms, como lo muestra el siguiente gráfico.

contador

Recuerden que este circuito solo se realizo para saber si esta funcionando correctamente. (La única diferencia que hay es que esta invertido, cuando detecta luz infrarroja hay ‘1’, cuando no entonces es ‘0’).

 

Encendido
contador

Apagado
5FD


Código:

Ahora ya podemos quitar el LED de prueba y armar el circuito del diagrama inicial. Teniendo esto ya, procedemos a programar el Arduino. El código es el siguiente:

int ledPin = 13;
volatile byte rpmcount;
unsigned int rpm;
unsigned long timeold;

#include <LiquidCrystal.h>

LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void rpm_fun()
{
//Each rotation, this interrupt function is run twice, so take that into consideration for
//calculating RPM
//Update count
rpmcount++;
}

void setup()
{
lcd.begin(16, 2); // intialise the LCD

//Interrupt 0 is digital pin 2, so that is where the IR detector is connected
//Triggers on FALLING (change from HIGH to LOW)
attachInterrupt(0, rpm_fun, FALLING);

//Turn on IR LED
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);

rpmcount = 0;
rpm = 0;
timeold = 0;
}

void loop()
{
//Update RPM every second
delay(1000);
//Don’t process interrupts during calculations
detachInterrupt(0);
//Note that this would be 60*1000/(millis() – timeold)*rpmcount if the interrupt
//happened once per revolution instead of twice. Other multiples could be used
//for multi-bladed propellers or fans
rpm = 30*1000/(millis() – timeold)*rpmcount;
timeold = millis();
rpmcount = 0;

//Print out result to lcd
lcd.clear();
lcd.print( “RPM=” );
lcd.print(rpm);

//Restart the interrupt processing
attachInterrupt(0, rpm_fun, FALLING);
}

 

Finalmente conectamos LCD al arduino:

contador

Nota:

Este código esta diseñado para trabajar con 2 hélices en el motor, esto quiere decir que cada segundo se corta 2 veces el paso de luz infrarrojo (una revolución). Puedes modificar esta linea para obtener un valor de acuerdo a el numero de hélices que tengas en tu motor:
rpm = 30*1000/(millis() – timeold)*rpmcount;

Video:

 

Si tienes alguna duda comenta, no olvides compartir.

Twitter: @Noyolaund

, , , , , , , , , , , , , , , , , ,


  • Diego

    Si mi motor no tiene ninguna helice, es decir, solo tiene una rueda, como seria mi codigo de rpm.
    Gracias

Suscríbete al blog por correo electrónico

Introduce tu correo electrónico para suscribirte a este blog y recibir notificaciones de nuevas entradas.

Únete a otros 390 suscriptores