Arduino et robotique
par , le mardi 10 mai 2011 à 21:18

Catégorie : Général
Mots clés :

Pour un projet de photo j'ai besoin d'un système robotique de prise de vue. Après une rapide recherche je suis tombé sur le projet Arduino qui convient parfaitement à mon besoin et à mes connaissances informatiques.


Prise en main

Arduino est un projet OpenSource Hardware. Il fournit une plate-forme de développement sur micro-contrôleur extrêmement facile d'accès, tant du point de vue matériel que logiciel.

Ce projet fournit tous les plans hardware des cartes de référence ainsi qu'un kit de développement complet avec éditeur, compilateur et bibliothèques C++. Seule la marque Arduino est protégée, le reste étant sous licence GPL avec toute la documentation en ligne.

Voici la carte la plus standard du projet Arduino, la UNO :

J'ai été particulièrement bluffé par la facilité de mise en route et de développement, le premier test ce faisant au bout de 5min ! (disons 15min avec le téléchargement de la dernière version de la partie logiciel).

Pour prendre en main tranquillement le système, j'ai opté pour un Kit SparkFun commandé chez RoboShop contenant la carte Arduino déjà soudée ainsi qu'un jeu de composants et une documentation papier pour expérimenter immédiatement la carte Arduino à l'aide de diode, buzzer, moteur, servomoteur et divers capteurs (température, torsion, bouton, potentiomètre) :

Étant sous GNU/Debian, j'ai commencé par installer le package Arduino, mais ce package n'est pas assez récent pour se connecter à une carte Arduino Uno (la dernière en date), il est donc nécessaire de télécharger la dernière version du logiciel Arduino. D'autre part, le firmware du contrôleur USB-série de la carte est légèrement bugué et coince la carte lors de l’utilisation des fonctions de communication série (carte->PC). Il faut donc le reflasher en utilisant les outils et firmware présents dans le dossier hardware.

La carte se connecte avec un simple câble USB (de type imprimante) qui suffit à l'alimenter.

Le kit de développement, qui vient juste d'être téléchargé, est un éditeur écrit en Java qui lance la compilation, lie les bibliothèques et flashe le code binaire dans la carte Arduino en la resettant. Et hop, le montage tourne. Rien de plus facile.

Le bout de code que vous voyez dans l'éditeur fait clignoter la LED présente sur la broche 13 de la carte. Tout le code est là (même pas besoin d'un seul 'include') !

Tests

Voilà, tout est prêt pour quelques tests avec le kit :

Le montage ci-dessous permet de positionner le servomoteur en fonction de la force appliquée sur la barre de torsion :

Voici le code correspondant à l'expérience de l'image ci-dessus :

// Based on File > Examples > Servo > Knob
// Controlling a servo position using a potentiometer (variable resistor) 
// by Michal Rinott  

#include  

Servo myservo;  // create servo object to control a servo 

int potpin = 0;  // analog pin used to connect the potentiometer
int val;    // variable to read the value from the analog pin 

void setup() 
{ 
  Serial.begin(9600);
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object 
} 

void loop() 

{ 
  val = analogRead(potpin);            // reads the value of the potentiometer (value between 0 and 1023) 
  Serial.println(val);  
  val = map(val, 50, 300, 0, 179);     // scale it to use it with the servo (value between 0 and 180) 
  myservo.write(val);                  // sets the servo position according to the scaled value 
  delay(15);                           // waits for the servo to get there 
} 

D'autre part, pour mon projet j'ai besoin de déplacer une charge à des positions contrôlées. J'ai donc acheté en même temps que le kit un 'shield' c'est-à-dire une carte d'extension qui se monte (on dit plugguer je crois) naturellement sur la carte Arduino. Car l'un des intérêts du projet Arduino est d'avoir normalisé le format de la carte de base et donc de permettre la réalisation de tout un tas de shield autour de la plate-forme.

J'ai opté pour le shield Adafruit Motor Shield (à souder sois-même) et j'ai pris au passage un moteur pas-à-pas :

et en video :

Et le code correspondant pour ce type de montage est :

/*
 Stepper Motor Control - one revolution

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.

 The motor should revolve one revolution in one direction, then
 one revolution in the other direction.  

 Created 11 Mar. 2007
 Modified 30 Nov. 2009
 by Tom Igoe

 */

#include 

const int stepsPerRevolution = 200;  // change this to fit the number of steps per revolution
                                     // for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);            

void setup() {
  // set the speed at 60 rpm:
  myStepper.setSpeed(60);
  // initialize the serial port:
  Serial.begin(9600);
}

void loop() {
  // step one revolution  in one direction:
   Serial.println("clockwise");
  myStepper.step(stepsPerRevolution);
  delay(500);

   // step one revolution in the other direction:
  Serial.println("counterclockwise");
  myStepper.step(-stepsPerRevolution);
  delay(500);
}

C'est pas plus compliqué que ça !

Pour le bloc d'alimentation 15 à 24V avec suffisamment de puissance (70W - soit 3A à 24V) j'ai trouvé ceci chez St Quentin-Radio :

La suite va consister à faire un peu de mécanique pour mon système de prise de vue.

A bientôt.

Antoine

Ecrire à l'auteur