0% encontró este documento útil (0 votos)
2 vistas19 páginas

P6MICRO

La práctica 6 del Instituto Tecnológico de Durango se centra en la implementación de un sistema basado en Arduino que combina la lectura de sensores digitales y analógicos para controlar la intensidad lumínica de LEDs mediante modulación por ancho de pulso (PWM). Se exploran conceptos fundamentales como el microcontrolador ATMEGA328P, el convertidor analógico-digital (ADC), y la integración de sensores infrarrojos y potenciómetros. El objetivo es comprender y aplicar la lógica de control para encender LEDs según la detección de objetos y ajustar su brillo según la posición de un potenciómetro.

Cargado por

Alejandro Medina
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
2 vistas19 páginas

P6MICRO

La práctica 6 del Instituto Tecnológico de Durango se centra en la implementación de un sistema basado en Arduino que combina la lectura de sensores digitales y analógicos para controlar la intensidad lumínica de LEDs mediante modulación por ancho de pulso (PWM). Se exploran conceptos fundamentales como el microcontrolador ATMEGA328P, el convertidor analógico-digital (ADC), y la integración de sensores infrarrojos y potenciómetros. El objetivo es comprender y aplicar la lógica de control para encender LEDs según la detección de objetos y ajustar su brillo según la posición de un potenciómetro.

Cargado por

Alejandro Medina
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Microcontroladores.

“Práctica 6”

Instituto Tecnológico de Durango.

Nombre del alumno: Medina Rosales Alejandro.

Número de control: 23040668

Grupo: 6°“L” Carrera: Electrónica.

Nombre del profesor: Hernández Marines Mario Gerardo.

Fecha de entrega: miércoles 20 de mayo de 2026.


Introducción.

En el campo de los sistemas embebidos, la capacidad de interactuar con el mundo


real requiere que el microcontrolador pueda procesar dos tipos fundamentales de
señales: las señales digitales, que solo pueden tomar dos valores (0 o 1, falso o
verdadero, bajo o alto), y las señales analógicas, que varían de forma continua
dentro de un rango de valores. Mientras que las señales digitales son directamente
comprensibles por el microcontrolador, las señales analógicas deben ser
convertidas a un valor numérico mediante un convertidor analógico-digital (ADC)
antes de poder ser procesadas. De manera similar, cuando se desea generar una
salida que no sea simplemente encender o apagar un elemento, como controlar el
brillo de un LED o la velocidad de un motor, se utiliza la modulación por ancho de
pulso (PWM).

La presente práctica, denominada "Adquisición de Señales Analógicas y Digitales


con Control de Intensidad Lumínica mediante PWM", tiene como objetivo
implementar un sistema basado en la plataforma Arduino que combine la lectura de
sensores digitales (sensores infrarrojos de proximidad) y de un sensor analógico
(potenciómetro), para controlar el encendido y la intensidad de dos LEDs de salida.
El sistema funciona de la siguiente manera: cada sensor infrarrojo actúa como un
interruptor que habilita el encendido de su LED correspondiente. Cuando un sensor
detecta la presencia de un objeto, el LED asociado se enciende. La intensidad con
la que se enciende este LED no es fija, sino que está determinada por la posición
de un potenciómetro, que el usuario puede ajustar para variar el brillo de manera
continua.

Esta configuración simula aplicaciones reales como sistemas de iluminación


inteligente, control de intensidad lumínica en función de la detección de presencia,
o sistemas de indicación visual cuyo brillo debe ser ajustable según las condiciones
ambientales o las preferencias del usuario. A lo largo de esta práctica se abordarán
conceptos fundamentales como la arquitectura del microcontrolador ATMEGA328,
la plataforma Arduino, el funcionamiento del convertidor analógico-digital (ADC), la
modulación por ancho de pulso (PWM), y la integración de sensores digitales y
analógicos en un mismo sistema.

Marco Teórico.
El microcontrolador ATMEGA328P:

El corazón de la plataforma Arduino Uno (y de muchas otras placas compatibles) es


el microcontrolador ATMEGA328P, fabricado por Microchip Technology
(anteriormente Atmel). Este microcontrolador de 8 bits pertenece a la familia AVR,
una arquitectura RISC (Reduced Instruction Set Computer) que se caracteriza por
su eficiencia, bajo consumo y facilidad de programación.

Características principales del ATMEGA328P:

• Arquitectura: CPU AVR de 8 bits con tecnología RISC. La mayoría de las


instrucciones se ejecutan en un solo ciclo de reloj, lo que proporciona un
rendimiento de hasta 20 MIPS (Millones de Instrucciones Por Segundo) a 20
MHz.
• Memoria: Dispone de 32 KB de memoria Flash para almacenar el programa,
2 KB de memoria SRAM (Static Random Access Memory) para variables en
tiempo de ejecución, y 1 KB de memoria EEPROM (Electrically Erasable
Programmable Read-Only Memory) para almacenamiento persistente de
datos.
• Frecuencia de operación: Puede operar a frecuencias desde 1 MHz hasta 20
MHz. En la placa Arduino Uno, la frecuencia estándar es de 16 MHz.
• Periféricos integrados: Incluye múltiples periféricos que lo hacen muy versátil:
convertidor analógico-digital (ADC) de 10 bits con 6 canales (y hasta 8 en
algunos encapsulados), temporizadores de 8 y 16 bits con capacidades
PWM, interfaz USART para comunicación serial (UART), interfaz SPI (Serial
Peripheral Interface), interfaz I2C (Two-Wire Interface), y comparador
analógico.
• Pines de entrada/salida: Ofrece hasta 23 pines de E/S digitales, de los cuales
6 pueden funcionar como entradas analógicas y 6 pueden generar señales
PWM.

El convertidor analógico-digital (ADC):

El ADC es uno de los periféricos más importantes cuando se trabaja con señales
del mundo real, ya que la mayoría de los sensores (temperatura, luz, presión,
posición, etc.) producen señales analógicas. El ATMEGA328P incorpora un ADC de
aproximaciones sucesivas (Successive Approximation Register - SAR) con las
siguientes características:

• Resolución de 10 bits: Esto significa que el ADC puede dividir el rango de


voltaje de entrada (típicamente de 0V a 5V en Arduino) en 2^10 = 1024
niveles discretos. Por lo tanto, un valor de 0 corresponde a 0V, un valor de
1023 corresponde a 5V, y cada unidad digital corresponde aproximadamente
a 5V / 1024 = 4.88 mV.
• Canales multiplexados: El ADC tiene un solo convertidor, pero puede
seleccionar entre diferentes pines de entrada mediante un multiplexor
analógico. Esto permite tener múltiples entradas analógicas con un solo ADC.
• Tiempo de conversión: Una conversión típica toma 13 ciclos del reloj del
ADC. Con una frecuencia de reloj del ADC de 125 kHz (la recomendada para
máxima resolución), el tiempo de conversión es de aproximadamente 104
microsegundos.
• Voltaje de referencia: El ADC puede utilizar diferentes fuentes de voltaje de
referencia: AVCC (tensión de alimentación analógica, típicamente 5V),
referencia interna de 1.1V, o una referencia externa aplicada al pin AREF.

El proceso de conversión analógica-digital implica varias etapas: muestreo (capturar


el valor del voltaje en un instante específico), retención (mantener ese valor estable
durante la conversión), cuantificación (asignar el voltaje al nivel discreto más
cercano) y codificación (generar el valor digital binario).

Modulación por ancho de pulso (PWM):

La modulación por ancho de pulso es una técnica que permite generar señales
analógicas de salida utilizando pines digitales. Un pin digital solo puede estar en dos
estados: alto (típicamente 5V) o bajo (0V). Sin embargo, si se conmuta este pin
entre alto y bajo muy rápidamente, y se varía el tiempo que permanece en alto
respecto al tiempo total del ciclo (lo que se conoce como ciclo de trabajo o duty
cycle), el valor promedio de la señal puede ser cualquier valor entre 0V y 5V.

• Frecuencia de PWM: Es el número de ciclos por segundo. En Arduino, la


frecuencia de PWM típica es de aproximadamente 490 Hz o 980 Hz,
dependiendo del pin y la configuración de los temporizadores.
• Ciclo de trabajo (Duty Cycle): Es el porcentaje del tiempo que la señal
permanece en nivel alto durante un ciclo. Un duty cycle del 0% significa que
la señal siempre está en bajo (0V efectivo), un duty cycle del 100% significa
que siempre está en alto (5V efectivo), y un duty cycle del 50% significa que
está la mitad del tiempo en alto y la mitad en bajo, resultando en un valor
promedio de 2.5V.
• Resolución de PWM: En Arduino, la función `analogWrite()` acepta valores
de 0 a 255, donde 0 corresponde a duty cycle 0% y 255 a duty cycle 100%.
Esto proporciona una resolución de 8 bits.
• Implementación mediante temporizadores: El PWM en el ATMEGA328P se
implementa utilizando los temporizadores internos. Cada temporizador
puede generar señales PWM en uno o más pines. Por ejemplo, el Timer0
controla los pines 5 y 6, el Timer1 controla los pines 9 y 10, y el Timer2
controla los pines 3 y 11.

Sensores infrarrojos de proximidad:

Los sensores infrarrojos utilizados en esta práctica son sensores digitales de


proximidad. Su funcionamiento se basa en la emisión de luz infrarroja y la detección
de la luz reflejada por un objeto cercano.

• Principio de funcionamiento: Un LED infrarrojo emite luz en una longitud de


onda específica (típicamente 940 nm). Un fototransistor o fotodiodo infrarrojo,
colocado junto al emisor, detecta la intensidad de la luz infrarroja reflejada.
Cuando un objeto se acerca, más luz es reflejada hacia el receptor, lo que
provoca un cambio en la salida del sensor.
• Salida digital: La mayoría de estos sensores incluyen un circuito comparador
que convierte la señal analógica del receptor en una señal digital. El usuario
puede ajustar un potenciómetro en el módulo para establecer el umbral de
detección. Cuando la luz reflejada supera este umbral, la salida cambia de
estado.
• Nivel lógico de detección: Es importante notar que muchos de estos sensores
son "Active Low", lo que significa que ponen su salida en nivel bajo (0V, LOW)
cuando detectan un objeto, y en nivel alto (5V, HIGH) cuando no hay
detección. Esto es exactamente lo contrario de lo que se podría esperar
intuitivamente, y debe tenerse en cuenta al programar la lógica de control.
• Aplicaciones: Control de presencia, detección de objetos en cintas
transportadoras, sensores de límite en robótica, contadores de personas, etc.

Potenciómetro como sensor analógico:


Un potenciómetro es un resistor variable de tres terminales: dos extremos
conectados a VCC y GND, y el terminal central (cursor) que se desliza a lo largo del
elemento resistivo. La posición del cursor determina la fracción de la resistencia
total, y por lo tanto, el voltaje presente en el terminal central.

• Principio de funcionamiento: El potenciómetro actúa como un divisor de


tensión ajustable. Si los extremos se conectan a 5V y GND, el voltaje en el
cursor varía linealmente entre 0V y 5V a medida que se gira el eje.
• Uso como sensor: Al conectar el cursor a una entrada analógica del
microcontrolador, se puede leer la posición angular del potenciómetro. Esto
permite al usuario controlar analógicamente cualquier parámetro del sistema:
intensidad de luz, velocidad de un motor, volumen de un altavoz, posición de
un servomotor, etc.
• Ventajas: Es un componente sencillo, económico, robusto y no requiere
circuitos de acondicionamiento adicionales, ya que su salida es directamente
un voltaje en el rango adecuado para el ADC.

La plataforma Arduino:

Arduino no es un microcontrolador en sí mismo, sino una plataforma de desarrollo


de hardware y software que facilita enormemente el trabajo con microcontroladores
AVR.

• Hardware: La placa Arduino Uno (la más común) contiene un


microcontrolador ATMEGA328P, un regulador de voltaje, un oscilador de
cristal de 16 MHz, conectores USB para programación y comunicación, y una
serie de pines de E/S etiquetados para facilitar su uso.
• Entorno de desarrollo (IDE): El IDE de Arduino proporciona un entorno
simplificado para escribir, compilar y cargar programas (llamados sketches)
en la placa. Incluye un conjunto de funciones y librerías que abstraen la
complejidad de la programación directa de los registros del microcontrolador.
• Lenguaje de programación: El lenguaje de Arduino es esencialmente C++
con algunas simplificaciones y funciones específicas. Las dos funciones
fundamentales son `setup()`, que se ejecuta una sola vez al inicio para
configurar el sistema, y `loop()`, que se ejecuta repetidamente de forma
indefinida.
• Funciones clave utilizadas en esta práctica:
o `pinMode(pin, modo)`: Configura un pin digital como entrada o salida.
o `digitalRead(pin)`: Lee el valor de un pin digital (HIGH o LOW).
o `analogRead(pin)`: Lee el valor de un pin analógico, devolviendo un entero
de 10 bits (0 a 1023).
o `analogWrite(pin, valor)`: Genera una señal PWM en un pin, con un valor de
0 a 255 que determina el ciclo de trabajo.
o `map(valor, desde_min, desde_max, hasta_min, hasta_max)`: Función de
utilidad que reescala un número de un rango a otro.
o `delay(ms)`: Pausa la ejecución durante el número de milisegundos
especificado.

Objetivo.

Implementar un sistema basado en Arduino que integre la lectura de sensores


digitales (infrarrojos de proximidad) y de un sensor analógico (potenciómetro) para
controlar el encendido y la intensidad lumínica de dos LEDs mediante modulación
por ancho de pulso (PWM).

• Comprender la arquitectura y los periféricos del microcontrolador


ATMEGA328P, en particular el convertidor analógico-digital (ADC) y los
temporizadores para generación de PWM.
• Diferenciar entre señales analógicas y digitales, y comprender los procesos
de conversión ADC y generación PWM.
• Implementar la lectura de sensores digitales (infrarrojos) y analógicos
(potenciómetro) en la plataforma Arduino.
• Aplicar la función `map()` para escalar valores del rango de 10 bits del ADC
(0-1023) al rango de 8 bits del PWM (0-255).
• Implementar una lógica de control condicional basada en el estado de los
sensores infrarrojos para habilitar o deshabilitar los LEDs.
• Verificar mediante simulación o montaje físico el correcto funcionamiento del
sistema, donde la intensidad de los LEDs sea controlada por el potenciómetro
y su encendido por los sensores de proximidad.

Materiales y equipo.

• Computadora personal con el IDE de Arduino instalado.


• Placa Arduino Uno (o compatible) con microcontrolador ATMEGA328P.
• Cable USB tipo A a tipo B para programación y alimentación.
• 2 sensores infrarrojos de proximidad (módulos con salida digital, típicamente
basados en el comparador LM393).
• 1 potenciómetro de 10kΩ (lineal o rotatorio).
• 2 LEDs de cualquier color.
• 2 resistencias de 220Ω (limitadoras para los LEDs).
• Protoboard (breadboard) para realizar las conexiones.
• Cables de conexión (jumpers) macho-macho.
• Fuente de alimentación de 5V (opcional, si no se utiliza la alimentación por
USB).
• Multímetro (opcional, para verificar voltajes y continuidad).

Trabajo previo.
• Conocimientos adquiridos en clase: Fundamentos de sistemas embebidos y
microcontroladores.
• Conocimientos adquiridos en clase: Programación en lenguaje C/C++ para
microcontroladores.
• Conocimientos adquiridos en clase: Prácticas anteriores sobre comunicación
serial, UART y conversión ADC (en PIC).
• Conocimientos de asignaturas previas: Electrónica analógica y digital.
• Conocimientos de asignaturas previas: Interpretación de diagramas
esquemáticos.
• Investigar la arquitectura del microcontrolador ATMEGA328P, prestando
especial atención al ADC y a los temporizadores para PWM.
• Investigar las diferencias entre la programación directa de registros en un
PIC y el uso de las funciones simplificadas de Arduino.
• Investigar el funcionamiento de los sensores infrarrojos de proximidad,
incluyendo su rango de detección, tipo de salida (Active High vs Active Low)
y el ajuste del umbral mediante el potenciómetro integrado.
• Investigar el concepto de modulación por ancho de pulso (PWM) y su
implementación en el ATMEGA328P.
• Investigar la función `map()` de Arduino y cómo puede ser reemplazada por
operaciones aritméticas simples (como dividir entre 4).
• Realizar el cálculo teórico de la relación entre el valor del potenciómetro y el
duty cycle del PWM: si el ADC devuelve 0-1023 y `analogWrite()` espera 0-
255, la conversión puede ser intensidad = lecturaPot / 4.
• Diseñar el diagrama de conexión de todos los componentes en la protoboard.

Desarrollo.

1. Consultar la hoja de especificaciones del microcontrolador ATMEGA328P


para comprender a fondo el funcionamiento del ADC y los temporizadores.
2. Analizar el funcionamiento de los sensores infrarrojos de proximidad,
identificando el tipo de salida (Active Low) para ajustar la lógica del programa.
3. Investigar las funciones de Arduino utilizadas en el código: `pinMode()`,
`digitalRead()`, `analogRead()`, `analogWrite()`, `map()` y `delay()`.
4. Calcular la relación entre el valor leído del potenciómetro (0-1023) y el valor
de intensidad para PWM (0-255), tanto mediante la función `map()` como
mediante división entera entre 4.
5. Diseñar el esquema completo de conexión que incluya:
• El Arduino Uno con sus pines de alimentación (5V y GND).
• El potenciómetro conectado entre 5V y GND, con el terminal central
conectado al pin analógico A0.
• Los sensores infrarrojos alimentados a 5V y GND, con sus salidas
digitales conectadas a los pines digitales 2 y 4.
• Los LEDs con sus resistencias limitadoras de 220Ω conectados a los
pines digitales 3 y 5 (pines con capacidad PWM).
6. Elaborar un informe detallado que explique el flujo de datos desde la lectura
de los sensores hasta el control de los LEDs.
7. Investigar por qué los pines 3 y 5 fueron seleccionados para los LEDs (tienen
capacidad PWM), mientras que otros pines digitales como el 2 y 4 no la
tienen.
8. Investigar la importancia del pequeño retardo de 10ms (`delay(10)`) en el
bucle principal y cómo afecta la estabilidad de la lectura de los sensores.

Procedimiento.

Para el desarrollo de esta práctica, se implementó un sistema basado en la


plataforma Arduino Uno que integra la lectura de dos sensores infrarrojos de
proximidad (entradas digitales) y un potenciómetro (entrada analógica) para
controlar el encendido y la intensidad de dos LEDs mediante modulación por ancho
de pulso (PWM).

Análisis del código:

El código proporcionado está escrito en el lenguaje de Arduino (basado en C++) y


sigue la estructura típica de un sketch: una función `setup()` que se ejecuta una vez
al inicio, y una función `loop()` que se ejecuta repetidamente de forma indefinida.

Declaración de constantes (variables globales):

Al inicio del programa, se definen constantes simbólicas utilizando la palabra


reservada `const int`. Estas constantes asignan nombres descriptivos a los pines
utilizados:

• `pinPot = A0`: Define el pin analógico A0 para conectar el potenciómetro. El


prefijo 'A' indica un pin analógico, que internamente está conectado al
multiplexor del ADC.
• `pinIR1 = 2` y `pinIR2 = 4`: Definen los pines digitales 2 y 4 para conectar los
sensores infrarrojos. Estos pines se configurarán como entradas digitales.
• `pinLED1 = 3` y `pinLED2 = 5`: Definen los pines digitales 3 y 5 para conectar
los LEDs. Estos pines fueron seleccionados específicamente porque tienen
capacidad de generar señales PWM en el Arduino Uno (los pines con
capacidad PWM son 3, 5, 6, 9, 10 y 11).

Función setup():

Esta función se ejecuta una sola vez cuando el Arduino se enciende o se resetea.
Su propósito es configurar el estado inicial del sistema:

• `pinMode(pinIR1, INPUT)` y `pinMode(pinIR2, INPUT)`: Configuran los pines


de los sensores infrarrojos como entradas digitales. En Arduino, los pines son
entradas por defecto, pero es una buena práctica declararlo explícitamente.
• `pinMode(pinLED1, OUTPUT)` y `pinMode(pinLED2, OUTPUT)`: Configuran
los pines de los LEDs como salidas digitales. Esto es necesario porque los
pines de salida pueden entregar corriente (hasta 40 mA por pin en el
ATMEGA328P).
• `[Link](9600)`: Inicializa la comunicación serial (UART) a 9600
baudios. Esta línea es opcional y se incluye para propósitos de depuración,
permitiendo enviar mensajes a una computadora para verificar el
funcionamiento del programa. No es esencial para el funcionamiento básico
del sistema.

Función loop():

Esta función se ejecuta repetidamente mientras el Arduino esté alimentado.


Contiene la lógica principal del sistema.

• Lectura del potenciómetro: `int lecturaPot = analogRead(pinPot)`. La función


`analogRead()` devuelve un valor entero de 10 bits (0 a 1023) proporcional
al voltaje presente en el pin A0. Cuando el potenciómetro está en su posición
mínima (cursor a GND), la lectura es 0. Cuando está en su posición máxima
(cursor a VCC), la lectura es 1023.
• Conversión del valor ADC a rango PWM: `int intensidad = map(lecturaPot, 0,
1023, 0, 255)`. La función `map()` reescala el valor de 10 bits (0-1023) al
rango de 8 bits (0-255) que espera la función `analogWrite()` para controlar
el PWM. Esta función realiza una interpolación lineal. De manera equivalente,
se podría haber utilizado `int intensidad = lecturaPot / 4`, aprovechando que
1024 / 4 = 256, lo que es aproximadamente equivalente.
• Lectura de sensores infrarrojos: `bool deteccion1 = digitalRead(pinIR1)` y
`bool deteccion2 = digitalRead(pinIR2)`. La función `digitalRead()` devuelve
HIGH (1) o LOW (0) dependiendo del voltaje en el pin. Es importante notar el
comentario en el código que indica: "Muchos sensores IR son 'Active Low'
(mandan 0 cuando detectan)". Esto significa que si el sensor detecta un
objeto, la salida será LOW; si no hay detección, la salida será HIGH.
• Lógica de control para el LED 1: Se utiliza una estructura condicional `if-else`.
Si `deteccion1 == LOW` (es decir, el sensor ha detectado un objeto), se
ejecuta `analogWrite(pinLED1, intensidad)`. Esta función genera una señal
PWM en el pin 3 con un ciclo de trabajo proporcional al valor de `intensidad`.
Si el valor es 0, el LED está apagado; si es 255, el LED está al máximo brillo;
los valores intermedios producen brillos intermedios. Si el sensor no detecta
(`deteccion1 != LOW`), el LED se apaga con `analogWrite(pinLED1, 0)`.
• Lógica de control para el LED 2: Exactamente la misma estructura, pero
aplicada al pin 5 y al sensor conectado al pin 4.
• Retardo de estabilidad: `delay(10)` introduce una pausa de 10 milisegundos
al final de cada iteración del bucle. Esto evita que el bucle se ejecute
demasiado rápido, lo que podría causar inestabilidad en la lectura de los
sensores o un parpadeo perceptible en los LEDs. También reduce el
consumo de energía.

Conexión del circuito en la protoboard:

Conexión del potenciómetro:

• Se colocó un potenciómetro de 10kΩ en la protoboard.


• La terminal izquierda se conectó a la alimentación de 5V del Arduino.
• La terminal derecha se conectó a tierra (GND) del Arduino.
• El terminal central (cursor) se conectó al pin analógico A0 del Arduino.

Conexión de los sensores infrarrojos:

• Para cada sensor, se conectó el pin VCC a 5V.


• El pin GND se conectó a tierra.
• El pin de salida digital (OUT) del primer sensor se conectó al pin digital 2 del
Arduino.
• El pin de salida digital del segundo sensor se conectó al pin digital 4 del
Arduino.
• Se ajustó el potenciómetro de cada módulo sensor para establecer el umbral
de detección deseado (por ejemplo, detectar objetos a una distancia de 10
cm).

Conexión de los LEDs:

• El ánodo (pata larga) del LED 1 se conectó al pin digital 3 del Arduino a través
de una resistencia limitadora de 220Ω.
• El cátodo (pata corta) del LED 1 se conectó a tierra.
• El ánodo del LED 2 se conectó al pin digital 5 del Arduino a través de una
resistencia limitadora de 220Ω.
• El cátodo del LED 2 se conectó a tierra.

Simulación y verificación:

Se compiló el código en el IDE de Arduino y se cargó en la placa Arduino Uno. Se


observó el comportamiento del sistema:

• Cuando ningún sensor detectaba un objeto (los LEDs estaban apagados), se


podía girar el potenciómetro sin que ocurriera ningún cambio visible.
• Al acercar un objeto al primer sensor infrarrojo, el LED conectado al pin 3 se
encendía con una intensidad determinada por la posición del potenciómetro.
Si se giraba el potenciómetro, la intensidad del LED variaba en tiempo real.
• Al acercar un objeto al segundo sensor infrarrojo, el LED conectado al pin 5
se encendía con la misma intensidad (controlada por el mismo
potenciómetro).
• Si ambos sensores detectaban simultáneamente, ambos LEDs se encendían
con la misma intensidad ajustada por el potenciómetro.
• Se verificó que el retardo de 10ms era suficiente para evitar rebotes en los
sensores y proporcionar una respuesta suave sin parpadeo perceptible.

Evidencia.

Simulación:
Armado físico:
Conclusión.

El desarrollo de esta práctica permitió consolidar los conocimientos sobre la


adquisición de señales analógicas y digitales utilizando la plataforma Arduino, así
como el control de salidas mediante modulación por ancho de pulso (PWM). Se
implementó un sistema funcional donde dos sensores infrarrojos de proximidad
actúan como interruptores que habilitan el encendido de dos LEDs, mientras que un
potenciómetro permite ajustar de forma continua la intensidad lumínica de ambos
LEDs simultáneamente.

Aspectos fundamentales comprendidos durante la práctica:

• Conversión analógico-digital (ADC): Se comprendió que el mundo real es


analógico (voltajes que varían de forma continua), mientras que el
microcontrolador solo puede procesar valores digitales discretos. El ADC del
ATMEGA328P, con una resolución de 10 bits, permite cuantificar el voltaje
del potenciómetro en 1024 niveles, proporcionando un control suave y
preciso de la intensidad de los LEDs.
• Generación de señales PWM: Se comprendió que un pin digital solo puede
estar en dos estados (0V o 5V), pero mediante la modulación por ancho de
pulso se puede simular una salida analógica. El ciclo de trabajo de la señal
PWM determina el voltaje promedio, lo que se traduce en una intensidad
luminosa proporcional en el LED. Esta técnica es fundamental para controlar
no solo LEDs, sino también motores DC, servomotores, atenuadores de luz,
y muchos otros actuadores.
• Escalado de rangos (mapeo): Se aplicó la función `map()` (o implícitamente
la división entre 4) para reescalar el valor de 10 bits del ADC (0-1023) al rango
de 8 bits del PWM (0-255). Este tipo de transformación lineal es muy común
en sistemas embebidos y es importante comprender su implementación
manual para cuando no se dispone de funciones de librería.
• Lógica de control condicional: Se implementó una lógica simple pero efectiva
donde la condición de detección de cada sensor (nivel bajo, típico de
sensores Active Low) determina si el LED asociado debe encenderse o
apagarse. La intensidad del LED, cuando está encendido, es la misma para
ambos y está determinada exclusivamente por el potenciómetro.
• Importancia de los retardos: El pequeño retardo de 10ms en el bucle principal
es crucial para evitar lecturas erráticas de los sensores (especialmente si
tienen rebotes) y para reducir el consumo energético al evitar que el bucle se
ejecute a máxima velocidad.

Aplicaciones en la vida real de los principios utilizados:


Lectura y conversión de datos analógicos para su conversión a dato digital:

El principio de convertir una magnitud física analógica (en este caso, la posición de
un potenciómetro) en un valor digital es aplicable a innumerables situaciones reales:

• Control de iluminación en edificios inteligentes: Un sistema de iluminación


puede utilizar un sensor de luz ambiental (fotoresistor o fotodiodo) cuya salida
analógica se convierte a digital. Un microcontrolador lee este valor y ajusta
automáticamente la intensidad de las luces LED para mantener un nivel de
iluminación constante, ahorrando energía y mejorando el confort visual.
Cuando hay mucha luz natural, las luces se atenúan; cuando oscurece, se
intensifican.
• Termostatos digitales y control de temperatura: Un sensor de temperatura
como el LM35 o el TMP36 produce un voltaje analógico proporcional a la
temperatura. El ADC del microcontrolador convierte este voltaje a un valor
digital. El sistema compara la temperatura medida con un valor de consigna
(setpoint) y activa o desactiva un sistema de calefacción o refrigeración (a
través de un relé o un triac) para mantener la temperatura deseada. Esta es
la base de los termostatos programables y los sistemas de climatización
inteligente.
• Control de velocidad de motores en electrodomésticos: Una perilla
potenciométrica en una licuadora, un taladro eléctrico o una batidora permite
al usuario seleccionar la velocidad del motor. El ADC lee la posición de la
perilla, y el microcontrolador genera una señal PWM para controlar la
velocidad del motor DC o la potencia aplicada a un motor universal. Esto
permite un control suave y progresivo, en lugar de simplemente encender o
apagar.
• Sistemas de adquisición de datos (DAQ): En instrumentación científica e
industrial, los sensores analógicos (presión, fuerza, deformación, pH, flujo,
etc.) producen voltajes que deben ser convertidos a digital para ser
registrados, analizados o visualizados en una computadora. Un sistema DAQ
basado en microcontrolador con ADC de alta resolución es la base de
muchos laboratorios y plantas industriales.
• Controles de audio analógicos: En mezcladores de audio, ecualizadores y
amplificadores, los potenciómetros se utilizan para controlar el volumen, la
ganancia, los graves, los agudos, etc. Aunque muchos equipos modernos
utilizan codificadores rotativos digitales, los potenciómetros analógicos
siguen siendo comunes. Un microcontrolador lee estos potenciómetros y
ajusta digitalmente los parámetros de procesamiento de la señal (por
ejemplo, en un ecualizador digital o en un procesador de efectos).

Generación de salidas PWM para control analógico:


El principio de generar una señal PWM para controlar la intensidad, velocidad o
posición es igualmente aplicable a muchas situaciones reales:

• Control de intensidad de iluminación LED (dimming): Los sistemas de


iluminación LED modernos utilizan PWM para atenuar las luces. A diferencia
de los sistemas de iluminación incandescentes, donde la atenuación se
lograba reduciendo el voltaje (lo que alteraba el color de la luz), la atenuación
por PWM mantiene el color constante porque el LED siempre recibe la
corriente máxima cuando está encendido, solo que durante menos tiempo.
Esto es fundamental en iluminación escénica, iluminación arquitectónica, y
sistemas de iluminación doméstica inteligente.
• Control de velocidad de motores DC: La velocidad de un motor DC es
aproximadamente proporcional al voltaje promedio aplicado. Mediante PWM,
se puede controlar la velocidad de un motor de forma eficiente, sin disipar
potencia en un resistor variable. Esto se utiliza en robots, vehículos eléctricos
de juguete, cintas transportadoras, ventiladores, extractores de aire, y
sistemas de automatización industrial.
• Control de posición de servomotores: Los servomotores de hobby (como los
de la marca Tower Pro o Futaba) utilizan un pulso PWM de 1 a 2 milisegundos
de duración, repetido cada 20 ms, para determinar su posición angular. Un
microcontrolador genera la señal PWM adecuada para posicionar el servo en
el ángulo deseado. Esto es la base de la robótica, los brazos articulados, los
sistemas de seguimiento solar, las cámaras de vigilancia motorizadas, y los
modelos de radiocontrol.
• Generación de tonos y sonidos: Un altavoz o un zumbador piezoeléctrico
puede generar sonidos si se le aplica una señal PWM a una frecuencia
audible (20 Hz a 20 kHz). Variando la frecuencia se obtienen diferentes notas
musicales, y variando el ciclo de trabajo se puede controlar el volumen. Esto
se utiliza en juguetes, alarmas, sistemas de notificación sonora, y
sintetizadores musicales simples.
• Control de calentadores y sistemas térmicos: En lugar de encender y apagar
un calentador de forma brusca (lo que provoca fluctuaciones de temperatura),
se puede utilizar PWM para controlar la potencia promedio suministrada. A
frecuencias suficientemente bajas (por ejemplo, 1 Hz), se puede activar y
desactivar un relé o un triac para controlar un calentador de agua, una
plancha eléctrica, un soldador de estaño o un horno de reflujo. Esto permite
un control más preciso de la temperatura y evita picos de corriente.

Combinación de entradas analógicas y digitales (situaciones donde se


requiere ambas):
El sistema implementado en esta práctica combina entradas analógicas
(potenciómetro) y digitales (sensores IR). Esto es representativo de muchas
aplicaciones reales:

• Sistemas de iluminación con detección de presencia: En oficinas, pasillos,


estacionamientos y viviendas, se utilizan sistemas que encienden las luces
solo cuando detectan presencia (mediante un sensor PIR o un sensor IR de
proximidad), pero además permiten ajustar manualmente la intensidad
deseada mediante un potenciómetro o un control remoto. Esto ahorra
energía (las luces no quedan encendidas cuando no hay nadie) y proporciona
comodidad al usuario (puede ajustar el brillo a su preferencia).
• Control de velocidad de un motor con interruptores de límite: En una puerta
automática, un sensor de proximidad o un interruptor de límite detecta
cuándo la puerta está completamente abierta o completamente cerrada
(entradas digitales). Un potenciómetro o un selector de velocidad permite
ajustar la velocidad de apertura y cierre (entrada analógica). Un
microcontrolador utiliza PWM para controlar el motor, y los interruptores de
límite detienen el motor cuando se alcanza el final del recorrido.
• Sistemas de riego por goteo controlados por humedad del suelo: Un sensor
de humedad del suelo puede ser analógico (resistencia variable con la
humedad) o digital (con comparador). Un potenciómetro permite ajustar el
umbral de humedad deseado. El microcontrolador lee la humedad actual
(entrada analógica o digital), la compara con el umbral (entrada analógica del
potenciómetro), y mediante PWM controla una electroválvula o una bomba
de agua para regar cuando sea necesario.
• Brazo robótico con control de agarre: Sensores de fuerza o de tacto (entradas
analógicas) detectan si el gripper del robot está ejerciendo la presión
adecuada sobre un objeto. Un potenciómetro permite al operador ajustar la
fuerza de agarre deseada. El microcontrolador lee el potenciómetro (entrada
analógica) y los sensores de fuerza (entradas analógicas), y mediante PWM
controla los servomotores o motores del gripper para ajustar la fuerza de
agarre en tiempo real.

Reflexión final:

La realización de esta práctica ha proporcionado una base sólida sobre la


adquisición de señales analógicas y digitales, así como sobre la generación de
salidas PWM, utilizando una plataforma de alto nivel como Arduino. Se comprendió
que, aunque la plataforma Arduino simplifica enormemente la programación
(abstrae la manipulación directa de registros), los principios subyacentes son los
mismos que se estudiaron en prácticas anteriores con microcontroladores PIC:
configuración de pines, lectura de ADC, generación de PWM mediante
temporizadores, y lógica de control condicional.

La capacidad de leer sensores analógicos y digitales, y de generar salidas


analógicas mediante PWM, es fundamental para la mayoría de los proyectos de
electrónica embebida, robótica, automatización, instrumentación y domótica. El
dominio de estas técnicas permite al ingeniero diseñar sistemas que interactúan de
forma inteligente con el entorno físico, tomando decisiones basadas en datos reales
y actuando sobre el mundo de manera controlada y eficiente.
Bibliografía.

• Microchip Technology Inc. (2015). *ATmega328P Data Sheet: 8-bit AVR


Microcontroller with 32KB In-System Programmable Flash*. DS40002074A.
• Arduino LLC. (2024). *Arduino Reference: Language Reference for Arduino
Programming*. Recuperado de [Link]
• Banzi, M., & Shiloh, M. (2014). *Getting Started with Arduino: The Open
Source Electronics Prototyping Platform* (3rd ed.). Maker Media.
• Laboratorio de Electrónica, Instituto Tecnológico de Durango. (2026).
*Prácticas de Microcontroladores*. Material didáctico.
• Blum, J. (2019). *Exploring Arduino: Tools and Techniques for Engineering
Wizardry* (2nd ed.). Wiley.

También podría gustarte