Club robotique de Sophia-Antipolis

Accueil > Projets, études > Nos robots > Robots du club > Robots spéciaux > Nono, le robot d’animation pédagogique (2012) > Contrôle de Nono avec Firmata

Contrôle de Nono avec Firmata

dimanche 8 juillet 2012, par Julien H.

Notre robot Nono est équipé d’une carte Arduino à micro-contrôleur AVR. Ses capacités de communication sont les bus I2C et SPI et la liaison série UART.

Cette dernière est connectée en USB. Sur les dernières versions, la puce d’adaptation entre le µC AVR et le port USB est reprogrammable : par défaut, c’est une liaison série qui est prévue, permettant ainsi une programmation via un bootloader, mais il est également possible d’activer un mode USB différent, comme l’HID ou le MIDI.

Plusieurs choix s’offrent à nous pour piloter le robot depuis une carte hôte USB (PC, mobile Androïd, carte Linux embarquée). Nous en étudions plusieurs mais l’objet de cet article est de présenter la liaison série simple, à travers la bibliothèque "Firmata" côté Arduino et à travers la bibliothèque "Arduino" de Processing côté hôte.

Nous avons déjà pratiqué Firmata à travers Pure Data, un environnement graphique de contrôle multimedia (des blocs reliés entre eux). Le protocole permet d’accéder à quasiment toutes les ressources de l’Arduino : les GPIO en entrée/sortie, génération de PWM, pilotage de Servo, le bus I2C, etc.

L’installation dans l’Arduino est simple :

  • on ouvre l’environnement de développement,
  • on sélectionne l’exemple Firmata / Standard Firmata,
  • on sélectionne sa carte et son port de sortie,
  • on clique sur le bouton de téléchargement du programme compilé dans la carte.

C’est fini ! Il ne reste plus qu’à connecter la carte à un ordinateur qui a un programme qui envoit des ordres compatibles Firmata.

Côté hôte (PC dans notre cas pour le développement, puis Raspberry Pi pour l’exécution), il faut lancer l’environnement Processing et écrire un petit programme Java :

/** 
 * Contrôle de Nono utilisant la bibliothèque Arduino (Firmata)
 */

import processing.serial.*;

import cc.arduino.*;

Arduino arduino;


void setup() { 
  println(Arduino.list());
  arduino = new Arduino(this, Arduino.list()[0], 57600);
  arduino.pinMode(9, Arduino.OUTPUT);
  arduino.pinMode(10, Arduino.OUTPUT);
  arduino.pinMode(11, Arduino.OUTPUT);
  arduino.pinMode(12, Arduino.OUTPUT);
  arduino.pinMode(13, Arduino.OUTPUT);
}

void draw() {
    arduino.digitalWrite(9, Arduino.HIGH);
    arduino.digitalWrite(10, Arduino.HIGH);
    arduino.digitalWrite(11, Arduino.HIGH);
    arduino.digitalWrite(12, Arduino.HIGH);
    arduino.digitalWrite(13, Arduino.HIGH);
    delay(1000);
    arduino.digitalWrite(9, Arduino.LOW);
    arduino.digitalWrite(10, Arduino.LOW);
    arduino.digitalWrite(11, Arduino.LOW);
    arduino.digitalWrite(12, Arduino.LOW);
    arduino.digitalWrite(13, Arduino.LOW);
    delay(1000);
}

Avec un code un peu plus complexe mais n’utilisant que les fonctions ci-dessus, voici le test simple qu’on peut faire :


Le robot Nono fonctionne avec Arduino / Firmata... par JulienPobot

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.