Commander une voiture avec PhysicalEtoys Exercice de programmation du robot avec PhysicalEtoys Piloter le robot Robux avec un joystick virtuel Piloter le robot avec une télécommande Rendre le robot sumo autonome
Accueil du site | Accessibilité | Rechercher | Menu | Contenu | Plan du site | | Contact

°°TechNoLand°°

°°TechNoLand°°

 

Rendre le robot sumo autonome

14 janvier 2013
par chamayou

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 sharp HC-SR04.

http://www.arobose.com/shop/capteur...

#include <Servo.h>
#define trigPin 12
#define echoPin 13

Servo servo_pin_9;
int us;
Servo servo_pin_8;

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");
 }
 else {
   Serial.print(distance);
   Serial.println(" cm");
 }
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);
}
}

 Détection de la zone

On utilisera un capteur DFrobot de ligne

http://www.arobose.com/shop/capteur...

int ir_Pin = 0; // connection analog 0

void setup()
{
 Serial.begin(9600);
}

void loop()
{
 int ir_Value = analogRead(ir_Pin);
 Serial.println(ir_Value);
}

 Programme complet pour le robot

#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");
//  }
//  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);
}
}
}

calle

calle