<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>http://wikigeii.iut-troyes.univ-reims.fr//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robotique2+2</id>
		<title>troyesGEII - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="http://wikigeii.iut-troyes.univ-reims.fr//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Robotique2+2"/>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Sp%C3%A9cial:Contributions/Robotique2_2"/>
		<updated>2026-05-04T17:10:00Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.30.1</generator>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14864</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14864"/>
				<updated>2021-04-07T11:03:47Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fonctionnement du robot=&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   Serial.begin(115200);&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
   pixy.init();&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   int i;&lt;br /&gt;
   int x;&lt;br /&gt;
   int y;&lt;br /&gt;
   pixy.ccc.getBlocks();&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
    }&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //si on ne détecte pas la balle&lt;br /&gt;
  else {&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  delay(1000);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crève-ballon.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une &amp;quot;bague&amp;quot; sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Crève Ballon}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteur;  //Création de l’objet servomoteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  monServomoteur.attach(7);   // Déclaration pour utilisation de la broche 7&lt;br /&gt;
  monServomoteur.write(0);  // Initialisation de la position 0&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   monServomoteur.write(130);&lt;br /&gt;
   delay(0000);  &lt;br /&gt;
&lt;br /&gt;
   monServomoteur.write(0);&lt;br /&gt;
   delay(0000);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
La fonction qui permet d'attraper la balle de tennis et de la frapper est la partie du robot qui nous permettra de marquer des points sur le terrain ou non.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cette partie, énormément d'idées ont vu le jour : &lt;br /&gt;
     - Utilisation de moteur à courant continu &lt;br /&gt;
     - Utilisation de moteurs pas-à-pas&lt;br /&gt;
     - Utilisation de ressorts ou de lames de ressorts&lt;br /&gt;
&lt;br /&gt;
La solution retenue pour la version finale est l'utilisation des différentes parties du robot, de deux servomoteurs ( un pour attraper la balle et un autre pour la projeter ), et d'un HC SR 04 qui permet un calcul de distance à l'aider d'ultrason qui contrôlera la présence ou non de la balle dans la zone des 2 servomoteurs. &amp;lt;br&amp;gt;&lt;br /&gt;
Le fonctionnement et le déroulement se feront en six étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   - A l'aide de la caméra Pixy2, le robot se dirige vers la balle&lt;br /&gt;
   - Une fois que le capteur de distance HCSR04 détectera la présence de la balle, le servomoteur qui permet de contenir la balle va se refermer sur celle-ci pour l'attraper&lt;br /&gt;
   ''La balle sera alors contenue entre les deux servomoteurs, celui qui sert à attraper, et celui qui est prêt à la frapper à tout moment''&lt;br /&gt;
   - A l'aide du gyroscope, le robot va se diriger vers le terrain adverse&lt;br /&gt;
   - Une fois sur la ligne blanche, celle-ci sera détectée grâce au capteur de ligne et le robot va mettre ses moteurs à 0 afin d'arrêter totalement le mouvement&lt;br /&gt;
   - Enfin, le robot ouvrira le bras du servomoteur qui servait à contenir la balle, et va actionner le second servomoteur afin de pousser la balle dans le camp adverse. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette partie est donc l'une des plus importantes car elle regroupe toutes les autres parties et nous permet de marquer des points. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Frapper la balle}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
  int capteur0;&lt;br /&gt;
  int capteur1;&lt;br /&gt;
  int capteur2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteurTaper;&lt;br /&gt;
const int detecte = 8;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  pinMode(detecte, INPUT); //detecte balle&lt;br /&gt;
  monServomoteurTaper.attach(8);&lt;br /&gt;
  monServomoteurTaper.write(0);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int sensorValue0 = analogRead(A0);&lt;br /&gt;
  int sensorValue1 = analogRead(A1);&lt;br /&gt;
  int sensorValue2 = analogRead(A2);&lt;br /&gt;
    Serial.println(&amp;quot;capteur0&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue0);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  Serial.println(&amp;quot;capteur1&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue1);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  Serial.println(&amp;quot;capteur2&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue2);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  if ((sensorValue0 &amp;gt; 500) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; 200))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
    monServomoteurTaper.write(90);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue0 &amp;lt; 450) &amp;amp;&amp;amp; (sensorValue1 &amp;lt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;lt; 200))&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    monServomoteurTaper.write(0);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Attraper la balle}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteurAttraper;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int trig = 2;&lt;br /&gt;
int echo = 3;&lt;br /&gt;
long lecture_echo;&lt;br /&gt;
long cm;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  monServomoteurAttraper.attach(7);&lt;br /&gt;
  monServomoteurAttraper.write(0);&lt;br /&gt;
&lt;br /&gt;
  pinMode(trig, OUTPUT);&lt;br /&gt;
  digitalWrite(trig, LOW);&lt;br /&gt;
  pinMode(echo, INPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(trig, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trig, LOW);&lt;br /&gt;
  lecture_echo = pulseIn(echo, HIGH);&lt;br /&gt;
  cm = lecture_echo / 58;&lt;br /&gt;
  Serial.print(&amp;quot;Distance en cm :&amp;quot;);&lt;br /&gt;
  Serial.println(cm);&lt;br /&gt;
  delay(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if (cm &amp;lt; 5)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Balle attrapée&amp;quot;);&lt;br /&gt;
    monServomoteurAttraper.write(90);&lt;br /&gt;
    delay(100);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
if (cm &amp;gt; 5){&lt;br /&gt;
    Serial.print(&amp;quot;Balle va être attrapée&amp;quot;);&lt;br /&gt;
  monServomoteurAttraper.write(0);&lt;br /&gt;
  delay(100);&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
[[Fichier:PieceCny70.png|100px]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie détection de ligne nous avons décidé d'utiliser 6 capteurs Cny70 répartis sur l’avant du robot. &lt;br /&gt;
Nous avons utilisé ce schéma de branchement pour les 6 capteurs et nous les avons reliés ensemble.&amp;lt;br&amp;gt;&lt;br /&gt;
Le CNY70 est un émetteur et un récepteur infrarouge.&amp;lt;br&amp;gt;&lt;br /&gt;
Le capteur envoie un faisceau infrarouge et selon la luminosité reçue, la tension dans le capteur variera, grâce à cette tension nous pourrons savoir si le capteur est sur la ligne blanche ou sur le terrain bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour détecter la ligne blanche au milieu du terrain. Nous les avons regroupés par 3 afin qu’ils couvrent une plus grande surface de détection. Et si les 6 capteurs possèdent la même tension correspondant à la ligne blanche alors le robot s’arrêtera.&lt;br /&gt;
Tout ce programme sera regroupé au sein du code du TIMER qui permettra au robot de s'arrêter avant la fin du temps imparti.&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Détecteur de ligne}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  pinMode(A0, INPUT);&lt;br /&gt;
  pinMode(A1, INPUT);&lt;br /&gt;
  pinMode(A2, INPUT);&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  //on declare les variables des capteurs&lt;br /&gt;
  int capteur0; &lt;br /&gt;
  int capteur1;&lt;br /&gt;
  int capteur2;&lt;br /&gt;
  //On declare les variables sensorValue &lt;br /&gt;
  //pour donné un nom a la valeur que donnera la pin &lt;br /&gt;
  int sensorValue0 = analogRead(A0);&lt;br /&gt;
  int sensorValue1 = analogRead(A1);&lt;br /&gt;
  int sensorValue2 = analogRead(A2);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur0&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue0);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur1&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue1);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur2&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue2);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue0 &amp;lt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur0 = 1;&lt;br /&gt;
    Serial.print(capteur0);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue0 &amp;gt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur0 = 2;&lt;br /&gt;
    Serial.print( capteur0);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue1 &amp;lt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur1 = 11;&lt;br /&gt;
    Serial.print(capteur1);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue1 &amp;gt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur1 = 12;&lt;br /&gt;
    Serial.print( capteur1);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue2 &amp;lt; 250))&lt;br /&gt;
  {&lt;br /&gt;
    capteur2 = 21;&lt;br /&gt;
    Serial.print(capteur2);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue2 &amp;gt; 250))&lt;br /&gt;
  {&lt;br /&gt;
    capteur2 = 22;&lt;br /&gt;
    Serial.print( capteur2);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  if ((sensorValue0 &amp;gt; &amp;quot;&amp;quot;) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; &amp;quot;&amp;quot;) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; &amp;quot;&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FonctionnementCny70.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le programme, j’ai commencé par déclarer les variables et faire le void setup, ensuite pour le void loop, j’ai préparé les 5 actions nécessaires soit : avancer lentement et rapidement, tourner à gauche et à droite et chercher la balle. Lorsqu’il faut tourner à gauche, on active les deux moteurs mais le moteur de droite va être plus rapide que celui de gauche ce qui permettra une rotation du robot, inversement pour tourner à droite. &lt;br /&gt;
Pour avancer plus ou moins rapidement, on active tout simplement les deux moteurs plus ou moins vite, et pour chercher la balle, on exerce le même programme que pour tourner à gauche ce qui va permettre au robot de subir une rotation jusqu’à ce qu’une balle entre dans son champs de vision. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_SeDéplacer}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 int E1 = 5;&lt;br /&gt;
 int M1 = 4;&lt;br /&gt;
 int E2 = 6;&lt;br /&gt;
 int M2 = 7;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   pinMode(M1, OUTPUT);&lt;br /&gt;
   pinMode(M2, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
      if (){ // si la balle est plus à gauche que la barre verticale des ⅓ de pixel&lt;br /&gt;
        Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 30); &lt;br /&gt;
        analogWrite(E2, 50);  &lt;br /&gt;
      }&lt;br /&gt;
      if () {// si la balle est plus à droite que la barre des ⅔ de pixel&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); &lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 30);&lt;br /&gt;
      }&lt;br /&gt;
       if (){ // si la balle est, sur l’axe y, supérieur à la moitié &lt;br /&gt;
        Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
        analogWr+ Boussole +ite(E1, 50);&lt;br /&gt;
        analogWrite(E2, 50);&lt;br /&gt;
      }&lt;br /&gt;
      if (){ // si la balle est inférieur à la moitié sur l’axe y &lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 //si on ne détecte pas la balle&lt;br /&gt;
 else {&lt;br /&gt;
   Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
   analogWrite(E1, 50);&lt;br /&gt;
   analogWrite(E2, 30);&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Pour le programme final, nous avons changé la variable pour tourner, c’est-à-dire qu'au lie de tourner à une vitesse constante et e risquer de passer devant la balle sans avoir le temps de la voir, nous avons créé une équation qui nous permettra de faire fluctuer la vitesse en fonction de l'angle entre la balle et le centre de vision du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc obtenu cette équation :  &amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158))); // N est une vitesse constante, K un coefficient réducteur, puis on soustrait la position X de la balle par le nombre de pixels central de la vision afin d'obtenir un angle. &amp;lt;br&amp;gt;&lt;br /&gt;
''Cette équation n'est valable que pour tourner à droite, pour tourner à gauche nous remplacerons les parenthèses par 158 - position X de la balle.''&lt;br /&gt;
&lt;br /&gt;
Le robot ralentira sa rotation au fur et à mesure que la balle se rapprochera du centre de sa vision jusqu'à aller finalement tout droit et réussir à l'intercepter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mise en commun des différents programmes=&lt;br /&gt;
&lt;br /&gt;
Lors de cette partie, nous allons vous expliquer, étape par étape, comment nous avons mit nos codes en commun chacun notre tour jusqu'à obtenir le code final. &lt;br /&gt;
Au niveau de la construction physique du robot, nous nous sommes débrouillé pour que chaque partie utilise des différentes broches afin de pouvoir utiliser seulement une carte Arduino. &lt;br /&gt;
&lt;br /&gt;
==Fonction Pixy2 + Boussole + Se déplacer==&lt;br /&gt;
&lt;br /&gt;
Pour se faire, comme vous l'avez vu précédemment, le programme de la Pixy renvoyait des données telles que &amp;quot;Tourner à gauche&amp;quot;, il a donc suffit de mettre les commandes correspondantes aux moments donnés afin de faire un programme homogène. &lt;br /&gt;
Ici, la boussole est liée dans le programme mais n'est pas utilisée, nous l'avons préparée afin de l'utiliser par la suite. &lt;br /&gt;
{{boîte déroulante/début|titre=Code_Mise en commun se déplacer + Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;quot;MPU9250.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int boussole;&lt;br /&gt;
int N = 50;&lt;br /&gt;
int K = 0.3;&lt;br /&gt;
&lt;br /&gt;
MPU9250 IMU(Wire, 0x68);&lt;br /&gt;
int status;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
double moyenne;&lt;br /&gt;
double moyenneFinal;&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
double angle() {&lt;br /&gt;
  double Module_magnetic;&lt;br /&gt;
  double angle;&lt;br /&gt;
  double Xmagnetic;&lt;br /&gt;
  double Ymagnetic;&lt;br /&gt;
  double Zmagnetic;&lt;br /&gt;
&lt;br /&gt;
  IMU.readSensor();&lt;br /&gt;
&lt;br /&gt;
  Xmagnetic = IMU.getMagX_uT();&lt;br /&gt;
  Ymagnetic = IMU.getMagY_uT();&lt;br /&gt;
  Zmagnetic = IMU.getMagZ_uT();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Module_magnetic = Xmagnetic * Xmagnetic + Ymagnetic * Ymagnetic + Zmagnetic * Zmagnetic;&lt;br /&gt;
  Module_magnetic = sqrt(Module_magnetic);&lt;br /&gt;
&lt;br /&gt;
  angle = atan2(Ymagnetic, Xmagnetic) * (180 / 3.14159265); // angle en degres&lt;br /&gt;
  if (angle &amp;lt; 0) {&lt;br /&gt;
    angle = angle + 360;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return angle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Pixy2.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// This is the main Pixy object&lt;br /&gt;
Pixy2 pixy;&lt;br /&gt;
&lt;br /&gt;
int E1 = 5;&lt;br /&gt;
int M1 = 4;&lt;br /&gt;
int E2 = 6;&lt;br /&gt;
int M2 = 7;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  pixy.init();&lt;br /&gt;
&lt;br /&gt;
  pinMode(M1, OUTPUT);&lt;br /&gt;
  pinMode(M2, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  while (!Serial) {}&lt;br /&gt;
&lt;br /&gt;
  // start communication with IMU&lt;br /&gt;
  status = IMU.begin();&lt;br /&gt;
  if (status &amp;lt; 0) {&lt;br /&gt;
    Serial.println(&amp;quot;IMU initialization unsuccessful&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Check IMU wiring or try cycling power&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Status: &amp;quot;);&lt;br /&gt;
    Serial.println(status);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  IMU.setAccelRange(MPU9250::ACCEL_RANGE_8G);&lt;br /&gt;
&lt;br /&gt;
  IMU.setGyroRange(MPU9250::GYRO_RANGE_500DPS);&lt;br /&gt;
&lt;br /&gt;
  IMU.setDlpfBandwidth(MPU9250:: DLPF_BANDWIDTH_20HZ);&lt;br /&gt;
&lt;br /&gt;
  IMU.setSrd(19);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  int x;&lt;br /&gt;
  int y;&lt;br /&gt;
  // grab blocks!&lt;br /&gt;
  pixy.ccc.getBlocks();&lt;br /&gt;
&lt;br /&gt;
  // si on détecte la balle&lt;br /&gt;
  if (pixy.ccc.numBlocks)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, (N + K * (158 - pixy.ccc.blocks[i].m_x)));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158)));&lt;br /&gt;
      analogWrite(E2, 50);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est proche&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 50);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est loin&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //si on ne détecte pas la balle&lt;br /&gt;
  else {&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
    analogWrite(E1, 50);&lt;br /&gt;
    analogWrite(E2, 30);&lt;br /&gt;
  }&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;Angle  &amp;quot;);  //en degres&lt;br /&gt;
  Serial.println(angle());&lt;br /&gt;
  boussole = angle;&lt;br /&gt;
&lt;br /&gt;
  moyenne = 0;&lt;br /&gt;
  for (i=0; i&amp;lt;100; i++)&lt;br /&gt;
  {&lt;br /&gt;
    moyenne = moyenne + angle();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  moyenneFinal = moyenne/100;&lt;br /&gt;
  Serial.print(&amp;quot;Moyenne : &amp;quot;);&lt;br /&gt;
  Serial.println(moyenneFinal);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
==Mise en commun totale==&lt;br /&gt;
&lt;br /&gt;
Afin de mettre en commun toutes les fonctions, nous n'avons eu qu'à placer chaque fonctions au bon endroit en suivant l'algorithme de développement ( voir PJ première partie ), tout en plaçant chaque ligne de code au bon endroit. &lt;br /&gt;
Seul le TIMER des 90 secondes englobera toutes les fonctions afin que celles-ci ne se déroulent seulement si on est en dessous des 90 secondes. Dès lors où nous aurons passé ce temps (85 secondes pour avoir une marge de manoeuvre ), toutes les fonctions seront bloquées et le robot se mettra en route vers la ligne blanche, arrêtera ses moteurs, et mettre en fonctionnement la fonction du Crève-ballon expliquée ci-dessus. La partie sera alors terminée et notre robot validera les points qu'il aura marqué auparavant. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Mise en commun se déplacer + Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;quot;MPU9250.h&amp;quot; //intégration bibliothèque gyroscope&lt;br /&gt;
#include &amp;lt;Pixy2.h&amp;gt; //intégration bibliothèque pixy&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt; //intégration bibliothèque servomoteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int boussole;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
MPU9250 IMU(Wire, 0x68);&lt;br /&gt;
int status;&lt;br /&gt;
&lt;br /&gt;
static unsigned long debutdutemps = millis();&lt;br /&gt;
unsigned long temps_ref;&lt;br /&gt;
#define PERIODE 10000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// initialisations du HC SR04 qui détecte la balle pour l'attraper&lt;br /&gt;
&lt;br /&gt;
int trig = 2;&lt;br /&gt;
int echo = 3;&lt;br /&gt;
long lecture_echo;&lt;br /&gt;
long cm;&lt;br /&gt;
int balle;&lt;br /&gt;
double moyenne;&lt;br /&gt;
double moyenneFinal;&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
// initialisations du gyroscope&lt;br /&gt;
&lt;br /&gt;
double angle() {&lt;br /&gt;
  double Module_magnetic;&lt;br /&gt;
  double angle;&lt;br /&gt;
  double Xmagnetic;&lt;br /&gt;
  double Ymagnetic;&lt;br /&gt;
  double Zmagnetic;&lt;br /&gt;
&lt;br /&gt;
  IMU.readSensor();&lt;br /&gt;
&lt;br /&gt;
  Xmagnetic = IMU.getMagX_uT();&lt;br /&gt;
  Ymagnetic = IMU.getMagY_uT();&lt;br /&gt;
  Zmagnetic = IMU.getMagZ_uT();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Module_magnetic = Xmagnetic * Xmagnetic + Ymagnetic * Ymagnetic + Zmagnetic * Zmagnetic;&lt;br /&gt;
  Module_magnetic = sqrt(Module_magnetic);&lt;br /&gt;
&lt;br /&gt;
  angle = atan2(Ymagnetic, Xmagnetic) * (180 / 3.14159265); // angle en degres&lt;br /&gt;
  if (angle &amp;lt; 0) {&lt;br /&gt;
    angle = angle + 360;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return angle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//initialisations camera pixy&lt;br /&gt;
Pixy2 pixy;&lt;br /&gt;
&lt;br /&gt;
int E1 = 5; // moteur gauche&lt;br /&gt;
int M1 = 4;&lt;br /&gt;
int E2 = 6; // moteur droite&lt;br /&gt;
int M2 = 7;&lt;br /&gt;
int etat;&lt;br /&gt;
int N = 100;&lt;br /&gt;
int K = 0.3;&lt;br /&gt;
int NORD;&lt;br /&gt;
&lt;br /&gt;
const int BpNord = 10; // variable qui gère l'initialisation du bouton qui désignera le nord en broche 10&lt;br /&gt;
&lt;br /&gt;
int capteur0;&lt;br /&gt;
int capteur1;&lt;br /&gt;
int capteur2;&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteurTaper;&lt;br /&gt;
Servo monServomoteurBallon;&lt;br /&gt;
Servo monServomoteurAttraper;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
 &lt;br /&gt;
  monServomoteurAttraper.attach(6); //déclaration servo moteur qui attrape la balle en position zéro&lt;br /&gt;
  monServomoteurAttraper.write(0);&lt;br /&gt;
 &lt;br /&gt;
  monServomoteurBallon.attach(8);   //déclaration servo moteur qui crève le ballon sur la broche 8 de l’arduino&lt;br /&gt;
  monServomoteurBallon.write(0);   //Mise en position initiale, position 0°&lt;br /&gt;
&lt;br /&gt;
  monServomoteurTaper.attach(7);  //déclaration servo moteur qui tape la balle en position zéro&lt;br /&gt;
  monServomoteurTaper.write(0);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  temps_ref = millis();&lt;br /&gt;
&lt;br /&gt;
  pinMode(BpNord, INPUT); //déclaration bouton qui désignera le nord&lt;br /&gt;
  //digitalWrite(Bp, HIGH);&lt;br /&gt;
  pinMode(A0, INPUT); //déclaration d'un détecteur de ligne&lt;br /&gt;
  pinMode(A1, INPUT); //déclaration d'un détecteur de ligne&lt;br /&gt;
  pinMode(A2, INPUT); //déclaration d'un détecteur de ligne&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  pixy.init();&lt;br /&gt;
&lt;br /&gt;
  pinMode(M1, OUTPUT); //déclaration moteur qui oriente le robot&lt;br /&gt;
  pinMode(M2, OUTPUT); //déclaration moteur qui oriente le robot&lt;br /&gt;
&lt;br /&gt;
  pinMode(trig, OUTPUT); //déclaration des broches utilisés pour le hc sr 04&lt;br /&gt;
  digitalWrite(trig, LOW); //déclaration des broches utilisés pour le hc sr 04&lt;br /&gt;
  pinMode(echo, INPUT); //déclaration des broches utilisés pour le hc sr 04&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
&lt;br /&gt;
  //boucle qui gère les déclarations du gyroscope&lt;br /&gt;
  while (!Serial) {}&lt;br /&gt;
&lt;br /&gt;
  // début de communication avec le IMU du gyroscope&lt;br /&gt;
  status = IMU.begin();&lt;br /&gt;
  if (status &amp;lt; 0) {&lt;br /&gt;
    Serial.println(&amp;quot;IMU initialization unsuccessful&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Check IMU wiring or try cycling power&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Status: &amp;quot;);&lt;br /&gt;
    Serial.println(status);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  IMU.setAccelRange(MPU9250::ACCEL_RANGE_8G);&lt;br /&gt;
&lt;br /&gt;
  IMU.setGyroRange(MPU9250::GYRO_RANGE_500DPS);&lt;br /&gt;
&lt;br /&gt;
  IMU.setDlpfBandwidth(MPU9250:: DLPF_BANDWIDTH_20HZ);&lt;br /&gt;
&lt;br /&gt;
  IMU.setSrd(19);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;Angle  &amp;quot;);  //en degres&lt;br /&gt;
  Serial.println(angle());&lt;br /&gt;
  boussole = angle;&lt;br /&gt;
&lt;br /&gt;
  moyenne = 0;&lt;br /&gt;
  for (i = 0; i &amp;lt; 100; i++)&lt;br /&gt;
  {&lt;br /&gt;
    moyenne = moyenne + angle();&lt;br /&gt;
    delay(10);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  moyenneFinal = moyenne / 100;&lt;br /&gt;
  Serial.print(&amp;quot;Moyenne : &amp;quot;);&lt;br /&gt;
  Serial.println(moyenneFinal);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  etat = digitalRead(BpNord);&lt;br /&gt;
  if (etat == HIGH) {&lt;br /&gt;
    NORD = angle;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//association des 3 capteurs de lignes à 3 variables&lt;br /&gt;
&lt;br /&gt;
  int capteur0;&lt;br /&gt;
  int capteur1;&lt;br /&gt;
  int capteur2;&lt;br /&gt;
  int sensorValue0 = analogRead(A0);&lt;br /&gt;
  int sensorValue1 = analogRead(A1);&lt;br /&gt;
  int sensorValue2 = analogRead(A2);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// fonction millis qui ordonne au robot au bout d'une certaine période d'aller à la ligne blanche puis de crever le ballon&lt;br /&gt;
&lt;br /&gt;
  if ( (millis() - temps_ref) &amp;gt;= PERIODE ) // fonction millis&lt;br /&gt;
  {&lt;br /&gt;
    if (angle == 0) // quand le robot est orienté vers le terrain adverse&lt;br /&gt;
    {&lt;br /&gt;
      analogWrite(E1, 100); //il avance tout droit&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    else(boussole = ! NORD); //s'il n'est pas orienté vers le terrain adverse&lt;br /&gt;
    {&lt;br /&gt;
      analogWrite(E1, 50); // il tourne en rond&lt;br /&gt;
      analogWrite(E2, 30);&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    if ((sensorValue0 &amp;gt; 450) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; 30) &amp;amp;&amp;amp; (sensorValue2 &amp;gt;450  )&amp;amp;&amp;amp;(sensorValue3 &amp;gt; 200) &amp;amp;&amp;amp; (sensorValue4 &amp;gt; 200) &amp;amp;&amp;amp; (sensorValue5 &amp;gt;200  )   &amp;amp;&amp;amp;  (millis() - temps_ref) &amp;gt;= PERIODE) // si tout les capteurs détecte du blanc il s'arrete et crève le ballon&lt;br /&gt;
    {&lt;br /&gt;
      Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;); //permet de vérifier sur le moniteur série que l'arduino comprend qu'il doit dire au robot de s'arrêter&lt;br /&gt;
      analogWrite(E1, 0); //moteur à l'arrêt&lt;br /&gt;
      analogWrite(E2, 0); //moteur à l'arrêt&lt;br /&gt;
&lt;br /&gt;
      // partie crève ballon qui fais faire varier l'angle du servomoteur en boucle&lt;br /&gt;
      monServomoteurBallon.write(90);&lt;br /&gt;
      delay(1000);&lt;br /&gt;
&lt;br /&gt;
      monServomoteurBallon.write(0);&lt;br /&gt;
      delay(0000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    temps_ref = millis();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  else { //si la fonction millis ne c'est pas encore arrêté&lt;br /&gt;
&lt;br /&gt;
    if ((sensorValue0 &amp;gt; 450) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; 30) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; 450  )) //le robot détecte la grosse ligne blanche du milieu&lt;br /&gt;
    {&lt;br /&gt;
      Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 0); //arrêt des moteurs&lt;br /&gt;
      analogWrite(E2, 0); //arrêt des moteurs&lt;br /&gt;
      delay(2000); //pause de 2secondes&lt;br /&gt;
      analogWrite(E1, 80); //le moteur fais demi-tour&lt;br /&gt;
      analogWrite(E2, 50); //le moteur fais demi-tour&lt;br /&gt;
      delay(3000); //pause de 3 secondes&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  // partie qui associe la caméra pixy aux moteurs&lt;br /&gt;
    int i;&lt;br /&gt;
    int x;&lt;br /&gt;
    int y;&lt;br /&gt;
    // grab blocks!&lt;br /&gt;
    pixy.ccc.getBlocks();&lt;br /&gt;
&lt;br /&gt;
    // si on détecte la balle&lt;br /&gt;
    if (pixy.ccc.numBlocks)&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
      Serial.print(i);&lt;br /&gt;
      Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
      Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      if (pixy.ccc.blocks[i].m_x &amp;lt; 158) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
        Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
        analogWrite(E2, (N + K * (158 - pixy.ccc.blocks[i].m_x)));&lt;br /&gt;
        analogWrite(E1, N);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      if (pixy.ccc.blocks[i].m_x &amp;gt; 158) {&lt;br /&gt;
        Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
        analogWrite(E2, N);&lt;br /&gt;
        analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158)));&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
      Serial.print(i);&lt;br /&gt;
      Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
      Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
      if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x == 158 ) { // si la balle est au centre de l'axe, on avance à la même vitesse&lt;br /&gt;
        Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 90);&lt;br /&gt;
        analogWrite(E2, 90);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x == 158) {&lt;br /&gt;
        Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
        analogWrite(E1, 120);&lt;br /&gt;
        analogWrite(E2, 120);&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    //si on ne détecte pas la balle&lt;br /&gt;
    else {&lt;br /&gt;
      Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 80);&lt;br /&gt;
      analogWrite(E2, -80);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //partie qui calcul la distance en boule à l'aide du hc sr 04&lt;br /&gt;
&lt;br /&gt;
    digitalWrite(trig, HIGH);&lt;br /&gt;
    delayMicroseconds(10);&lt;br /&gt;
    digitalWrite(trig, LOW);&lt;br /&gt;
    lecture_echo = pulseIn(echo, HIGH);&lt;br /&gt;
    cm = lecture_echo / 58;&lt;br /&gt;
    Serial.print(&amp;quot;Distance en cm :&amp;quot;);&lt;br /&gt;
    Serial.println(cm);&lt;br /&gt;
    delay(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (cm &amp;lt; 13) // si le hc sr 04 capte une balle/présence un servo moteur attrape la balle&lt;br /&gt;
    {&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;Balle attrapée&amp;quot;);&lt;br /&gt;
      monServomoteurAttraper.write(90);&lt;br /&gt;
      delay(100);&lt;br /&gt;
      balle = 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
    if (cm &amp;gt; 14) { // si le hc sr 04 ne capte rien, le servo moteur reste en position ouverte&lt;br /&gt;
      Serial.print(&amp;quot;Balle va être attrapée&amp;quot;);&lt;br /&gt;
      monServomoteurAttraper.write(0);&lt;br /&gt;
      delay(100);&lt;br /&gt;
      balle = 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
      // partie qui associe le gyroscope aux servomoteur qui attrape, et qui tape la balle une fois sur la ligne blanche du milieu&lt;br /&gt;
&lt;br /&gt;
    if (balle = 1) {&lt;br /&gt;
      if (angle &amp;lt; NORD + 5) &amp;amp;&amp;amp; (angle &amp;gt; NORD - 5) { // si nous sommes dirigé vers le nord&lt;br /&gt;
        digitalWrite(E1, N);&lt;br /&gt;
        digitalWrite(E2, N);&lt;br /&gt;
      }&lt;br /&gt;
      while ( angle =! NORD) {&lt;br /&gt;
        digitalWrite(E1, N);&lt;br /&gt;
        digitalWrite(E2, 65);&lt;br /&gt;
        delay(1000);&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    if ((sensorValue0 &amp;gt; 500) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; 200)) // ligne blanche le servomoteur relache la balle et l'autre servomoteur tape la balle&lt;br /&gt;
    {&lt;br /&gt;
      Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 0); //arrêt des moteurs&lt;br /&gt;
      analogWrite(E2, 0); //arrêt des moteurs     &lt;br /&gt;
      monServomoteurAttraper.write(90);&lt;br /&gt;
      delay(2000);&lt;br /&gt;
      monServomoteurTaper.write(90);&lt;br /&gt;
    }&lt;br /&gt;
    else if ((sensorValue0 &amp;lt; 450) &amp;amp;&amp;amp; (sensorValue1 &amp;lt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;lt; 200)) //le robot n'est plus sur la ligne blanche donc il fait demi tour en remettant le servomoteur qui tape la bale en position 0&lt;br /&gt;
    {&lt;br /&gt;
      monServomoteurTaper.write(0);&lt;br /&gt;
      analogWrite(E1, 80); //le moteur fais demi-tour&lt;br /&gt;
      analogWrite(E2, 50); //le moteur fais demi-tour&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14418</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14418"/>
				<updated>2021-03-16T09:19:13Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Fonctionnement du robot=&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   Serial.begin(115200);&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
   pixy.init();&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   int i;&lt;br /&gt;
   int x;&lt;br /&gt;
   int y;&lt;br /&gt;
   pixy.ccc.getBlocks();&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
    }&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //si on ne détecte pas la balle&lt;br /&gt;
  else {&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  delay(1000);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crève-ballon.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une &amp;quot;bague&amp;quot; sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Crève Ballon}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteur;  //Création de l’objet servomoteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  monServomoteur.attach(7);   // Déclaration pour utilisation de la broche 7&lt;br /&gt;
  monServomoteur.write(0);  // Initialisation de la position 0&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
   monServomoteur.write(130);&lt;br /&gt;
   delay(0000);  &lt;br /&gt;
&lt;br /&gt;
   monServomoteur.write(0);&lt;br /&gt;
   delay(0000);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
La fonction qui permet d'attraper la balle de tennis et de la frapper est la partie du robot qui nous permettra de marquer des points sur le terrain ou non.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cette partie, énormément d'idées ont vu le jour : &lt;br /&gt;
     - Utilisation de moteur à courant continu &lt;br /&gt;
     - Utilisation de moteurs pas-à-pas&lt;br /&gt;
     - Utilisation de ressorts ou de lames de ressorts&lt;br /&gt;
&lt;br /&gt;
La solution retenue pour la version finale est l'utilisation des différentes parties du robot, de deux servomoteurs ( un pour attraper la balle et un autre pour la projeter ), et d'un HC SR 04 qui permet un calcul de distance à l'aider d'ultrason qui contrôlera la présence ou non de la balle dans la zone des 2 servomoteurs. &amp;lt;br&amp;gt;&lt;br /&gt;
Le fonctionnement et le déroulement se feront en six étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   - A l'aide de la caméra Pixy2, le robot se dirige vers la balle&lt;br /&gt;
   - Une fois que le capteur de distance HCSR04 détectera la présence de la balle, le servomoteur qui permet de contenir la balle va se refermer sur celle-ci pour l'attraper&lt;br /&gt;
   ''La balle sera alors contenue entre les deux servomoteurs, celui qui sert à attraper, et celui qui est prêt à la frapper à tout moment''&lt;br /&gt;
   - A l'aide du gyroscope, le robot va se diriger vers le terrain adverse&lt;br /&gt;
   - Une fois sur la ligne blanche, celle-ci sera détectée grâce au capteur de ligne et le robot va mettre ses moteurs à 0 afin d'arrêter totalement le mouvement&lt;br /&gt;
   - Enfin, le robot ouvrira le bras du servomoteur qui servait à contenir la balle, et va actionner le second servomoteur afin de pousser la balle dans le camp adverse. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette partie est donc l'une des plus importantes car elle regroupe toutes les autres parties et nous permet de marquer des points. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Frapper la balle}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
  int capteur0;&lt;br /&gt;
  int capteur1;&lt;br /&gt;
  int capteur2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteurTaper;&lt;br /&gt;
const int detecte = 8;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
&lt;br /&gt;
  pinMode(detecte, INPUT); //detecte balle&lt;br /&gt;
  monServomoteurTaper.attach(8);&lt;br /&gt;
  monServomoteurTaper.write(0);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  int sensorValue0 = analogRead(A0);&lt;br /&gt;
  int sensorValue1 = analogRead(A1);&lt;br /&gt;
  int sensorValue2 = analogRead(A2);&lt;br /&gt;
    Serial.println(&amp;quot;capteur0&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue0);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  Serial.println(&amp;quot;capteur1&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue1);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  Serial.println(&amp;quot;capteur2&amp;quot;);&lt;br /&gt;
  Serial.println(sensorValue2);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  if ((sensorValue0 &amp;gt; 500) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; 200))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
    monServomoteurTaper.write(90);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue0 &amp;lt; 450) &amp;amp;&amp;amp; (sensorValue1 &amp;lt; 400) &amp;amp;&amp;amp; (sensorValue2 &amp;lt; 200))&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    monServomoteurTaper.write(0);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Attraper la balle}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;lt;Servo.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Servo monServomoteurAttraper;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int trig = 2;&lt;br /&gt;
int echo = 3;&lt;br /&gt;
long lecture_echo;&lt;br /&gt;
long cm;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  monServomoteurAttraper.attach(7);&lt;br /&gt;
  monServomoteurAttraper.write(0);&lt;br /&gt;
&lt;br /&gt;
  pinMode(trig, OUTPUT);&lt;br /&gt;
  digitalWrite(trig, LOW);&lt;br /&gt;
  pinMode(echo, INPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(trig, HIGH);&lt;br /&gt;
  delayMicroseconds(10);&lt;br /&gt;
  digitalWrite(trig, LOW);&lt;br /&gt;
  lecture_echo = pulseIn(echo, HIGH);&lt;br /&gt;
  cm = lecture_echo / 58;&lt;br /&gt;
  Serial.print(&amp;quot;Distance en cm :&amp;quot;);&lt;br /&gt;
  Serial.println(cm);&lt;br /&gt;
  delay(500);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if (cm &amp;lt; 5)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;Balle attrapée&amp;quot;);&lt;br /&gt;
    monServomoteurAttraper.write(90);&lt;br /&gt;
    delay(100);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
if (cm &amp;gt; 5){&lt;br /&gt;
    Serial.print(&amp;quot;Balle va être attrapée&amp;quot;);&lt;br /&gt;
  monServomoteurAttraper.write(0);&lt;br /&gt;
  delay(100);&lt;br /&gt;
      }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
[[Fichier:PieceCny70.png|100px]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie détection de ligne nous avons décidé d'utiliser 6 capteurs Cny70 répartis sur l’avant du robot. &lt;br /&gt;
Nous avons utilisé ce schéma de branchement pour les 6 capteurs et nous les avons reliés ensemble.&amp;lt;br&amp;gt;&lt;br /&gt;
Le CNY70 est un émetteur et un récepteur infrarouge.&amp;lt;br&amp;gt;&lt;br /&gt;
Le capteur envoie un faisceau infrarouge et selon la luminosité reçue, la tension dans le capteur variera, grâce à cette tension nous pourrons savoir si le capteur est sur la ligne blanche ou sur le terrain bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour détecter la ligne blanche au milieu du terrain. Nous les avons regroupés par 3 afin qu’ils couvrent une plus grande surface de détection. Et si les 6 capteurs possèdent la même tension correspondant à la ligne blanche alors le robot s’arrêtera.&lt;br /&gt;
Tout ce programme sera regroupé au sein du code du TIMER qui permettra au robot de s'arrêter avant la fin du temps imparti.&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Détecteur de ligne}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  pinMode(A0, INPUT);&lt;br /&gt;
  pinMode(A1, INPUT);&lt;br /&gt;
  pinMode(A2, INPUT);&lt;br /&gt;
  &lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  //on declare les variables des capteurs&lt;br /&gt;
  int capteur0; &lt;br /&gt;
  int capteur1;&lt;br /&gt;
  int capteur2;&lt;br /&gt;
  //On declare les variables sensorValue &lt;br /&gt;
  //pour donné un nom a la valeur que donnera la pin &lt;br /&gt;
  int sensorValue0 = analogRead(A0);&lt;br /&gt;
  int sensorValue1 = analogRead(A1);&lt;br /&gt;
  int sensorValue2 = analogRead(A2);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur0&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue0);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur1&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue1);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
  //Serial.println(&amp;quot;capteur2&amp;quot;);&lt;br /&gt;
  //Serial.println(sensorValue2);&lt;br /&gt;
  //delay(1000);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue0 &amp;lt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur0 = 1;&lt;br /&gt;
    Serial.print(capteur0);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue0 &amp;gt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur0 = 2;&lt;br /&gt;
    Serial.print( capteur0);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue1 &amp;lt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur1 = 11;&lt;br /&gt;
    Serial.print(capteur1);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue1 &amp;gt; 240))&lt;br /&gt;
  {&lt;br /&gt;
    capteur1 = 12;&lt;br /&gt;
    Serial.print( capteur1);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  if ((sensorValue2 &amp;lt; 250))&lt;br /&gt;
  {&lt;br /&gt;
    capteur2 = 21;&lt;br /&gt;
    Serial.print(capteur2);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le bleu&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  else if ((sensorValue2 &amp;gt; 250))&lt;br /&gt;
  {&lt;br /&gt;
    capteur2 = 22;&lt;br /&gt;
    Serial.print( capteur2);&lt;br /&gt;
    Serial.println(&amp;quot;___capteur dans le blanc&amp;quot;);&lt;br /&gt;
    delay(1000);&lt;br /&gt;
  }&lt;br /&gt;
  if ((sensorValue0 &amp;gt; &amp;quot;&amp;quot;) &amp;amp;&amp;amp; (sensorValue1 &amp;gt; &amp;quot;&amp;quot;) &amp;amp;&amp;amp; (sensorValue2 &amp;gt; &amp;quot;&amp;quot;))&lt;br /&gt;
  {&lt;br /&gt;
    Serial.println(&amp;quot;ARRET MOTEUR&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FonctionnementCny70.png|200px]]&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le programme, j’ai commencé par déclarer les variables et faire le void setup, ensuite pour le void loop, j’ai préparé les 5 actions nécessaires soit : avancer lentement et rapidement, tourner à gauche et à droite et chercher la balle. Lorsqu’il faut tourner à gauche, on active les deux moteurs mais le moteur de droite va être plus rapide que celui de gauche ce qui permettra une rotation du robot, inversement pour tourner à droite. &lt;br /&gt;
Pour avancer plus ou moins rapidement, on active tout simplement les deux moteurs plus ou moins vite, et pour chercher la balle, on exerce le même programme que pour tourner à gauche ce qui va permettre au robot de subir une rotation jusqu’à ce qu’une balle entre dans son champs de vision. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_SeDéplacer}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 int E1 = 5;&lt;br /&gt;
 int M1 = 4;&lt;br /&gt;
 int E2 = 6;&lt;br /&gt;
 int M2 = 7;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   pinMode(M1, OUTPUT);&lt;br /&gt;
   pinMode(M2, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
      if (){ // si la balle est plus à gauche que la barre verticale des ⅓ de pixel&lt;br /&gt;
        Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 30); &lt;br /&gt;
        analogWrite(E2, 50);  &lt;br /&gt;
      }&lt;br /&gt;
      if () {// si la balle est plus à droite que la barre des ⅔ de pixel&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); &lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 30);&lt;br /&gt;
      }&lt;br /&gt;
       if (){ // si la balle est, sur l’axe y, supérieur à la moitié &lt;br /&gt;
        Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
        analogWr+ Boussole +ite(E1, 50);&lt;br /&gt;
        analogWrite(E2, 50);&lt;br /&gt;
      }&lt;br /&gt;
      if (){ // si la balle est inférieur à la moitié sur l’axe y &lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 //si on ne détecte pas la balle&lt;br /&gt;
 else {&lt;br /&gt;
   Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
   analogWrite(E1, 50);&lt;br /&gt;
   analogWrite(E2, 30);&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Pour le programme final, nous avons changé la variable pour tourner, c’est-à-dire qu'au lie de tourner à une vitesse constante et e risquer de passer devant la balle sans avoir le temps de la voir, nous avons créé une équation qui nous permettra de faire fluctuer la vitesse en fonction de l'angle entre la balle et le centre de vision du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc obtenu cette équation :  &amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158))); // N est une vitesse constante, K un coefficient réducteur, puis on soustrait la position X de la balle par le nombre de pixels central de la vision afin d'obtenir un angle. &amp;lt;br&amp;gt;&lt;br /&gt;
''Cette équation n'est valable que pour tourner à droite, pour tourner à gauche nous remplacerons les parenthèses par 158 - position X de la balle.''&lt;br /&gt;
&lt;br /&gt;
Le robot ralentira sa rotation au fur et à mesure que la balle se rapprochera du centre de sa vision jusqu'à aller finalement tout droit et réussir à l'intercepter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Mise en commun des différents programmes=&lt;br /&gt;
&lt;br /&gt;
Lors de cette partie, nous allons vous expliquer, étape par étape, comment nous avons mit nos codes en commun chacun notre tour jusqu'à obtenir le code final. &lt;br /&gt;
Au niveau de la construction physique du robot, nous nous sommes débrouillé pour que chaque partie utilise des différentes broches afin de pouvoir utiliser seulement une carte Arduino. &lt;br /&gt;
&lt;br /&gt;
==Fonction Pixy2 + Boussole + Se déplacer==&lt;br /&gt;
&lt;br /&gt;
Pour se faire, comme vous l'avez vu précédemment, le programme de la Pixy renvoyait des données telles que &amp;quot;Tourner à gauche&amp;quot;, il a donc suffit de mettre les commandes correspondantes aux moments donnés afin de faire un programme homogène. &lt;br /&gt;
Ici, la boussole est liée dans le programme mais n'est pas utilisée, nous l'avons préparée afin de l'utiliser par la suite. &lt;br /&gt;
{{boîte déroulante/début|titre=Code_Mise en commun se déplacer + Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
#include &amp;quot;MPU9250.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
int boussole;&lt;br /&gt;
int N = 50;&lt;br /&gt;
int K = 0.3;&lt;br /&gt;
&lt;br /&gt;
MPU9250 IMU(Wire, 0x68);&lt;br /&gt;
int status;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
double moyenne;&lt;br /&gt;
double moyenneFinal;&lt;br /&gt;
int i;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
double angle() {&lt;br /&gt;
  double Module_magnetic;&lt;br /&gt;
  double angle;&lt;br /&gt;
  double Xmagnetic;&lt;br /&gt;
  double Ymagnetic;&lt;br /&gt;
  double Zmagnetic;&lt;br /&gt;
&lt;br /&gt;
  IMU.readSensor();&lt;br /&gt;
&lt;br /&gt;
  Xmagnetic = IMU.getMagX_uT();&lt;br /&gt;
  Ymagnetic = IMU.getMagY_uT();&lt;br /&gt;
  Zmagnetic = IMU.getMagZ_uT();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Module_magnetic = Xmagnetic * Xmagnetic + Ymagnetic * Ymagnetic + Zmagnetic * Zmagnetic;&lt;br /&gt;
  Module_magnetic = sqrt(Module_magnetic);&lt;br /&gt;
&lt;br /&gt;
  angle = atan2(Ymagnetic, Xmagnetic) * (180 / 3.14159265); // angle en degres&lt;br /&gt;
  if (angle &amp;lt; 0) {&lt;br /&gt;
    angle = angle + 360;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  return angle;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;Pixy2.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// This is the main Pixy object&lt;br /&gt;
Pixy2 pixy;&lt;br /&gt;
&lt;br /&gt;
int E1 = 5;&lt;br /&gt;
int M1 = 4;&lt;br /&gt;
int E2 = 6;&lt;br /&gt;
int M2 = 7;&lt;br /&gt;
&lt;br /&gt;
void setup()&lt;br /&gt;
{&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
  pixy.init();&lt;br /&gt;
&lt;br /&gt;
  pinMode(M1, OUTPUT);&lt;br /&gt;
  pinMode(M2, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  Serial.begin(115200);&lt;br /&gt;
  while (!Serial) {}&lt;br /&gt;
&lt;br /&gt;
  // start communication with IMU&lt;br /&gt;
  status = IMU.begin();&lt;br /&gt;
  if (status &amp;lt; 0) {&lt;br /&gt;
    Serial.println(&amp;quot;IMU initialization unsuccessful&amp;quot;);&lt;br /&gt;
    Serial.println(&amp;quot;Check IMU wiring or try cycling power&amp;quot;);&lt;br /&gt;
    Serial.print(&amp;quot;Status: &amp;quot;);&lt;br /&gt;
    Serial.println(status);&lt;br /&gt;
    while (1) {}&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  IMU.setAccelRange(MPU9250::ACCEL_RANGE_8G);&lt;br /&gt;
&lt;br /&gt;
  IMU.setGyroRange(MPU9250::GYRO_RANGE_500DPS);&lt;br /&gt;
&lt;br /&gt;
  IMU.setDlpfBandwidth(MPU9250:: DLPF_BANDWIDTH_20HZ);&lt;br /&gt;
&lt;br /&gt;
  IMU.setSrd(19);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
  int i;&lt;br /&gt;
  int x;&lt;br /&gt;
  int y;&lt;br /&gt;
  // grab blocks!&lt;br /&gt;
  pixy.ccc.getBlocks();&lt;br /&gt;
&lt;br /&gt;
  // si on détecte la balle&lt;br /&gt;
  if (pixy.ccc.numBlocks)&lt;br /&gt;
  {&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, (N + K * (158 - pixy.ccc.blocks[i].m_x)));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158)));&lt;br /&gt;
      analogWrite(E2, 50);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est proche&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 50);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est loin&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  //si on ne détecte pas la balle&lt;br /&gt;
  else {&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
    analogWrite(E1, 50);&lt;br /&gt;
    analogWrite(E2, 30);&lt;br /&gt;
  }&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;  &amp;quot;);&lt;br /&gt;
  Serial.print(&amp;quot;Angle  &amp;quot;);  //en degres&lt;br /&gt;
  Serial.println(angle());&lt;br /&gt;
  boussole = angle;&lt;br /&gt;
&lt;br /&gt;
  moyenne = 0;&lt;br /&gt;
  for (i=0; i&amp;lt;100; i++)&lt;br /&gt;
  {&lt;br /&gt;
    moyenne = moyenne + angle();&lt;br /&gt;
    delay(10);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  moyenneFinal = moyenne/100;&lt;br /&gt;
  Serial.print(&amp;quot;Moyenne : &amp;quot;);&lt;br /&gt;
  Serial.println(moyenneFinal);&lt;br /&gt;
&lt;br /&gt;
  delay(1000);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14401</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14401"/>
				<updated>2021-03-16T08:29:14Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_Pixy2}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   Serial.begin(115200);&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&lt;br /&gt;
   pixy.init();&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   int i;&lt;br /&gt;
   int x;&lt;br /&gt;
   int y;&lt;br /&gt;
   pixy.ccc.getBlocks();&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
    }&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&lt;br /&gt;
    Serial.print(i);&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;);   &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
  //si on ne détecte pas la balle&lt;br /&gt;
  else {&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  delay(1000);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crève-ballon.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
La fonction qui permet d'attraper la balle de tennis et de la frapper est la partie du robot qui nous permettra de marquer des points sur le terrain ou non.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cette partie, énormément d'idées ont vu le jour : &lt;br /&gt;
     - Utilisation de moteur à courant continu &lt;br /&gt;
     - Utilisation de moteurs pas-à-pas&lt;br /&gt;
     - Utilisation de ressorts ou de lames de ressorts&lt;br /&gt;
&lt;br /&gt;
La solution retenue pour la version finale est l'utilisation des différentes parties du robot, de deux servomoteurs ( un pour attraper la balle et un autre pour la projeter ), et d'un HC SR 04 qui permet un calcul de distance à l'aider d'ultrason qui contrôlera la présence ou non de la balle dans la zone des 2 servomoteurs. &amp;lt;br&amp;gt;&lt;br /&gt;
Le fonctionnement et le déroulement se feront en six étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   - A l'aide de la caméra Pixy2, le robot se dirige vers la balle&lt;br /&gt;
   - Une fois que le capteur de distance HCSR04 détectera la présence de la balle, le servomoteur qui permet de contenir la balle va se refermer sur celle-ci pour l'attraper&lt;br /&gt;
   ''La balle sera alors contenue entre les deux servomoteurs, celui qui sert à attraper, et celui qui est prêt à la frapper à tout moment''&lt;br /&gt;
   - A l'aide du gyroscope, le robot va se diriger vers le terrain adverse&lt;br /&gt;
   - Une fois sur la ligne blanche, celle-ci sera détectée grâce au capteur de ligne et le robot va mettre ses moteurs à 0 afin d'arrêter totalement le mouvement&lt;br /&gt;
   - Enfin, le robot ouvrira le bras du servomoteur qui servait à contenir la balle, et va actionner le second servomoteur afin de pousser la balle dans le camp adverse. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette partie est donc l'une des plus importantes car elle regroupe toutes les autres parties et nous permet de marquer des points. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
[[Fichier:PieceCny70.png|200px]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie détection de ligne nous avons décidé d'utiliser 6 capteurs Cny70 répartis sur l’avant du robot. &lt;br /&gt;
Nous avons utilisé ce schéma de branchement pour les 6 capteurs et nous les avons reliés ensemble.&amp;lt;br&amp;gt;&lt;br /&gt;
Le CNY70 est un émetteur et un récepteur infrarouge.&amp;lt;br&amp;gt;&lt;br /&gt;
Le capteur envoie un faisceau infrarouge et selon la luminosité reçue, la tension dans le capteur variera, grâce à cette tension nous pourrons savoir si le capteur est sur la ligne blanche ou sur le terrain bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour détecter la ligne blanche au milieu du terrain. Nous les avons regroupés par 3 afin qu’ils couvrent une plus grande surface de détection. Et si les 6 capteurs possèdent la même tension correspondant à la ligne blanche alors le robot s’arrêtera.&lt;br /&gt;
Tout ce programme sera regroupé au sein du code du TIMER qui permettra au robot de s'arrêter avant la fin du temps imparti.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FonctionnementCny70.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le programme, j’ai commencé par déclarer les variables et faire le void setup, ensuite pour le void loop, j’ai préparé les 5 actions nécessaires soit : avancer lentement et rapidement, tourner à gauche et à droite et chercher la balle. Lorsqu’il faut tourner à gauche, on active les deux moteurs mais le moteur de droite va être plus rapide que celui de gauche ce qui permettra une rotation du robot, inversement pour tourner à droite. &lt;br /&gt;
Pour avancer plus ou moins rapidement, on active tout simplement les deux moteurs plus ou moins vite, et pour chercher la balle, on exerce le même programme que pour tourner à gauche ce qui va permettre au robot de subir une rotation jusqu’à ce qu’une balle entre dans son champs de vision. &lt;br /&gt;
&lt;br /&gt;
{{boîte déroulante/début|titre=Code_SeDéplacer}}&lt;br /&gt;
&amp;lt;source lang=c&amp;gt;&lt;br /&gt;
 int E1 = 5;&lt;br /&gt;
 int M1 = 4;&lt;br /&gt;
 int E2 = 6;&lt;br /&gt;
 int M2 = 7;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   pinMode(M1, OUTPUT);&lt;br /&gt;
   pinMode(M2, OUTPUT);&lt;br /&gt;
 }&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
      if (){ // si la balle est plus à gauche que la barre verticale des ⅓ de pixel&lt;br /&gt;
        Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 30); &lt;br /&gt;
        analogWrite(E2, 50);  &lt;br /&gt;
      }&lt;br /&gt;
      if () {// si la balle est plus à droite que la barre des ⅔ de pixel&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); &lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 30);&lt;br /&gt;
      }&lt;br /&gt;
       if (){ // si la balle est, sur l’axe y, supérieur à la moitié &lt;br /&gt;
        Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 50);&lt;br /&gt;
        analogWrite(E2, 50);&lt;br /&gt;
      }&lt;br /&gt;
      if (){ // si la balle est inférieur à la moitié sur l’axe y &lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 //si on ne détecte pas la balle&lt;br /&gt;
 else {&lt;br /&gt;
   Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
   analogWrite(E1, 50);&lt;br /&gt;
   analogWrite(E2, 30);&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{boîte déroulante/fin}}&lt;br /&gt;
&lt;br /&gt;
Pour le programme final, nous avons changé la variable pour tourner, c’est-à-dire qu'au lie de tourner à une vitesse constante et e risquer de passer devant la balle sans avoir le temps de la voir, nous avons créé une équation qui nous permettra de faire fluctuer la vitesse en fonction de l'angle entre la balle et le centre de vision du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc obtenu cette équation :  &amp;lt;br&amp;gt;&lt;br /&gt;
analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158))); // N est une vitesse constante, K un coefficient réducteur, puis on soustrait la position X de la balle par le nombre de pixels central de la vision afin d'obtenir un angle. &amp;lt;br&amp;gt;&lt;br /&gt;
''Cette équation n'est valable que pour tourner à droite, pour tourner à gauche nous remplacerons les parenthèses par 158 - position X de la balle.''&lt;br /&gt;
&lt;br /&gt;
Le robot ralentira sa rotation au fur et à mesure que la balle se rapprochera du centre de sa vision jusqu'à aller finalement tout droit et réussir à l'intercepter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Synthèse=&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14374</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14374"/>
				<updated>2021-03-16T07:59:32Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Crève-ballon.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
La fonction qui permet d'attraper la balle de tennis et de la frapper est la partie du robot qui nous permettra de marquer des points sur le terrain ou non.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour cette partie, énormément d'idées ont vu le jour : &lt;br /&gt;
     - Utilisation de moteur à courant continu &lt;br /&gt;
     - Utilisation de moteurs pas-à-pas&lt;br /&gt;
     - Utilisation de ressorts ou de lames de ressorts&lt;br /&gt;
&lt;br /&gt;
La solution retenue pour la version finale est l'utilisation des différentes parties du robot, de deux servomoteurs ( un pour attraper la balle et un autre pour la projeter ), et d'un HC SR 04 qui permet un calcul de distance à l'aider d'ultrason qui contrôlera la présence ou non de la balle dans la zone des 2 servomoteurs. &amp;lt;br&amp;gt;&lt;br /&gt;
Le fonctionnement et le déroulement se feront en six étapes :&amp;lt;br&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
   - A l'aide de la caméra Pixy2, le robot se dirige vers la balle&lt;br /&gt;
   - Une fois que le capteur de distance HCSR04 détectera la présence de la balle, le servomoteur qui permet de contenir la balle va se refermer sur celle-ci pour l'attraper&lt;br /&gt;
   ''La balle sera alors contenue entre les deux servomoteurs, celui qui sert à attraper, et celui qui est prêt à la frapper à tout moment''&lt;br /&gt;
   - A l'aide du gyroscope, le robot va se diriger vers le terrain adverse&lt;br /&gt;
   - Une fois sur la ligne blanche, celle-ci sera détectée grâce au capteur de ligne et le robot va mettre ses moteurs à 0 afin d'arrêter totalement le mouvement&lt;br /&gt;
   - Enfin, le robot ouvrira le bras du servomoteur qui servait à contenir la balle, et va actionner le second servomoteur afin de pousser la balle dans le camp adverse. &amp;lt;br&amp;gt;&lt;br /&gt;
Cette partie est donc l'une des plus importantes car elle regroupe toutes les autres parties et nous permet de marquer des points. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
[[Fichier:PieceCny70.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
Pour la partie détection de ligne nous avons décidé d'utiliser 6 capteurs Cny70 répartis sur l’avant du robot. &lt;br /&gt;
Nous avons utilisé ce schéma de branchement pour les 6 capteurs et nous les avons reliés ensemble.&amp;lt;br&amp;gt;&lt;br /&gt;
Le CNY70 est un émetteur et un récepteur infrarouge.&amp;lt;br&amp;gt;&lt;br /&gt;
Le capteur envoie un faisceau infrarouge et selon la luminosité reçue, la tension dans le capteur variera, grâce à cette tension nous pourrons savoir si le capteur est sur la ligne blanche ou sur le terrain bleu.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour détecter la ligne blanche au milieu du terrain. Nous les avons regroupés par 3 afin qu’ils couvrent une plus grande surface de détection. Et si les 6 capteurs possèdent la même tension correspondant à la ligne blanche alors le robot s’arrêtera.&lt;br /&gt;
Tout ce programme sera regroupé au sein du code du TIMER qui permettra au robot de s'arrêter avant la fin du temps imparti.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:FonctionnementCny70.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&amp;lt;br&amp;gt;&lt;br /&gt;
Pour le programme, j’ai commencé par déclarer les variables et faire le void setup, ensuite pour le void loop, j’ai préparé les 5 actions nécessaires soit : avancer lentement et rapidement, tourner à gauche et à droite et chercher la balle. Lorsqu’il faut tourner à gauche, on active les deux moteurs mais le moteur de droite va être plus rapide que celui de gauche ce qui permettra une rotation du robot, inversement pour tourner à droite. &lt;br /&gt;
Pour avancer plus ou moins rapidement, on active tout simplement les deux moteurs plus ou moins vite, et pour chercher la balle, on exerce le même programme que pour tourner à gauche ce qui va permettre au robot de subir une rotation jusqu’à ce qu’une balle entre dans son champs de vision. &lt;br /&gt;
&lt;br /&gt;
 int E1 = 5;&lt;br /&gt;
 int M1 = 4;&lt;br /&gt;
 int E2 = 6;&lt;br /&gt;
 int M2 = 7;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   pinMode(M1, OUTPUT);&lt;br /&gt;
   pinMode(M2, OUTPUT);&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
      if (){ // si la balle est plus à gauche que la barre verticale des ⅓ de pixel&amp;lt;br&amp;gt;&lt;br /&gt;
        Serial.println(&amp;quot;tourner à gauche&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 30); &lt;br /&gt;
        analogWrite(E2, 50);  &lt;br /&gt;
      }&amp;lt;br&amp;gt;&lt;br /&gt;
      if () {// si la balle est plus à droite que la barre des ⅔ de pixel&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); &lt;br /&gt;
      analogWrite(E1, 50);&lt;br /&gt;
      analogWrite(E2, 30);&lt;br /&gt;
      }&amp;lt;br&amp;gt;&lt;br /&gt;
       if (){ // si la balle est, sur l’axe y, supérieur à la moitié &amp;lt;br&amp;gt;&lt;br /&gt;
        Serial.println(&amp;quot;avancer doucement&amp;quot;);&lt;br /&gt;
        analogWrite(E1, 50);&lt;br /&gt;
        analogWrite(E2, 50);&lt;br /&gt;
      }&amp;lt;br&amp;gt;&lt;br /&gt;
      if (){ // si la balle est inférieur à la moitié sur l’axe y &amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&lt;br /&gt;
      analogWrite(E1, 100);&lt;br /&gt;
      analogWrite(E2, 100);&lt;br /&gt;
      }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&lt;br /&gt;
 //si on ne détecte pas la balle&lt;br /&gt;
 else {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.println(&amp;quot;chercher la balle&amp;quot;);&lt;br /&gt;
   analogWrite(E1, 50);&lt;br /&gt;
   analogWrite(E2, 30);&lt;br /&gt;
}&amp;lt;br&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Pour le programme final, nous avons changé la variable pour tourner, c’est-à-dire qu'au lie de tourner à une vitesse constante et e risquer de passer devant la balle sans avoir le temps de la voir, nous avons créé une équation qui nous permettra de faire fluctuer la vitesse en fonction de l'angle entre la balle et le centre de vision du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
Nous avons donc obtenu cette équation :  &amp;lt;br&amp;gt;&lt;br /&gt;
 analogWrite(E1, (N + K * (pixy.ccc.blocks[i].m_x - 158))); // N est une vitesse constante, K un coefficient réducteur, puis on soustrait la position X de la balle par le nombre de pixels central de la vision afin d'obtenir un angle. &amp;lt;br&amp;gt;&lt;br /&gt;
''Cette équation n'est valable que pour tourner à droite, pour tourner à gauche nous remplacerons les parenthèses par 158 - position X de la balle.''&lt;br /&gt;
&lt;br /&gt;
Le robot ralentira sa rotation au fur et à mesure que la balle se rapprochera du centre de sa vision jusqu'à aller finalement tout droit et réussir à l'intercepter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Synthèse=&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:PieceCny70.png&amp;diff=14363</id>
		<title>Fichier:PieceCny70.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:PieceCny70.png&amp;diff=14363"/>
				<updated>2021-03-16T07:34:42Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;CNY70&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:FonctionnementCny70.png&amp;diff=14359</id>
		<title>Fichier:FonctionnementCny70.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:FonctionnementCny70.png&amp;diff=14359"/>
				<updated>2021-03-16T07:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fonctionnement du CNY70&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Capteurentriangle.png&amp;diff=14290</id>
		<title>Fichier:Capteurentriangle.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Capteurentriangle.png&amp;diff=14290"/>
				<updated>2021-03-15T14:35:15Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Capteur en triangle CNY70&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Fonctionnement.png&amp;diff=14288</id>
		<title>Fichier:Fonctionnement.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Fonctionnement.png&amp;diff=14288"/>
				<updated>2021-03-15T14:32:26Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fonctionnement du CNY70&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Cr%C3%A8ve-ballon.png&amp;diff=14226</id>
		<title>Fichier:Crève-ballon.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Cr%C3%A8ve-ballon.png&amp;diff=14226"/>
				<updated>2021-03-15T13:40:49Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photo légendée du crève-ballon&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14124</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14124"/>
				<updated>2021-03-15T07:52:37Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* Caméra Pixy2, Boussole &amp;amp; création physique */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Synthèse=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14122</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14122"/>
				<updated>2021-03-15T07:49:47Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Synthèse=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14121</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14121"/>
				<updated>2021-03-15T07:44:32Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* Fonctionnement du robot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement (voir image du diagramme de fonctionnement), lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14120</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14120"/>
				<updated>2021-03-15T07:42:19Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon &amp;amp; pièces 3D.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2, Boussole &amp;amp; création physique==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon &amp;amp; pièces 3D==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14119</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14119"/>
				<updated>2021-03-15T07:39:34Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonctionnement du robot==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Caméra Pixy2==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Fonction se déplacer &amp;amp; mise en commun des différents programmes==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14118</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14118"/>
				<updated>2021-03-15T07:38:33Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Fonction frapper la balle &amp;amp; la retenir==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détecter les lignes &amp;amp; créer un compte à rebours==&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14115</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14115"/>
				<updated>2021-03-15T07:30:43Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* Crève-ballon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixé sur un bras conçu en 3D, une partie du bras sera fixé sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
On a donc crée une pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour y insérer le servomoteur.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14114</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14114"/>
				<updated>2021-03-15T07:28:32Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* Crève-ballon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le pique sera fixait sur un bras fait en 3D, une partie fixait sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon. On a donc crée un pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour le servomoteur.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14113</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14113"/>
				<updated>2021-03-15T07:27:48Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* Crève-ballon */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur. &lt;br /&gt;
Le pique sera fixait sur un bras fait en 3D, une partie fixait sur le servomoteur et sur l'autre extrémité il y aura le pique. Le servomoteur s'utilise en degrés, c'est-à-dire qu'il peut tourner de 0 à 180°. On le mettra en position initiale, c'est-à-dire à 0° et on le programme de façon à ce qu'il puisse exploser le ballon, donc ici il devra tourner d'environ 140° pour exploser le ballon et ensuite se remettre dans sa position initiale.&lt;br /&gt;
Après avoir trouver et tester cette solution, il fallait trouver comment fixer le servomoteur le plus proche possible du ballon. On a donc décidé de le fixer sur le socle du ballon. On a donc crée un pièce 3D qui se fixe autour du socle à l'aide d'une ''bague''sur laquelle on y a mis une encoche pour le servomoteur.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14107</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14107"/>
				<updated>2021-03-15T07:20:56Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* {{Bleu|Crève-ballon}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crève-ballon==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle en 3D pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre. Sachant que pour percer un ballon à l'aide d'un pique nous n’avons pas besoin de beaucoup de force, on a décidé d'utiliser un servomoteur.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14105</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14105"/>
				<updated>2021-03-15T07:18:16Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* {{Bleu|Crève-ballon}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Crève-ballon}}==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&lt;br /&gt;
Ensuite, pour exploser le ballon, on utilisera un pique car c'est une solution simple et efficace à mettre en œuvre.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14104</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14104"/>
				<updated>2021-03-15T07:16:48Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : /* {{Bleu|Crève-ballon}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Crève-ballon}}==&lt;br /&gt;
&lt;br /&gt;
Tout d'abord, il fallait trouver comment fixer à 30 cm minimum du sol et comment maintenir le ballon sur le robot. On a donc crée un socle pour maintenir le ballon afin qu'il soit maintenu et qu'il ne bouge pas trop lors du déplacement du robot sur le terrain.&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14103</id>
		<title>Robotique2 2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Robotique2_2&amp;diff=14103"/>
				<updated>2021-03-15T07:13:57Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Crève-ballon}}==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14029</id>
		<title>RobotiqueCoupeGEII2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14029"/>
				<updated>2021-03-09T10:00:41Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-contre exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Caméra Pixy2}}==&lt;br /&gt;
&lt;br /&gt;
La caméra Pixy2 se branche seulement sur le port ICSP d'une carte Arduino Uno en l'occurence.&amp;lt;br&amp;gt;&lt;br /&gt;
Peu de montage physique entraîne beaucoup de programmation, nous avons donc conçu ce programme afin de faire fonctionner la caméra : &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;Pixy2.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
 Pixy2 pixy;&amp;lt;br&amp;gt;&lt;br /&gt;
 void setup()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.begin(115200);&amp;lt;br&amp;gt;&lt;br /&gt;
   Serial.print(&amp;quot;Starting...\n&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.init();&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
 void loop()&amp;lt;br&amp;gt;&lt;br /&gt;
 {&amp;lt;br&amp;gt;&lt;br /&gt;
   int i;&amp;lt;br&amp;gt;&lt;br /&gt;
   int x;&amp;lt;br&amp;gt;&lt;br /&gt;
   int y;&amp;lt;br&amp;gt;&lt;br /&gt;
   pixy.ccc.getBlocks();&amp;lt;br&amp;gt;&lt;br /&gt;
  if (pixy.ccc.numBlocks) // si on détecte la balle&lt;br /&gt;
  {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position x de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_x); // on indique la position de la balle sur l'axe x (entre 316 et 0)&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;lt; 103) { // si la balle est plus à gauche par rapport au milieu de l'axe, on tourne à gauche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à gauche&amp;quot;);  &amp;lt;br&amp;gt;  &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_x &amp;gt; 206) {&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;tourner à droite&amp;quot;); // si la balle est plus à droite par rapport au milieu de l'axe, on tourne à droite&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;position y de la balle &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(i);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.print(&amp;quot;: &amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(pixy.ccc.blocks[i].m_y);&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;gt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) { // si la balle est en face du robot, et proche&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer doucement&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
    if (pixy.ccc.blocks[i].m_y &amp;lt; 105 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;lt; 206 &amp;amp;&amp;amp; pixy.ccc.blocks[i].m_x &amp;gt; 103) {// si la balle au centre de l’axe X, et loin du robot&amp;lt;br&amp;gt;&lt;br /&gt;
      Serial.println(&amp;quot;avancer rapidement&amp;quot;); &amp;lt;br&amp;gt;      &lt;br /&gt;
    }&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  //si on ne détecte pas la balle&amp;lt;br&amp;gt;&lt;br /&gt;
  else {&amp;lt;br&amp;gt;&lt;br /&gt;
    Serial.println(&amp;quot;chercher la balle&amp;quot;);&amp;lt;br&amp;gt;&lt;br /&gt;
  }&amp;lt;br&amp;gt;&lt;br /&gt;
  delay(1000);&amp;lt;br&amp;gt;&lt;br /&gt;
 }&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Afin de pouvoir régler la caméra Pixy lors de sa programmation, nous avons eu recours au logiciel &amp;quot;PixyMon&amp;quot; qui nous permet d'afficher sur l'écran d'ordinateur ce que la caméra voit en temps réel : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Pixy2.jpg|Caméra Pixy2&lt;br /&gt;
VisuelPixy2.jpg|PixyMon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonction se déplacer}}==&lt;br /&gt;
&lt;br /&gt;
Pour créer cette fonction, nous avons pris deux moteurs en courant continu, un shield moteur L298P ainsi qu'une batterie de 12V.&lt;br /&gt;
&lt;br /&gt;
ShieldMoteur.png|Shield Moteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:ShieldMoteur.png&amp;diff=14028</id>
		<title>Fichier:ShieldMoteur.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:ShieldMoteur.png&amp;diff=14028"/>
				<updated>2021-03-09T09:59:19Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Shield Moteur pour Arduino Uno&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:VisuelPixy2.jpg&amp;diff=14027</id>
		<title>Fichier:VisuelPixy2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:VisuelPixy2.jpg&amp;diff=14027"/>
				<updated>2021-03-09T09:52:44Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Vision de la caméra grâce à PixyMon&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Pixy2.jpg&amp;diff=14026</id>
		<title>Fichier:Pixy2.jpg</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Pixy2.jpg&amp;diff=14026"/>
				<updated>2021-03-09T09:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Caméra Pixy2 sur le socle du robot.&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14021</id>
		<title>RobotiqueCoupeGEII2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14021"/>
				<updated>2021-03-09T09:25:32Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Le but du robot est d’envoyer un maximum de balle dans le camp adverse sans jamais y entrer et sans contrôler plus d’une balle à la fois. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties se dérouleront sur un terrain de 8 mètres par 4, divisé en deux parties par une ligne blanche centrale de 67cm de large donc notre robot aura une surface de 4 mètres par 4, soit 16m²  pour se déplacer.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les parties auront une durée de 90 secondes à l’issu desquelles notre robot devra se déplacer jusqu'à la ligne blanche centrale, sans pour autant la dépasser, puis arrêter ses moteurs et crever le  ballon qui sera accroché à son socle, à 30cm du sol minimum.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notre robot devra être totalement autonome et en aucun cas ne pourra être téléopéré. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous devons toutefois faire face à quelques obligations :&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Aucune tension ne doit dépasser 24V. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot ne peut avoir que 2 roues motrices. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La distance entre ces 2 roues doit être inférieure à 30 cm.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La batterie ne doit être ni au lithium-polymère, ni au lithium-cobalts.  &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le propulseur de balle ne doit sortir du robot uniquement pour un tir, et doit revenir se ranger lorsque son tir est terminé. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour se faire, nous avons séparer les différentes parties sous la forme suivante :&amp;lt;br&amp;gt;&lt;br /&gt;
 Lachiri Iyad : Caméra Pixy2, Boussole &amp;amp; création physique. &amp;lt;br&amp;gt;&lt;br /&gt;
 Sciré Morgane : Crève-ballon.&amp;lt;br&amp;gt;&lt;br /&gt;
 Mathieu Anthony : Fonction frapper la balle &amp;amp; la retenir &amp;lt;br&amp;gt;&lt;br /&gt;
 Garnier Clément : Détecter les lignes &amp;amp; créer un compte à rebours&amp;lt;br&amp;gt;&lt;br /&gt;
 Lescasse Enzo : Fonction se déplacer &amp;amp; mise en commun des différents programmes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Fonctionnement du robot}}==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Exemple.jpg|Description 1&lt;br /&gt;
[[Fichier:Capture d’écran 2021-03-09 10-21-10.png|vignette]]&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fonctionnement du robot devra se dérouler comme ci-dessus exactement, lors de ce compte-rendu, nous détaillerons donc les actions dans l'ordre où elles interviendront sur le fonctionnement du robot.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Découpage fonctionnel}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Decodeur fil pilote fonctions.jpg|800px||découpage fonctionnel]]&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Contraintes de fabrication}}==&lt;br /&gt;
&lt;br /&gt;
La carte utilisera un microcontrôleur ATtiny2313.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le signal issu du fil pilote sera isolé par un optocoupleur.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les six modes de fonctionnement seront matérialisés par six LED.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2021-03-09_10-21-10.png&amp;diff=14020</id>
		<title>Fichier:Capture d’écran 2021-03-09 10-21-10.png</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2021-03-09_10-21-10.png&amp;diff=14020"/>
				<updated>2021-03-09T09:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Algorithme du fonctionnement&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	<entry>
		<id>http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14016</id>
		<title>RobotiqueCoupeGEII2</title>
		<link rel="alternate" type="text/html" href="http://wikigeii.iut-troyes.univ-reims.fr//index.php?title=RobotiqueCoupeGEII2&amp;diff=14016"/>
				<updated>2021-03-09T09:01:41Z</updated>
		
		<summary type="html">&lt;p&gt;Robotique2 2 : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Catégorie:Projets]]&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
&lt;br /&gt;
Un fil pilote est un conducteur utilisé pour transmettre des commandes à des appareils raccordés sur le secteur.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les commandes envoyées sur le fil pilote permettent de définir le mode de fonctionnement des appareils qui les reçoivent.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'avantage du fil pilote est que l'information n'est transmise que sur un seul fil, le retour étant assuré par le conducteur &amp;quot;Neutre&amp;quot; qui est aussi utilisé pour alimenter l'appareil.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le signal envoyé sur le fil pilote est généré par un appareil spécifique. Les signaux de commande ont la particularité d'être &amp;quot;fabriqués&amp;quot; directement à partir de la tension 230V du réseau.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Fil-pilote.gif|500px||signaux de commande]]&lt;br /&gt;
[[Fichier:Fil pilote principe.jpg|500px||principe d'une commande par fil pilote]]&lt;br /&gt;
&lt;br /&gt;
Par exemple, les radiateurs électriques raccordés à un même fil pilote, pourront basculer simultanément du mode &amp;quot;Hors gel&amp;quot; au mode &amp;quot;Eco&amp;quot;.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Objectif}}==&lt;br /&gt;
&lt;br /&gt;
Le projet consiste à fabriquer une carte électronique capable de décoder les signaux de commande et d'afficher le signal transmis à l'aide d'une led.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Découpage fonctionnel}}==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Decodeur fil pilote fonctions.jpg|800px||découpage fonctionnel]]&lt;br /&gt;
&lt;br /&gt;
=={{Bleu|Contraintes de fabrication}}==&lt;br /&gt;
&lt;br /&gt;
La carte utilisera un microcontrôleur ATtiny2313.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le signal issu du fil pilote sera isolé par un optocoupleur.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les six modes de fonctionnement seront matérialisés par six LED.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
={{Rouge|Travail attendu}}=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! A !! Ze !! E&lt;br /&gt;
|-&lt;br /&gt;
| Ta || Tzle || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|-&lt;br /&gt;
| Texte de la cellule || Texte de la cellule || Texte de la cellule&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Robotique2 2</name></author>	</entry>

	</feed>