Está en la página 1de 13

Construye un contador de

revoluciones
Hola que tal amigos de Taringa! Esta ves realizaremos un Contador de
Revoluciones, tambin llamado Tacmetro (RPM - Revoluciones Por Minuto),
programado en Arduino y utilizando como sensor un emisor y receptor
infrarrojo. Este proyecto es realmente fcil de hacer y sus costos son muy
bajos, en este caso se utiliz un Arduino Nano que es an ms barato que un
modelo UNO, bueno empecemos con el post.
El principio bsico 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' lgico cuando se capta luz infrarroja y un '1' lgico cuando
interrumpimos la comunicacin 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.
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 cmara (celular,
etc.)

-------------------- ON --------------------------------------------------------------------- OFF -----------------


-
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 grfico.

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
Apagado
Cdigo:
Ahora ya podemos quitar el LED de prueba y armar el circuito del diagrama
inicial. Teniendo esto ya, procedemos a programar el Arduino. El cdigo 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:


Nota:
Este cdigo esta diseado para trabajar con 2 hlices en el motor, esto quiere
decir que cada segundo se corta 2 veces el paso de luz infrarrojo (una
revolucin). Puedes modificar esta linea para obtener un valor de acuerdo a el
numero de hlices que tengas en tu motor:
rpm = 30*1000/(millis() timeold)*rpmcount;

Video:

link: https://www.youtube.com/watch?v=JDjyxzUcTBI