Tacómetro Arduino de Alta Velocidad – Algoritmo "Single-Shot" para RPM Preciso
Componentes y materiales
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | |
| Sensor IR de proximidad (recomendado: TCRT5000 o similar) | 1 | Debe detectar IR de láser rojo |
| Láser diodo rojo 655 nm (puntero láser) | 1 | El sensor IR detecta su radiación IR parásita |
| Motor DC para pruebas (con aspas/ventilador) | 1 | |
| Batería 9V + conector | 1 | Alimentación Arduino |
| Cables jumper | 3 |
Herramientas
- Soldador (opcional, para conectar motor)
Descripción del proyecto
Mide RPM exacto de motores usando un solo sensor IR + láser rojo + Arduino. El sensor IR detecta la radiación infrarroja parásita del láser rojo. Cuando una aspa del ventilador interrumpe el haz, la lectura cae a 0; al pasar, sube de nuevo. Cada interrupción = 1/n vuelta (n = nº aspas).
Algoritmo "Single-Shot Detection" (novel)
El código calcula RPM en cada interrupción (cada 1/n vuelta), no promediando sobre 1 vuelta completa. Esto da:
- Actualización ~2 veces/segundo (en consola serie).
- Resolución de 2 decimales.
- Alta sensibilidad a cambios mínimos de velocidad en cada fracción de vuelta.
- Tiempo de medida < 40 ms.
Parámetros a ajustar
wid= ancho de la aspa en metros (ej. 0.012 m = 12 mm).rad= radio del punto de detección en metros (ej. 0.045 m = 45 mm).- Umbral analógico: 950 (ajusta según tu sensor/entorno).
Código Arduino
// Tacómetro láser Single-Shot - por YaSh
// Mide RPM en cada interrupción de haz (1/n vuelta)
const int sen = A0;
const float wid = 0.012; // Ancho aspa (m) - AJUSTAR
const float rad = 0.045; // Radio detección (m) - AJUSTAR
const float zweiPi = 6.283185; // 2*PI
float t1, t2, vel, dt, tRev, rpm;
void setup() {
Serial.begin(9600);
pinMode(sen, INPUT);
Serial.println("Inicia motor y espera 3 seg...");
delay(3000);
}
void loop() {
// Flanco bajada: aspa entra en haz
if(analogRead(sen) < 950) {
t1 = millis();
delay(30); // Antirrebote simple
}
// Flanco subida: aspa sale del haz
if(analogRead(sen) > 950) {
t2 = millis();
dt = t2 - t1; // Tiempo cruce aspa (ms)
vel = wid / dt; // Velocidad angular (m/ms)
tRev = (zweiPi * rad) / vel; // Tiempo vuelta completa (ms)
rpm = 60000.0 / tRev; // RPM = 60000 ms/min / tRev
}
Serial.print("RPM: ");
Serial.println(rpm, 2); // 2 decimales
}
Montaje físico
- Fija el láser apuntando al sensor IR (alineados).
- Coloca el motor con aspas entre ambos, de modo que las aspas corten el haz.
- Ajusta distancia para que el haz cubra el recorrido de las aspas.
- Alimenta Arduino, abre monitor serie a 9600 baudios.
Notas importantes
- Funciona mejor con láser rojo (emite IR detectable). Láser verde/azul emiten menos IR.
- Evita luz ambiente fuerte (sol, lámparas) que sature el sensor.
- El algoritmo asume velocidad constante durante el cruce de una aspa; válido para RPM estables.
Proceso de manufactura
- Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
- Integración de sensor termopar con Arduino Portenta H7 usando MAX6675
- Construye un Juego Giroscópico en Tiempo Real con Arduino Nano y Sensor MPU-6050
- Proyecto Sensor DHT11 Temperatura y Humedad con Indicadores LED y Altavoz Piezo
- Sensor K30 CO₂: Monitorización en tiempo real de la calidad del aire interior
- Unopad: Controlador MIDI Arduino para Ableton Live sin complicaciones
- Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
- Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Integración del sensor de huella capacitivo DFRobot (ID809) con Arduino o ESP8266
- Autómatas Celulares en Tiempo Real con Arduino y Pantalla OLED 128x64