En este tutorial, te mostraré cómo conectar un adaptador nunchuck de Wii a una Raspberry Pi y usar Python para controlar el módulo de tortuga.
Este tutorial funciona tanto con Nintendo oficial como con nunchucks de terceros. El nunchuck es una buena entrada de uso múltiple para una Raspberry Pi, ya que pueden recogerse a bajo costo y contienen un joystick, un acelerómetro de tres ejes y dos botones en un controlador agradable y ergonómicamente amigable.
Para que el nunchuck corra con el Pi, necesitarás:
Si se siente valiente, disfrute cortando los conectores y tenga controladores de repuesto para conectar los cables directamente a los pines GPIO de la Raspberry Pi. Como cada conector puede usar cables de diferentes colores, es mejor abrir el controlador para calcular los colores del cableado..
En mi controlador tengo los siguientes cables, ya que se trata de un controlador de terceros, tome nota de los colores y los pines a los que se conectan, ya que es posible que sean muy diferentes al conector en mi ejemplo..
Corte el conector final que enchufa en el Wiimote, retire la cubierta de plástico para exponer los cables pelados. Suelde cada cable a un cable de puente hembra, luego use cinta aislante para evitar que las juntas soldadas se toquen entre sí. Una vez que esté seguro de que cada color coincide con su cable respectivo, conéctelos directamente al i2c y los pines de alimentación en el Pi.
Si no te sientes tan valiente o no tienes un controlador de sobra, siempre puedes usar un adaptador como el MultiChuck Adapter para conectar tu controlador a tu Pi sin sacrificar el conector..
Usando un adaptador MultiChucki2c no está habilitado de forma predeterminada, esto requiere la edición de dos archivos. El primer archivo habilitará el protocolo serie y el segundo iniciará el controlador serie cuando se inicie la Raspberry Pi..
Para editar el primer archivo, escriba esto en la LXTerminal ventana o Masilla Si se está conectando de forma remota: sudo nano / etc / modules
Añadir i2c-dev
y i2c-bcm2708
hasta el final del archivo para que se vea así:
Control-X para guardar los cambios, Y para confirmar y Entrar guardar en el archivo.
A continuación, para habilitar el controlador en el inicio, escriba:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
luego agrega un #
al principio de cada línea para que se vea así:
Otra vez Control-X para guardar los cambios, Y para confirmar y Entrar para guardar en el archivo. Esos son los cambios necesarios para que la Raspberry Pi hable sobre el protocolo i2c. Siguiente tipo:
reinicio de sudo reinicio
Permitir que los cambios surtan efecto..
Una vez que la Raspberry Pi se haya reiniciado, abra LXTerminal nuevamente. Lo último que hay que hacer ahora es instalar los módulos de Python para manejar la comunicación entre Python y i2c:
sudo apt-get update sudo apt-get install python-smbus -y
Para facilitar el manejo de los datos nunchuck, he creado un módulo que se puede importar a su script. Abierto LXTerminal y escribe el siguiente comando para descargarlo.
wget https://raw.githubusercontent.com/Boeeerb/Nunchuck/master/Raspberry%20Pi/nunchuck.py
Leyendo datos de Nunchuck
Ahora que tiene todas las bibliotecas y módulos requeridos, pruebe que funcione. Mientras todavía en LXTerminal, escribir
sudo python
para iniciar la consola interactiva de Python, con esto podemos escribir una prueba rápida con Python.
desde nunchuck import nunchuck wii = nunchuck () wii.raw ()
Si todo funciona como debería, deberías esperar ver un conjunto de números como este:
Los números corresponden a las salidas del joystick, acelerómetro y estados de los botones..
Wii.raw ()
le dará una copia impresa de cada uno, comenzando a la izquierda que tiene:[Joystick X, Joystick Y, Acelerómetro X, Acelerómetro X, Acelerómetro X, Datos mixtos que contienen los botones Z y C]
También he agregado funciones individuales para cada uno de estos para facilitar la escritura de sus propios scripts.
wii.raw () # Devuelve todos los datos en bruto wii.joystick () # Devuelve solo las posiciones X e Y del joystick wii.accelerometer () # Devuelve las posiciones X, Y y Z del acelerómetro wii.button_c () # Devuelve Verdadero si se presiona el botón C, Falso si no wii.button_z () # Devuelve Verdadero si se presiona el botón Z, Falso si no wii.joystick_x () # Devuelve solo la posición X del joystick wii.joystick_y () # Devuelve solo la posición Y del joystick wii.accelerometer_x () # Devuelve solo la posición X del acelerómetro wii.accelerometer_y () # Devuelve solo la posición Y del acelerómetro wii.accelerometer_z () # Devuelve solo la posición Z del acelerómetro wii. scale (value, min, max, out_min, out_max) # Funciona igual que Arduino Map, perfecto para cambiar los valores devueltos a una escala diferente, es decir, -100 - +100
Puede probar uno con un bucle escribiendo lo siguiente en un sudo python
consola. Esto generará la posición actual del joystick, así que escríbalo y mueva el joystick para ver cómo cambian los números..
desde nunchuck import nunchuck desde time import sleep wii = nunchuck () mientras True: wii.joystick () sleep (0.2)
Ahora que tiene su Nunchuck conectado a la Raspberry Pi, instaló las bibliotecas y los módulos y lo probó. Le mostraré cómo hacer algo divertido con él..
Python, en la Raspberry Pi, viene instalado con el Tortuga Módulo para permitir que cualquiera pueda crear patrones rápida y fácilmente agregando algunas líneas de código. Entonces, como es realmente fácil ponerse en marcha, te mostraré cómo usar el nunchuck para controlar una tortuga.
Para la próxima sección estaré usando Ocioso para escribir el código Python, pero como el protocolo serie requiere derechos de administrador, deberá volver a LXTerminal de nuevo y escriba:
sudo inactivo
Hacer clic Expediente entonces Nueva ventana. La nueva ventana es donde irá el código de Python. Prensado F5 ejecutará el código. Agregue el código de antes para importar los módulos de sueño y nunchuck, junto con turtle.
de nunchuck import nunchuck from time import sleep import turtle wii = nunchuck () turtle.setheading (90) while True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) si wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10)nunchuckturtle.py script
Después de escribir el código, presione F5 para ejecutarlo Luego se le pedirá que guarde el archivo, así que dele un nombre apropiado. Ahora aparecerá una ventana con un pequeño triángulo negro, ahora está listo para probarlo, así que pruebe el joystick..
En el código que ha utilizado, las primeras cuatro líneas importan los módulos necesarios e inician el nunchuck listo para ser utilizado. turtle.setheading (90)
apuntará la flecha hacia arriba, como 0
señala a la derecha El siguiente bloque comienza un bucle para siempre.-mientras que True
. Python verifica si la posición del joystick está por encima o por debajo de cierto número y mueve el cursor de tortuga respectivamente.
Ahora que tienes movimiento, te mostraré cómo agregar un poco de interactividad adicional usando el do y Z botones. Algunas de las funciones que le serán útiles serán limpiar la pantalla y también levantar el lápiz para que pueda moverse sin dibujar una línea..
de nunchuck import nunchuck from time import sleep import turtle wii = nunchuck () penstate = 0 turtle.seadeading (90) mientras True: if wii.joystick_y () < 100: turtle.backward(10) if wii.joystick_y() > 160: turtle.forward (10) si wii.joystick_x () < 100: turtle.left(10) if wii.joystick_x() > 160: turtle.right (10) si wii.button_c () == True: turtle.setposition (0,0) turtle.seadeading (90) turtle.clear () if wii.button_z () == True: if penstate = = 0: turtle.up () penstate = 1 else: turtle.down () penstate = 0 sleep (0.2)
prensa F5 para guardar e iniciar el nuevo script, y probar los botones. Botón do borrará la pantalla y restablecerá la posición del cursor, mientras Z levantará y colocará el lápiz para que pueda comenzar y dejar de dibujar una línea.
Desglosaré el código del botón para que entienda lo que sucede cuando presiona el botón.
Cuando presionas el do botón, que vuelve como Cierto y hará que la tortuga gire hacia atrás de manera que apunte hacia arriba, luego la moverá de vuelta al centro de la pantalla y finalmente borrará la pantalla.
Cuando presionas el Z botón, se almacena una variable para recordar el estado del lápiz, y levante el lápiz para detener el dibujo o vuelva a colocarlo para continuar.
Espero que en este tutorial haya adquirido el conocimiento para comenzar a aplicar lo aprendido a expandir lo que se puede hacer con el nunchuck..
Algunas cosas que se pueden hacer, como los robots de control, crear juegos como snake o incluso encender y apagar los LED que están conectados a los pines GPIO de una Raspberry Pi.