UNIVERSIDAD AUTÓNOMA DE COAHUILA
Facultad de Ingeniería Mecánica y Eléctrica
PROYECTO DE LABORATORIO
Diseño e Implementación de una Banda
Transportadora con Sistema de Monitoreo de
Velocidad Angular
Materia: Máquinas Eléctricas II
Profesor: Ing. Antonio Rivas Aguilar
Carrera: Ingeniería Mecánica Eléctrica (Acentuación en Eléctrica y Electrónica)
Grado y Sección: 6to Semestre | Sección C | Salón #11
Integrantes:
Fernando Villarreal Rodríguez
Luis Antonio Montoya Martínez
Javier Antonio Robles Carlos
Eduardo Ortiz Aguayo
Herson Samuel García Hernández
Cristian Leonardo García Gonzales
Monclova, Coahuila, México
Mayo de 2026
UAdeC - FIME Máquinas Eléctricas II
1. Introducción
En el ámbito de la automatización industrial y los sistemas de conversión de energía, las
bandas transportadoras representan uno de los mecanismos de transferencia cinemática
más utilizados en las líneas de producción, ensamblaje y logística masiva. El control y
la monitorización precisa de su velocidad angular resultan indispensables para garantizar
la sincronía de los procesos, prevenir sobrecargas mecánicas en los elementos motores y
optimizar la eficiencia operativa del sistema completo.
Este reporte técnico documenta el diseño, la construcción estructural y el desarrollo del
sistema electrónico de instrumentación para una banda transportadora a escala. El núcleo
del sistema mecánico se compone de una estructura rígida fabricada en fibra de densi-
dad media (MDF) mediante tecnología de corte láser, acoplada a un elemento motriz
electromecánico (motorreductor). Por su parte, la sección analítico-digital e instrumental
fundamenta su operación en la plataforma microcontroladora Arduino Uno, encargada
de decodificar mediante interrupciones de hardware las señales ópticas de un sensor in-
frarrojo, permitiendo el cálculo de las revoluciones por minuto (RPM) en tiempo real
y desplegando las magnitudes obtenidas en un módulo de visualización alfanumérico de
cristal líquido (LCD).
2. Objetivos
Objetivo General
Diseñar, ensamblar e instrumentar un prototipo funcional de banda transportadora au-
tomatizada, capaz de cuantificar de forma dinámica y precisa la velocidad angular del
rodillo motriz principal empleando un sensor óptico y un microcontrolador.
Objetivos Específicos
Desarrollar y ensamblar la estructura del chasis, poleas y engranajes mecánicos en
madera MDF utilizando planos vectoriales optimizados para corte por láser.
Implementar el circuito de acondicionamiento eléctrico para interconectar el sen-
sor óptico TCRT5000, el microcontrolador Arduino Uno y la pantalla LCD 1602A
acoplada por bus de comunicación I2C.
Programar un algoritmo en entorno embebido C/C++ utilizando interrupciones ex-
ternas por flancos de subida, optimizando el cálculo de frecuencias mediante técnicas
aritméticas de punto fijo para evitar retardos críticos en el procesador.
1
UAdeC - FIME Máquinas Eléctricas II
Aplicar un filtro digital de media móvil programada para estabilizar las lecturas del
tacómetro digital ante fluctuaciones cinemáticas o ruidos ambientales.
3. Materiales y Equipo
Para la realización física y el despliegue electrónico del prototipo de banda transportadora,
se dispuso de los siguientes componentes analógicos, digitales y estructurales:
Cant. Componente / Modelo / Función en el Sistema
Material Serie
1 Sensor Infrarrojo de TCRT5000 Detección de flancos ópticos y
Reflexión (MH-Sensor) generación de pulsos digitales
por revolución.
1 Pantalla de Cristal LCD 1602A Despliegue visual de datos
Líquido cinemáticos (magnitud calculada
en RPM).
1 Módulo Adaptador de PCF8574T Reducción del cableado de la
Bus I2C pantalla LCD a únicamente dos
líneas de datos serie (SDA y
SCL).
1 Placa de Desarrollo Arduino Uno V3 Procesamiento central de
Embebido interrupciones, cálculo temporal
analítico y control periférico.
1 Actuador Motorreductor Provisión del torque y
Electromecánico de CD movimiento rotacional requerido
para el arrastre de la banda.
– Chasis y Componentes MDF (Corte Estructura general, rodillos de
Mecánicos Láser) tracción, engranajes reductores y
soportes de fijación.
2
UAdeC - FIME Máquinas Eléctricas II
4. Diseño Mecánico y Estructural
El diseño físico se basó en una arquitectura modular en MDF. Las piezas fueron vec-
torizadas para permitir un ensamble mediante uniones de tipo caja y espiga (muescas),
asegurando una alta rigidez estructural y reduciendo la necesidad de fijaciones mecánicas
complejas externas. El conjunto incorpora ranuras longitudinales para el deslizamiento y
tensado de la banda elástica conductora, alojamientos dedicados para rodamientos o ejes
de los rodillos, y un tren de engranajes cortados con precisión geométrica para transferir
la potencia mecánica desde el eje del motorreductor hacia el rodillo motriz primario.
Figura 1: Distribución geométrica y piezas vectoriales en MDF para el corte láser de la
estructura.
5. Circuito de Conexión Eléctrica e Instrumentación
La configuración del hardware eléctrico integra tres bloques fundamentales: alimentació-
n/actuación, sensado digital y visualización de datos. El sensor infrarrojo TCRT5000 se
alimenta a 5V y GND comunes desde el bus del Arduino, y su salida digital (D0) se
acopla directamente al pin digital 2 del microcontrolador para aprovechar los vectores de
interrupción de hardware externos (INT0).
El módulo LCD 1602A se comunica mediante protocolo síncrono serial I2C. Sus pines
de señal se vinculan a las líneas analógicas dedicadas de la tarjeta Arduino: SDA al
pin analógico A4 y SCL al pin analógico A5. Esta topología minimiza el ruido eléctrico
inducido y optimiza las líneas físicas del circuito impreso.
3
UAdeC - FIME Máquinas Eléctricas II
Figura 2: Diagrama esquemático de interconexiones eléctricas del tacómetro digital.
6. Código del Programa
1 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
2 // TACOMETRO DIGITAL PARA BANDA TRANSPORTADORA CON ARDUINO
3 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
4
5 // 1. L i b r e r a s e I n i c i a l i z a c i n de Objetos
6 # include < LiquidCrystal_I2C .h >
7 // Inicializar la pantalla LCD en la d i r e c c i n I2C 0 x27 (16
columnas x 2 filas )
8 LiquidCrystal_I2C lcd (0 x27 , 16 , 2) ;
9
10 // 2. Constantes de C o n f i g u r a c i n M e c n i c a y Tiempos
11 const byte PulsesPerRevolution = 2; // Cantidad de marcas / muescas
por r e v o l u c i n en la polea
12 const unsigned long ZeroTimeout = 100000; // Tiempo l m i t e (
microsegundos ) para decretar velocidad cero (0.1 s )
13 const byte numReadings = 2; // T a m a o del b f e r
circular para el filtro de media m v i l
14
15 // 3. Variables Globales y de Control ( V o l t i l e s para
Interrupciones )
16 volatile unsigned long LastTimeWeMeasured ; // Guarda el tiempo
absoluto del ltimo pulso capturado
17 volatile unsigned long PeriodBetweenPulses = ZeroTimeout + 1000; //
Tiempo entre los ltimos dos pulsos
4
UAdeC - FIME Máquinas Eléctricas II
18 volatile unsigned long PeriodAverage = ZeroTimeout + 1000; //
Periodo promedio calculado
19 unsigned int PulseCounter = 1; // Contador interno de
pulsos del bloque
20 unsigned long PeriodSum ; // Sumatoria acumulada
de periodos
21
22 // Variables de Procesamiento C i n e m t i c o y Escalamiento
23 unsigned long FrequencyRaw ; // Frecuencia bruta
escalada internamente para alta p r e c i s i n
24 unsigned long FrequencyReal ; // Frecuencia real
calculada en Hz
25 unsigned long RPM ; // Valor i n s t a n t n e o de
Revoluciones por Minuto
26 unsigned long LastTimeCycleMeasure = LastTimeWeMeasured ; //
Registro temporal seguro del lazo principal
27 unsigned long CurrentMicros = micros () ; // Variable para
almacenar el tiempo de e j e c u c i n actual
28 unsigned int AmountOfReadings = 1; // Cantidad d i n m i c a de
muestras a procesar ( mapeada )
29 unsigned int ZeroDebouncingExtra ; // H i s t r e s i s / Margen
de seguridad anti - rebote en paro
30
31 // Variables del Filtro Digital de Media M v i l ( Suavizado del
Tac metro )
32 unsigned long readings [ numReadings ]; // Arreglo ( b f e r ) para
almacenar las ltimas RPM medidas
33 unsigned long readIndex ; // Puntero / ndice de
escritura en el b f e r circular
34 unsigned long total ; // Sumatoria acumulada
de los valores dentro del b f e r
35 unsigned long average ; // Velocidad promedio
suavizada final
36
37 void setup () {
38 // Inicializar c o m u n i c a c i n serial para monitoreo en laboratorio
a 9600 baudios
39 Serial . begin (9600) ;
40
41 // Inicializar pantalla LCD y activar luz de fondo
42 lcd . init () ;
5
UAdeC - FIME Máquinas Eléctricas II
43 lcd . backlight () ;
44
45 // Configurar i n t e r r u p c i n externa por hardware en el Pin
Digital 2 ( INT0 )
46 // Llama a la f u n c i n " Pulse_Event " en cada flanco de subida (
RISING ) del sensor TCRT5000
47 attachInterrupt ( digitalPinToInterrupt (2) , Pulse_Event , RISING ) ;
48
49 delay (1000) ; // Pausa de un segundo para e s t a b i l i z a c i n
e l c t r i c a del sistema
50 }
51
52 void loop () {
53 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
54 // PARTE A : CAPTURA TEMPORAL Y P R E V E N C I N DE DESBORDAMIENTOS
55 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
56 LastTimeCycleMeasure = LastTimeWeMeasured ; // Guardar copia
segura de la variable v o l t i l
57 CurrentMicros = micros () ; // Leer el
temporizador interno del procesador
58
59 // Prevenir errores en los c l c u l o s si ocurre un desbordamiento
( rollover ) de micros ()
60 if ( CurrentMicros < LastTimeCycleMeasure ) {
61 LastTimeCycleMeasure = CurrentMicros ;
62 }
63
64 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
65 // PARTE B : C L C U L O C I N E M T I C O DE FRECUENCIA Y VELOCIDAD ( RPM )
66 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
67 // E c u a c i n base escalada artificialmente (10^10) para operar
con enteros sin perder p r e c i s i n decimal
68 FrequencyRaw = 10000000000 / PeriodAverage ;
69
70 // C o n d i c i n de paro : Si excede el tiempo l m i t e sin pulsos , la
banda e s t est tica
71 if ( PeriodBetweenPulses > ZeroTimeout - ZeroDebouncingExtra ||
CurrentMicros - LastTimeCycleMeasure > ZeroTimeout -
ZeroDebouncingExtra ) {
72 FrequencyRaw = 0; // Forzar la frecuencia a 0 Hz
6
UAdeC - FIME Máquinas Eléctricas II
73 ZeroDebouncingExtra = 2000; // Aplicar retraso de
a m o r t i g u a c i n para el anti - rebote
74 } else {
75 ZeroDebouncingExtra = 0; // Restablecer margen d i n m i c o
normal
76 }
77
78 // Desescalar la frecuencia bruta para obtener la magnitud real
en Hz
79 FrequencyReal = FrequencyRaw / 10000;
80
81 // Calcular las RPM considerando los pulsos m e c n i c o s por vuelta
y la escala temporal
82 RPM = FrequencyRaw / PulsesPerRevolution * 60;
83 RPM = RPM / 10000; // Remover el factor de escala decimal
84
85 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
86 // PARTE C : FILTRO DIGITAL DE MEDIA M V I L ( SUAVIZADO C I N E M T I C O
)
87 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
88 total = total - readings [ readIndex ]; // Restar de la suma
la lectura m s antigua del b f e r
89 readings [ readIndex ] = RPM ; // Insertar la nueva
lectura de RPM en la p o s i c i n actual
90 total = total + readings [ readIndex ]; // Sumar la nueva
lectura al total acumulado
91 readIndex = readIndex + 1; // Desplazar el
ndice al siguiente espacio
92
93 // Si el ndice llega al final del t a m a o del b f e r , reinicia
al origen ( b f e r circular )
94 if ( readIndex >= numReadings ) {
95 readIndex = 0;
96 }
97
98 // Calcular el promedio m a t e m t i c o real de las muestras
contenidas
99 average = total / numReadings ;
100
101
102
7
UAdeC - FIME Máquinas Eléctricas II
103 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
104 // PARTE D : DESPLIEGUE DE VARIABLES ( MONITOR SERIE Y PANTALLA LCD
)
105 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
106 // T r a n s m i s i n de datos al puerto serie para g r a f i c a c i n o
diagn stico
107 Serial . print ( " Period : " ) ;
108 Serial . print ( PeriodBetweenPulses ) ;
109 Serial . print ( " \ tReadings : " ) ;
110 Serial . print ( AmountOfReadings ) ;
111 Serial . print ( " \ tFrequency : " ) ;
112 Serial . print ( FrequencyReal ) ;
113 Serial . print ( " \ tRPM : " ) ;
114 Serial . print ( RPM ) ;
115 Serial . print ( " \ tTachometer : " ) ;
116 Serial . println ( average ) ;
117
118 // Escritura de datos d i n m i c o s en el bloque superior del LCD
1602 A
119 lcd . setCursor (0 , 0) ;
120 lcd . print ( " RPM : " ) ;
121 lcd . print ( RPM ) ;
122 lcd . print ( " " ) ; // Espacios en blanco para limpiar caracteres
fantasma residuales
123 }
124
125 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
126 // FUNCIONES AUXILIARES ( RUTINAS DE SERVICIO DE I N T E R R U P C I N )
127 // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
128
129 // Rutina ISR que se ejecuta de forma prioritaria en cada pulso
f s i c o del sensor ptico
130 void Pulse_Event () {
131 // Calcular la d u r a c i n del periodo restando el tiempo anterior
del tiempo actual
132 PeriodBetweenPulses = micros () - LastTimeWeMeasured ;
133 LastTimeWeMeasured = micros () ; // Registrar el tiempo absoluto de
este pulso para la siguiente i t e r a c i n
134
135 // Comprobar si ya se c o m p l e t el bloque de lecturas establecido
para el promedio interno
8
UAdeC - FIME Máquinas Eléctricas II
136 if ( PulseCounter >= AmountOfReadings ) {
137 PeriodAverage = PeriodSum / AmountOfReadings ; // Obtener el
periodo promedio del bloque analizado
138 PulseCounter = 1; // Reiniciar el
contador secuencial de pulsos
139 PeriodSum = PeriodBetweenPulses ; // Inicializar una
nueva sumatoria con el dato actual
140
141 // Modificar d i n m i c a m e n t e el t a m a o de muestras s e g n el
periodo ( mapeo inverso de velocidad )
142 int Remape dAmountOfRe adings = map ( PeriodBetweenPulses , 40000 ,
5000 , 1 , 10) ;
143 RemapedAmo untOfReadi ngs = constrain ( RemapedAmountOfReadings , 1 ,
10) ; // Restringir entre un rango seguro de 1 y 10
144 AmountOfReadings = RemapedAmo untOfReadi ngs ; // Asignar el
nuevo valor del t a m a o de bloque
145 } else {
146 PulseCounter ++; // Incrementar la cuenta de pulsos detectados
dentro del bloque actual
147 PeriodSum = PeriodSum + PeriodBetweenPulses ; // Acumular el
periodo en la sumatoria parcial
148 }
149 }
9
UAdeC - FIME Máquinas Eléctricas II
7. Resultados y Discusión
Al energizar el motorreductor, el movimiento de rotación fue transferido de forma suave
hacia la banda transportadora. Conforme las marcas de referencia cortadas en la polea
principal pasaban de manera sucesiva frente al haz del sensor óptico TCRT5000, el in-
dicador LED integrado en el módulo MH-Sensor evidenció la conmutación de los flancos
lógicos intermitentes, confirmando la correcta transducción de la variable física a señal
digital binaria.
En el monitor serie de la computadora y en el display de la LCD 1602A se validó el
correcto funcionamiento del filtro digital implementado en el firmware. A bajas velocida-
des mecánicas, el algoritmo adaptó dinámicamente el búfer de lecturas evitando caídas
abruptas falsas de frecuencia, mientras que a velocidades de régimen nominal el filtrado
por media móvil suavizó las ligeras oscilaciones inherentes a las excentricidades físicas del
MDF cortado por láser. El sistema demostró responder de manera ágil ante variaciones
de voltaje de alimentación del motor, recalculando instantáneamente el nuevo régimen de
RPM de forma lineal y estable.
8. Conclusiones
La realización experimental de este prototipo instrumental de banda transportadora per-
mitió unificar los conceptos analíticos fundamentales de la materia de Máquinas Eléctricas
II con las tecnologías de control moderno y manufactura digital CAD/CAM. Se compro-
bó la alta viabilidad técnica de integrar microcontroladores de bajo costo para tareas de
metrología industrial de precisión en sistemas dinámicos.
Desde la perspectiva de la ingeniería mecánica eléctrica, el entendimiento del sensado
mediante interrupciones resulta de vital importancia, dado que es la base tecnológica del
control en lazo cerrado para accionamientos eléctricos industriales de gran potencia, como
inversores de frecuencia y servomotores. Asimismo, se concluye que el diseño geométrico
y mecánico robusto interactúa directamente con el desempeño electrónico; una correcta
tolerancia de corte en el MDF mitiga el ruido por vibración mecánica que de otro modo
afectaría la respuesta lineal de los sensores de instrumentación.
10