Arduino Nano ESP32 - Sensor de velocidad óptico ranurado IR
En esta guía, aprenderemos a usar el sensor de velocidad óptico ranurado IR con el Arduino Nano ESP32. En detalle, aprenderemos:
- Por qué el sensor de ranura da una señal BAJA cuando hay un objeto en su ranura.
- Cómo conectar el sensor al pin de 3,3 V y al pin D2 del Arduino Nano ESP32.
- Cómo escribir un programa para el Arduino Nano ESP32 que cuente cada objeto que pasa por la ranura.
- Cómo escribir un programa para el Arduino Nano ESP32 que lea la velocidad de giro de un disco en rpm, usando una función de interrupción guardada en memoria rápida.

Hardware Requerido
Or you can buy the following kits:
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
Acerca del sensor de velocidad óptico ranurado IR
Mira el sensor de lado y verás la letra U. Dentro de las paredes izquierda y derecha de esa U, dos piezas diminutas se miran una a la otra: un LED infrarrojo en una pared y un fototransistor NPN en la otra. El espacio abierto entre ellas mide 5,9 mm de ancho. Algunos vendedores llaman a esta pieza interruptor óptico, sensor óptico de horquilla o simplemente sensor de ranura IR. Es lo mismo.
Cómo funciona

Piensa en él como una pequeña puerta de luz. El LED nunca se apaga, y el fototransistor vigila su luz todo el tiempo.
- Nada en la ranura → el fototransistor recibe la luz → OUT lee ALTO.
- Un objeto sólido en la ranura (una tira de cartulina, la yema de un dedo, un diente de un disco codificador) → la luz se corta → OUT lee BAJO.
En el módulo hay un disparador Schmitt. Convierte el nivel de luz en un 0 o un 1 limpio, sin rebotes entre ellos. Por eso, tu programa no necesita ningún código antirrebote.
Ten en cuenta:
- El vidrio y el plástico transparente pueden dejar pasar la luz infrarroja, así que el sensor puede no verlos. Elige algo por lo que la luz no pueda pasar.
- Algunos módulos de otras marcas usan lógica invertida: BAJO cuando la ranura está vacía. Si el primer programa de abajo indica "bloqueado" con la ranura vacía, cambia BAJO y ALTO en ese programa. El programa de velocidad funciona con ambos tipos, porque cuenta un flanco por diente.
Especificaciones
| 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,3 V a 5 V CC |
| Salida | digital (TTL), BAJA cuando está bloqueado, ALTA cuando está libre |
| Acondicionamiento de señal | disparador Schmitt integrado |
| Montaje | orificios para tornillos M3 en ambos extremos |
| Pines | 3 (VCC, GND, OUT) |
Dónde se usa:
- Un tacómetro: pon un disco codificador en un motor y lee sus rpm.
- Información sobre qué tan rápido gira la rueda de un robot.
- Contar piezas, pulsos u objetos en una cinta.
- Calcular la distancia contando cuántas veces gira una rueda.
- Un final de carrera o interruptor de posición inicial sin contactos móviles.
Diagrama de pines

- Pin OUT: la señal digital. Conéctalo a una entrada digital del Arduino Nano ESP32 (D2 en esta guía).
- Pin GND: conéctalo a GND (0 V).
- Pin VCC: conéctalo al pin de 3,3 V del Arduino Nano ESP32. El módulo funciona con cualquier voltaje entre 3,3 V y 5 V.
Los lotes no son todos iguales, y los tres pines pueden venir en otro orden. Confía en las etiquetas de tu propia placa, no en el orden de una imagen.
Diagrama de Cableado
El Nano ESP32 funciona con lógica de 3,3 V, y sus pines de entrada no están hechos para 5 V. La señal OUT sube hasta el voltaje que hay en VCC, así que alimentamos el sensor desde el pin de 3,3 V y no desde 5 V. De esta forma, D2 nunca ve más de 3,3 V.

This image is created using Fritzing. Click to enlarge image
D2 también acepta una interrupción, que el programa de velocidad usa más adelante.
Cómo programar el sensor de velocidad óptico ranurado IR
Hay dos formas de leer este sensor. Cuál conviene depende de lo rápido que pasen los objetos por la ranura.
Forma 1 - leer el pin en loop() (buena para objetos lentos):
- Indica a la placa que D2 es una entrada.
- Haz una lectura. Un valor BAJO significa que la ranura está bloqueada.
- Haz algo solo cuando la nueva lectura no sea igual a la anterior, y luego guárdala para la próxima vez.
Forma 2 - deja que una interrupción cuente (necesaria para un disco que gira):
- Crea el contador con la palabra volatile, porque la función de interrupción lo cambia en segundo plano.
- Escribe la función de interrupción. En el chip ESP32, añade IRAM_ATTR antes de su nombre. Esto pone la función en la RAM interna rápida del chip, así que puede ejecutarse al instante, cada vez.
- Enlaza la función con D2. FALLING significa que la función se ejecuta cuando OUT baja de ALTO a BAJO, lo que ocurre una vez cada vez que un diente entra en la ranura.
- Cada segundo, toma la cuenta, ponla a cero y conviértela en rpm.
¿Cómo funciona la cuenta? Digamos que el disco tiene 20 ranuras. Entonces 20 pulsos son una vuelta completa. Multiplica los pulsos de un segundo por 60 y tendrás los pulsos por minuto. Divide eso entre 20 y tendrás las vueltas por minuto, que son las rpm.
Código del Arduino Nano ESP32 - Contar objetos que pasan por la ranura
El programa de abajo lee D2 una y otra vez. Aparece una línea nueva en el Monitor Serie solo cuando la ranura cambia de libre a bloqueada, o al revés. Cada vez que se bloquea, el contador sube en uno.
Pasos R\u00e1pidos
Sigue estas instrucciones paso a paso:
- ¿Eres nuevo con el Nano ESP32? Primero consulta cómo configurar el Arduino Nano ESP32 en el IDE de Arduino.
- Conecta los componentes según el diagrama. Comprueba bien que VCC va a 3,3 V.
- Conecta el Arduino Nano ESP32 a tu ordenador con el cable Type-C.
- Inicia el IDE de Arduino en tu ordenador.
- Selecciona la placa Arduino Nano ESP32 (por ejemplo, Arduino Nano ESP32) y su puerto COM.
- Pega el código en un nuevo sketch.
- Pulsa el botón Subir y espera a que termine.
- Abre el Monitor Serie y elige 9600 baudios.
- Mete una tira de cartulina en la ranura, mantenla un momento y sácala. Repite dos veces más.
- Lee los mensajes:
La cartulina produce una línea "blocked" al entrar y una línea "clear" al salir. Mientras la mantienes quieta, la pantalla no muestra nada nuevo.
Código del Arduino Nano ESP32 - Leer la velocidad del motor (rpm)
Un disco rápido puede hacer pasar muchos dientes por la ranura entre dos pasadas de loop(), así que el sondeo perdería algunos. Este programa usa una interrupción. La función countPulse() está marcada con IRAM_ATTR para que el ESP32 la guarde en memoria rápida y pueda saltar a ella de inmediato. Una vez por segundo, el programa muestra cuántos pulsos recibió y la velocidad en rpm.
Busca SLOTS_PER_TURN cerca del principio. Vale 20, el número de ranuras del disco codificador que suele venir con los motorreductores TT. Cuenta las ranuras de tu propio disco y pon aquí ese número si no es 20.
Montar el disco codificador
- Empuja el disco sobre el eje del motor (o únelo a la rueda).
- Alinea el sensor para que el borde del disco, con sus dientes, pase dentro de la ranura.
- Gira el disco despacio con la mano para asegurarte de que nunca roza las paredes de la U.
- Para hacerlo girar, usa la mano o haz funcionar el motor. El motor tiene su propio cableado, explicado en el tutorial Arduino Nano ESP32 - Motor de CC.
Pasos R\u00e1pidos
- No cambies el cableado del sensor.
- Pega el código de rpm en el IDE de Arduino.
- Pulsa Subir.
- Abre el Monitor Serie a 9600 baudios.
- Haz girar el disco y luego déjalo parar.
- Mira los números. En esta prueba el motor gira a unas 300 rpm:
Prueba la cuenta con la línea de 101: 101 × 60 ÷ 20 = 303 rpm. La primera y la última línea muestran 0 porque el disco no se mueve.
Para la rueda de un robot, también puedes calcular cuánto ha rodado: número de vueltas × π × diámetro de la rueda.
※ Nota:
- Pon muy poco código dentro de countPulse(). Nunca imprimas desde ella.
- Toda variable que cambie la función de interrupción necesita la palabra clave volatile.
- Mantén IRAM_ATTR delante de la función de interrupción, para que se quede en memoria rápida.
- Para detectar un objeto delante del sensor (no dentro de una ranura), consulta el tutorial del sensor de obstáculos. Para una perilla que también indica la dirección, consulta el tutorial del 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.