De l'Alpha vers la Bêta

Intro

Nous avons fini notre premier prototype sur le robot POB. Cependant nous avons vite été contraint aux limites que nous posait ce dernier :

Schéma POB

Grâce au prototype sur le robot POB nous avons pu établir une liste de composant que nous avons besoin pour notre version Bêta.

Synthèse technique du produit

Nous avons établi la liste de tous les composants que nous avons besoin pour faire une version Bêta de notre pince. Nous avons uniquement pensé au système de levé de la pince et au système de fermeture. Aucun système n'a été prévu pour fixer cette pince sur un aspirateur.

Carte électronique

Après avoir fait quelques "mini-projets" avec les cartes Arduino, nous avons tout de suite pensé à celles-ci pour controler notre pince.
Une carte Arduino est un circuit imprimé* permettant de faire des "mini-projets" électronique. Nous avons choisi, pour programmer notre pince, la carte Arduino la moins chère qu'il existe : Arduino Uno; puisque en terme de performances et de nombre d'I/O cette carte nous suffit amplement. La carte Arduino Uno possède un microcontroleur Atmel AVR sur lequel nous pouvons envoyer nos propres programmes écris préalablement sur l'IDE* Arduino en Arduino (langage dérivé du C - un langage de programmation).

Schéma cart arduino

Notre carte Aruino Uno possède :

Nous avons choisi cette carte électronique car nous pouvons trouver beaucoup de ressource sur internet (exemple de programme, de montage électroniques, etc.).

Pour être sûre de pouvoir mener notre projet à bien, il fallait s'interresser aux caractéristiques techniques de la carte pour savoir si nos composants pouvait tous bien fonctionner sur la carte. Et dans le cas contraire, choisir une carte électronique plus adaptée.

Tension de fonctionnement La carte peut fournir 5V
Tension d'alimentation Il est conseillé d'alimenter la carte entre 6 et 12V
Intensité max disponible par broches 40mA - Mais 200mA cumulé sur l'ensemble des broches

Pour la memoire, nous disposons de 32ko, il est difficile de prévoir la taille de notre programme, mais en regardant la taille des programmes des gros projets (voitures telecommandées, robot, etc) 32ko est suffisant pour le futur programme de notre pince (il a 0,5ko utilisé pour stocker le bootloader*)

Circuit imprimé : une plaque de support qui relie un ensemble de composants électroniques entre eux pour créer un circuit électronique.
IDE : Editeur de texte sur lequel nous écrivons le programme, dans notre cas specialisé pour le langage Arduino : avec sa coloration syntaxique et son compilateur.
bootloader : Code préinstallé sur le microcontrolleur permettant la liaison de la carte à l'ordinateur via USB pour télécharger notre programme sur la carte.

Les capteurs

Microrupteurs

Un microrupteur, aussi appellé capteur de fin de course, permet de nous informer (via un programme infomatique) lorsque un objet rentre en contact avec la languette du capteur (voir image ci-dessous).
Il y a plusieurs type de microrupteurs. Ils se différencient par trois types de tailles, nous avons choisi un capteur subminiature avec languette (certain n'en possède pas!).
Ce capteur nous permettra de nous informer si la pince entre en collision contre quelque chose (mur, meuble, etc).

Le fonctionnement du capteur est relativement simple. Il y a un bouton poussoir sous la languette qui est poussé si un objet vient percuter la languette. Un microrupteur possède 3 pattes, or sur un simple bouton en possède seulement deux. Enfaite, nous pouvons choisir si le circuit est normalement ouvert ou normalement fermé.
Il y a une broche qui doit être commune à tous les montages : COM. Ensuite nous pouvons choisir entre :

Dans notre cas, le choix n'a pas vraiment d'importance. Nous adapterons juste le programme en fonction de la broche choisie.
Nous n'avons pas trouvé d'information concernant le fonctionnement interne du microrupteur. Nous avons donc démonté un microrupteur que nous avions chez nous pour vous montrez le fonctionnement.

Micro Rupteur ouvert

La broche COM se situe, sur la photo, à gauche (reperée par un point bleu). La broche reperée par un point rouge correpond à la broche NO (normalement ouvert : La broche COM et la broche NO ne sont pas reliées. La broche répérée par le point vert correspond, bien entendu, à la broche normalement fermée : La broche COM et NC sont reliées par un aimant.
Cet aimant (reperé par un petit point orange) est fixé sur une plaque qui repose dans une encoche sur la broche COM grâce à une encoche, ce qui permet de maintenir le ressort tendu. Le bouton blanc (qui est appuyé grâce à une petite languette) tend et pousse le ressort vers le bas. De ce faite l'aimant va se coller sur la parois du bas (broche NO) pour que le ressort revienne dans une position normal.

Micro Rupteur Ouvert

Structure interne lorsque le bouton est pressé

Pour illustrer le fonctionnement du capteur nous avons realisé un simple programme qui allume une LED lorsque un objet rentre en contact avec le microrupteur :

Nous avons relié la led à la masse et à la sortie digital numéro 2, pour l'allumer il faudra envoyer 5V en sortie digital pour créer une différence de potentiel entre les bornes de la led. Le bouton est rélié à la masse et à la sortie digital numéro 7 de l'arduino. En fonction de l'état du bouton (appuyé ou non) nous allumerons la led.
Voici le programme permettant de réaliser ceci :

int led = 2;
int btn = 7;
int etatBtn;

void setup() {
  pinMode(led, OUTPUT);
  pinMode(btn, INPUT);
}

void loop() {
  etatBtn = digitalRead(btn);
  if (etatBtn == HIGH) {
     digitalWrite(led, HIGH);
     delay(50);
     digitalWrite(led, LOW);
     delay(50);
  }
  else {
     digitalWrite(led, LOW);
  }
}
						  

Comme pour le programme du robot au début nous déclarons nos variables, la led sur le connecteur 2, le bouton sur le 7 et une variable pour lire l'état du microrupteur.
Nous choisissons si nous utilisons les connecteurs en sorties ou en entrées dans void setup() { }. puis entre les acolades de void loop() nous écrivons notre programme qui est répété à l'infini. En focntion de l'état du bouton on fait clignoter la led.

Voici les deux montages réels, avant et pendant l'appui :

Montage avant appui

Montage après appui

Capteur de distance Sharp

Pour detecter si il y a un objet devant la pince il nous faut un capteur de distance. Nous avons décidé de choisir un capteur Sharp qui détecte entre 4 et 30 centimètres.
Nous avons choisi celui-ci car dans le milieu de la robotique les capteurs Sharp sont connus pour être fiable et il nous fallait un capteur qui puisse adapter la vitesse du robot en fonction de la distance de l'objet. Nous aurions pu stopper le robot directement lorsque il detecte l'objet mais l'arret complet n'aurai pas été instantanné à cause de la vitesse du robot; en procedant comme ceci le robot pourrait heurter l'objet et l'envoyer plus loin. En reduisant progressivement la vitesse du robot, l'arret sera maitrisé et le robot de touchera pas l'objet.

C'est un capteur infrarouge. C'est à dire qu'il possède une led émettrice qui emet un faisseau. Lorsque le faisceau rentre en contact sur un objet il se refléchi dessus pour venir heurter une bande de récepteur sur le capteur Sharp ce qui permettra d'en déduire la distance de l'objet.

Ce capteur se branche sur un connecteur analogique de l'arduino (c'est à dire qu'il renvoie 1024 valeur : De 0 à 1023). Le capteur renvoit un certain voltage en fonction de la distance :

Ce graphique nous donne le voltage renvoyé par V0 en fonction de la distance de l'objet. La sortie V0 se branche sur la sortie analogique de l'arduino :

Il faut aussi alimenter le capteur sur le 5V et sur la masse (d'après la datasheet le capteur fonctionne entre 4,5 et 5,5, c'est donc bien adapté pour notre carte. Le capteur peut demander un courant allant jusqu'à 22mA. Grâce au fil branché sur le connecteur A0 (borche analogique) de la carte arduino nous pourrons savoir à quelle distance se trouve l'objet. Cependant la distance et le voltage ne sont pas proportionnelles. Nous avons donc fait un tableau pour associé à quelques distances un voltage :

Distance en centimètre 5 8 11 14 17 20
Voltage correspondant 2,34 1.56 1.18 0.92 0.76 0.65

In est indiqué sur la datasheet* que le capteur peut détecter un objet de 4 à 30 centimètres. Nous pouvons retrouver cela sur la courbe présentée ci-dessus. En dessous de 4 centimètres la distance correspond bien à un certain voltage mais ces valeurs correspondent aussi à une autre distance comprise au délà de 4 centimètres. Nous devrons donc mettre le capteur à 4 centimètres du bord pour que l'objet que le capteur doit detecter ne soit jamais à moins de 4 centimètres du capteur.

Ensuite il fallait faire correspondre les valeurs de voltage trouvées avec les valeurs retournées par la carte arduino pour adapter notre programme. Nous savons que le 5V de la carte correspond à 1023 et le 0V à 0. Grâce à un simple produit en croix nous pouvons faire correspondre chaque voltage à une valeur approchée allant de 0 à 1023). Nous avons donc complété le tableau :

Distance en centimètre 5 8 11 14 17 20
Voltage correspondant 2,34 1.56 1.18 0.92 0.76 0.65
Valeur retournée 479 319 241 188 157 133

Ce tableau pourrait nous servir pour faire ralentir le robot progressivement afin de s'arrêter précisement à X centimètres de l'objet.
Pour illustrer le fonctionnement du capteur, nous avons réalisé un montage avec des leds et le capteur : les leds s'allument en focntion de la possition de l'objet :

Pour vérifier si la distance évaluée par notre capteur est en adéquation avec le graphique fourni par Sharp nous avons mis une règle graduée de centimètre en centimètre avec les actions que doit faire le programme. Nous avons ensuite rapproché progressivement un objet du capteur et nous avons vérifié grâce au programme suivant si la courbe fournie était juste.

int ledV1 = 2;
int ledV2 = 3;
int ledJ1 = 4;
int ledJ2 = 5;
int ledR1 = 6;
int ledR2 = 7;
int capteur = 0; // 0 ==> 3.0
int distance = 0;

void setup() {
  pinMode(ledV1, OUTPUT);
  pinMode(ledV2, OUTPUT);
  pinMode(ledJ1, OUTPUT);
  pinMode(ledJ2, OUTPUT);
  pinMode(ledR1, OUTPUT);
  pinMode(ledR2, OUTPUT);
}
void loop() {
  distance = analogRead(capteur);
  if (distance < 131) {
    digitalWrite(ledV1, HIGH); 
    delay(200);
    digitalWrite(ledV1, LOW);
  }
  else if(distance <= 131) {
    digitalWrite(ledV2, HIGH);
    delay(200);
    digitalWrite(ledV2, LOW);
  }
  else if(distance < 188){
    digitalWrite(ledJ1, HIGH);
    delay(200);
    digitalWrite(ledJ1, LOW);
  }
  else if(distance < 241) {
    digitalWrite(ledJ2, HIGH);
    delay(200);
    digitalWrite(ledJ2, LOW);
  }
  else if(distance < 319) {
    digitalWrite(ledR1, HIGH);
    delay(200);
    digitalWrite(ledR1, LOW);
  }
  else if(distance < 479) {
    digitalWrite(ledR2, HIGH);
    delay(200);
    digitalWrite(ledR2, LOW);
  }
  else {
    digitalWrite(ledR2, LOW);
  }
}

Les valeurs trouvées par notre capteur sont sensiblement les mêmes que celles fournies par la datasheet.
Voici le schéma électronique de notre montage :

*Datasheet : caractéristiques techniques du composant

Conclusion

Nous avons présenté ici qu'une ébauche de la version finale que nous aurions bien aimé réaliser. Les éléments principaux on cependant tous été présenté avec des exemples de programmes (pour les deux capteurs) qu'il faut que nous rassemblions pour le projet final.
Pour le choix des servomoteurs nous devont réaliser notre projet sur solidworks pour connaitre une estimation de poids de notre pince. Pour le choix de la batterie nous devons connaitre tous les composants que nous comptons mettre en place. Cepandant nous ne pouvons pas réaliser cette maquette dans le cadre scolaire puisque les séances de TPE sont finis.

La conclusion de notre TPE