Documentos de Académico
Documentos de Profesional
Documentos de Cultura
13
33d2 1
A
3302
3302
as 3202
3
SNcc 33p2
SK 3202
pin Mot3ou1f1)
inMoce(S O01u
bin lock6 O0TUT
-.in Mode OUTPUT
intode (lo,o1pUT)
ESTILOD
Mrtode(, 101)
Nod loop
Analo:unk (3 ow);
AIGH);
UNIVERSIDAD TÉCNICA DEL NORTE
FACULTAD DE INGENIERÍA EN
CIENCIAS APLICADAS
ELECTRICIDAD
Fecha de realización
de la práctica: 2023 Mayo 9
año mes día
Observaciones: Sistema de control de secuencias de luces utilizando un potenciómetro como elemento de control
2. Objetivo General.
3. Objetivos Específicos.
Comprender los principios básicos del funcionamiento de la plataforma Arduino Mega 2560 y
su entorno de programación (IDE).
Montar un circuito en una protoboard que permita simular un sistema de control de secuencias
de luces utilizando componentes electrónicos (potenciómetro como elemento de control) y
Arduino Mega 2560.
Programar el Arduino Mega 2560 utilizando el lenguaje de programación de Arduino (basado
en C++) para controlar el encendido y apagado de los LEDs para cada una de las secuencias
requeridas por el docente.
4. Marco Teórico
4.1. Introducción
En este taller práctico de laboratorio se explorará el uso de la tarjeta de desarollo Arduino Mega
2560, una herramienta ampliamente utilizada en la industria y la educación para el desarrollo de
proyectos electrónicos y robóticos. Se simulará el encendido y apagado de un LED, además de
la simulación diferentes secuencias de luces controladas mediante un potenciómetro en una
protoboard, lo que permitirá a los participantes adquirir habilidades en la programación y uso de
esta plataforma, así como en la comprensión de los principios físicos fundamentales que la
sustentan.
En este taller, se profundizará en conceptos fundamentales de la electrónica y la programación
para la simulación de los casos mencionados anteriormente con Arduino Mega 2560. Para
alcanzar los objetivos específicos, se utilizarán diversas técnicas y herramientas como el diseño
y construcción de circuitos en una protoboard, la programación en el lenguaje de programación
de Arduino (C++), la simulación y análisis de resultados. El uso de componentes electrónicos
como resistencias, diodos led y cables dupond, será necesario para el correcto funcionamiento
del circuito, mientras que el software de programación Arduino IDE permitirá la interacción con el
microcontrolador ATmega2560 presente en la placa de desarrollo Arduino Mega 2560.
El IDE de Arduino es un entorno de desarrollo integrado que se utiliza para escribir y cargar
programas en las placas de desarrollo de Arduino. Es una aplicación que se instala en un
ordenador y proporciona un editor de texto para escribir el código fuente, un compilador que
convierte el código en lenguaje de máquina y un cargador de programas que carga el código
compilado en la placa de desarrollo. Además, el IDE de Arduino incluye herramientas de
depuración para identificar y solucionar errores en el código. Es una herramienta muy útil para los
desarrolladores y aficionados que quieren crear proyectos con Arduino, ya que les permite escribir
y probar el código en un entorno amigable y fácil de usar. El IDE de Arduino es de código abierto
y está disponible para su descarga en el sitio web oficial de Arduino.
4.3.1. Programación en Arduino
La programación en Arduino se realiza utilizando el lenguaje de programación C/C++, aunque
con algunas simplificaciones y modificaciones para facilitar su uso. El proceso de programación
se realiza a través del IDE de Arduino, donde se pueden crear y editar programas, compilarlos y
cargarlos en la placa de desarrollo.
Los programas en Arduino se denominan "sketches" y están compuestos por dos funciones
principales: setup() y loop(). La función setup() se ejecuta una vez al inicio del programa y se
utiliza para inicializar variables, configurar los pines de entrada/salida y otros parámetros
necesarios para el correcto funcionamiento del programa. Por otro lado, la función loop() se
ejecuta continuamente después de que la función setup() haya terminado y se utiliza para definir
las acciones que el programa debe realizar en bucle.
La sintaxis de programación en Arduino es muy similar a la del lenguaje C/C++, pero se han
agregado algunas funciones y librerías específicas para trabajar con los periféricos de la placa de
desarrollo, como sensores, actuadores y pantallas. Además, Arduino cuenta con una amplia
comunidad de usuarios que han creado y compartido una gran cantidad de ejemplos y recursos
educativos en línea para facilitar el aprendizaje y la programación en esta plataforma.
4.4. Arduino Mega 2560
El Arduino Mega 2560 es una placa de desarrollo de la familia Arduino que se lanzó en el año
2010. Fue creada por un equipo de diseñadores y programadores liderados por Massimo Banzi.
El Arduino Mega 2560 es una placa potente y versátil que cuenta con un microcontrolador de la familia
AVR de 8 bits, el ATmega2560, que opera a una velocidad de 16 MHz. Esta placa tiene 54 pines
digitales de entrada/salida, 16 pines analógicos, cuatro UARTs (puertos serie), una conexión USB,
una toma de alimentación, una conexión ICSP y un botón de reinicio. Además, el Arduino Mega 2560
es compatible con la mayoría de los shields de Arduino y tiene capacidad para manejar proyectos
más complejos y demandantes que el Arduino UNO u otras placas más básicas de la familia Arduino.
PWM (Pulse Width Modulation) es una técnica utilizada en electrónica para generar señales de voltaje
que varían en su nivel de potencia mediante la modulación del ancho del pulso de la señal.
En el contexto de Arduino, la mayoría de las placas de Arduino tienen uno o varios pines que admiten
la generación de señales PWM. Esto permite a los usuarios generar señales analógicas en sus
proyectos, ya que una señal PWM se puede filtrar y suavizar para obtener una señal analógica.
La función analogWrite() de Arduino se utiliza para generar una señal PWM en un pin determinado.
El usuario especifica la frecuencia y la duración del pulso a través de esta función, y la placa de
Arduino genera una señal PWM en el pin especificado. Esta técnica se utiliza comúnmente para
controlar la intensidad de un LED, la velocidad de un motor o para generar tonos de audio
En resumen, PWM es una técnica utilizada para generar señales analógicas a partir de una señal
digital, y es ampliamente utilizado en proyectos de Arduino para controlar la intensidad de la luz, la
velocidad del motor y otras aplicaciones similares.
6. Pines Analógicos
Los pines analógicos en Arduino son uno de los recursos más importantes que ofrece la
plataforma para interactuar con el mundo físico mediante la programación. Estos pines permiten
leer señales analógicas provenientes de sensores y otros dispositivos electrónicos, lo que permite
a los usuarios capturar y procesar información en tiempo real.
Los pines analógicos en Arduino se identifican por tener una numeración precedida por la letra
'A', y pueden funcionar tanto como entrada como salida. Para utilizar un pin analógico como
entrada, es necesario configurar su modo de operación mediante el comando pinMode()
indicando que el pin será utilizado como entrada analógica pinMode(pin, INPUT). Luego, se
puede leer el valor analógico del pin con el comando analogRead(), que permite leer el valor
analógico de una señal en el pin.
Cabe mencionar que el rango de valores que puede ser leído en un pin analógico varía
dependiendo de la resolución del convertidor analógico-digital (ADC) de la placa, que en Arduino
Uno es de 10 bits. Esto significa que el rango de valores que puede ser leído va desde 0 a 1023.
Por otro lado, para utilizar un pin analógico como salida, es necesario configurar su modo de
operación mediante el comando pinMode() indicando que el pin será utilizado como salida
analógica pinMode(pin, OUTPUT). Luego, se puede establecer el valor analógico del pin con el
comando analogWrite(), que permite enviar una señal analógica en el rango de 0 a 255. Es
importante tener en cuenta que no todos los pines analógicos de Arduino permiten enviar señales
analógicas utilizando el comando analogWrite(), sino que solo algunos de ellos tienen la
capacidad de hacerlo.
7. Librerías de/para Arduino
Las librerías en Arduino son colecciones de código preescrito que permiten a los usuarios acceder a
ciertas funciones y características que no están incluidas en el código básico de Arduino.
Estas librerías proporcionan un conjunto de funciones y herramientas útiles para simplificar el
desarrollo de proyectos. Los usuarios pueden incorporar estas librerías en su propio código para
extender las funcionalidades de sus proyectos y reducir la cantidad de tiempo y esfuerzo necesarios
para escribir código desde cero.
Por ejemplo, si deseas utilizar un sensor de temperatura y humedad en tu proyecto, en lugar de tener
que escribir todo el código para leer los datos del sensor y realizar los cálculos necesarios para
mostrar la información en una pantalla LCD, puedes usar una librería como DHT para realizar todas
estas tareas de forma sencilla.
Arduino cuenta con una gran cantidad de librerías de código abierto disponibles que se pueden
descargar e incorporar en tus proyectos. Algunas de las librerías más populares incluyen librerías
para el manejo de sensores, librerías para el control de motores, librerías para el manejo de pantallas
LCD, entre otras.
En pocas palabras, las librerías en Arduino permiten a los usuarios agregar nuevas funcionalidades
y simplificar el desarrollo de sus proyectos al proporcionar una colección de funciones y herramientas
útiles.
6.1. Cómo instalar las librerías de/para Arduino?
Para instalar una librería en Arduino, sigue los siguientes pasos:
1) Descarga la librería: la mayoría de las librerías de Arduino están disponibles en línea en sitios
como el sitio web oficial de Arduino, GitHub, desde el mismo IDE Arduino y otros. Descarga
la librería que necesitas a tu computadora.
2) Abre el software de Arduino: abre el software de Arduino en tu computadora.
3) Importa la librería: ve al menú Sketch y selecciona la opción Include Library, luego selecciona
la opción Add .ZIP Library. En caso de hacerlo de la IDE de Arduino, vas al apartado de Library
Manager e instalas la librería que desees.
4) Selecciona la librería descargada: busca la ubicación de la librería que descargaste en el paso
1 y selecciónala.
5) Instala la librería: el software de Arduino instalará la librería y la agregará a la lista de librerías
disponibles.
6) Usa la librería en tu proyecto: para usar la librería en tu proyecto, ve al menú Sketch y
selecciona la opción Import Library, y luego selecciona la librería que acabas de agregar.
Con estos pasos, se podrá agregar cualquier librería al proyecto de Arduino y empezar a utilizarla.
Es importante destacar que algunos proyectos pueden requerir varias librerías, así que debemos
asegurarnos de agregar todas las librerías necesarias para nuestro proyecto.
8. Trabajo Preparatorio
Antes de rendir la prueba correspondiente al primer parcial, el estudiante debió revisar lo conceptos
y programación vista en anteriores clases.
Para este punto, el estudiante debería tener un conocimiento básico de la función de la librería PWM
en Arduino y su relación con la modulación de ancho de pulso (PWM, por sus siglas en inglés), que
se utiliza para controlar la cantidad de energía que se envía a un dispositivo, como un LED. La
modulación PWM permite que la energía se envíe en pulsos rápidos, lo que permite controlar la
intensidad del LED o cualquier otro dispositivo que se utilice.
Se realizar una programación a para controlar las diferentes secuencias de encendido y apagado de
los LEDs. Para ello, se puede utilizar las diferentes funciones de Arduino, que permiten leer la señal
analógica del potenciómetro y dictar que hará cada uno de los LEDs
Finalmente, el estudiante deberá estar en la capacidad de programa todo esto de forma escrita.
Este trabajo preparatorio permitirá concluir la prueba con todas las indicaciones y requerimientos
mencionados por el docente.
9. Equipos y Materiales
Protoboard
USB tipo B
Potenciómetro 5k
Cables dupond
Resistencias de 330 Ω
/*
UNIVERSIDAD TÉCNICA DEL NORTE
CIELE
MICROCONTROLADORES
Joshua Steven Montesdeoca Montesdeoca
Entrada Analógica
00 de Mayo de 2023
*/
// Definir pines
const int pinesLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
const int numPinesLed = sizeof(pinesLed) / sizeof(int);
// Definir variables
int tiempo = 200; // variable que controla el tiempo de encendido y apagado de un
led
int paso = 1; // variable que indica el paso actual en la secuencia
unsigned long tiempoAnterior = 0; // variable para almacenar el tiempo anterior
void setup() {
// Configurar los pines
for (int i = 0; i < numPinesLed; i++) {
pinMode(pinesLed[i], OUTPUT);
}
}
void loop() {
unsigned long tiempoActual = millis(); // obtener el tiempo actual
/*
UNIVERSIDAD TÉCNICA DEL NORTE
CIELE
MICROCONTROLADORES
Joshua Steven Montesdeoca Montesdeoca
Secuencia 2 Prueba
00 de Mayo de 2023
*/
// Definir pines
const int pinesLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// Definir variables
unsigned long tiempoInicio = 0; // variable que guarda el tiempo en que se inició el
ciclo actual
int tiempo = 500; // variable que controla el tiempo de encendido y apagado de un
led
int paso = 1; // variable que indica el paso actual en la secuencia
void setup() {
// Configurar los pines
for(int i = 0; i < 11; i++){
pinMode(secuencia[i], OUTPUT);
}
}
void loop() {
// Verificar si ha pasado el tiempo suficiente para avanzar al siguiente LED
if(millis() - tiempoInicio >= tiempo){
// Encender el siguiente LED en la secuencia
digitalWrite(secuencia[paso - 1], HIGH);
/*
UNIVERSIDAD TÉCNICA DEL NORTE
CIELE
MICROCONTROLADORES
Joshua Steven Montesdeoca Montesdeoca
Secuencia 2 Prueba
00 de Mayo de 2023
*/
// Definir pines
int pins[] = {12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
int num_pins = 11;
int delay_time = 200; // tiempo de espera entre cada parpadeo, en milisegundos
void setup() {
// Configurar pines como salidas
for (int i = 0; i < num_pins; i++) {
pinMode(pins[i], OUTPUT);
}
}
void loop() {
// Encender pines 12 y 2
digitalWrite(pins[0], HIGH);
digitalWrite(pins[10], HIGH);
delay(delay_time);
// Encender pines 11 y 3
digitalWrite(pins[1], HIGH);
digitalWrite(pins[9], HIGH);
delay(delay_time);
// Encender pines 10 y 4
digitalWrite(pins[2], HIGH);
digitalWrite(pins[8], HIGH);
delay(delay_time);
// Apagar pin 7
digitalWrite(pins[5], LOW);
delay(delay_time);
//Secuencia inversa
// Encender pin 7
digitalWrite(pins[5], HIGH);
delay(delay_time);
// Encender pines 8, 6 y 7
digitalWrite(pins[4], HIGH);
digitalWrite(pins[6], HIGH);
digitalWrite(pins[5], HIGH);
delay(delay_time);
// Encender pines 9 y 5
digitalWrite(pins[3], HIGH);
digitalWrite(pins[7], HIGH);
delay(delay_time);
/*
UNIVERSIDAD TÉCNICA DEL NORTE
CIELE
MICROCONTROLADORES
Joshua Steven Montesdeoca Montesdeoca
Secuencia 2 Prueba
00 de Mayo de 2023
*/
// Definir pines
const int pinesLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
// Definir variables
unsigned long tiempoInicio = 0; // variable que guarda el tiempo en que se inició el
ciclo actual
int tiempo = 500; // variable que controla el tiempo de encendido y apagado de un
led
int paso = 1; // variable que indica el paso actual en la secuencia
void setup() {
// Configurar los pines
for(int i = 0; i < 11; i++){
pinMode(secuencia[i], OUTPUT);
}
}
void loop() {
// Leer el valor del potenciómetro
int potValue = analogRead(A0);
/*
UNIVERSIDAD TÉCNICA DEL NORTE
CIELE
MICROCONTROLADORES
Joshua Steven Montesdeoca Montesdeoca
Prueba Correción
00 de Mayo de 2023
*/
// Definir pines
int potValue = 0;
const int pinesLed[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
const int numPinesLed = sizeof(pinesLed) / sizeof(int);
void setup() {
Serial.begin(9600); // Inicializa la comunicación serial a una velocidad de 9600
baudios
int pwmValue = map(potValue, 770, 1023, 0, 255);
//1
for (int i = 0; i < numPinesLed; i++) {
pinMode(pinesLed[i], OUTPUT);
}
//2
for(int i = 0; i < 11; i++){
pinMode(secuencia[i], OUTPUT);
}
//3
for (int i = 0; i < num_pins; i++) {
pinMode(pins[i], OUTPUT);
}
void loop() {
// Leer el valor del potenciómetro
potValue = analogRead(A8);
Serial.println(potValue); // Imprime el valor del potenciómetro en la consola de
Arduino
int pwmValue = map(potValue, 770, 1023, 0, 255);
//Inicio secuencia 1
// Determinar en qué rango se encuentra el valor del potenciómetro
if (potValue >= 0 && potValue <= 255) {
unsigned long tiempoActual = millis(); // obtener el tiempo actual
//inicio secuencia 2
else if (potValue >= 256 && potValue <= 512) {
// Verificar si ha pasado el tiempo suficiente para avanzar al siguiente LED
if(millis() - tiempoInicio >= tiempo){
// Encender el siguiente LED en la secuencia
digitalWrite(secuencia[paso - 1], HIGH);
//inicio secuencia 3
else if (potValue >= 513 && potValue <= 769) {
// Encender pines 12 y 2
digitalWrite(pins[0], HIGH);
digitalWrite(pins[10], HIGH);
delay(delay_time);
// Encender pines 11 y 3
digitalWrite(pins[1], HIGH);
digitalWrite(pins[9], HIGH);
delay(delay_time);
// Encender pines 10 y 4
digitalWrite(pins[2], HIGH);
digitalWrite(pins[8], HIGH);
delay(delay_time);
// Apagar pin 7
digitalWrite(pins[5], LOW);
delay(delay_time);
//Secuencia inversa
// Encender pin 7
digitalWrite(pins[5], HIGH);
delay(delay_time);
// Encender pines 8, 6 y 7
digitalWrite(pins[4], HIGH);
digitalWrite(pins[6], HIGH);
digitalWrite(pins[5], HIGH);
delay(delay_time);
// Encender pines 9 y 5
digitalWrite(pins[3], HIGH);
digitalWrite(pins[7], HIGH);
delay(delay_time);
}//fin secuencia 3
//inicio secuencia 4
else if (potValue >= 770 && potValue <= 1023) {
if(millis() - tiempoInicio >= tiempo){
// Encender el siguiente LED en la secuencia con la intensidad mapeada
analogWrite(secuencia[paso - 1], pwmValue);
Prueba: VID20230521221908.mp4
VID20230521221729.mp4
Con este código se logró realizar diversas secuencias de encendido y apagado de LEDs controladas
por un potenciómetro en un microcontrolador. En la configuración inicial, se definen los pines y
variables necesarios, incluyendo los pines de los LEDs y su cantidad, así como variables para
controlar el tiempo y el paso actual en las secuencias. En la función principal, se lee el valor del
potenciómetro y se realiza una secuencia específica según el rango en el que se encuentre. La
secuencia 1 enciende y apaga los LEDs de forma alternada. La secuencia 2 avanza en
una secuencia predefinida de encendido de los LEDs. La secuencia 3 crea un efecto de parpadeo en
los LEDs. La
secuencia 4 permite controlar la intensidad de los LEDs utilizando modulación por ancho de pulso
(PWM). Cada secuencia se ejecuta de forma continua hasta que se cambie el valor del potenciómetro.
Se consiguió un resultado favorable al momento del cargar el código a la tarjeta de desarrollo Arduino
Mega 2560. Cada una de las secuencias tuvieron un correcto funcionamiento y cumplió con mis
expectativas.
13.1. Conclusiones
13.2. Recomendaciones