Archivo de la etiqueta: arduino

Usar el nunchuk en tus proyectos con Arduino

Una de las mejores cosas que tiene la electrónica es que puedes usar aparatos que se fabrican en serie con unas características increibles a precios muy bajos. En esta ocasión voy a explicar cómo usar el nunchuk de la wii para poder adaptarlo a vuestros proyectos electrónicos. En este artículo me centraré en la plataforma Arduino.

No es necesario tener la wii para adquirir un nunchuk, de hecho ni siquiera tiene por qué ser el oficial, un clónico puede llegar a costar 7 €. Por otra parte es necesario tener el wiichuck, que es un adaptador para el nunchuk con una tira de pines y hace más manejable el uso de este (no supera los 4€).

El nunchuk trabaja con una tensión de 3,3 v., pero también puede hacerlo a 5 v. (Limitando su vida útil, pero por 7€ …). Funciona mediante el bus I2C en su variante Fast (400Kb/s) y lo que podemos leer son los datos del acelerómetro XYZ, del joystick y de los dos botones que contiene. Lo que haré en este artículo es recuperar esa información y mostrarla por el puerto serie.

Para empezar hay que inicializar el nunchuk de la siguiente forma:

  • Enviar a la dirección 0x52 los bytes 0xF0 y 0x55.
  • Enviar a la dirección 0x52 los bytes 0xFB y 0x00.

A partir de entonces cada vez que queramos leer los datos tenemos que:

  • Enviar a la dirección 0x52 el byte 0x00.
  • Leer de la dirección 0x52 seis bytes.

Los 6 bytes que hemos leido contienen la información del acelerómetro, del joystick y de los botones, pero vienen formateados:

  • Primer byte: La posición X del joystick (0-255)
  • Segundo byte: La posición Y del joystick (0-255)
  • Tercer byte: Los 8 bits de mayor peso del eje X del acelerómetro (Finalmente tendrá un valor entre 0 y 1023)
  • Cuarto byte: Los 8 bits de mayor peso del eje Y del acelerómetro (Finalmente tendrá un valor entre 0 y 1023)
  • Quinto byte: Los 8 bits de mayor peso del eje Z del acelerómetro (Finalmente tendrá un valor entre 0 y 1023)
  • Sexto byte: que contiene
    • los dos bits de menor peso del eje Z del acelerómetro
    • los dos bits de menor peso del eje Y del acelerómetro
    • los dos bits de menor peso del eje X del acelerómetro
    • Un bit indicando el estado del botón C (0 si pulsado, 1 si no lo está)
    • Un bit indicando el estado del botón Z (0 si pulsado, 1 si no lo está)

Tomaremos los 3,3 v. y la masa que ofrece arduino, conectaremos el pin de data del wiichuck al pin analógico 4 y el pin de clock al pin analógico 5. No son necesarias las resistencias pull-up típicas del bus I2C ya que los pines analógicos 4 y 5 ya las tienen implementadas internamente y son activadas al inicializar la librería wire:

El código fuente simplificado al máximo:

Y así es como se ven los datos de una de las pruebas que he hecho:

Si os ha gustado me plantearé hacer otro artículo donde explico cómo hacer lo mismo para microcontroladores AVR y PIC.

Robot con arduino, motorshield, módulo bluetooth y cámara portatil

Hace tiempo que hice mi primer robot, pero este se quedó en el olvido y recientemente he querido retomarlo para un proyecto de orientación por GPS. De momento lo he estado montando para que detecte colisiones con objetos, pero además me comunique mediante bluetooth cuando detecta esas colisiones. He aquí los pasos que he ido siguiendo para montarlo:

Primero extraemos la electronica y nos quedamos con los cables de los motores del coche teledirigido, después añadimos un conector tamiya con fusible para la batería LIPO:

Nos hacemos con una placa Arduino y un motorshield, en la cual se pueden acoplar en sus pines los cables de los motores:

En el mercado existen multitud de módulos bluetooth, yo he comprado el de sure electronics por su sencillez tanto de montaje como de comunicaciones (va a 9600 bps). Dos cables van a los pines RX y TX de la arduino y otros dos van a la salida de 3,3 voltios y GND de la arduino. Para comunicarse con él en windows basta con el putty accediendo al puerto COM que se haya asociado a vuestra conexión bluetooth;  si se trata de linux o mac podeis conectaros desde la consola con screen /dev/<dispositivo> 9600 siendo <dispositivo> el tty asociado a la conexión:

Montamos los bumpers. El cable suelto va a uno de los pines GND de la arduino, los otros dos cables van conectados a los pines EC1 y EC2 de la motorshield, que a su vez están conectados a los pines 4 y 5 de la arduino, por lo que se deberá activar la resistencia pull-up interna de esos pines:

Una batería LIPO para alimentar el conjunto, pegada con velcro para que se sujete bien a la vez que sea fácil quitarla para cargarla o sustituirla:

Aunque no es necesario, he puesto una cámara wireless alimentada con una pila de 9 voltios para grabar los movimientos. Al final el conjunto queda así:

Como el movimiento se demuestra andando, pongo un video de su funcionamiento (recomiendo agrandarlo para ver mejor los detalles). A la izquierda el putty mostrando los mensajes que envía la arduino a través de bluetooth, en el centro un video del cómo responde el robot y a la derecha otro video desde dentro del robot:

Finalmente dejo el código fuente del robot para el entorno Arduino:

Mi nueva adquisición: Arduino Duemilanove

Recientemente he adquirido una placa open hardware llamada Arduino, cuya versión más moderna es la Duemilanove.

arduino

Con esta placa, que se puede programar en C desde el entorno que el proyecto facilita, se pueden hacer miles de cosas. De momento la estoy probando. Ya he usado las comunicaciones del usb (un puerto serie al final), lcd, leds, servos y aún me queda hacer ADC.