Usando un Nunchuck de Wii para controlar la tortuga de Python

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.

Requerimientos

Para que el nunchuck corra con el Pi, necesitarás:

  • Una Raspberry Pi con tarjeta SD preinstalada con Raspbian (consulte el tutorial Cómo flashear una tarjeta SD para Raspberry Pi si lo necesitas)
  • Una nintendo nintendo
  • Un adaptador como MultiChuck
  • O cables de puente hembra, soldador, soldadura y cinta aislante para cubrir la unión.

Conectando tu nunchuck

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..


Cableando el 

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..

  • Suelo-marrón
  • Datos seriales-Rosado
  • Reloj serial-Amarillo
  • Potencia (VDD)-Blanco
  • Addon Detect-Azul-no utilizado
Un ejemplo del pinout de cableado.

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 MultiChuck

Configurando la Raspberry Pi

i2c 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í:

Edición de archivos en la Raspberry Pi

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í:


Edición de archivos en la Raspberry Pi

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..

Instalación de las bibliotecas requeridas

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:

Pruebas

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)

Usando tortuga

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.

Agregar botones

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.

Usando el nunchuck para dibujar.

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.

Conclusión

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.