Está en la página 1de 27

PROYECTO FINAL PROGRAMACION

PROFESOR WILSON PEREZ CASTRO

SANTIAGO CORTÉS RIVERA


CESAR AUGUSTO JIMENEZ MORALES
EDGAR ALBEIRO MAYORGA CANO

UNIVERSIDAD TECNOLOGICA DE PEREIRA


FACULTAD DE TECNOLOGIA
INGENIERIA EN MANUFACTURA
2023
INTRODUCCION

En la era de la iluminación inteligente, las tiras LED han emergido como una
innovación destacada en el ámbito de la tecnología doméstica. Este informe se
adentra en el fascinante mundo de los juegos con tiras LED, explorando su
evolución, funcionalidades y su impacto en los entornos residenciales y
comerciales. Estas tiras, más allá de su función original de iluminación, han
transformado el concepto de ambientación visual, ofreciendo una gama diversa de
colores, efectos y aplicaciones que trascienden la mera iluminación.
Este informe detalla el desarrollo de un juego que utiliza la tecnología de tiras LED
como escenario interactivo. En este juego, dos vehículos iluminados compiten en
un recorrido diseñado dentro de la tira LED, enfrentándose en una emocionante
carrera hacia la meta. Se explorará exhaustivamente el proceso de concepción,
diseño y ejecución de esta experiencia única, desde la programación de los
vehículos hasta la sincronización con la tira LED para crear un entorno dinámico y
visualmente impactante.
Se presentará una visión detallada del hardware y software implicados en la
construcción de los vehículos, destacando los aspectos técnicos que permiten su
interacción con la tira LED.
MARCO TEORICO

ARDUINO
Arduino es una plataforma de creación de electrónica de código abierto, la cual
está basada en hardware y software libre, flexible y fácil de utilizar para los
creadores y desarrolladores. Esta plataforma permite crear diferentes tipos de
microordenadores de una sola placa a los que la comunidad de creadores puede
darles diferentes tipos de uso.

Esta foto de Autor desconocido está bajo


licencia CC BY-SA

PULSADOR
El interruptor pulsador momentáneo causa un cambio temporal en un circuito
eléctrico, solo cuando el interruptor se presiona físicamente. El resorte devuelve el
interruptor a su posición original inmediatamente después.
Esta foto de Autor desconocido está
bajo licencia CC BY-SA
ADAFRUIT NEOPIXEL DIGITAL RGB
Neopixel es el nombre (acuñado por Adafruit) que se le da a un tipo especial de
led RGB, el WS2812B. Se trata de un led con lógica integrada, de manera que
podemos conectar multitud de ellos secuencialmente y acceder individualmente a
cada uno.
Teóricamente no hay límite en el número de leds que podemos encadenar más
allá de lo que soporte nuestra fuente de alimentación.

Esta foto de Autor desconocido está bajo licencia CC BY-SA-NC

FUENTE 5V DC

Fuente conmutada 5V 10A es un dispositivo electrónico comúnmente llamado


fuente de alimentación, fuente de poder o fuente conmutada. En electrónica se
define como el instrumento que transforma corriente alterna en corriente continua
en una o varias salidas.

Esta foto de Autor desconocido está bajo licencia CC BY

FILAMENTO PLA
El plástico PLA (ácido poliláctico) se obtiene a partir de materias primas
provenientes de la naturaleza, tales como el almidón de maíz, con el que
obtenemos un material plástico ecológico, renovable y biodegradable bajo ciertas
condiciones de temperatura y humedad.
Componentes y suministros Función costo

Arduino Su función principal es ser $53.000


programado para realizar
una variedad de tareas.
pulsadores permitir el flujo de $5.000
corriente eléctrica en un
circuito cuando se
presiona y luego restaurar
el flujo cuando se suelta.
Altavoz delgado La función principal de un $4.500
altavoz delgado es
convertir una señal
eléctrica en vibraciones
mecánicas que producen
sonido.
Tira LED RGB Digital La función principal es
proporcionar iluminación $93.000
multicolor. Los LED RGB
en la tira pueden emitir luz
en diferentes
intensidades, lo que
permite la creación de
una variedad de colores al
ajustar las proporciones
de estos componentes
básicos
Empuñadura del interruptor Creada por medio de una 0
3D impresora 3D para ubicar
los pulsadores y al mismo
tiempo que sea más
cómodo.
Conector jst 3 pines establece una conexión $9.500
eléctrica y mecánica entre
dos dispositivos o
componentes de una
manera rápida y eficiente.
Condensador 1000uF La función principal de un $5.000
condensador de es
almacenar y liberar carga
eléctrica en un circuito
eléctrico.
resistencia 330 ohmios La función principal de $6.000
una resistencia de 330
ohmios es limitar la
corriente que fluye a
través de un circuito y
proteger los componentes
conectados al mismo.
Caja de componentes 3D Es una caja creada por
medio de impresión 3D 0
para almacenar los
componentes eléctricos y
funcionales del juego,
protegiéndolos al mismo
tiempo
Kit Cables de conexión función principal de un kit
eléctrica de cables de conexión es $6.000
proporcionar una solución
rápida, diferente y fácil de
usar para interconectar
diferentes dispositivos y
componentes en un
circuito.
Fuente 5V DC La función principal es $15.000
proporcionar un
suministro constante de
energía eléctrica con un
voltaje de 5 voltios
Filamento Su función principal es
PLA servir como material de $85.000
construcción para crear
objetos tridimensionales
mediante la técnica de
deposición de material
fundido
Termo encogibles Su función principal es
proporcionar aislamiento y $6.000
protección a los
componentes o cables
que cubre. Al calentar el
material, se contrae,
creando un ajuste ceñido
alrededor del objeto y
proporcionando una capa
protectora.
Herramientas y maquinas Función
Su función principal es convertir
Impresora 3D diseños virtuales en objetos
físicos mediante el proceso de
fabricación conocido como
fabricación aditiva.
Con la impresora se realizó la
empuñadura y la caja de
componentes.
Su función principal es que
Kit de soldadura (cautín) genera calor para fundir el
material de soldadura y realizar
conexiones eléctricas.
En este caso la pistola de calor
Pistola de calor industrial se utilizó para encoger envolturas
termo contraíbles alrededor de
objetos. Esto proporciona una
cobertura ajustada y segura.
El alicate de cables en este caso
Alicate de cables se utilizó para pelar la capa
externa de aislamiento de los
cables eléctricos sin dañar los
conductores internos. Esto
permite exponer la parte interna
del cable para su posterior
conexión o empalme.
DESARROLLO

1. Diseño carcasa:
Se diseño una caja en donde pueda contener los componentes electrónicos
con unos agujeros en donde iría ubicados los sockets que conecta los
botones, la fuente y la tira led.

2. Fabricación carcasa:
Se imprimió el diseño a través de impresión 3D utilizando material PLA.

3. Conectar circuito electrónico:


Se conectaron los componentes electrónicos al Arduino de la siguiente
forma:
-Los botones se conectaron al pin 4 y 5 y el otro extremo a GND.
-El parlante de 8 W se conectó al capacitor de 100 µF seguido al pin 3 y el
otro extremo a GND.
-La tira led WS2812 se conecto a GND, a 5 v y la señal se conecto a una
resistencia 330 Ω seguido al pin A0.
-El plug de la fuente se conecto a vin y a GND.

4. Programación:
El lenguaje de programación utilizado utilizado para programar en la plataforma Arduino se llama
"lenguaje de programación Arduino". Sin embargo, en realidad, este lenguaje es una variante
simplificada de C++ con algunas funciones específicas de Arduino. Se le conoce a menudo como
"Arduino Sketch" o simplemente "Sketch".

Los programas de Arduino se denominan "sketches" y tienen una estructura básica con dos
funciones principales: setup()y loop(). La función setup()se ejecuta una vez al inicio del programa,
mientras que la función loop()se ejecuta continuamente en un bucle después de que setup()haya
completado su ejecución.

Arduino también proporciona una serie de bibliotecas y funciones que simplifican la programación
de hardware, como la lectura de sensores, la manipulación de pines de entrada/salida, la serie de
comunicación, entre otras cosas.

Es importante señalar que aunque el lenguaje de programación principal es una variante de C++,
los principios básicos de la programación en Arduino son bastante accesibles, lo que lo convierte
en una excelente opción para principiantes en la electrónica y la programación.

Este código es como una receta para hacer una carrera de carritos en una tira de luces que se
pueden controlar con una pequeña computadora llamada Arduino. Vamos a dividirlo en pedacitos
para que sea más fácil de entender:

Primera parte: Configuraciones Iniciales Aquí, están diciendo cuántas luces hay en la pista y dónde
están conectadas algunas cosas, como la tira de luces, los interruptores de los jugadores y un
altavoz.

Segunda parte: Configuración de la Carrera Luego, define algunos colores y sonidos que se usarán
más adelante, como el amarillo para un carro y el azul para otro. También crean un efecto musical
para cuando alguien gana.

Tercera parte: Física de los Carritos Ahora, imagina que los carritos tienen su propia física. Pueden
acelerar y frenar, y hay algo llamado gravedad que afecta la velocidad. También hay un poquito de
fricción para hacerlo más realista.

Cuarta parte: Inicio de la Carrera Aquí, tienen algunas instrucciones para el inicio de la carrera.
Hay luces y sonidos emocionantes para preparar a todos para la competencia.

Quinta parte: Efectos Especiales Cuando alguien gana, hay efectos especiales, como sonidos
festivos. ¡Es como celebrar una victoria con una fiesta pequeña!

Sexta parte: Dibujo de los Carritos Finalmente, en el corazón del código, hay instrucciones para
dibujar los carritos en las luces. Se actualiza continuamente para seguir la carrera.

Inclusión de bibliotecas y definiciones


Aquí se están incluyendo la biblioteca “Adafruit_NeoPixely” definiendo algunas constantes y pines
que se utilizarán más adelante en el código.

Variables y configuración inicial

 Definición de colores: Se establece los colores amarillo y azul para representar a los
jugadores.
 Música de Victoria: Se define

 Configuración de Carreras: Variables como velocidad, distancia y contadores se utilizan


para controlar la película

 Efectos de sonido: Se configuran tonos para efectos de sonido.

 Control de Jugadores: Banderas y variables

 Configuración visual:Se establece el número máximo de LED en la pista y el orden de


dibujo de los carritos.

1. Marca de tiempo: Registra el momento exacto en que comienza

2. Control de luces LED: Configura y controla una tira de luces LED para representar la pista.

3. Retraso entre actualizaciones: Establece el tiempo de espera entre cambios en la


visualización.

4. Configuración inicial en la función setup:

 Inicializa

 Inicia la configuración de la tira de luces.

 Configura los pinos para los interruptores de los juga

 Si el jugador 1 presiona su interruptor, realice una configuración especial en las


luces antes de comenzar la carrera.
1. Apaga todas las luces: Inicia apagando todas las luces de la pista.

2. Espera 2 segundos: Permite un tiempo para que los jugadores se preparen antes de
comenzar los efectos visuales.

3. Configuración de luces amarillas: Muestra luces amarillas en algunas posiciones de la


pista.

4. Emite un tono de 400 Hz: Acompañado de luces amargas

5. Configuración de luces azules: Cambia a luces azules en diferentes posiciones de la pista.

6. Emite un tono de 600 Hz: Acompañado de luces azules.

7. Configuración de luces rojas: Cambia a luces rojas en diferentes posiciones de la pista.

8. Emite un tono de 1200 Hz: Acompañado de luces rojas.

9. Reinicia la marca de tiempo: Prepara la marca de tiempo para el iniciar


1. Funciónwinner_fx()
 Función:

 Reproduce una melodía (definida en el array Ganador[]) cuando hay un ganador


en la carrera.

 Detalles:

 Utilice la función tone()para generar tonos en el altavoz ( PIN_AUDIO).

 La melodía se define en el array Ganador[].

 Cada nota se reproduce durante 200 milisegundos, seguida de una pausa de 260
milisegundos.

2. **FunciónFunciones draw_car1()ydraw_car2()
 Funciones:

 Dibujan los carros de los jugadores en la tira de LED.

 Detalles:

 Utilizan un bucle para recorrer la longitud del carro ( loop1 o loop2) y establecer el
color de los LED en la pista según la posición actual del carro.

3. Bucle Principal ( void loop())


1. Apaga todas las luces: Utiliza un bucle para apagar todas las luces en la tira de LED al inicio
de cada iteración del bucle principal.

2. Verifica el estado del interruptor del jugador 1: Lee el estado del interruptor del jugador 1
( PIN_P1). Si el interruptor está presionado, aumente la velocidad del jugador 1 ( speed1)
en función de la aceleración ( ACEL). Si el interruptor está liberado, ajuste la bandera
flag_sw1 en consecuencia.

3. Aplica fricción a la velocidad del jugador 1: Reduce la velocidad del jugador 1 aplicando
fricción ( speed1 -= speed1 * kf).

4. Verifica el estado del interruptor del jugador 2: Similar al caso del jugador 1, verifica el
estadoPIN_P2). Ajusta la velocidad del jugador 2 ( speed2) en consecuencia y actualiza la
bandera flag_sw2.

5. Aplica fricción a la velocidad del jugador 2: Al igual que con el jugador 1, reduce la
velocidad del jugador 2 aplicando fricción ( speed2 -= speed2 * kf).

1. Actualizar distancias: Incrementa las distancias recorridas por ambos jugadores en función
de sus velocidades.
2. Determinar líder: Compara las distancias recorridas y determina qué jugador está
liderando.

3. Completar vueltas: Verifica si un jugador ha completado una vuelta y reproduce un tono.

4. Verificar vueltas máximas: Verifica si un jugador ha completado el número máximo de


vueltas y reinicia los valores y efectos visuales.

5. Controlar el orden de dibujo: Alterna el orden de dibujo entre los jugadores en cada
iteración.

6. Dibujar carros: Utiliza la función draw_car1()y draw_car2()para dibujar los carros en el


orden determinado.

7. Mostrar y esperar: Muestra los cambios en la tira de LED y espera un breve período (
delay(tdelay)).

8. Controlar tonos: Controla la duración de los tonos reproduciendo un tono y apagándolo


cuando sea necesario.

Algunos condicionales que usamos en el código:


Condición de activación del físico en la función setup:
el código incluye varias estructuras de control condicional, como las declaraciones
if y for, que permiten tomar decisiones y ejecutar o repetir ciertas partes del
código según condiciones específicas. Aquí hay algunos ejemplos de cómo se
utilizan en el código:
Condición de activación del físico en la función setup:

Condiciones de aceleración en el bucle principal (loop):

Condición de cambio de líder en el bucle principal (loop):


Condiciones de finalización de la carrera en el bucle principal (loop):

Alternancia en el dibujo de los autos en el bucle principal (loop):

Condiciones de reproducción de tono (TBEEP) en el bucle principal (loop):

Condiciones de dibujo de autos en el bucle principal (loop):

Estas son las principales estructuras condicionales presentes en el código, estas


estructuras permiten que el programa tome decisiones basadas en ciertas
condiciones y se adapte dinámicamente a diferentes situaciones.

en el código proporcionado se utilizan bucles for en varias partes del programa.


Aquí están los lugares donde se emplean los bucles for:
Bucle principal (loop):

Aquí, el bucle for se utiliza para iterar a través de todos los píxeles en la tira de
NeoPixel y establecer su color en negro ((0,0,0)).
Bucle para reproducir la secuencia de victoria (winner_fx):
En la función winner_fx, se utiliza un bucle for para reproducir una secuencia de
tonos que representan la victoria.

Bucle para dibujar los automoviles (draw_car1) y (draw_car2) :


v

Aquí, el bucle for se utiliza para dibujar el automóvil 1 en la tira de NeoPixel con
colores variables en función del bucle.
Estos son los bucles for presentes en el código. Los bucles son fundamentales
para repetir tareas y ejecutar instrucciones de manera iterativa en diferentes
partes del programa.

en el código se hace uso de la librería Adafruit_NeoPixel. Esta librería


proporciona funciones para controlar matrices y tiras de LEDs NeoPixel (también
conocidos como WS2812, WS2811, o compatible). En particular, esta librería es
utilizada para controlar una tira de NeoPixel conectada al pin PIN_LED.
A continuación, se presenta la línea de código donde se inicializa la instancia track
de la clase Adafruit_NeoPixel:

En esta línea, MAXLED es el número máximo de LEDs en la tira, PIN_LED es el


pin al que está conectada la tira y NEO_GRB + NEO_KHZ800 son
configuraciones específicas para el tipo de LEDs utilizados.
La razón para usar la librería Adafruit_NeoPixel es que simplifica enormemente
la tarea de controlar LEDs NeoPixel. Proporciona funciones predefinidas para
configurar y controlar los LEDs, lo que hace que la programación de efectos de
iluminación y manipulación de colores sea más accesible y fácil de implementar.
En resumen, se utiliza la librería Adafruit_NeoPixel para gestionar de manera
eficiente y sencilla los LEDs NeoPixel conectados al Arduino en el proyecto.
5. Resolución de fallas y correcciones:
Cuando se había conectado el circuito y probamos por primera vez con un
código guía, se presentó la falla de que la fuente que se le estaba
suministrando al circuito era insuficiente ya que la que teníamos nos daba
4,5 V y se necesitaba una que nos suministrara min. 5 V. Nos dimos cuenta
de que era la falla de la fuente ya que en un momento llegamos a utilizar el
circuito conectado al USB del computador y así funciono correctamente.

En otro momento cuando estábamos ensayando el circuito no nos servía un


switch, esto nos retardo ya que estábamos midiendo continuidad y
verificando que las conexiones de estos switches estuvieran en donde se
habían definido en el programa, a la final nos dimos cuenta de que las
conexiones estaban correctas, pero al ensamblar el switch en el case se
desarmo internamente y por eso no había paso de continuidad del voltaje.

En cuanto al programa también se presentaron muchas fallas que iban


desde lo más sencillo que faltaba algún paréntesis o punto y coma hasta
donde tocaba definir variables de aceleración y fricción ya que no se
lograba que con la pulsación del botón se fuera moviendo, sino que se
pulsaba una vez y la luz avanzaba sin parar.

Uno de los problemas con el código fue que al oprimir los botones estos
seguían sin parar, por lo tanto tocó definir variables de fricción y aceleración
simulando un carro de verdad para que andará solo con las pulsaciones
que se obtenían de cada uno de los botones
6. Ensamble y prueba de funcionamiento:
Se ensamblo por completo poniendo los componentes electrónicos dentro
de la carcasa fabricada y se hizo una prueba donde se evidencia el
funcionamiento de este.
Programación de encuentros Avances

Al finalizar la selección y compra


de los componentes y
suministros, nos reunimos por
primera vez y en nuestro primer
Jueves 26 de octubre de 2023 encuentro empezamos a realizar
(2-4 PM) las conexiones en el altavoz
soldamos con cautín.

-colocamos termo encogibles en


todas las conexiones para su
protección.

- se hizo un diseño a mano


alzada de la caja que iba guardar
todo el sistema principal del
juego.

-medimos por medio de un pie de


rey las piezas que tendrían
conexión externa de la caja como
la fuente 5V, Conector jst 3 pines.

Con las medidas y el esquema se


Viernes 27 de octubre de 2023 realizaron las piezas 3D
(7-10 AM) (empuñadura del pulsador y la
caja).

-Decidimos unir los pulsadores


con la empuñadura.

- Realizamos las conexiones


entre la resistencia y el Arduino.

Se designan las siguientes


Martes 31 de octubre de 2023 conexiones en el Arduino
(5-7 PM) -Los botones se conectaron al pin
4 y 5 y el otro extremo a GND.

-El altavoz de 8 W se conectó al


capacitor de 100 µF seguido al
pin 3 y el otro extremo a GND.
-La tira led WS2812 se conectó a
GND, a 5 v y la señal se conectó
a una resistencia 330 Ω seguido
al pin A0.
-El plug de la fuente se conectó a
vin y a GND.

Se empezó a trabajar en el
Jueves 9 de noviembre de 2023 código por medio del lenguaje de
(2-5 PM) programación de Arduino.

-Se investigó, se descargó y se


utilizó bibliotecas y funciones de
Arduino para hacer más fácil la
programación de hardware.

-Se presentaron errores de


sintaxis y de conexiones.

Viernes 10 de noviembre de 2023 Se dieron por finalizados los


(7-10 PM) ensambles con sus termo
encogibles y se decidió ubicar en
la caja de componentes.
Se siguió trabajando en el código,
finalizando detalles sobre el color,
el sonido de el ganador y al
iniciar la carrera, la iluminación
de el ganador, entre otros.
Jueves 16 de noviembre de 2023
(2-5 PM) Realizamos pruebas de
funcionamiento las cuales
salieron exitosas, aunque
presentamos errores con el
código debido a una mala
ejecución en el programa de
Arduino, hicimos de nuevo
pruebas para su funcionamiento
exitoso.
CONCLUSIONES

Contexto y Significado del Proyecto:


 Las tiras LED han evolucionado más allá de su función original de
iluminación, transformando la ambientación visual en entornos residenciales
y comerciales.
 El proyecto se centra en la creación de un juego interactivo utilizando tiras
LED, donde dos vehículos compiten en una emocionante carrera dentro de
la tira LED.
Herramientas y Componentes Utilizados:
 Se utilizó la plataforma Arduino, destacando su flexibilidad y facilidad de uso
en el desarrollo electrónico.
 La tecnología Neopixel Digital RGB de Adafruit ofrece LEDs programables
que permiten crear efectos visuales variados.
 Componentes como pulsadores, altavoces, y una fuente de 5V DC fueron
esenciales para la construcción del juego.
Desarrollo del Proyecto:
 Se diseñó e imprimió en 3D una carcasa para albergar los componentes
electrónicos, demostrando una integración de hardware y diseño.
 La conexión del circuito electrónico se realizó de manera precisa,
mostrando la importancia de la planificación y organización en proyectos de
este tipo.
 La programación en Arduino se dividió en partes, desde la configuración
inicial hasta el bucle principal, utilizando funciones específicas para efectos
visuales, sonidos y control del juego.

Uso de Arduino y Programación:


 El lenguaje de programación de Arduino, una variante simplificada de C++,
se demostró accesible para principiantes en electrónica y programación.
 Se emplearon bibliotecas y funciones proporcionadas por Arduino para
simplificar la programación de hardware, como la manipulación de pines y
la comunicación serial.

Solución de Problemas y Mejoras:


 Se identificaron y resolvieron problemas durante el desarrollo, como la
insuficiencia de voltaje y fallos en componentes.
 El proyecto demostró la necesidad de ajustes y correcciones en el código
para lograr un funcionamiento optimo.

Ensamble y Prueba de Funcionamiento:


 El proyecto fue ensamblado satisfactoriamente, integrando todos los
componentes en la carcasa diseñada.
 La prueba de funcionamiento fue exitosa, mostrando el juego interactivo
con las tiras LED en acción.
 el proyecto combina elementos de diseño, electrónica y programación para
crear una experiencia única de juego utilizando tiras LED, destacando la
versatilidad de la plataforma Arduino y la importancia de la resolución de
problemas en el desarrollo de proyectos tecnológicos.
EVIDENCIAS FOTOGRAFICAS
BIBLIOGRAFIA

 Y. Fernández, «Qué es arduino, cómo funciona y qué puedes hacer con


uno», Xataka, 23 de septiembre de 2022.
https://www.xataka.com/basics/que-arduino-como-funciona-que-puedes-
hacer-uno

 «Interruptores pulsadores momentáneos», Interruptores pulsadores


momentáneos. https://www.te.com/es/products/relays-contactors-
switches/switches/pushbutton-switches.html?tab=pgp-story

 «¿Qué es 5V DC?» https://todosloshechos.es/que-es-5v-dc

 Ohms, «Cómo conectar LED RGB NeoPixel/WS2812 a Arduino», 330ohms,


15 de junio de 2020. https://blog.330ohms.com/2020/06/12/como-conectar-
led-rgb-neopixel-ws2812-a-arduino/

 Aula, «Arduino: guía completa para principiantes y expertos | Aprende


ya», aula21 | Formación para la Industria, 8 de mayo de
2023. https://www.cursosaula21.com/arduino-todo-lo-que-necesitas-saber/

 «RETO 10: LED RGB, JUGANDO CON LOS COLORES PRIMARIOS DE


LA LUZ», EDUCAR para el CAMBIO, 6 de noviembre de
2018. https://educarparaelcambio.com/arduino/reto-10-led-rgb-jugando-con-
los-colores-primarios-de-la-luz/

 L. Llamas, «Reproducir sonidos con arduino y un buzzer pasivo o altavoz»,


Luis Llamas, 10 de julio de 2016. https://www.luisllamas.es/reproducir-
sonidos-arduino-buzzer-pasivo-altavoz/

También podría gustarte