Ejemplo con Joystick, PWM, Leds y arduino

Ejemplo con Joystick, PWM, Leds y arduino

A continuación, le mostraré un ejemplo del uso del joystick, pero también se utilizó unos leds como para representar el plano cartesiano del X y Y y visualizar la ubicación del joystick en ese plano realizado con leds. Sin embargo, no solo los leds representan esa posición XY sino que además con el uso de PWM se podrá notar como se desvanece el leds hasta apagarse y como enciende suavemente. Este proyecto es muy sencillo tanto en a fabricación como en el código, para este proyecto usaremos un arduino MEGA 2560 ya que posee los pines PWM necesarios.

Primero algunos conceptos básicos necesarios para comenzar a armar el proyecto:

Este módulo Joystick utiliza una fuente de alimentación de 5V, que podemos obtenerla del mismo arduino MEGA sin problemas. Consta de resistencias variables como un divisor de tensión que van conectadas a los pines de entrada analógica.

En su posición natural las resistencias el eje X y Y dan lectura de tensión a la salida de aproximadamente 2.5 V, cuando la posición del joystick cambia, la lectura de voltaje llega hasta 5 V moviendo la flecha en la dirección opuesta, la reducción de la tensión de lectura llega a un mínimo de 0V. De esta manera varía el voltaje para cada eje y con el código podemos obtener una relación en valores enteros y usarlo a nuestra conveniencia. El modulo también cuenta con un pulsador, al igual que los controles de las consolas, ideal para cualquier otra función que podamos utilizar en algún proyecto específico.

Para este proyecto usaremos unos LEDS que están conectados como se muestra en el siguiente diagrama de conexión:

Es importante tomar en cuenta las etiquetas que se usó en este diagrama pues en el código se usara los mismos nombres para identificar cada led.

Nota: Coloco la imagen de la posición del módulo y su eje X y Y para evitar generar confusión.

Se utilizó un trozo de cartón como base para los leds y el modulo. También resistencia para proteger los leds también se muestra en las imágenes las conexiones con el arduino.

Luego la parte final sería el código; que también dejo para descargar, por si desean realizar un proyecto similar; se explicará algunas cosas del código paso a paso, para entender un poco como funciona.

Declaramos nombres de los pines a usar en el arduino. El pin L13 como es el led que está en el centro no hay necesidad de que sea PWM solo enciende en la posición natural del módulo. yPin y xPin son los pines de las entradas analógicas. ButtonPin es el pulsador del módulo agregue unas animaciones cuando se pulsa este pulsador.

Luego declaramos algunas variables, que usaremos en el código para transformar la entrada analógica en un valor decimal. Luego en el setup configuramos los pines como entrada o salidas.

Aquí observamos algunas funciones como analogRead, para leer el puerto analógico y transformarlo en valor decimal de 0 a 1024. luego digitalRead, para leer una entrada digital LOW o HIGH (0 o 1 en decimal). Con digitalWrite escribimos HIGH o LOW, en la salida de un pin.

En el primer if para cuando el modulo está en su posición natural, como de 0 a 1024 equivale de 0 a 5V y como se había mencionado anteriormente, que en la posición estándar es de 2.5V quiere decir un valor de alrededor 512(+-20); por lo tanto, agregamos esa condición, para cuando esté dentro de ese rango, encienda el LED13 que es el que está en el centro.




Luego el While; comenzamos a encender leds con rangos de posición, cuando x<900 pero x>505 y 700>y>400 encender un led en específico en este caso, L9 usando la función analogWrite (L9, i) que está dentro de un for, el valor de i aumenta por de 0 a 255 siendo 255 el ciclo de trabajo más activo, y 0 el ciclo de trabajo menos activo. Tal como muestra en la siguiente imagen:

Luego estando el valor en 255, quiere decir que el led está completamente encendido; solo queda hacer un amagado suave, realizando un for pero en decremento. Se usa la misma lógica para cada led, solo queda la animación cuando se pulsa el botón del módulo que está en la parte final del código.

Como buttonState = digitalRead(buttonPin), se observa la condición if(buttonState==0) {, y las acciones que se usan son similares con un for de aumento y decremento para cada led, usando la función analogWrite ().

Aquí dejo también un video de demostración, y por su puesto el código arduino aquí . Si tienes cualquier duda sobre el código o el proyecto en general, podrás hacernos saber tu pregunta o sugerencia y con gusto, a la más brevedad posible podremos atender tus inquietudes.

Demostración:

No hay comentarios

Añade tu comentario

language