Transcript Robot sumo

Exercice-08
Domotique/Robotique
Robot sumo
Arduino avec Ardublock
La fonction d’un robot sumo est de se diriger vers son adversaire pour le
pousser. Mais il ne doit pas sortir de la zone.
Un capteur à ultrason va permettre de détecter l’adversaire pour foncer sur lui.
Un capteur InfraRouge détectera la fin de la zone de jeu pour éviter de sortir.
Détection de l’adversaire :
On utilisera un capteur à ultrason.
Ce télémètre compatible Grove permet de mesurer la distance
sans contact à l'aide de transducteurs à ultrasons.
Ce module se raccorde sur une entrée analogique du Grove Base
Shield via un câble 4 conducteurs.
• Interface : compatible Grove
• Alimentation : 5 Vcc
• Consommation : 15 mA
• Fréquence : 40 kHz
• Sortie digitale :
- état HAUT : ligne noire détectée
- état BAS : couleur blanche détectée
• Led : rouge si détection d'une ligne noire
• Portée de détection : 3 cm à 4 m
• Résolution : 1 cm
• Dimensions : 43 x 25 x 15 mm
voir la fiche technique
Détection de la zone
On utilisera un capteur à infrarouges suiveur de ligne
Ce module infrarouge suiveur de ligne compatible Grove est
constitué d'une led infrarouge et d'un phototransistor. Il envoie
un signal digital haut lorsqu'il détecte une ligne noire sur un
fond blanc.
Ce module se raccorde sur une entrée digitale du Grove Base Shield via un
câble 4 conducteurs.
• Interface : compatible Grove
• Alimentation : 5 Vcc
• Sortie digitale :
- état HAUT : ligne noire détectée
- état BAS : couleur blanche détectée
• Led : rouge si détection d'une ligne noire
• Portée : réglable de 1,5 à 5 cm
• Sensibilité réglable
• Dimensions : 20 x 20 mm
voir la fiche technique
Arduino avec Ardublock
page 1 / 2
Alain GRIMAULT
Exercice-08
Domotique/Robotique
Robot sumo
Arduino avec Ardublock
Voici un exemple de programme complet en langage Arduino :
#include <Servo.h>
#define trigPin 12
#define echoPin 13
Servo servo_pin_9;
int us;
Servo servo_pin_8;
int ir_Pin = 0;
void setup()
{
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
us = 40 ;
servo_pin_8.attach(8);
servo_pin_9.attach(9);
}
void loop()
{
int duration, distance;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
//
if (distance >= 200 || distance <= 0){
//
Serial.println("Out of range");
// }
Arduino avec Ardublock
//
//
//
//
else {
Serial.print(distance);
Serial.println(" cm");
}
int ir_Value = analogRead(ir_Pin);
Serial.print(ir_Value);
Serial.println();
if (ir_Value>=100)
{
servo_pin_8.write( 180 );
servo_pin_9.write( 0 );
delay(500);
}
else
{
if ((distance) > (us))
{
servo_pin_8.write( 0 );
servo_pin_9.write( 0 );
delay(200);
}
else
{
servo_pin_8.write( 0 );
servo_pin_9.write( 180 );
delay(200);
}
}
}
page 2 / 2
Alain GRIMAULT