Esta entrada esta dedicada a los primeros pasos con el uso del sensor infrarojo TCTR5000 con Arduino. Este sensor es ampliamente usado para proyectos de robotica como seguidor/lector de lineas pintadas en el suelo. Consiste basicamente en un led emisor IR y un led receptor IR, conectados a una placa base con un potenciometro regulador del alcance de medicion, y un integrado transductor de la señal. Se alimenta con 5v y tiene una salida analogica A0 y una digital D0. El sistema funciona emitiendo una señal por el led emisor y viendo si esta reflejada por un objeto o no. En muestro proyecto aprovecharemos la capacidad de este sensor para "ver" la variación del reflejo producido por el movimiento de un ventilador con 6 aspas de 12cm y 12v, tipico de las fuentes de alimentacion de PC y que tiene mucho uso en refrigeración de PC´s.
Usaremos en este proyecto:
- Un Keypad shield de 6 botones como este:
- Un modulo sensor TCTR5000 como este:
- Un Arduino Uno y cables de conexion.
Debemos antes tener preparado el Keypad shield con pines de salida soldados en los agujeros libres que posee y que a veces (como en el dibujo) no estan presentes.
Las conexiones son:
GND y VCC del modulo sensor a GND y 5V del keypad shield, y D= del modulo a Pin 3 del keypad shield.
El sketch, al ejecutarse, nos muestra las rpm del ventilador al poner el sensor cerca de las aspas rotando del ventilador.
El sketch es este:
***************************************************************************
//Proyecto de tacometro (medidor de rpm) de un ventilador de 12cm de los que
//se usan para refrigerar las fuentes de alimentacion de un PC con las
//tipicas 1500 rpm de velocidad.
//El esquema de conexion usa el Keypad shield de 6 botones, con el LCD
//de 16x2 integrado en el shield, el modulo sensor infrarojo TCRT5000, se
//conecta en el shield a los pines 5v, GND y el pin D0 a Pin 3 del shield.
#include <LiquidCrystal.h>
int val;
int pind0 = 3;
long last=0;
int stat=HIGH;
int stat2;
int contar=0;
int sens=HIGH; // this value indicates the limit reading between dark and light,
// it has to be tested as it may change acording on the
// distance the leds are placed.
int nPalas = 6; // the number of blades of the propeller
int milisegundos=500; // the time it takes each reading
LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // RS, E, D4, D5, D6, D7
void setup()
{
//Serial.begin(9600);
lcd.begin(16, 2);
lcd.clear();
pinMode(pind0,INPUT);
}
void loop()
{
val=digitalRead(pind0);
if(val!=sens)
stat=HIGH;
else
stat=LOW;
digitalWrite(pind0,stat); //as iR light is invisible for us, the led on pin D0
//indicate the state of the circuit.
if(stat2!=stat){ //counts when the state change, thats from (dark to light) or
//from (light to dark), remmember that IR light is invisible for us.
contar++;
stat2=stat;
}
if(millis()-last>=milisegundos){
int rps=((double)contar/nPalas)/2.0*1000.0/milisegundos;
int rpm=((double)contar/nPalas)/2.0*60000.0/(milisegundos);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("RPM = ");
lcd.print(rpm);
/*Serial.print("Contar - ");
Serial.println((contar/2.0));
Serial.print("RPS = ");
Serial.println(rps);
Serial.print("RPM = ");Serial.println(rpm);
Serial.print(" VAL ");Serial.println(val);*/
contar=0;
last=millis();
}
}
***********************************************************************
Consideraciones:
Este proyecto es parte de un conjunto de sensores integrados en un entorno Arduino, pensados para controlar diversos parametros del funcionamiento de un vehiculo. El proyecto consistirá finalmente en una red ethernet de varios Arduino funcionando conjuntamente recogiendo datos en diferentes "puestos" de control. Uno sera responsable de la conexión con el OBD de la ECU del vehiculo y suministrará datos disponibles OBDII de la ECU (rpm motor, velocidad, temperatura refrigerante, MAF, presion combustible,....), otro sistema estara en el bloque motor coleccionando datos de nivel de refrigerante, temperatura y presion del aceite, temperatura del vano motor, accionamiento de reles de emergencia para encendido de luces de emergencia, velocidad de giro del electroventilador, ... Otro actuara como sensor de proximidad y angulo muerto, de manera inteligente y predictiva.
Todo el conjunto procesará los datos que estarán disponibles en una red ethernet que los conectará y que eventualmente alimentará a una Raspberry Pi, que estará instalada en un hueco doble DIN del salpicadero del coche, con una pantalla tactil de 7 pulgadas. La Raspberry actuara como un autentico carputer, amen de servir como centro multimedia y GPS.