Arduino - Sensor de velocidad óptico ranurado IR
En este tutorial, vamos a aprender:
- Cómo funciona el sensor de velocidad óptico ranurado IR (también llamado sensor óptico de horquilla)
- Cómo conectar el sensor de velocidad óptico ranurado IR a Arduino
- Cómo programar Arduino para detectar y contar los objetos que pasan por la ranura
- Cómo programar Arduino para medir la velocidad de un motor en rpm con un disco codificador

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables STEM V3 Starter Kit (Arduino included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del sensor de velocidad óptico ranurado IR
El sensor de velocidad óptico ranurado IR es un pequeño módulo en forma de U. También se llama sensor de ranura, interruptor óptico o sensor IR en forma de U. Le dice a Arduino si hay algo dentro de su ranura o no. Con un disco codificador, también puede decir a qué velocidad gira un motor o una rueda.
| Sensor de velocidad óptico ranurado IR | |
|---|---|
| Tipo de sensor | fotoeléctrico de ranura (LED IR + fototransistor NPN) |
| Ancho de la ranura | 5.9 mm |
| Voltaje de funcionamiento | 3.3V a 5V DC |
| Salida | digital (TTL), LOW cuando está bloqueado, HIGH cuando está libre |
| Acondicionamiento de la señal | disparador Schmitt integrado |
| Montaje | orificios para tornillos M3 en ambos extremos |
| Pines | 3 (VCC, GND, OUT) |
Puedes usarlo para:
- Medir la velocidad de un motor (rpm) con un disco codificador
- Hacer un tacómetro
- Contar objetos o pulsos
- Medir la distancia contando las vueltas de una rueda
- Obtener la velocidad de las ruedas de un robot
- Detectar un límite o una posición
Pinout

El sensor de velocidad óptico ranurado IR tiene tres pines:
- Pin VCC: debe conectarse a VCC (5V o 3.3V)
- Pin GND: debe conectarse a GND (0V)
- Pin OUT: es un pin de salida digital. Está en LOW cuando la ranura está bloqueada y en HIGH cuando la ranura está libre. Este pin debe conectarse a un pin de entrada de Arduino.
El orden de los pines puede ser diferente entre lotes. Lee las etiquetas de tu módulo.
Cómo funciona

Un lado de la U tiene un LED infrarrojo. El otro lado tiene un fototransistor NPN. Se miran de frente a través de la ranura de 5.9 mm.
- Cuando la ranura está vacía, la luz IR llega al fototransistor. El pin OUT está en HIGH.
- Cuando un objeto opaco (un trozo de cartulina o un diente de un disco codificador) entra en la ranura, bloquea la luz. El pin OUT está en LOW.
El disparador Schmitt integrado hace que la salida sea un 0 o un 1 limpio y estable, sin fluctuaciones. Por eso no necesitamos filtrar rebotes en el código.
Algunos consejos:
- Usa objetos opacos. Un objeto transparente puede no bloquear bien la luz IR.
- Algunos módulos de otros fabricantes funcionan al revés. Si tu sensor indica "bloqueado" cuando la ranura está vacía, solo cambia LOW y HIGH en el primer código. El código de rpm cuenta un flanco por diente, así que funciona de las dos formas.
Medir la velocidad con un disco codificador
Un disco codificador es una placa redonda con ranuras (orificios) cerca del borde. El disco común para los motorreductores TT tiene 20 ranuras. Fija el disco en el eje del motor o en la rueda, de modo que sus dientes pasen por la ranura del sensor sin tocarla.
Cuando el disco gira, cada diente bloquea la luz por un momento. El pin OUT da un pulso por diente. Una vuelta completa da 20 pulsos. Arduino cuenta los pulsos en 1 segundo y luego calcula la velocidad:
- Pulsos en 1 segundo × 60 = pulsos en 1 minuto
- Pulsos en 1 minuto ÷ 20 = vueltas en 1 minuto (rpm)
Diagrama de Cableado
Conecta VCC del sensor a 5V de Arduino, GND a GND, y OUT al pin 2 de Arduino, como se muestra en la imagen de abajo.

This image is created using Fritzing. Click to enlarge image
Usamos el pin 2 porque es un pin de interrupción en Arduino Uno. El código de rpm lo necesita.
Cómo programar el sensor de velocidad óptico ranurado IR
- No se necesita biblioteca: el código usa solo funciones integradas.
- Define el pin: const int SENSOR_PIN = 2;
- Configura el pin como entrada con pinMode(): pinMode(SENSOR_PIN, INPUT);
- Lee el estado con digitalRead(): int state = digitalRead(SENSOR_PIN);
- Comprueba el estado: if (state == LOW) significa que hay algo en la ranura. HIGH significa que la ranura está libre.
- Para contar pulsos rápidos, usa una interrupción. Cada vez que el pin OUT pasa de HIGH a LOW (un diente bloquea la ranura), Arduino ejecuta una función pequeña: attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
- Mantén el contador como volatile, porque cambia dentro de la interrupción: volatile unsigned long pulseCount = 0;
- Cada 1 segundo, convierte los pulsos en rpm: float rpm = pulses * 60.0 / SLOTS_PER_TURN;
¿Por qué usar una interrupción? Cuando el motor gira rápido, los pulsos son muy cortos. Si solo revisamos el pin en loop(), podemos perder algunos. La interrupción captura todos los pulsos. Usamos FALLING para que cada diente se cuente una sola vez.
Código de Arduino - Detectar un objeto en la ranura
El código de abajo hace estas cosas:
- Lee el pin OUT una y otra vez
- Imprime un mensaje solo cuando cambia el estado
- Cuenta cuántas veces se bloquea la ranura
Pasos R\u00e1pidos
- Haz el cableado como se muestra en el diagrama de arriba.
- Conecta Arduino al PC mediante el cable USB.
- Abre Arduino IDE. Ve al menú Tools, y selecciona la placa y el puerto correctos.
- Copia el código de arriba y pégalo en Arduino IDE.
- Haz clic en el botón Subir de Arduino IDE para cargar el código en Arduino.
- Abre el Monitor Serie (velocidad 9600 baudios).
- Pasa un trozo de cartulina o tu dedo por la ranura varias veces.
- Mira el resultado en el Monitor Serie.
Código de Arduino - Medir la velocidad del motor (rpm)
El código de abajo hace estas cosas:
- Cuenta un pulso cada vez que un diente del disco bloquea la ranura (interrupción en el flanco FALLING)
- Cada 1 segundo, calcula la velocidad en rpm
- Imprime el número de pulsos y la velocidad
El código usa SLOTS_PER_TURN = 20. Si tu disco codificador tiene un número diferente de ranuras, cambia este número.
Pasos R\u00e1pidos
- Fija el disco codificador en el eje del motor o en la rueda, de modo que sus dientes pasen por la ranura.
- Mantén el mismo cableado que en el primer código.
- Copia el código de arriba, pégalo en Arduino IDE y cárgalo.
- Gira el disco con la mano, o enciende el motor. Para controlar el motor, consulta Arduino - Motor de corriente continua.
- Mira el resultado en el Monitor Serie. El ejemplo de abajo es un motor que gira a unas 300 rpm.
Por ejemplo, 100 pulsos en 1 segundo dan 100 × 60 ÷ 20 = 300 rpm.
¿Quieres saber la distancia que recorre una rueda? Multiplica el número de vueltas por la circunferencia de la rueda (π × diámetro de la rueda).
Si quieres detectar un objeto a distancia (no dentro de una ranura), consulta Arduino - Sensor de evitación de obstáculos infrarrojo. Si quieres leer una perilla y su dirección, consulta Arduino - Codificador rotatorio.
Video Tutorial
Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.