Robocarton piloté par Nunchuk

Et non Robocarton n’est pas à la plage, meme s’il aimerait surement. Mais son dermatologue lui a déconseillé, il parrait que l’eau ne lui ferait pas du bien. Donc il est resté à la maison et j’ai pu le faire évoluer. Le but de la manœuvre a été de le faire piloter via un vieux Nunchuk dont le fil était coupé (je vous rassure il existe aussi des adaptateurs pour éviter de le massacrer).

Cela faisait un bout de temps que je tâtonnais mais je m’étais fait avoir par les code couleurs des fils qui ne correspondent à rien de censé (c’est un nunchuk « compatible », pas « officiel »).

Le nunchuk que je possede a ce cablage là :

  • Jaune : 3.3V
  • Rouge : Gnd
  • Bleu : A5 (clk)
  • Blanc : A4 (data)

D’autre part j’avais trouvé une Démo permettant de piloter un arduino à partir du nunchuk, mais la forme ne me plaisait pas (mettre du code dans un .h, j’entends encore certains professeurs hurler ^^).

Alors que j’étais parti pour en faire une librairie je suis tombé sur une implémentation par Gabriel Bianconi  dudit code.

Cette librairie est à déposer comme d’habitude dans le répertoire ~/sketchbook/libraries/.

Le code suivant une fois compilé  et envoyé il est  donc possible de :

  • faire lever/baisser les bras en bougeant le joystick vers le haut/bas
  • faire tourner la tête en bougeant le joystick vers la droite/gauche
  • allumer les leds en appuyant sur le bouton Z

(le code est aussi accessible sur google code)

#include <Servo.h> 
#include <Wire.h>
#include <ArduinoNunchuk.h>
Servo myServoTete;
Servo myServoBrasDroit;
Servo myServoBrasGauche;
#define BAUDRATE 19200
#define SERVO_BRAS_DROIT 7
#define SERVO_BRAS_GAUCHE 5
#define SERVO_TETE 6
#define LED_GAUCHE 9
#define LED_DROITE 8
#define LED_PECTORAL 10
ArduinoNunchuk nunchuk = ArduinoNunchuk();
#define MIN_JOY 0
#define MAX_JOY 255
#define MIN_SERVO 1
#define MAX_SERVO 181
int oldAngleTete = 0;
int oldAngleBrasDroit = 0;
int oldAngleBrasGauche = 0;
int oldStatusBoutonZ = 0;
void setup ()
{
 Serial.begin(BAUDRATE);
 nunchuk.init();
 myServoTete.attach( SERVO_TETE );
 myServoBrasDroit.attach( SERVO_BRAS_DROIT );
 myServoBrasGauche.attach( SERVO_BRAS_GAUCHE );

 pinMode( LED_GAUCHE, OUTPUT);
 pinMode( LED_DROITE, OUTPUT); 
 pinMode( LED_PECTORAL, OUTPUT); 
}
void loop ()
{
 nunchuk.update();
 int angleTete = (int) (( (float) nunchuk.analogX / ( MAX_JOY - MIN_JOY ) ) * ( MAX_SERVO - MIN_SERVO ) + MIN_SERVO);
if ( angleTete != oldAngleTete )
 {
 myServoTete.write( angleTete );
 oldAngleTete = angleTete;
 }

 int angleBrasGauche = (int) (( (float) nunchuk.analogY / ( MAX_JOY - MIN_JOY ) ) * ( MAX_SERVO - MIN_SERVO ) + MIN_SERVO);
 if ( angleBrasGauche != oldAngleBrasGauche )
 {
 myServoBrasGauche.write( angleBrasGauche );
 myServoBrasDroit.write( MAX_SERVO - angleBrasGauche );
 oldAngleBrasGauche = angleBrasGauche;
 }

 int statusBoutonZ = nunchuk.zButton;

 if ( oldStatusBoutonZ != statusBoutonZ )
 {
 digitalWrite( LED_GAUCHE, (statusBoutonZ == 1 ? HIGH : LOW ) );
 digitalWrite( LED_DROITE, (statusBoutonZ == 1 ? HIGH : LOW ) );
 digitalWrite( LED_PECTORAL, (statusBoutonZ == 1 ? HIGH : LOW ) ); 
 oldStatusBoutonZ = statusBoutonZ;
 }
}

Je laisse mon fils vous faire une démo (c’est dire si la robotique c’est un jeu d’enfant 😉 ) :


Robocarton piloté par un nunchuk

Publicités

Publié le 13 mai 2012, dans Arduino, et tagué , , . Bookmarquez ce permalien. Poster un commentaire.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

%d blogueurs aiment cette page :