RobotGEII 16-17

De troyesGEII
Révision datée du 20 novembre 2016 à 20:11 par Robot (discussion | contributions) ({{Bleu|Roue codeuse}})
Aller à : navigation, rechercher

Présentation

Présentation projet

Ce projet consiste à réaliser un robot pour participer à la coupe robotique GEII. Pour fabriquer ce robot nous devons respecter un cahier des charges définit par le règlement(reglement).Le principe de ce concours est aller le plus rapidement possible d'un coin à l'autre tout en esquivant les obstacles et les autres robots.Une fois arriver dans le coin le robot doit exploser un ballon qui lui est accroché dessus en début de course.

Cahier de charges fonctionnelles

Schema fonctionnelle de degrés II

Shema fonctionnelle.png

shema fonctionnelle 1er degres

Shema fonctionnelle 1er degres.png
Shema fonctonnelle 2.png

Solution technique

Pour fabriquer ce robot nous avion plusieurs choix pour procéder à l’évitement des obstacles, nous avons choisie de lier trois technologie pour éviter d’être influencer par les kart adverse lors de la course,nous allons donc utiliser des capteur infrarouge,de capteur ultrason et un caméra CMU cam 5. Pour contrôler tous les capteur ainsi que la caméra nous allons utiliser une carte rasberrie pi.Nous allons également utiliser la camera pour pour déterminer le coin d'arriver du robot grâce à une balise que la caméra reconnaîtra.

Etude du Robot

Batterie

Description technique

...

Moteurs

Description technique

...


Contrôle deux moteurs CC par un shield (L298P)

Pour commander les moteurs nous allons utiliser le pont H L298P [ datasheet].

L298P

Le composant est ci-dessous:

L298P

Pour faire des tests nous avons utlisé le Motor Shield For Arduino.

L298P
  • PWM

Nous allons utiliser le shild en mode PWM, on placera donc les jumpers en conséquence.

L298P
  • Borne du moteur

Nous avons deux bornes (blues) pour connecter les moteurs CC. Les connecteurs mâles derrière sont identiques à celui des bornes blues.

L298P
  • PWRIN

Les moteurs peuvent être alimentés par une alimentation externe lorsque le courant du moteur dépasse les limites fournies par l'Arduino (Il est conseillé de séparer les alimentations d’Arduino et des moteurs). Le swith entre puissance externe et Arduino est mis en oeuvre par deux jumpers .

PWRIN: Alimentation externe.
VIN: Alimentation du Arduino.

On placera donc les jumpers d’alimentation sur PWRIN.

L298P
  • Signal de contrôle Tableau de vérité
E1 M1 E2 M2 Texte de l’en-tête
L X Moteur 1 desactivé L X Moteur 2 desactivé
H H Moteur 1 en arrière H H Moteur 2 en arrière
H L Moteur 1 en avant H L Moteur 2 en avant
PWM X Control vitesse PWM PWM X Control vitesse PWM

NOTE:

H: Niveau haut
L: Niveau bas
X N'importe quel niveau.

  • Mode PWM
Commande Pin Arduino Siginification
M1 4 Contrôle du sens de rotation
E1 5 Contrôle de la vitesse de rotation
M2 7 Contrôle du sens de rotation
E2 6 Contrôle de la vitesse de rotation


On doit avoir quelque chose comme cela:

L298P
  • Exemple de code basique
int E1 = 5;  
int M1 = 4; 
int E2 = 6;                      
int M2 = 7;                        

void setup() 
{ 
    pinMode(M1, OUTPUT);   
    pinMode(M2, OUTPUT); 
} 

void loop() 
{ 
  int value;
  for(value = 0 ; value <= 255; value+=5) 
  { 
    digitalWrite(M1,HIGH);   
    digitalWrite(M2, HIGH);       
    analogWrite(E1, value);
    analogWrite(E2, value);
    delay(30); 
  }  
}


  • Exemple simple de code pour eviter des obtacles avec un seule capteur ultrason
//Moteur 1
int E1 = 5; // Vitesse (PWM)
int M1 = 4; // Direction

//Motor 2
int E2 = 6; // Vitesse (PWM)
int M2 = 7; // Direction


  ///////////////
 // Constantes//
///////////////

const int MOTEUR_1=0;
const int MOTEUR_2=1;

const int AVANT=0;
const int ARRIERE=1;

  ///////////////
 // UltrasonG//
//////////////

int trig = 13;
int echo1 = 12;
long lecture_echo1;
long cm1;

  //////////
 // Setup//
//////////

void setup()
{

  pinMode(E1, OUTPUT);
  pinMode(M1, OUTPUT);

  pinMode(E2, OUTPUT);
  pinMode(M2, OUTPUT);

 pinMode(trig, OUTPUT);
  digitalWrite(trig, LOW);
  pinMode(echo1, INPUT);
  Serial.begin(9600);

}

  //////////
 // Loop///
//////////

void loop(){

  
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);
  lecture_echo1 = pulseIn(echo1, HIGH);
  cm1 = lecture_echo1 / 58;
 Serial.print("Distancem : ");
  Serial.println(cm1);
  delay(200);

  if(cm1>15 )
  {
  activer(MOTEUR_1, AVANT, 128);
  activer(MOTEUR_2, AVANT, 128);
  }else if(cm1>2) {
    
   activer(MOTEUR_1, ARRIERE, 128); 
   activer(MOTEUR_2, AVANT, 128);
   delay(500);
   activer(MOTEUR_1, AVANT, 128); 
   activer(MOTEUR_2, AVANT, 128);
   delay(1000);
   activer(MOTEUR_1, AVANT, 128); 
   activer(MOTEUR_2, ARRIERE, 128);
  delay(500);
  activer(MOTEUR_1, AVANT, 128);
  activer(MOTEUR_2, AVANT, 128);
  delay(1000); 
    }
}

  /////////////////////
 // Fonction activer//
/////////////////////

void activer(int moteur, int sens, int vitesse)
// moteur : MOTEUR_1 ou MOTEUR_2
// sens : AVANT ou ARRIERE
// vitesse : entre 0 et 255

{

  switch (moteur)
  {
  case MOTEUR_1 :
    if (sens==AVANT)
    {
      digitalWrite(M1, HIGH);       
      analogWrite(E1, vitesse);
    }
    else
    {
      digitalWrite(M1, LOW);       
      analogWrite(E1, vitesse);
    }
    break;

  case MOTEUR_2 :
    if (sens==AVANT)
    {
      digitalWrite(M2, HIGH);       
      analogWrite(E2, vitesse);
    }
    else
    {
      digitalWrite(M2, LOW);       
      analogWrite(E2, vitesse);
    }
    break;
  }
}

  //////////////////////////
 // Fonction arreter_tout//
//////////////////////////

void arreter_tout()
{
  analogWrite(E1, 0);
  analogWrite(E2, 0);
}

  /////////////////////
 // Fonction arreter//
/////////////////////

void arreter(int moteur)
{
  switch (moteur)
  {
  case MOTEUR_1 :
    analogWrite(E1, 0);

  case MOTEUR_2 :
    analogWrite(E2, 0);
  }
}

Roue codeuse

Pour determiner la frequences des moteurs nous allons utiliser une Roue Codeuse et un capteur.

Roue codeuse.jpg

Detection d'obstacles

Caméra

Choix camera

Nous avons tester 3 camera différente, la , la cmu cam 3 et la cmu cam 5

Cmu Cam 3.jpeg
vignette


Nous avons choisie d'utiliser la CMU cam 5(site CMU cam 5) car elle est beaucoup plus simple d'utilisation que les deux autres,en effet il suffit de de télécharger le logiciel de la camera(telechargement) qui est assez simple d'utilisation,de plus il y a des programes predefinie dans ce logicel qui permettent de faire de la reconnaissance.Nous avons egalement choisie cette caméra car elle est fourni avec des servomoteur qui vont lui permettre de bouger sur son axe. (montage servo).

Camera CMU cam 5

Tout d’abord nous avons réaliser une simple reconnaissance d'objet grâce au logiciel, il suffit pour cela de sélectionner l'objet en question. Nous avons ensuite choisie d'utiliser une balise lumineuse pour que la camera la repère le plus loin possible. balise test.



Grace à cette balise nous avons pu déterminer jusqu’ou la camera repérerait notre balise avec la taille maximum autoriser. Pour cela il suffisait d’éloigner la camera le plus possible et ensuite de faire un produit en croix.Nous avons relever que la camera pouvait capter correctement la balise dont le plus petit coté est de 3cm jusqu’à 1m20 donc on en a deduit que la camera capterait 21m.

Perçage du ballon

Choix du perçage

Nous avons testé deux moteurs ,un petit moteur et SM-S4303R et deux matériaux,la fer et la plastique pour faire la perçage:

finalement nous avons choisi SM-S4303R,car le petit moteur est moins fort de SM-S4303R et utilisons SM-S4303R est plus facile de faire de l'aiguille pour exploser de ballon, pour l'aiguille,nous nous avons choisi la fer,à cause de fer est plus dure et utilisons la fer fait de la pointe d'aiguille est mieux

montage du perçage