Nota
¡Hola, bienvenidos a la Comunidad de Entusiastas de Raspberry Pi & Arduino & ESP32 de SunFounder en Facebook! Profundiza más en Raspberry Pi, Arduino y ESP32 junto con otros entusiastas.
¿Por qué unirte?
Soporte experto: Resuelve problemas postventa y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
Aprender y compartir: Intercambia consejos y tutoriales para mejorar tus habilidades.
Preestrenos exclusivos: Accede anticipadamente a los anuncios de nuevos productos y adelantos.
Descuentos especiales: Disfruta de descuentos exclusivos en nuestros productos más nuevos.
Promociones festivas y sorteos: Participa en sorteos y promociones especiales durante las festividades.
👉 ¿Listo para explorar y crear con nosotros? ¡Haz clic en [aquí] y únete hoy!
Lección 09: Módulo Joystick
Nota
El Raspberry Pi no tiene capacidades de entrada analógica, por lo que necesita un módulo como el Módulo Convertidor ADC DAC PCF8591 para leer señales analógicas y procesarlas.
En esta lección, aprenderás a usar un Raspberry Pi para interactuar con un módulo joystick utilizando el ADC PCF8591. Podrás leer las posiciones X e Y del joystick a partir de sus salidas analógicas y detectar las pulsaciones de los botones. Esta configuración demuestra cómo manejar tanto entradas analógicas como digitales en un Raspberry Pi.
Componentes Requeridos
En este proyecto, necesitamos los siguientes componentes.
Es muy conveniente comprar un kit completo, aquí está el enlace:
Nombre |
ARTÍCULOS EN ESTE KIT |
ENLACE |
|---|---|---|
Kit Sensor Universal Maker |
94 |
También puedes comprarlos por separado desde los siguientes enlaces.
Introducción del Componente |
Enlace de compra |
|---|---|
Raspberry Pi 5 |
|
Cableado
Nota
En este proyecto, utilizamos el pin AIN0 del módulo PCF8591, que está conectado a un potenciómetro en el módulo mediante un capuchón de puente. Para evitar interferencias de datos, desconecta el capuchón de puente del módulo. Para más detalles, consulta el schematic.
Código
import PCF8591 as ADC # Importar módulo ADC para entradas analógicas
import time # Importar módulo time para crear retrasos
from gpiozero import Button # Importar Button para entrada de botón
ADC.setup(0x48) # Configurar el módulo PCF8591 en la dirección I2C 0x48
button = Button(17) # Inicializar botón conectado a GPIO 17
try:
while True: # Bucle continuo
print("x:", ADC.read(0)) # Leer valor analógico desde el canal AIN0
print("y:", ADC.read(1)) # Leer valor analógico desde el canal AIN1
print("sw:", button.is_active) # Comprobar si el botón está presionado
time.sleep(0.2) # Esperar 0.2 segundos antes del siguiente ciclo
except KeyboardInterrupt:
print("Exit") # Salir en caso de interrupción por teclado
Análisis del Código
Importación de Bibliotecas:
El script comienza importando las bibliotecas necesarias para el proyecto.
import PCF8591 as ADC # Importar módulo ADC para entradas analógicas import time # Importar módulo time para crear retrasos from gpiozero import Button # Importar Button para entrada de botón
Configuración del Módulo PCF8591:
El módulo PCF8591 se configura en la dirección I2C 0x48, lo que permite que el Raspberry Pi se comunique con él.
ADC.setup(0x48) # Configurar el módulo PCF8591 en la dirección I2C 0x48
Inicialización del Botón:
Se inicializa un botón, conectado al pin GPIO 17 del Raspberry Pi.
button = Button(17) # Inicializar botón conectado a GPIO 17
Bucle Principal:
La parte principal del script es un bucle infinito que lee continuamente los valores analógicos de dos canales del PCF8591 (AIN0 y AIN1) y comprueba si el botón está presionado.
AIN0yAIN1son los pines analógicos para los ejes X y Y del joystick.try: while True: # Bucle continuo print("x:", ADC.read(0)) # Leer valor analógico desde el canal AIN0 print("y:", ADC.read(1)) # Leer valor analógico desde el canal AIN1 print("sw:", button.is_active) # Comprobar si el botón está presionado time.sleep(0.2) # Esperar 0.2 segundos antes del siguiente ciclo
Manejo de Interrupciones:
El script puede finalizarse de manera segura utilizando una interrupción por teclado (CTRL+C), lo cual es una práctica común en Python para detener un bucle infinito.
except KeyboardInterrupt: print("Exit") # Salir en caso de interrupción por teclado