dimanche 17 novembre 2013

[Hardware] Détection obstacles et mesure de la distance

L'une des premières choses à faire avant de se lancer, est de savoir si notre robot travaillera dans un espace connu ou inconnu. Typiquement, les bras que l'on trouve sur les chaînes de montage dans  l'industrie sont des automates évoluent dans un environnement connu. A contrario, les drones sont souvent utilisés dans des lieux peu ou pas connus (robot d'exploration par exemple).

Pour mon projet AutoBot, je veux que mon robot mobile, dans un premier temps, se déplace de manière autonome et sans percuter d'objets. Il faut donc mettre en œuvre des capteurs pour que le robot prenne conscience de l'environnement à proximité de lui.

Pour cela, il existe les télémètres. Cette grande famille, souvent utilisée en robotique, se partage en deux grandes parties :
  1. Télémètre infrarouge
  2. Télémètre ultrason
1- Principe : 

Quel que soit le type de télémètre, le principe reste le même. Le capteur est composé de 2 parties, une émettrice et l'autre réceptrice. La première partie va donc émettre une "onde" qui sera réfléchie par les objets. "L'onde" sera perçue par le récepteur qui fournira une information sur la distance entre capteur et objet.

1.2- Infrarouge :

L'un des télémètres qui m'intéresse est le SHARP "GP2Y0A02YK".
L'avantage de ce capteur est qu'il est assez simple d'utilisation. La Datasheet nous présente un système muni de 3 fils :
1. données
2. masse
3. alimentation

Mais surtout, un abaque très clair.

1.2- Ultrason :
Dans cette gamme, les plus connus sont les "SRF04" ou le "SRF05".
L'information sur la distance est disponible de différentes manières selon les modèles. L'information de distance est proportionnelle à la longueur d'impulsion en sortie.
Cette abaque n'étant pas très pratique, je me suis renseigné sur internet et j'ai trouvé un petit article bien sympathique. Arduino+SRF05.

Le code, repris de la page citée au-dessus.
// include the library code:
#include <LiquidCrystal.h>
#define echoPin 6             // the SRF05's echo pin
#define initPin 7             // the SRF05's init pin
unsigned long pulseTime = 0;  // variable for reading the pulse
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
 // set up the LCD's number of rows and columns:
 lcd.begin(16, 2);
 // make the init pin an output:
 pinMode(initPin, OUTPUT);
 // make the echo pin an input:
 pinMode(echoPin, INPUT);
}
void loop() {
 digitalWrite(initPin, HIGH);
 delayMicroseconds(10);
 digitalWrite(initPin, LOW);
 pulseTime = pulseIn(echoPin, HIGH);
 lcd.setCursor(0,0);
 lcd.print(pulseTime / 58, DEC);
 lcd.print("cm");
 delay(100);
 lcd.clear();
}
La division par 58 permet d'obtenir la distance en "cm". Il est possible de l'avoir en "inches" en divisant par 148.

Aucun commentaire:

Enregistrer un commentaire