RobotiqueCoupeGEII : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
(De près : Caméra Pixy)
(Pièce imprimante 3D)
Ligne 260 : Ligne 260 :
  
 
=Pièce imprimante 3D=
 
=Pièce imprimante 3D=
[[Media:Support_telemetre_gauche.FCStd]]
 
  
 
=Travaux restant=
 
=Travaux restant=

Version du 6 avril 2021 à 17:19


Présentation du projet

Cahier des charges / règlement de la compétition

texte alternatif
Aire de jeu

L'aire de jeu

L'aire de jeu a pour dimension 8 x 4 m avec une ligne médiane de 67 cm de large soit un espace de 16 m² pour le déplacement de notre robot.

Les balles

Les balles utilisées sont des balles de tennis standard.
Elles sont placées aléatoirement sur le terrain à l'exception de 3 balles placées systématiquement aux 3 intersections des lignes de notre terrain (points jaunes sur le schéma).

schéma aire de jeu

Le Robot

Le but du robot est d'envoyer le plus de balle possible dans le camps adverse à l'aide d'un système propulseur, sans jamais franchir la ligne médiane qui sépare les deux camps et en ne contrôlant qu'une balle à la fois. Lors du lancement d'un match, le robot doit être démarré à l'aide d'un bouton qu'un utilisateur viendra actionner, ensuite il sera autonome. Le robot gagnant est celui qui aura le moins de balle dans son camp à la fin du match.

Les Balises

Il est possible de poser jusqu'à 3 balises de dimensions maximales de 20 x 20 x 20 cm sur des emplacements spécifiques (détaillé sur le schéma). Nous avons décidé de ne pas utilisée de balise.

Homologation

Le robot doit répondre aux exigences fixées.
Ces exigences sont les suivantes :
- Le robot rentre dans une boite de 40 x 30 x 30 cm.
- Un ballon de baudruche est fixé à 30 cm du sol et doit être percé sur la ligne médiane avant la fin du temps imparti des matchs (90 secondes).
- Le robot ne présente aucun danger, ni au repos, ni en fonctionnement (pas de pièces coupantes...).
- Un dispositif permettant de couper le courant doit être mit en place (bouton d'arrêt d'urgence).
- Un dispositif mécanique de mise en marche doit être présent.

Règlement complet de la compétition

Pour plus d'information sur les règles, je vous invite à aller regarder la réglementation complète: Règlement

Fonctionnement du robot

Prototype

Prototype robot avec actionneur fonctionnel

Dans un premier temps, nous avons utilisés un robot existant afin de pouvoir tester, configurer ou encore programmer différente partie du robot à l'aide d'un Arduino.














Schéma fonctionnel / Algorithme

Alimentation / Régulation

Batterie fournie
abaisseur de tension

La batterie

Notre robot comprend un pack de piles rechargeables 4x 18650 LiFePO 4 Emmerich 4A12318650RK 12.8 V 1100 mAh pour permettre d'alimenter les différents éléments.
Une tension minimum de 9V est nécessaires pour le bon fonctionnement de notre robot.




Abaisseur de tension

La batterie fournie délivre 12.8V, hors nous avons besoin d'une alimentation 5V pour le bon fonctionnement de certain capteur ou actionneur.
C'est pourquoi nous avons utilisée un abaisseur de tension réglable.





Gérer

ATmega 2560

Schéma eagle connecteur ISP
Microcontroleur ATmega 2560 16MHz

Ce microcontrôleur possède un grand nombre de port ce qui nous est utile pour l'élaboration d'une carte complète avec un grand nombre de capteur et d'actionneur.
Il est programmable à l'aide du logiciel arduino ainsi qu'un programmateur brancher sur un connecteur ISP.

Schéma ATmega2560

Carte Capteur / microcontrôleur

Pour la réalisation de notre robot, afin de ne pas avoir de fil volant qui pourrait se débrancher nous avons réaliser une carte électronique sur le logiciel Eagle. Cette carte qui comporte le microcontrôleur permet de connecter et contrôler les capteurs et actionneur qui sont tous reliés à la carte. Grâce à cette carte cela nous permet d'alimenter facilement tous les composant à la tension voulue.

Schéma eagle de la carte électronique
Board de la carte électronique
Face Top de la Carte électronique avec tout les branchement
Face Bot de la carte électonique


Actionneurs

Déplacement

Système propulsion

Crève-Ballon

Capteurs

Détection des balles

De près : Caméra Pixy

Caméra Pixy2 montée sur le robot
Balle de tennis dans le logiciel PixyMon

Pour détecter les balles de tennis nous avons décidé d'utiliser une caméra Pixy 2.














De loin : Lidar Garmin Lite V3

Détection D'angle : Magnétomètre

Détection d'obstacle : VL53L1X

Capteur Lidar VL53L1X / Nom broche

Le robot ne peut pas sortir de l'aire de jeu, il y a des murs. Pour éviter toutes casse matérielle lors du déplacement de notre robot il faut que nous puissions les détecter.
Pour cela nous avons utiliser des Lidar, les VL53L1X.
Ils ont l'avantage d'être petits et arrivent à détecter à de courtes distances des distances et allant jusqu'à 2 m avec une bonne précision.
Ces lidars se branchent sur un bus I2C (SDA-SCL) et sont alimentés en 5 V sur la broche VIN.
À l'initialisation, ces capteurs nécessite un changement d'adresse, on utilise la broche Xshut (tout ou rien) du capteur connecter à une broche logique du microcontrôleur.
Avec notre carte de contrôle nous avons la possibilités d'en utiliser 4, ils sont connecter à la carte via un connecteur Molex.
On a décidé de positionner un capteur à l'avant droite et l'autre à l'avant gauche du robot.
On place ces capteurs sur des petit support amovible pour permettre de les déplacer si besoin, ces support protègent également les capteurs en cas de collision lors des tests par exemple.
Pour utiliser ce capteur sur le logiciel Arduino il est nécessaire d'inclure la bibliothèque du capteur (VL53L1X by Polulu).



Exemple programme détection des obstacles avec un capteur (fonctionnel)

 #include <Wire.h>
#include <VL53L1X.h>

VL53L1X sensor_1;

int pinMoteurG = 8;

int pinMoteurD = 7;

int pinMoteurPWMG = 9;

int pinMoteurPWMD = 6;

int VmG;
int VmD;

void setVitesse (int VmG , int VmD) {
 
if ( VmG < 0 ) {
   digitalWrite(pinMoteurG,HIGH);
   VmG = -VmG;
   } else  {
   digitalWrite(pinMoteurG,LOW);
   };
   
   if ( VmD < 0 ) {
   digitalWrite(pinMoteurD,HIGH);
   VmD = -VmD;
   } else  {
   digitalWrite(pinMoteurD,LOW);
   };

analogWrite(pinMoteurPWMG, 2 * VmG + 10);
analogWrite(pinMoteurPWMD, 2 * VmD + 10);
   
 
  }

void arret () {
  VmG = 0;
  VmD = 0;
  analogWrite(pinMoteurPWMG, VmG);
  analogWrite(pinMoteurPWMD, VmD);

}


void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(400000); // use 400 kHz I2C

  //XSHUT sensor_1
  pinMode(4,OUTPUT);
  digitalWrite(4,LOW);
  delay(100);
  digitalWrite(4,HIGH);

  sensor_1.setTimeout(500);
  if (!sensor_1.init())
  {
	Serial.println("Failed to detect and initialize sensor_1!");
	while (1);
  }
  sensor_1.setDistanceMode(VL53L1X::Short);
  sensor_1.setMeasurementTimingBudget(50000);

  sensor_1.startContinuous(50);
  sensor_1.setAddress(41);
 
  pinMode(pinMoteurG, OUTPUT);
  pinMode(pinMoteurD, OUTPUT);
  pinMode(pinMoteurPWMG, OUTPUT);
  pinMode(pinMoteurPWMD, OUTPUT);

 
}

void loop() {
  // put your main code here, to run repeatedly:

  sensor_1.read();
 
  Serial.print("range: ");
  Serial.print(sensor_1.ranging_data.range_mm);
  Serial.print("\tstatus: ");
  Serial.print(VL53L1X::rangeStatusToString(sensor_1.ranging_data.range_status));
  Serial.print("\tpeak signal: ");
  Serial.print(sensor_1.ranging_data.peak_signal_count_rate_MCPS);
  Serial.print("\tambient: ");
  Serial.print(sensor_1.ranging_data.ambient_count_rate_MCPS);
 
  Serial.println();

  Serial.print("n° Adress :");
  Serial.print(sensor_1.getAddress());
  if (sensor_1.timeoutOccurred()) { Serial.print(" TIMEOUT"); }

  Serial.println();

 if (sensor_1.ranging_data.range_mm > 300) {

  setVitesse (50 , 50);

 }else if (sensor_1.ranging_data.range_mm < 300) {
 
  setVitesse ( 25 , 25);

 }else if (sensor_1.ranging_data.range_mm < 200) {
  arret ();
  delay(100);
  setVitesse ( 25, -25 );
 
 }

}

Balle attrapé / non attrapé

Pour savoir si une balle a été attrapé, nous avons utiliser un capteur VL53L1X qui nous permettra de savoir si une balle est présente ou non.

Position capteur VL53L1X pour la présence de balle

Détection de la ligne médiane

texte alternatif
Capteur CNY70

Pour la détection de la ligne médiane, nous avons choisi d'utiliser des capteurs CNY70. Ces capteurs sont composés d'une LED infrarouge et d'un transistor, le principe est que la LED va émettre une lumière et en fonction de la couleur sur laquelle va réfléchir la lumière, il y aura plus ou moins de courant qui passera dans le transistor. Le noir étant la couleur qui réfléchit le moins et le blanc celle qui réfléchit le plus.



texte alternatif
Emplacement capteurs










Pour ce qui est de l'emplacement des capteurs, nous avons choisi d'en utiliser 8 et de les placer comme le montre l'image à gauche, les capteurs sont espacés de 2.5cm, il sont reliés à des comparateurs afin d'avoir des données numériques et non analogiques. Les sorties des comparateurs sont ensuite reliées à des portes logiques ET à quatre entrées, les sorties des quatre comparateurs reliés aux quatre capteurs de gauche sont reliés au quatre entrées de la Porte ET, même chose pour les quatre capteurs de droites qui sont aussi reliés à une port ET à quatre entrées. On a décidé de procéder de cette manière car lorsque les quatre capteurs de gauche ou de droite sont tous activés alors on est sur de détecter la ligne médiane et non une ligne du terrain.








Voici le schéma électronique :

texte alternatif
Schéma électrique circuit capteur CNY70

La borne 1 sert à relier l'alimentation (+5V), la borne 2 pour le GND, les bornes 3,5,6 et 7 sont reliés au 4 capteurs de gauche et les bornes 8,9,10 et 11 sont reliés au 4 capteurs de droite et la borne 12 est la sortie qui renverra une tension logique au microcontrôleur indiquant l'état des capteurs



Voici le board du circuit précédent créer sur Eagle :

texte alternatif
Board circuit détection de la ligne médiane

Communiquer : Module Xbee

Pièce imprimante 3D

Travaux restant