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 :
- Télémètre infrarouge
- Télémètre ultrason
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.
La division par 58 permet d'obtenir la distance en "cm". Il est possible de l'avoir en "inches" en divisant par 148.// 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();
}
Aucun commentaire:
Enregistrer un commentaire