RobotGEII 16-17
Sommaire
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 1er degres
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].
Le composant est ci-dessous:
Pour faire des tests nous avons utlisé le Motor Shield For Arduino.
- PWM
Nous allons utiliser le shild en mode PWM, on placera donc les jumpers en conséquence.
- 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.
- 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.
- 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:
- 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
Detection d'obstacles
Caméra
Choix camera
Nous avons tester 3 camera différente, la , la cmu cam 3 et la cmu cam 5
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:
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