<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://peip-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Flefevre</id>
		<title>Wiki de bureau d'études PeiP - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://peip-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Flefevre"/>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Flefevre"/>
		<updated>2026-04-24T19:31:05Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4246</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4246"/>
				<updated>2015-05-27T16:21:07Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:Pince3.jpg|300px|thumb|center|Pince final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
Les capteurs sont très importants. En effet, ils nous permettent de faire réaliser des actions au robot en fonction de ce qu'ils &amp;quot;voient&amp;quot;. Tout les capteurs doivent être initialisé :&lt;br /&gt;
  SetSensorLowspeed(IN_1) et SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600)   &lt;br /&gt;
*pour le capteur infrarouge. (MODE_1200 si on veut capteur du 1200Hz).&lt;br /&gt;
  SetSensorUltrasonic(IN_2)   &lt;br /&gt;
*pour le capteur d'ultrasons.&lt;br /&gt;
  SetSensorMSPressure(IN_4)   &lt;br /&gt;
*pour le capteur de pression.&lt;br /&gt;
  SetSensorColorFull(IN_3)   &lt;br /&gt;
*pour le capteur de couleur.&lt;br /&gt;
&lt;br /&gt;
Voici donc les différent capteurs que nous utilisons.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Captcouleur.JPG|150px|thumb|left|Le capteur de couleur dans sa place finale]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur. Par exemple, le robot peut suivre une bande de couleur grâce à ce capteur. &lt;br /&gt;
&lt;br /&gt;
Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. Afin de la placer correctement, nous avons du en plus prendre en compte la hauteur du capteur : en effet, si le capteur est trop haut, il a du mal a détecter les bonnes couleurs, ce qui pose un problème évident à l’exécution du programme. &lt;br /&gt;
&lt;br /&gt;
Nous avons finalement ajouté une collerette sur le capteur afin que ce dernier puissent détecter les couleur avec encore plus de précision.&lt;br /&gt;
[[Fichier:Capteurus.JPG|150px|thumb|right|Le capteur d'Ulstrasons]]&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle. En effet, comme le capteur infrarouge est défaillant à faible distance (il détecte la balle dans plusieurs direction et nous ne pouvons pas l'utiliser), le capteur à ultrasons voit alors si la balle est assez proche ou non pour être capturée. &lt;br /&gt;
&lt;br /&gt;
Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. Nous avons choisi un angle spécial en faisait plusieurs essai : le capteur devait voir la balle assez proche, et en même temps ne pas détecter le sol.&lt;br /&gt;
[[Fichier:Capteurir.JPG|150px|thumb|left|Capteur Infrarouge]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente (1200Hz pour les buts et 600Hz pour la balle). &lt;br /&gt;
&lt;br /&gt;
Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour augmenter sa distance de détection. Nous avons placé comme pour le capteur de couleur, une collerette autour du capteur, car dans certains de nos essais, nous avons remarqué que le capteur captait bien la balle, mais les buts venait gêner lorsqu'ils étaient trop près. Le capteur ressemble donc à ceci :&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Le capteur de pression renvoie la valeur 0 lorsqu'il n'y a rien qui appuie dessus. Il renvoie 33 si une pression est exercée sur lui.&lt;br /&gt;
&lt;br /&gt;
Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande de la rigueur, nous avons donc renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:capteurpress.JPG|Capteur de pression&lt;br /&gt;
file:fixationcapteur.JPG|Fixations renforcées du capteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robotfinal.JPG|300px|thumb|center|Le robot final]]&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
La fonction balle est celle qui permet au robot de trouver la balle, grâce à l'infrarouge. Premièrement, il faut mettre le capteur en mode 600Hz. Ensuite, nous allons tester la valeur &amp;quot;dir&amp;quot; (voir partie sur le capteur IR), suivant cette valeur, le robot va s'orrienter dans une direction ou l'autre pour avoir la balle en face de lui. Une fois ceci fait, il va avancer et basculer dans la sous fonction &amp;quot;Attrape&amp;quot;.&lt;br /&gt;
  sub Balle()                   &lt;br /&gt;
  { &lt;br /&gt;
    SetSensorLowspeed(IN_1);&lt;br /&gt;
    SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600);&lt;br /&gt;
    int dir;&lt;br /&gt;
    byte s1, s3, s5, s7, s9;&lt;br /&gt;
    while(1)&lt;br /&gt;
    {  &lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      if (dir&amp;lt;5)&lt;br /&gt;
      {&lt;br /&gt;
        while (dir !=5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,-70);&lt;br /&gt;
          OnFwd(OUT_B,70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        while (dir != 5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,70);&lt;br /&gt;
          OnFwd(OUT_B,-70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      } &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
Cette sous-fonction est celle qui permet à notre robot d'attraper la balle : l'action principale qui doit être réalisée. Dans un premier temps, nous utilisons la valeur renvoyée par le capteur d'ultrasons : de cette manière, dès que le robot se trouve assez proche de la balle (moins de 10cm), nous activons le moteur C, qui correspond à la pince, et cette dernière capture la balle. &lt;br /&gt;
  sub Attrape()                 &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    int x = SensorUS(IN_2);&lt;br /&gt;
    SetSensorMSPressure(IN_4);&lt;br /&gt;
    int val = SensorMSPressure(IN_4);&lt;br /&gt;
    if (x&amp;lt;10)&lt;br /&gt;
     {&lt;br /&gt;
        OnFwd(OUT_C,-50);&lt;br /&gt;
        OnFwd(OUT_AB,0);&lt;br /&gt;
        Wait(1000);&lt;br /&gt;
        val = SensorMSPressure(IN_4);&lt;br /&gt;
Enfin, nous testons la valeur renvoyée pas le capteur de pression pour déterminer si le robot à la balle. Si la balle est attrapée, nous passons dans le sous programme suivant. Sinon, la pince se rouvre.&lt;br /&gt;
&lt;br /&gt;
        if (val&amp;gt;0)&lt;br /&gt;
        {&lt;br /&gt;
        Trouve();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
        OnFwd(OUT_C,50);&lt;br /&gt;
        }   &lt;br /&gt;
     } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
La fonction Trouve permet au robot, une fois la balle attrapée, de retrouver les lignes bleues du centre et basculer dans la fonction &amp;quot;Suivre&amp;quot;. Le robot se contente juste de tourner légèrement à chaque fois qu'il se trouve face à un mur, et retombe donc forcément au bout d'un moment sur les lignes bleues. A la base, nous avions programmé le robot pour qu'il se dirige vers l'un des buts grâce à l'infrarouge, fasse demi-tour sur lui-même et qu'il détecte ensuite le but opposé pour avancer dans sa direction et ainsi retombe sur les lignes du centre. Mais à cause d'un problème de capteur, nous avons opté pour une solution plus simple.&lt;br /&gt;
&lt;br /&gt;
  sub Trouve()                   &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
      int x = SensorUS(IN_2);&lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      int cval;&lt;br /&gt;
      unsigned int rawData[], normData[];&lt;br /&gt;
      int scaledData[];&lt;br /&gt;
      SetSensorColorFull(IN_3);&lt;br /&gt;
      int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if(x&amp;lt;22)&lt;br /&gt;
       {&lt;br /&gt;
          OnFwd(OUT_A, -50);&lt;br /&gt;
          OnFwd(OUT_B, 50);&lt;br /&gt;
          Wait(1800);&lt;br /&gt;
       } &lt;br /&gt;
      if (cval==2)&lt;br /&gt;
       {&lt;br /&gt;
         Suivre();&lt;br /&gt;
       }  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
Ici, le robot est capable de suivre une des lignes bleues médianes. Une fois la pastille jaune détectée (centre du terrain), le robot va effectuer un angle droit pour se retrouver sur la ligne bleue perpendiculaire. Cette opération est répétée jusqu'au moment où le robot retombe sur sa base (détection du noir) pour basculer dans la fonction Place. Lors de cette manoeuvre, si à un quelconque moment le robot dévie de la ligne qu'il doit suivre, il bascule dans la fonction ChercheCouleur pour revenir sur celle-ci.&lt;br /&gt;
&lt;br /&gt;
  sub Suivre()                   &lt;br /&gt;
  {&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
     int cval;&lt;br /&gt;
     unsigned int rawData[], normData[];&lt;br /&gt;
     int scaledData[];&lt;br /&gt;
     SetSensorColorFull(IN_3);&lt;br /&gt;
     int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
     if (cval == 2)                  &lt;br /&gt;
      {&lt;br /&gt;
      while (cval == 2)&lt;br /&gt;
             { &lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              OnFwd(OUT_AB, 100);&lt;br /&gt;
              if (cval == 4)                   &lt;br /&gt;
               {&lt;br /&gt;
                 OnFwd(OUT_AB, 100);       &lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 OnFwd(OUT_A,-70);         &lt;br /&gt;
                 OnFwd(OUT_B,70);&lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                 while (cval != 2)&lt;br /&gt;
                 {&lt;br /&gt;
                   result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                   OnFwd(OUT_A,-70);&lt;br /&gt;
                   OnFwd(OUT_B,70);&lt;br /&gt;
                 }&lt;br /&gt;
               }&lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              if (cval == 1)&lt;br /&gt;
                {&lt;br /&gt;
                  Place();&lt;br /&gt;
                } &lt;br /&gt;
             }&lt;br /&gt;
      }     &lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
       ChercheCouleur();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
Grâce à cette fonction, le robot peut retrouver la ligne dont il suivait la trajectoire et de laquelle il avait légèrement dévié. En effet, le robot effectue des rotations d'abord d'un côté puis de l'autre avec des angles croissants jusqu'au moment où il détecte de nouveau la couleur bleue. Une fois l'action réalisée, on bascule de nouveau dans la fonction Suivre.&lt;br /&gt;
&lt;br /&gt;
  sub ChercheCouleur()                    &lt;br /&gt;
  {  &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int i;&lt;br /&gt;
    int n = 1; &lt;br /&gt;
    int p = 1000;&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData); &lt;br /&gt;
    while (cval != 2)                    &lt;br /&gt;
     {&lt;br /&gt;
      for(i=0;i&amp;lt;10;i++)                   &lt;br /&gt;
     {&lt;br /&gt;
      OnFwd(OUT_A, 60);&lt;br /&gt;
      OnFwd(OUT_B, -60);&lt;br /&gt;
      Wait((n*p)/10);&lt;br /&gt;
      result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if (cval==2)                   &lt;br /&gt;
       {break;}      &lt;br /&gt;
      }&lt;br /&gt;
      if (cval==2)                  &lt;br /&gt;
       {break;}&lt;br /&gt;
      for(i=0;i&amp;lt;20;i++)                  &lt;br /&gt;
      {&lt;br /&gt;
       OnFwd(OUT_B, 60);&lt;br /&gt;
       OnFwd(OUT_A, -60);&lt;br /&gt;
       Wait((n*p)/10);&lt;br /&gt;
       result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);     &lt;br /&gt;
       }&lt;br /&gt;
      n=n+1;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; ===&lt;br /&gt;
Cette fonction permet au robot de déposer la balle au centre du terrain et d'aller se placer ensuite sur sa base. Pour cela, lorsque le robot est sur sa base, il effectue un demi-tour pour se diriger vers la pastille jaune  au centre du terrain et y déposer la balle. Une fois cette opération faite, il recule jusqu'à temps de détecter du noir et d'être donc sur sa base. Nous avons fini par mettre une boucle infinie où le robot ne réalise aucune action car sa tâche se termine dans cette fonction.&lt;br /&gt;
&lt;br /&gt;
  sub Place()                   &lt;br /&gt;
  {                               &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
    while(cval == 2)&lt;br /&gt;
      {&lt;br /&gt;
        result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
        OnFwd(OUT_AB, 70);&lt;br /&gt;
        if (cval == 4)&lt;br /&gt;
          {&lt;br /&gt;
            OnFwd(OUT_A, 0);&lt;br /&gt;
            OnFwd(OUT_B, 0);&lt;br /&gt;
            OnFwd(OUT_C, 50);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, -50);&lt;br /&gt;
            Wait(2000);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(1000);&lt;br /&gt;
          }&lt;br /&gt;
        if (cval == 1)&lt;br /&gt;
          {&lt;br /&gt;
            while (cval == 1)&lt;br /&gt;
              {&lt;br /&gt;
                result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                OnFwd(OUT_AB,100);&lt;br /&gt;
              }&lt;br /&gt;
            OnFwd(OUT_A, -50);&lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(4800);&lt;br /&gt;
            while (1)&lt;br /&gt;
              {&lt;br /&gt;
                OnFwd(OUT_AB, 0);                  &lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Construction du terrain = &lt;br /&gt;
Arrivés à un certain stade dans ce bureau d'étude, nous étions obligé de faire des essais du programme sur le terrain final avec les bandes de couleur et les buts. Cependant rien n'était encore fait, et d'autres groupes étaient dans le même cas que nous. C'est donc pour cela que nous avons décidé de se lancer dans la construction du terrain ensemble.&lt;br /&gt;
Pour cela, nous avons utilisé 4 plaques identiques de 1,5m sur 1m sans les attacher les unes aux autres pour pouvoir ranger le terrain sans soucis. Nous avons ensuite pris les mesures pour placer les rubans adhésifs de couleurs différentes comme sur le plan établi avec soin et en accord avec tous les groupes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Terrainbe.JPG|200px|thumb|center|Terrain final]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Le bureau d'étude IMA nous a fourni une expérience intéressante. Effectivement, nous avons appris à gérer notre temps comme nous avions un travail à rendre après 40h de BE. Il fallait être efficace et ne pas perdre de temps sur des choses inutiles. Ensuite, il fallait également faire en fonction des contraintes liées au matériel (imprécision des capteurs) et des instructions fournies puisqu'il y avait un cahier des charges à respecter. Nous avons donc eu une idée de projet qui pourrait se réaliser dans nos prochaines années. Pour finir, le bureau d'étude n'a fait que conforter notre choix concernant le choix de notre spécialité pour l'année prochaine.&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4245</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4245"/>
				<updated>2015-05-27T16:11:24Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : /* Conclusion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:Pince3.jpg|300px|thumb|center|Pince final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
Les capteurs sont très importants. En effet, ils nous permettent de faire réaliser des actions au robot en fonction de ce qu'ils &amp;quot;voient&amp;quot;. Tout les capteurs doivent être initialisé :&lt;br /&gt;
  SetSensorLowspeed(IN_1) et SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600)   &lt;br /&gt;
*pour le capteur infrarouge. (MODE_1200 si on veut capteur du 1200Hz).&lt;br /&gt;
  SetSensorUltrasonic(IN_2)   &lt;br /&gt;
*pour le capteur d'ultrasons.&lt;br /&gt;
  SetSensorMSPressure(IN_4)   &lt;br /&gt;
*pour le capteur de pression.&lt;br /&gt;
  SetSensorColorFull(IN_3)   &lt;br /&gt;
*pour le capteur de couleur.&lt;br /&gt;
&lt;br /&gt;
Voici donc les différent capteurs que nous utilisons.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Captcouleur.JPG|150px|thumb|left|Le capteur de couleur dans sa place finale]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur. Par exemple, le robot peut suivre une bande de couleur grâce à ce capteur. &lt;br /&gt;
&lt;br /&gt;
Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. Afin de la placer correctement, nous avons du en plus prendre en compte la hauteur du capteur : en effet, si le capteur est trop haut, il a du mal a détecter les bonnes couleurs, ce qui pose un problème évident à l’exécution du programme. &lt;br /&gt;
&lt;br /&gt;
Nous avons finalement ajouté une collerette sur le capteur afin que ce dernier puissent détecter les couleur avec encore plus de précision.&lt;br /&gt;
[[Fichier:Capteurus.JPG|150px|thumb|right|Le capteur d'Ulstrasons]]&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle. En effet, comme le capteur infrarouge est défaillant à faible distance (il détecte la balle dans plusieurs direction et nous ne pouvons pas l'utiliser), le capteur à ultrasons voit alors si la balle est assez proche ou non pour être capturée. &lt;br /&gt;
&lt;br /&gt;
Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. Nous avons choisi un angle spécial en faisait plusieurs essai : le capteur devait voir la balle assez proche, et en même temps ne pas détecter le sol.&lt;br /&gt;
[[Fichier:Capteurir.JPG|150px|thumb|left|Capteur Infrarouge]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente (1200Hz pour les buts et 600Hz pour la balle). &lt;br /&gt;
&lt;br /&gt;
Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour augmenter sa distance de détection. Nous avons placé comme pour le capteur de couleur, une collerette autour du capteur, car dans certains de nos essais, nous avons remarqué que le capteur captait bien la balle, mais les buts venait gêner lorsqu'ils étaient trop près. Le capteur ressemble donc à ceci :&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Le capteur de pression renvoie la valeur 0 lorsqu'il n'y a rien qui appuie dessus. Il renvoie 33 si une pression est exercée sur lui.&lt;br /&gt;
&lt;br /&gt;
Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande de la rigueur, nous avons donc renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:capteurpress.JPG|Capteur de pression&lt;br /&gt;
file:fixationcapteur.JPG|Fixations renforcées du capteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robotfinal.JPG|300px|thumb|center|Le robot final]]&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
La fonction balle est celle qui permet au robot de trouver la balle, grâce à l'infrarouge. Premièrement, il faut mettre le capteur en mode 600Hz. Ensuite, nous allons tester la valeur &amp;quot;dir&amp;quot; (voir partie sur le capteur IR), suivant cette valeur, le robot va s'orrienter dans une direction ou l'autre pour avoir la balle en face de lui. Une fois ceci fait, il va avancer et basculer dans la sous fonction &amp;quot;Attrape&amp;quot;.&lt;br /&gt;
  sub Balle()                   &lt;br /&gt;
  { &lt;br /&gt;
    SetSensorLowspeed(IN_1);&lt;br /&gt;
    SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600);&lt;br /&gt;
    int dir;&lt;br /&gt;
    byte s1, s3, s5, s7, s9;&lt;br /&gt;
    while(1)&lt;br /&gt;
    {  &lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      if (dir&amp;lt;5)&lt;br /&gt;
      {&lt;br /&gt;
        while (dir !=5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,-70);&lt;br /&gt;
          OnFwd(OUT_B,70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        while (dir != 5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,70);&lt;br /&gt;
          OnFwd(OUT_B,-70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      } &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
Cette sous-fonction est celle qui permet à notre robot d'attraper la balle : l'action principale qui doit être réalisée. Dans un premier temps, nous utilisons la valeur renvoyée par le capteur d'ultrasons : de cette manière, dès que le robot se trouve assez proche de la balle (moins de 10cm), nous activons le moteur C, qui correspond à la pince, et cette dernière capture la balle. &lt;br /&gt;
  sub Attrape()                 &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    int x = SensorUS(IN_2);&lt;br /&gt;
    SetSensorMSPressure(IN_4);&lt;br /&gt;
    int val = SensorMSPressure(IN_4);&lt;br /&gt;
    if (x&amp;lt;10)&lt;br /&gt;
     {&lt;br /&gt;
        OnFwd(OUT_C,-50);&lt;br /&gt;
        OnFwd(OUT_AB,0);&lt;br /&gt;
        Wait(1000);&lt;br /&gt;
        val = SensorMSPressure(IN_4);&lt;br /&gt;
Enfin, nous testons la valeur renvoyée pas le capteur de pression pour déterminer si le robot à la balle. Si la balle est attrapée, nous passons dans le sous programme suivant. Sinon, la pince se rouvre.&lt;br /&gt;
&lt;br /&gt;
        if (val&amp;gt;0)&lt;br /&gt;
        {&lt;br /&gt;
        Trouve();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
        OnFwd(OUT_C,50);&lt;br /&gt;
        }   &lt;br /&gt;
     } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
La fonction Trouve permet au robot, une fois la balle attrapée, de retrouver les lignes bleues du centre et basculer dans la fonction &amp;quot;Suivre&amp;quot;. Le robot se contente juste de tourner légèrement à chaque fois qu'il se trouve face à un mur, et retombe donc forcément au bout d'un moment sur les lignes bleues. A la base, nous avions programmé le robot pour qu'il se dirige vers l'un des buts grâce à l'infrarouge, fasse demi-tour sur lui-même et qu'il détecte ensuite le but opposé pour avancer dans sa direction et ainsi retombe sur les lignes du centre. Mais à cause d'un problème de capteur, nous avons opté pour une solution plus simple.&lt;br /&gt;
&lt;br /&gt;
  sub Trouve()                   &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
      int x = SensorUS(IN_2);&lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      int cval;&lt;br /&gt;
      unsigned int rawData[], normData[];&lt;br /&gt;
      int scaledData[];&lt;br /&gt;
      SetSensorColorFull(IN_3);&lt;br /&gt;
      int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if(x&amp;lt;22)&lt;br /&gt;
       {&lt;br /&gt;
          OnFwd(OUT_A, -50);&lt;br /&gt;
          OnFwd(OUT_B, 50);&lt;br /&gt;
          Wait(1800);&lt;br /&gt;
       } &lt;br /&gt;
      if (cval==2)&lt;br /&gt;
       {&lt;br /&gt;
         Suivre();&lt;br /&gt;
       }  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
Ici, le robot est capable de suivre une des lignes bleues médianes. Une fois la pastille jaune détectée (centre du terrain), le robot va effectuer un angle droit pour se retrouver sur la ligne bleue perpendiculaire. Cette opération est répétée jusqu'au moment où le robot retombe sur sa base (détection du noir) pour basculer dans la fonction Place. Lors de cette manoeuvre, si à un quelconque moment le robot dévie de la ligne qu'il doit suivre, il bascule dans la fonction ChercheCouleur pour revenir sur celle-ci.&lt;br /&gt;
&lt;br /&gt;
  sub Suivre()                   &lt;br /&gt;
  {&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
     int cval;&lt;br /&gt;
     unsigned int rawData[], normData[];&lt;br /&gt;
     int scaledData[];&lt;br /&gt;
     SetSensorColorFull(IN_3);&lt;br /&gt;
     int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
     if (cval == 2)                  &lt;br /&gt;
      {&lt;br /&gt;
      while (cval == 2)&lt;br /&gt;
             { &lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              OnFwd(OUT_AB, 100);&lt;br /&gt;
              if (cval == 4)                   &lt;br /&gt;
               {&lt;br /&gt;
                 OnFwd(OUT_AB, 100);       &lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 OnFwd(OUT_A,-70);         &lt;br /&gt;
                 OnFwd(OUT_B,70);&lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                 while (cval != 2)&lt;br /&gt;
                 {&lt;br /&gt;
                   result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                   OnFwd(OUT_A,-70);&lt;br /&gt;
                   OnFwd(OUT_B,70);&lt;br /&gt;
                 }&lt;br /&gt;
               }&lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              if (cval == 1)&lt;br /&gt;
                {&lt;br /&gt;
                  Place();&lt;br /&gt;
                } &lt;br /&gt;
             }&lt;br /&gt;
      }     &lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
       ChercheCouleur();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub ChercheCouleur()                    &lt;br /&gt;
  {  &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int i;&lt;br /&gt;
    int n = 1; &lt;br /&gt;
    int p = 1000;&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData); &lt;br /&gt;
    while (cval != 2)                    &lt;br /&gt;
     {&lt;br /&gt;
      for(i=0;i&amp;lt;10;i++)                   &lt;br /&gt;
     {&lt;br /&gt;
      OnFwd(OUT_A, 60);&lt;br /&gt;
      OnFwd(OUT_B, -60);&lt;br /&gt;
      Wait((n*p)/10);&lt;br /&gt;
      result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if (cval==2)                   &lt;br /&gt;
       {break;}      &lt;br /&gt;
      }&lt;br /&gt;
      if (cval==2)                  &lt;br /&gt;
       {break;}&lt;br /&gt;
      for(i=0;i&amp;lt;20;i++)                  &lt;br /&gt;
      {&lt;br /&gt;
       OnFwd(OUT_B, 60);&lt;br /&gt;
       OnFwd(OUT_A, -60);&lt;br /&gt;
       Wait((n*p)/10);&lt;br /&gt;
       result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);     &lt;br /&gt;
       }&lt;br /&gt;
      n=n+1;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub Place()                   &lt;br /&gt;
  {                               &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
    while(cval == 2)&lt;br /&gt;
      {&lt;br /&gt;
        result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
        OnFwd(OUT_AB, 70);&lt;br /&gt;
        if (cval == 4)&lt;br /&gt;
          {&lt;br /&gt;
            OnFwd(OUT_A, 0);&lt;br /&gt;
            OnFwd(OUT_B, 0);&lt;br /&gt;
            OnFwd(OUT_C, 50);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, -50);&lt;br /&gt;
            Wait(2000);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(1000);&lt;br /&gt;
          }&lt;br /&gt;
        if (cval == 1)&lt;br /&gt;
          {&lt;br /&gt;
            while (cval == 1)&lt;br /&gt;
              {&lt;br /&gt;
                result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                OnFwd(OUT_AB,100);&lt;br /&gt;
              }&lt;br /&gt;
            OnFwd(OUT_A, -50);&lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(4800);&lt;br /&gt;
            while (1)&lt;br /&gt;
              {&lt;br /&gt;
                OnFwd(OUT_AB, 0);                  &lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Construction du terrain = &lt;br /&gt;
Arrivés à un certain stade dans ce bureau d'étude, nous étions obligé de faire des essais du programme sur le terrain final avec les bandes de couleur et les buts. Cependant rien n'était encore fait, et d'autres groupes étaient dans le même cas que nous. C'est donc pour cela que nous avons décidé de se lancer dans la construction du terrain ensemble.&lt;br /&gt;
Pour cela, nous avons utilisé 4 plaques identiques de 1,5m sur 1m sans les attacher les unes aux autres pour pouvoir ranger le terrain sans soucis. Nous avons ensuite pris les mesures pour placer les rubans adhésifs de couleurs différentes comme sur le plan établi avec soin et en accord avec tous les groupes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Terrainbe.JPG|200px|thumb|center|Terrain final]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
Le bureau d'étude IMA nous a fourni une expérience intéressante. Effectivement, nous avons appris à gérer notre temps comme nous avions un travail à rendre après 40h de BE. Il fallait être efficace et ne pas perdre de temps sur des choses inutiles. Ensuite, il fallait également faire en fonction des contraintes liées au matériel (imprécision des capteurs) et des instructions fournies puisqu'il y avait un cahier des charges à respecter. Nous avons donc eu une idée de projet qui pourrait se réaliser dans nos prochaines années. Pour finir, le bureau d'étude n'a fait que conforter notre choix concernant le choix de notre spécialité pour l'année prochaine.&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4244</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4244"/>
				<updated>2015-05-27T15:57:34Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : /* Construction du terrain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:Pince3.jpg|300px|thumb|center|Pince final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
Les capteurs sont très importants. En effet, ils nous permettent de faire réaliser des actions au robot en fonction de ce qu'ils &amp;quot;voient&amp;quot;. Tout les capteurs doivent être initialisé :&lt;br /&gt;
  SetSensorLowspeed(IN_1) et SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600)   &lt;br /&gt;
*pour le capteur infrarouge. (MODE_1200 si on veut capteur du 1200Hz).&lt;br /&gt;
  SetSensorUltrasonic(IN_2)   &lt;br /&gt;
*pour le capteur d'ultrasons.&lt;br /&gt;
  SetSensorMSPressure(IN_4)   &lt;br /&gt;
*pour le capteur de pression.&lt;br /&gt;
  SetSensorColorFull(IN_3)   &lt;br /&gt;
*pour le capteur de couleur.&lt;br /&gt;
&lt;br /&gt;
Voici donc les différent capteurs que nous utilisons.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Captcouleur.JPG|150px|thumb|left|Le capteur de couleur dans sa place finale]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur. Par exemple, le robot peut suivre une bande de couleur grâce à ce capteur. &lt;br /&gt;
&lt;br /&gt;
Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. Afin de la placer correctement, nous avons du en plus prendre en compte la hauteur du capteur : en effet, si le capteur est trop haut, il a du mal a détecter les bonnes couleurs, ce qui pose un problème évident à l’exécution du programme. &lt;br /&gt;
&lt;br /&gt;
Nous avons finalement ajouté une collerette sur le capteur afin que ce dernier puissent détecter les couleur avec encore plus de précision.&lt;br /&gt;
[[Fichier:Capteurus.JPG|150px|thumb|right|Le capteur d'Ulstrasons]]&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle. En effet, comme le capteur infrarouge est défaillant à faible distance (il détecte la balle dans plusieurs direction et nous ne pouvons pas l'utiliser), le capteur à ultrasons voit alors si la balle est assez proche ou non pour être capturée. &lt;br /&gt;
&lt;br /&gt;
Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. Nous avons choisi un angle spécial en faisait plusieurs essai : le capteur devait voir la balle assez proche, et en même temps ne pas détecter le sol.&lt;br /&gt;
[[Fichier:Capteurir.JPG|150px|thumb|left|Capteur Infrarouge]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente (1200Hz pour les buts et 600Hz pour la balle). &lt;br /&gt;
&lt;br /&gt;
Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour augmenter sa distance de détection. Nous avons placé comme pour le capteur de couleur, une collerette autour du capteur, car dans certains de nos essais, nous avons remarqué que le capteur captait bien la balle, mais les buts venait gêner lorsqu'ils étaient trop près. Le capteur ressemble donc à ceci :&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Le capteur de pression renvoie la valeur 0 lorsqu'il n'y a rien qui appuie dessus. Il renvoie 33 si une pression est exercée sur lui.&lt;br /&gt;
&lt;br /&gt;
Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande de la rigueur, nous avons donc renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:capteurpress.JPG|Capteur de pression&lt;br /&gt;
file:fixationcapteur.JPG|Fixations renforcées du capteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robotfinal.JPG|300px|thumb|center|Le robot final]]&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
La fonction balle est celle qui permet au robot de trouver la balle, grâce à l'infrarouge. Premièrement, il faut mettre le capteur en mode 600Hz. Ensuite, nous allons tester la valeur &amp;quot;dir&amp;quot; (voir partie sur le capteur IR), suivant cette valeur, le robot va s'orrienter dans une direction ou l'autre pour avoir la balle en face de lui. Une fois ceci fait, il va avancer et basculer dans la sous fonction &amp;quot;Attrape&amp;quot;.&lt;br /&gt;
  sub Balle()                   &lt;br /&gt;
  { &lt;br /&gt;
    SetSensorLowspeed(IN_1);&lt;br /&gt;
    SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600);&lt;br /&gt;
    int dir;&lt;br /&gt;
    byte s1, s3, s5, s7, s9;&lt;br /&gt;
    while(1)&lt;br /&gt;
    {  &lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      if (dir&amp;lt;5)&lt;br /&gt;
      {&lt;br /&gt;
        while (dir !=5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,-70);&lt;br /&gt;
          OnFwd(OUT_B,70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        while (dir != 5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,70);&lt;br /&gt;
          OnFwd(OUT_B,-70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      } &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
Cette sous-fonction est celle qui permet à notre robot d'attraper la balle : l'action principale qui doit être réalisée. Dans un premier temps, nous utilisons la valeur renvoyée par le capteur d'ultrasons : de cette manière, dès que le robot se trouve assez proche de la balle (moins de 10cm), nous activons le moteur C, qui correspond à la pince, et cette dernière capture la balle. &lt;br /&gt;
  sub Attrape()                 &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    int x = SensorUS(IN_2);&lt;br /&gt;
    SetSensorMSPressure(IN_4);&lt;br /&gt;
    int val = SensorMSPressure(IN_4);&lt;br /&gt;
    if (x&amp;lt;10)&lt;br /&gt;
     {&lt;br /&gt;
        OnFwd(OUT_C,-50);&lt;br /&gt;
        OnFwd(OUT_AB,0);&lt;br /&gt;
        Wait(1000);&lt;br /&gt;
        val = SensorMSPressure(IN_4);&lt;br /&gt;
Enfin, nous testons la valeur renvoyée pas le capteur de pression pour déterminer si le robot à la balle. Si la balle est attrapée, nous passons dans le sous programme suivant. Sinon, la pince se rouvre.&lt;br /&gt;
&lt;br /&gt;
        if (val&amp;gt;0)&lt;br /&gt;
        {&lt;br /&gt;
        Trouve();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
        OnFwd(OUT_C,50);&lt;br /&gt;
        }   &lt;br /&gt;
     } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
La fonction Trouve permet au robot, une fois la balle attrapée, de retrouver les lignes bleues du centre et basculer dans la fonction &amp;quot;Suivre&amp;quot;. Le robot se contente juste de tourner légèrement à chaque fois qu'il se trouve face à un mur, et retombe donc forcément au bout d'un moment sur les lignes bleues. A la base, nous avions programmé le robot pour qu'il se dirige vers l'un des buts grâce à l'infrarouge, fasse demi-tour sur lui-même et qu'il détecte ensuite le but opposé pour avancer dans sa direction et ainsi retombe sur les lignes du centre. Mais à cause d'un problème de capteur, nous avons opté pour une solution plus simple.&lt;br /&gt;
&lt;br /&gt;
  sub Trouve()                   &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
      int x = SensorUS(IN_2);&lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      int cval;&lt;br /&gt;
      unsigned int rawData[], normData[];&lt;br /&gt;
      int scaledData[];&lt;br /&gt;
      SetSensorColorFull(IN_3);&lt;br /&gt;
      int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if(x&amp;lt;22)&lt;br /&gt;
       {&lt;br /&gt;
          OnFwd(OUT_A, -50);&lt;br /&gt;
          OnFwd(OUT_B, 50);&lt;br /&gt;
          Wait(1800);&lt;br /&gt;
       } &lt;br /&gt;
      if (cval==2)&lt;br /&gt;
       {&lt;br /&gt;
         Suivre();&lt;br /&gt;
       }  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
Ici, le robot est capable de suivre une des lignes bleues médianes. Une fois la pastille jaune détectée (centre du terrain), le robot va effectuer un angle droit pour se retrouver sur la ligne bleue perpendiculaire. Cette opération est répétée jusqu'au moment où le robot retombe sur sa base (détection du noir) pour basculer dans la fonction Place. Lors de cette manoeuvre, si à un quelconque moment le robot dévie de la ligne qu'il doit suivre, il bascule dans la fonction ChercheCouleur pour revenir sur celle-ci.&lt;br /&gt;
&lt;br /&gt;
  sub Suivre()                   &lt;br /&gt;
  {&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
     int cval;&lt;br /&gt;
     unsigned int rawData[], normData[];&lt;br /&gt;
     int scaledData[];&lt;br /&gt;
     SetSensorColorFull(IN_3);&lt;br /&gt;
     int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
     if (cval == 2)                  &lt;br /&gt;
      {&lt;br /&gt;
      while (cval == 2)&lt;br /&gt;
             { &lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              OnFwd(OUT_AB, 100);&lt;br /&gt;
              if (cval == 4)                   &lt;br /&gt;
               {&lt;br /&gt;
                 OnFwd(OUT_AB, 100);       &lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 OnFwd(OUT_A,-70);         &lt;br /&gt;
                 OnFwd(OUT_B,70);&lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                 while (cval != 2)&lt;br /&gt;
                 {&lt;br /&gt;
                   result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                   OnFwd(OUT_A,-70);&lt;br /&gt;
                   OnFwd(OUT_B,70);&lt;br /&gt;
                 }&lt;br /&gt;
               }&lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              if (cval == 1)&lt;br /&gt;
                {&lt;br /&gt;
                  Place();&lt;br /&gt;
                } &lt;br /&gt;
             }&lt;br /&gt;
      }     &lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
       ChercheCouleur();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub ChercheCouleur()                    &lt;br /&gt;
  {  &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int i;&lt;br /&gt;
    int n = 1; &lt;br /&gt;
    int p = 1000;&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData); &lt;br /&gt;
    while (cval != 2)                    &lt;br /&gt;
     {&lt;br /&gt;
      for(i=0;i&amp;lt;10;i++)                   &lt;br /&gt;
     {&lt;br /&gt;
      OnFwd(OUT_A, 60);&lt;br /&gt;
      OnFwd(OUT_B, -60);&lt;br /&gt;
      Wait((n*p)/10);&lt;br /&gt;
      result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if (cval==2)                   &lt;br /&gt;
       {break;}      &lt;br /&gt;
      }&lt;br /&gt;
      if (cval==2)                  &lt;br /&gt;
       {break;}&lt;br /&gt;
      for(i=0;i&amp;lt;20;i++)                  &lt;br /&gt;
      {&lt;br /&gt;
       OnFwd(OUT_B, 60);&lt;br /&gt;
       OnFwd(OUT_A, -60);&lt;br /&gt;
       Wait((n*p)/10);&lt;br /&gt;
       result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);     &lt;br /&gt;
       }&lt;br /&gt;
      n=n+1;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub Place()                   &lt;br /&gt;
  {                               &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
    while(cval == 2)&lt;br /&gt;
      {&lt;br /&gt;
        result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
        OnFwd(OUT_AB, 70);&lt;br /&gt;
        if (cval == 4)&lt;br /&gt;
          {&lt;br /&gt;
            OnFwd(OUT_A, 0);&lt;br /&gt;
            OnFwd(OUT_B, 0);&lt;br /&gt;
            OnFwd(OUT_C, 50);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, -50);&lt;br /&gt;
            Wait(2000);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(1000);&lt;br /&gt;
          }&lt;br /&gt;
        if (cval == 1)&lt;br /&gt;
          {&lt;br /&gt;
            while (cval == 1)&lt;br /&gt;
              {&lt;br /&gt;
                result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                OnFwd(OUT_AB,100);&lt;br /&gt;
              }&lt;br /&gt;
            OnFwd(OUT_A, -50);&lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(4800);&lt;br /&gt;
            while (1)&lt;br /&gt;
              {&lt;br /&gt;
                OnFwd(OUT_AB, 0);                  &lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Construction du terrain = &lt;br /&gt;
Arrivés à un certain stade dans ce bureau d'étude, nous étions obligé de faire des essais du programme sur le terrain final avec les bandes de couleur et les buts. Cependant rien n'était encore fait, et d'autres groupes étaient dans le même cas que nous. C'est donc pour cela que nous avons décidé de se lancer dans la construction du terrain ensemble.&lt;br /&gt;
Pour cela, nous avons utilisé 4 plaques identiques de 1,5m sur 1m sans les attacher les unes aux autres pour pouvoir ranger le terrain sans soucis. Nous avons ensuite pris les mesures pour placer les rubans adhésifs de couleurs différentes comme sur le plan établi avec soin et en accord avec tous les groupes.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Terrainbe.JPG|200px|thumb|center|Terrain final]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4243</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4243"/>
				<updated>2015-05-27T15:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:Pince3.jpg|300px|thumb|center|Pince final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
Les capteurs sont très importants. En effet, ils nous permettent de faire réaliser des actions au robot en fonction de ce qu'ils &amp;quot;voient&amp;quot;. Tout les capteurs doivent être initialisé :&lt;br /&gt;
  SetSensorLowspeed(IN_1) et SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600)   &lt;br /&gt;
*pour le capteur infrarouge. (MODE_1200 si on veut capteur du 1200Hz).&lt;br /&gt;
  SetSensorUltrasonic(IN_2)   &lt;br /&gt;
*pour le capteur d'ultrasons.&lt;br /&gt;
  SetSensorMSPressure(IN_4)   &lt;br /&gt;
*pour le capteur de pression.&lt;br /&gt;
  SetSensorColorFull(IN_3)   &lt;br /&gt;
*pour le capteur de couleur.&lt;br /&gt;
&lt;br /&gt;
Voici donc les différent capteurs que nous utilisons.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Captcouleur.JPG|150px|thumb|left|Le capteur de couleur dans sa place finale]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur. Par exemple, le robot peut suivre une bande de couleur grâce à ce capteur. &lt;br /&gt;
&lt;br /&gt;
Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. Afin de la placer correctement, nous avons du en plus prendre en compte la hauteur du capteur : en effet, si le capteur est trop haut, il a du mal a détecter les bonnes couleurs, ce qui pose un problème évident à l’exécution du programme. &lt;br /&gt;
&lt;br /&gt;
Nous avons finalement ajouté une collerette sur le capteur afin que ce dernier puissent détecter les couleur avec encore plus de précision.&lt;br /&gt;
[[Fichier:Capteurus.JPG|150px|thumb|right|Le capteur d'Ulstrasons]]&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle. En effet, comme le capteur infrarouge est défaillant à faible distance (il détecte la balle dans plusieurs direction et nous ne pouvons pas l'utiliser), le capteur à ultrasons voit alors si la balle est assez proche ou non pour être capturée. &lt;br /&gt;
&lt;br /&gt;
Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. Nous avons choisi un angle spécial en faisait plusieurs essai : le capteur devait voir la balle assez proche, et en même temps ne pas détecter le sol.&lt;br /&gt;
[[Fichier:Capteurir.JPG|150px|thumb|left|Capteur Infrarouge]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente (1200Hz pour les buts et 600Hz pour la balle). &lt;br /&gt;
&lt;br /&gt;
Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour augmenter sa distance de détection. Nous avons placé comme pour le capteur de couleur, une collerette autour du capteur, car dans certains de nos essais, nous avons remarqué que le capteur captait bien la balle, mais les buts venait gêner lorsqu'ils étaient trop près. Le capteur ressemble donc à ceci :&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Le capteur de pression renvoie la valeur 0 lorsqu'il n'y a rien qui appuie dessus. Il renvoie 33 si une pression est exercée sur lui.&lt;br /&gt;
&lt;br /&gt;
Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande de la rigueur, nous avons donc renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:capteurpress.JPG|Capteur de pression&lt;br /&gt;
file:fixationcapteur.JPG|Fixations renforcées du capteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robotfinal.JPG|300px|thumb|center|Le robot final]]&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
La fonction balle est celle qui permet au robot de trouver la balle, grâce à l'infrarouge. Premièrement, il faut mettre le capteur en mode 600Hz. Ensuite, nous allons tester la valeur &amp;quot;dir&amp;quot; (voir partie sur le capteur IR), suivant cette valeur, le robot va s'orrienter dans une direction ou l'autre pour avoir la balle en face de lui. Une fois ceci fait, il va avancer et basculer dans la sous fonction &amp;quot;Attrape&amp;quot;.&lt;br /&gt;
  sub Balle()                   &lt;br /&gt;
  { &lt;br /&gt;
    SetSensorLowspeed(IN_1);&lt;br /&gt;
    SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600);&lt;br /&gt;
    int dir;&lt;br /&gt;
    byte s1, s3, s5, s7, s9;&lt;br /&gt;
    while(1)&lt;br /&gt;
    {  &lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      if (dir&amp;lt;5)&lt;br /&gt;
      {&lt;br /&gt;
        while (dir !=5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,-70);&lt;br /&gt;
          OnFwd(OUT_B,70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        while (dir != 5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,70);&lt;br /&gt;
          OnFwd(OUT_B,-70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      } &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
Cette sous-fonction est celle qui permet à notre robot d'attraper la balle : l'action principale qui doit être réalisée. Dans un premier temps, nous utilisons la valeur renvoyée par le capteur d'ultrasons : de cette manière, dès que le robot se trouve assez proche de la balle (moins de 10cm), nous activons le moteur C, qui correspond à la pince, et cette dernière capture la balle. &lt;br /&gt;
  sub Attrape()                 &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    int x = SensorUS(IN_2);&lt;br /&gt;
    SetSensorMSPressure(IN_4);&lt;br /&gt;
    int val = SensorMSPressure(IN_4);&lt;br /&gt;
    if (x&amp;lt;10)&lt;br /&gt;
     {&lt;br /&gt;
        OnFwd(OUT_C,-50);&lt;br /&gt;
        OnFwd(OUT_AB,0);&lt;br /&gt;
        Wait(1000);&lt;br /&gt;
        val = SensorMSPressure(IN_4);&lt;br /&gt;
Enfin, nous testons la valeur renvoyée pas le capteur de pression pour déterminer si le robot à la balle. Si la balle est attrapée, nous passons dans le sous programme suivant. Sinon, la pince se rouvre.&lt;br /&gt;
&lt;br /&gt;
        if (val&amp;gt;0)&lt;br /&gt;
        {&lt;br /&gt;
        Trouve();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
        OnFwd(OUT_C,50);&lt;br /&gt;
        }   &lt;br /&gt;
     } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
La fonction Trouve permet au robot, une fois la balle attrapée, de retrouver les lignes bleues du centre et basculer dans la fonction &amp;quot;Suivre&amp;quot;. Le robot se contente juste de tourner légèrement à chaque fois qu'il se trouve face à un mur, et retombe donc forcément au bout d'un moment sur les lignes bleues. A la base, nous avions programmé le robot pour qu'il se dirige vers l'un des buts grâce à l'infrarouge, fasse demi-tour sur lui-même et qu'il détecte ensuite le but opposé pour avancer dans sa direction et ainsi retombe sur les lignes du centre. Mais à cause d'un problème de capteur, nous avons opté pour une solution plus simple.&lt;br /&gt;
&lt;br /&gt;
  sub Trouve()                   &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
      int x = SensorUS(IN_2);&lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      int cval;&lt;br /&gt;
      unsigned int rawData[], normData[];&lt;br /&gt;
      int scaledData[];&lt;br /&gt;
      SetSensorColorFull(IN_3);&lt;br /&gt;
      int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if(x&amp;lt;22)&lt;br /&gt;
       {&lt;br /&gt;
          OnFwd(OUT_A, -50);&lt;br /&gt;
          OnFwd(OUT_B, 50);&lt;br /&gt;
          Wait(1800);&lt;br /&gt;
       } &lt;br /&gt;
      if (cval==2)&lt;br /&gt;
       {&lt;br /&gt;
         Suivre();&lt;br /&gt;
       }  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
Ici, le robot est capable de suivre une des lignes bleues médianes. Une fois la pastille jaune détectée (centre du terrain), le robot va effectuer un angle droit pour se retrouver sur la ligne bleue perpendiculaire. Cette opération est répétée jusqu'au moment où le robot retombe sur sa base (détection du noir) pour basculer dans la fonction Place. Lors de cette manoeuvre, si à un quelconque moment le robot dévie de la ligne qu'il doit suivre, il bascule dans la fonction ChercheCouleur pour revenir sur celle-ci.&lt;br /&gt;
&lt;br /&gt;
  sub Suivre()                   &lt;br /&gt;
  {&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
     int cval;&lt;br /&gt;
     unsigned int rawData[], normData[];&lt;br /&gt;
     int scaledData[];&lt;br /&gt;
     SetSensorColorFull(IN_3);&lt;br /&gt;
     int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
     if (cval == 2)                  &lt;br /&gt;
      {&lt;br /&gt;
      while (cval == 2)&lt;br /&gt;
             { &lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              OnFwd(OUT_AB, 100);&lt;br /&gt;
              if (cval == 4)                   &lt;br /&gt;
               {&lt;br /&gt;
                 OnFwd(OUT_AB, 100);       &lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 OnFwd(OUT_A,-70);         &lt;br /&gt;
                 OnFwd(OUT_B,70);&lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                 while (cval != 2)&lt;br /&gt;
                 {&lt;br /&gt;
                   result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                   OnFwd(OUT_A,-70);&lt;br /&gt;
                   OnFwd(OUT_B,70);&lt;br /&gt;
                 }&lt;br /&gt;
               }&lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              if (cval == 1)&lt;br /&gt;
                {&lt;br /&gt;
                  Place();&lt;br /&gt;
                } &lt;br /&gt;
             }&lt;br /&gt;
      }     &lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
       ChercheCouleur();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub ChercheCouleur()                    &lt;br /&gt;
  {  &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int i;&lt;br /&gt;
    int n = 1; &lt;br /&gt;
    int p = 1000;&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData); &lt;br /&gt;
    while (cval != 2)                    &lt;br /&gt;
     {&lt;br /&gt;
      for(i=0;i&amp;lt;10;i++)                   &lt;br /&gt;
     {&lt;br /&gt;
      OnFwd(OUT_A, 60);&lt;br /&gt;
      OnFwd(OUT_B, -60);&lt;br /&gt;
      Wait((n*p)/10);&lt;br /&gt;
      result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if (cval==2)                   &lt;br /&gt;
       {break;}      &lt;br /&gt;
      }&lt;br /&gt;
      if (cval==2)                  &lt;br /&gt;
       {break;}&lt;br /&gt;
      for(i=0;i&amp;lt;20;i++)                  &lt;br /&gt;
      {&lt;br /&gt;
       OnFwd(OUT_B, 60);&lt;br /&gt;
       OnFwd(OUT_A, -60);&lt;br /&gt;
       Wait((n*p)/10);&lt;br /&gt;
       result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);     &lt;br /&gt;
       }&lt;br /&gt;
      n=n+1;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub Place()                   &lt;br /&gt;
  {                               &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
    while(cval == 2)&lt;br /&gt;
      {&lt;br /&gt;
        result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
        OnFwd(OUT_AB, 70);&lt;br /&gt;
        if (cval == 4)&lt;br /&gt;
          {&lt;br /&gt;
            OnFwd(OUT_A, 0);&lt;br /&gt;
            OnFwd(OUT_B, 0);&lt;br /&gt;
            OnFwd(OUT_C, 50);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, -50);&lt;br /&gt;
            Wait(2000);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(1000);&lt;br /&gt;
          }&lt;br /&gt;
        if (cval == 1)&lt;br /&gt;
          {&lt;br /&gt;
            while (cval == 1)&lt;br /&gt;
              {&lt;br /&gt;
                result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                OnFwd(OUT_AB,100);&lt;br /&gt;
              }&lt;br /&gt;
            OnFwd(OUT_A, -50);&lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(4800);&lt;br /&gt;
            while (1)&lt;br /&gt;
              {&lt;br /&gt;
                OnFwd(OUT_AB, 0);                  &lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Construction du terrain = &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Terrainbe.JPG|200px|thumb|center|Terrain final]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4140</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=4140"/>
				<updated>2015-05-23T17:07:29Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:Pince3.jpg|300px|thumb|center|Pince final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
Les capteurs sont très importants. En effet, ils nous permettent de faire réaliser des actions au robot en fonction de ce qu'ils &amp;quot;voient&amp;quot;. Tout les capteurs doivent être initialisé :&lt;br /&gt;
  SetSensorLowspeed(IN_1) et SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600)   &lt;br /&gt;
*pour le capteur infrarouge. (MODE_1200 si on veut capteur du 1200Hz).&lt;br /&gt;
  SetSensorUltrasonic(IN_2)   &lt;br /&gt;
*pour le capteur d'ultrasons.&lt;br /&gt;
  SetSensorMSPressure(IN_4)   &lt;br /&gt;
*pour le capteur de pression.&lt;br /&gt;
  SetSensorColorFull(IN_3)   &lt;br /&gt;
*pour le capteur de couleur.&lt;br /&gt;
&lt;br /&gt;
Voici donc les différent capteurs que nous utilisons.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Captcouleur.JPG|150px|thumb|left|Le capteur de couleur dans sa place finale]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur. Par exemple, le robot peut suivre une bande de couleur grâce à ce capteur. &lt;br /&gt;
&lt;br /&gt;
Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. Afin de la placer correctement, nous avons du en plus prendre en compte la hauteur du capteur : en effet, si le capteur est trop haut, il a du mal a détecter les bonnes couleurs, ce qui pose un problème évident à l’exécution du programme. &lt;br /&gt;
&lt;br /&gt;
Nous avons finalement ajouté une collerette sur le capteur afin que ce dernier puissent détecter les couleur avec encore plus de précision.&lt;br /&gt;
[[Fichier:Capteurus.JPG|150px|thumb|right|Le capteur d'Ulstrasons]]&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle. En effet, comme le capteur infrarouge est défaillant à faible distance (il détecte la balle dans plusieurs direction et nous ne pouvons pas l'utiliser), le capteur à ultrasons voit alors si la balle est assez proche ou non pour être capturée. &lt;br /&gt;
&lt;br /&gt;
Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. Nous avons choisi un angle spécial en faisait plusieurs essai : le capteur devait voir la balle assez proche, et en même temps ne pas détecter le sol.&lt;br /&gt;
[[Fichier:Capteurir.JPG|150px|thumb|left|Capteur Infrarouge]]&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente (1200Hz pour les buts et 600Hz pour la balle). &lt;br /&gt;
&lt;br /&gt;
Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour augmenter sa distance de détection. Nous avons placé comme pour le capteur de couleur, une collerette autour du capteur, car dans certains de nos essais, nous avons remarqué que le capteur captait bien la balle, mais les buts venait gêner lorsqu'ils étaient trop près. Le capteur ressemble donc à ceci :&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Le capteur de pression renvoie la valeur 0 lorsqu'il n'y a rien qui appuie dessus. Il renvoie 33 si une pression est exercée sur lui.&lt;br /&gt;
&lt;br /&gt;
Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande de la rigueur, nous avons donc renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum. &lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
file:capteurpress.JPG|Capteur de pression&lt;br /&gt;
file:fixationcapteur.JPG|Fixations renforcées du capteur&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Robotfinal.JPG|300px|thumb|center|Le robot final]]&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
La fonction balle est celle qui permet au robot de trouver la balle, grâce à l'infrarouge. Premièrement, il faut mettre le capteur en mode 600Hz. Ensuite, nous allons tester la valeur &amp;quot;dir&amp;quot; (voir partie sur le capteur IR), suivant cette valeur, le robot va s'orrienter dans une direction ou l'autre pour avoir la balle en face de lui. Une fois ceci fait, il va avancer et basculer dans la sous fonction &amp;quot;Attrape&amp;quot;.&lt;br /&gt;
  sub Balle()                   &lt;br /&gt;
  { &lt;br /&gt;
    SetSensorLowspeed(IN_1);&lt;br /&gt;
    SetHTIRSeeker2Mode(IN_1, HTIR2_MODE_600);&lt;br /&gt;
    int dir;&lt;br /&gt;
    byte s1, s3, s5, s7, s9;&lt;br /&gt;
    while(1)&lt;br /&gt;
    {  &lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      if (dir&amp;lt;5)&lt;br /&gt;
      {&lt;br /&gt;
        while (dir !=5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,-70);&lt;br /&gt;
          OnFwd(OUT_B,70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      }&lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
        while (dir != 5)&lt;br /&gt;
        {&lt;br /&gt;
          bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
          OnFwd(OUT_A,70);&lt;br /&gt;
          OnFwd(OUT_B,-70);&lt;br /&gt;
        }&lt;br /&gt;
      OnFwd(OUT_AB,100);&lt;br /&gt;
      Attrape();&lt;br /&gt;
      } &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
Cette sous-fonction est celle qui permet à notre robot d'attraper la balle : l'action principale qui doit être réalisée. Dans un premier temps, nous utilisons la valeur renvoyée par le capteur d'ultrasons : de cette manière, dès que le robot se trouve assez proche de la balle (moins de 10cm), nous activons le moteur C, qui correspond à la pince, et cette dernière capture la balle. &lt;br /&gt;
  sub Attrape()                 &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    int x = SensorUS(IN_2);&lt;br /&gt;
    SetSensorMSPressure(IN_4);&lt;br /&gt;
    int val = SensorMSPressure(IN_4);&lt;br /&gt;
    if (x&amp;lt;10)&lt;br /&gt;
     {&lt;br /&gt;
        OnFwd(OUT_C,-50);&lt;br /&gt;
        OnFwd(OUT_AB,0);&lt;br /&gt;
        Wait(1000);&lt;br /&gt;
        val = SensorMSPressure(IN_4);&lt;br /&gt;
Enfin, nous testons la valeur renvoyée pas le capteur de pression pour déterminer si le robot à la balle. Si la balle est attrapée, nous passons dans le sous programme suivant. Sinon, la pince se rouvre.&lt;br /&gt;
&lt;br /&gt;
        if (val&amp;gt;0)&lt;br /&gt;
        {&lt;br /&gt;
        Trouve();&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
        OnFwd(OUT_C,50);&lt;br /&gt;
        }   &lt;br /&gt;
     } &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
La fonction Trouve permet au robot, une fois la balle attrapée, de retrouver les lignes bleues du centre et basculer dans la fonction &amp;quot;Suivre&amp;quot;. Le robot se contente juste de tourner légèrement à chaque fois qu'il se trouve face à un mur, et retombe donc forcément au bout d'un moment sur les lignes bleues. A la base, nous avions programmé le robot pour qu'il se dirige vers l'un des buts grâce à l'infrarouge, fasse demi-tour sur lui-même et qu'il détecte ensuite le but opposé pour avancer dans sa direction et ainsi retombe sur les lignes du centre. Mais à cause d'un problème de capteur, nous avons opté pour une solution plus simple.&lt;br /&gt;
&lt;br /&gt;
  sub Trouve()                   &lt;br /&gt;
  {&lt;br /&gt;
    SetSensorUltrasonic(IN_2);&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
      int x = SensorUS(IN_2);&lt;br /&gt;
      int bVal = ReadSensorHTIRSeeker2AC(IN_1, dir, s1, s3, s5, s7, s9);&lt;br /&gt;
      int cval;&lt;br /&gt;
      unsigned int rawData[], normData[];&lt;br /&gt;
      int scaledData[];&lt;br /&gt;
      SetSensorColorFull(IN_3);&lt;br /&gt;
      int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if(x&amp;lt;22)&lt;br /&gt;
       {&lt;br /&gt;
          OnFwd(OUT_A, -50);&lt;br /&gt;
          OnFwd(OUT_B, 50);&lt;br /&gt;
          Wait(1800);&lt;br /&gt;
       } &lt;br /&gt;
      if (cval==2)&lt;br /&gt;
       {&lt;br /&gt;
         Suivre();&lt;br /&gt;
       }  &lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
  sub Suivre()                   &lt;br /&gt;
  {&lt;br /&gt;
    while (1)&lt;br /&gt;
    {&lt;br /&gt;
     int cval;&lt;br /&gt;
     unsigned int rawData[], normData[];&lt;br /&gt;
     int scaledData[];&lt;br /&gt;
     SetSensorColorFull(IN_3);&lt;br /&gt;
     int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
     if (cval == 2)                  &lt;br /&gt;
      {&lt;br /&gt;
      while (cval == 2)&lt;br /&gt;
             { &lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              OnFwd(OUT_AB, 100);&lt;br /&gt;
              if (cval == 4)                   &lt;br /&gt;
               {&lt;br /&gt;
                 OnFwd(OUT_AB, 100);       &lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 OnFwd(OUT_A,-70);         &lt;br /&gt;
                 OnFwd(OUT_B,70);&lt;br /&gt;
                 Wait(1000);&lt;br /&gt;
                 result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                 while (cval != 2)&lt;br /&gt;
                 {&lt;br /&gt;
                   result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                   OnFwd(OUT_A,-70);&lt;br /&gt;
                   OnFwd(OUT_B,70);&lt;br /&gt;
                 }&lt;br /&gt;
               }&lt;br /&gt;
              result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
              if (cval == 1)&lt;br /&gt;
                {&lt;br /&gt;
                  Place();&lt;br /&gt;
                } &lt;br /&gt;
             }&lt;br /&gt;
      }     &lt;br /&gt;
      else&lt;br /&gt;
      {&lt;br /&gt;
       ChercheCouleur();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  return;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
  sub ChercheCouleur()                    &lt;br /&gt;
  {  &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int i;&lt;br /&gt;
    int n = 1; &lt;br /&gt;
    int p = 1000;&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData); &lt;br /&gt;
    while (cval != 2)                    &lt;br /&gt;
     {&lt;br /&gt;
      for(i=0;i&amp;lt;10;i++)                   &lt;br /&gt;
     {&lt;br /&gt;
      OnFwd(OUT_A, 60);&lt;br /&gt;
      OnFwd(OUT_B, -60);&lt;br /&gt;
      Wait((n*p)/10);&lt;br /&gt;
      result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
      if (cval==2)                   &lt;br /&gt;
       {break;}      &lt;br /&gt;
      }&lt;br /&gt;
      if (cval==2)                  &lt;br /&gt;
       {break;}&lt;br /&gt;
      for(i=0;i&amp;lt;20;i++)                  &lt;br /&gt;
      {&lt;br /&gt;
       OnFwd(OUT_B, 60);&lt;br /&gt;
       OnFwd(OUT_A, -60);&lt;br /&gt;
       Wait((n*p)/10);&lt;br /&gt;
       result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);     &lt;br /&gt;
       }&lt;br /&gt;
      n=n+1;&lt;br /&gt;
     }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
  sub Place()                   &lt;br /&gt;
  {                               &lt;br /&gt;
    int cval;&lt;br /&gt;
    unsigned int rawData[], normData[];&lt;br /&gt;
    int scaledData[];&lt;br /&gt;
    SetSensorColorFull(IN_3);&lt;br /&gt;
    int result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
    while(cval == 2)&lt;br /&gt;
      {&lt;br /&gt;
        result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
        OnFwd(OUT_AB, 70);&lt;br /&gt;
        if (cval == 4)&lt;br /&gt;
          {&lt;br /&gt;
            OnFwd(OUT_A, 0);&lt;br /&gt;
            OnFwd(OUT_B, 0);&lt;br /&gt;
            OnFwd(OUT_C, 50);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, -50);&lt;br /&gt;
            Wait(2000);&lt;br /&gt;
            OnFwd(OUT_A, -50); &lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(1000);&lt;br /&gt;
          }&lt;br /&gt;
        if (cval == 1)&lt;br /&gt;
          {&lt;br /&gt;
            while (cval == 1)&lt;br /&gt;
              {&lt;br /&gt;
                result = ReadSensorColorEx(IN_3, cval, rawData, normData, scaledData);&lt;br /&gt;
                OnFwd(OUT_AB,100);&lt;br /&gt;
              }&lt;br /&gt;
            OnFwd(OUT_A, -50);&lt;br /&gt;
            OnFwd(OUT_B, 50);&lt;br /&gt;
            Wait(4800);&lt;br /&gt;
            while (1)&lt;br /&gt;
              {&lt;br /&gt;
                OnFwd(OUT_AB, 0);                  &lt;br /&gt;
              }&lt;br /&gt;
          }&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
&lt;br /&gt;
[[Fichier:Terrainbe.JPG|200px|thumb|center|Terrain final]]&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3681</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3681"/>
				<updated>2015-03-19T16:27:26Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Balle&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Attrape&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Trouve&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Suivre&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;ChercheCouleur&amp;quot; ===&lt;br /&gt;
&lt;br /&gt;
=== La fonction &amp;quot;Place&amp;quot; === &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3546</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3546"/>
				<updated>2015-03-08T14:04:25Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées sans balle ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Actions réalisées avec balle ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3543</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3543"/>
				<updated>2015-03-08T14:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs === &lt;br /&gt;
&lt;br /&gt;
C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Capteur d'ultrasons ===  &lt;br /&gt;
&lt;br /&gt;
Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  &lt;br /&gt;
&lt;br /&gt;
Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === &lt;br /&gt;
&lt;br /&gt;
Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC (Not eXactly C) car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3542</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3542"/>
				<updated>2015-03-08T14:01:09Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
&lt;br /&gt;
=== Capteur de couleurs ===  C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Capteur d'ultrasons ===  Ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur infrarouge ===  Le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Capteur de pression === Ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC (Not eXactly C) car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3541</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3541"/>
				<updated>2015-03-08T13:58:07Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : /* Le châssis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde. Nous avons veillé également à ne pas trop espacer les deux chenilles pour éviter que le robot ne s'écrase sous le poids du micro-contrôleur, que nous avons placé au centre du châssis, de façon verticale et légèrement incliné pour pouvoir faire les branchements aux différents capteurs sans encombres.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
*'''Capteur de couleurs''' : C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'ultrasons''' : ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur infrarouge''' : le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur de pression''' : ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC (Not eXactly C) car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3538</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3538"/>
				<updated>2015-03-08T13:55:03Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas. Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations. Nous avons au final réussi à trouver un bon compromis pour l'équilibre du robot, en répartissant uniformément toutes les charges à mettre sur le robot et en compensant le poids de la pince vers l'avant à l'aide d'une base arrière lourde.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
*'''Capteur de couleurs''' : C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'ultrasons''' : ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur infrarouge''' : le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur de pression''' : ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
La programmation du robot a été réalisée exclusivement en langage NXC (Not eXactly C) car on nous a déconseillé d'utiliser le langage graphique propre au micro-contrôleur, qui est assez limité.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3534</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3534"/>
				<updated>2015-03-08T13:45:03Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas.&lt;br /&gt;
Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les capteurs ==&lt;br /&gt;
*'''Capteur de couleurs''' : C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'ultrasons''' : ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur infrarouge''' : le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur de pression''' : ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La programmation =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Tests finaux/Problèmes rencontrés = &lt;br /&gt;
 PARTIE A DEFINIR&lt;br /&gt;
&lt;br /&gt;
= Conclusion =&lt;br /&gt;
 A FAIRE&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3533</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3533"/>
				<updated>2015-03-08T13:41:03Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La Construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servomoteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le Châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas.&lt;br /&gt;
Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La Pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servomoteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servomoteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour que le robot puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Dans sa version finale, la pince se referme de telle façon que la balle se retrouve légèrement sur la gauche du robot en laissant le champ libre au capteur d'ultrasons. &lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les Capteurs ==&lt;br /&gt;
*'''Capteur de couleurs''' : C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'ultrasons''' : ce capteur-ci offre la possibilité de détecter des obstacles qui pourraient se dresser sur le chemin du robot, comme les barrières qui délimitent le terrain. Pour nous, le capteur a une double utilisation étant donné qu'il est complémentaire avec le capteur infrarouge pour attraper la balle, comme le capteur infrarouge est défaillant à faible distance. Il voit si la balle est assez proche ou non pour être capturée. Au départ, le capteur était placé verticalement sur le bout de la partie fixe de la pince, juste pour détecter les obstacles, puis nous l'avons par la suite replacé horizontalement sur la base de la pince, à l'endroit du servomoteur et légèrement incliné vers l'avant, pour qu'il puisse détecter si la balle est au bon endroit. &lt;br /&gt;
&lt;br /&gt;
*'''Capteur infrarouge''' : le capteur infrarouge détecte la position de la balle et des buts à l'aide signaux envoyés par ceux-ci. Son rôle est d'orienter le robot vers la balle pour pouvoir aller ensuite la ramasser. La difficulté de cette tâche est de savoir distinguer les signaux envoyés par la balle de ceux envoyés par les buts, qui devront normalement être d'une fréquence différente. Nous avions initialement placé le capteur à la place finale du capteur d'ultrasons, c'est-à-dire au centre de la pince, cependant nous avons pensé qu'il pourrait être gêné par ce qu'il y avait devant. Nous l'avons donc surélevé, en le laissant au centre de la pince, à l'aide d'une tige pour élargir son champ de vision.&lt;br /&gt;
&lt;br /&gt;
*'''Capteur de pression''' : ce capteur permet d'annoncer au robot lorsqu'une pression est exercée sur celui-ci ou non. Il n'était pas indispensable au bon fonctionnement du robot, cependant il permet de créer des raccourcis au niveau de la programmation et d'avoir un robot plus complet au moment d'attraper la balle. En effet, le capteur permet de savoir si la balle est attrapée ou non lorsque le programme tourne, et le fait de pouvoir continuer à chercher la balle si le capteur ne détecte aucune pression permet d'éviter au robot d'entamer la suite du programme sans balle. Pour le placement, nous avons réussi à le coincer dans la partie fixe de la pince pour que la balle vienne appuyer dessus lorsque la pince se referme. Cependant c'est un capteur un peu capricieux qui demande la rigueur donc nous avons renforcé l'attache du capteur pour limiter le recul de celui-ci au maximum.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Robot final ==&lt;br /&gt;
&lt;br /&gt;
 METTRE PHOTO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La Programmation =&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3523</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3523"/>
				<updated>2015-03-08T12:58:00Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La Construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servo-moteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le Châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas.&lt;br /&gt;
Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La Pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servo-moteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servo-moteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour qu'il puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Le capteur de pression a également bénéficié d'une amélioration : nous avons renforcé son attache pour qu'il ne bouge plus lorsque la balle lui appuie dessus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les Capteurs ==&lt;br /&gt;
*'''Capteur de couleurs''' : C'est le seul capteur qui se retrouve sur le châssis. Il nous permet de basculer dans la partie du programme voulue en détectant une certaine couleur, par exemple le robot peut suivre une bande de couleur grâce au capteur. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus à détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'ultrasons''' :&lt;br /&gt;
&lt;br /&gt;
*'''Capteur infrarouge''' :&lt;br /&gt;
&lt;br /&gt;
*'''Capteur de pression''' :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La Programmation =&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3522</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3522"/>
				<updated>2015-03-08T12:23:12Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La Construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servo-moteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le Châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles étant donné que nous avions entendu que l'utilisation des roues poser problème dans certains cas.&lt;br /&gt;
Le poids du micro-contrôleur nous a forcé à renforcer notre robot par le bas, en ajoutant des fixations.&lt;br /&gt;
Le seul capteur se trouvant sur le châssis est le capteur de couleurs. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus a détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La Pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servo-moteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servo-moteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour qu'il puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Le capteur de pression a également bénéficié d'une amélioration : nous avons renforcé son attache pour qu'il ne bouge plus lorsque la balle lui appuie dessus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
== Les Capteurs ==&lt;br /&gt;
*'''Capteur de Couleurs''' : &lt;br /&gt;
&lt;br /&gt;
*'''Capteur d'Ultrasons''' :&lt;br /&gt;
&lt;br /&gt;
*'''Capteur Infrarouge''' :&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La Programmation =&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3519</id>
		<title>RobotRamasseur2014-2</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=RobotRamasseur2014-2&amp;diff=3519"/>
				<updated>2015-03-08T12:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
Dans le cadre de notre bureau d'étude IMA, nous avions le choix entre plusieurs projets. Les différents projets étaient des robots joueurs, ramasseurs de balles, des buts ainsi qu'un arbitre, la finalité étant d'effectuer un match de football où les différents projets interviendraient. Ayant pris le projet &amp;quot;ramasseur de balle&amp;quot;, notre but était de réaliser un robot en Lego, puis de le programmer en NXC (Not eXactly C), afin qu'il aille chercher la balle et la ramène au centre du terrain.&lt;br /&gt;
&lt;br /&gt;
=  La Construction =&lt;br /&gt;
&lt;br /&gt;
La construction du robot est la première chose que nous avons faites. Cette étape nous semblait importante pour commencer car nous allions avoir une base matérielle sur laquelle travailler. En effet, savoir où sont placés les capteurs, et sur quelle entrée de notre micro-contrôleur était nécessaire avant de commencer a programmer. &lt;br /&gt;
Les éléments à notre dispositions étaient :&lt;br /&gt;
*3 servo-moteurs&lt;br /&gt;
*Un capteur de couleurs, un d'ultrasons, un d'infrarouge et un de pression&lt;br /&gt;
*Un micro-contrôleur MindStorm&lt;br /&gt;
*Des pièces de Lego&lt;br /&gt;
&lt;br /&gt;
== Le Châssis ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé par monter le &amp;quot;corps&amp;quot; de notre robot, en optant rapidement pour les chenilles (les roues faisant glisser le robot).&lt;br /&gt;
Le poids du micro-contrôleur nous a forcé a renforcer notre robot par le bas, en ajoutant des fixations.&lt;br /&gt;
Le seul capteur se trouvant sur le châssis est le capteur de couleurs. Nous l'avions dans un premier temps fixé sur l'arrière du robot. Cependant, lorsque ce dernier tournait, le capteur n'arrivait plus a détecter la ligne et le robot n'avançait plus. Le capteur de couleurs est donc passé à l'avant du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:pince2.jpg|150px|thumb|right|La pince sous sa première forme]]&lt;br /&gt;
&lt;br /&gt;
== La Pince ==&lt;br /&gt;
&lt;br /&gt;
Notre robot étant un ramasseur de balle, il fallait qu'il soit équipé d'un système pour attraper la balle et la garder. Deux servo-moteurs était déjà utilisés pour la mobilité du robot, nous avons alors opté pour une pince dont une partie serait articulée par le servo-moteur restant, l'autre partie étant fixe. &lt;br /&gt;
Par la suite, nous avons ajouté sur la pince des capteurs pour qu'il puisse interagir avec le monde extérieur, à savoir :&lt;br /&gt;
&lt;br /&gt;
*Un capteur infrarouge   &lt;br /&gt;
*Un capteur d'ultrasons&lt;br /&gt;
*Un capteur de pression&lt;br /&gt;
La pince avait alors la forme ci à droite.&lt;br /&gt;
&lt;br /&gt;
Après quelque essais, nous nous sommes rendu compte que lorsque le robot avait la balle, cette dernière nous empêchait d'utiliser le capteur d'ultrasons. Il a donc fallu décentrer la pince pour laisser le champ libre au capteur d'ultrasons. Le capteur de pression a également bénéficié d'une amélioration : nous avons renforcé son attache pour qu'il ne bouge plus lorsque la balle lui appuie dessus.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Au final, le robot, avec la nouvelle pince, ressemble donc à cela :&lt;br /&gt;
[[Fichier:pince2.jpg|300px|thumb|center|Robot final]]&lt;br /&gt;
&lt;br /&gt;
= Les Capteurs =&lt;br /&gt;
&lt;br /&gt;
== Capteur de Couleurs ==&lt;br /&gt;
&lt;br /&gt;
== Capteur d'Ultrasons ==&lt;br /&gt;
&lt;br /&gt;
== Capteur Infrarouge ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= La Programmation =&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2014-2015&amp;diff=3222</id>
		<title>BE 2014-2015</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2014-2015&amp;diff=3222"/>
				<updated>2015-01-19T08:23:13Z</updated>
		
		<summary type="html">&lt;p&gt;Flefevre : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif à atteindre =&lt;br /&gt;
&lt;br /&gt;
Le contexte de ce bureau d'études est un jeu de balle. Deux robots se font face sur un terrain (voir ci-dessous), doivent repérer la balle et la propulser dans le but adverse. &lt;br /&gt;
[[Image:TerrainCouleur.png|500px|center]]&lt;br /&gt;
&lt;br /&gt;
Les robots ne sont pas les seuls acteurs dans ce jeu. Les buts ont aussi un rôle à assurer, un dispositif de remise de la balle au centre est nécessaire ainsi qu'un arbitre.&lt;br /&gt;
&lt;br /&gt;
Les différents différents rôles des acteurs sont décrits ci-après.&lt;br /&gt;
* Les buts doivent s'annoncer aux robots par infra-rouge. Les buts doivent disposer d'un mécanisme capable de capturer la balle dès qu'elle rentre dans la cage. L'évenement &amp;quot;but marqué&amp;quot; est alors envoyé à l'arbitre. Sur commande de l'arbitre, le but relance la balle vers le centre du terrain.&lt;br /&gt;
* Le rôle principal de l'arbitre est de communiquer avec les autres acteurs (robots et buts). Quand un but est marqué, l'arbitre met le score à jour. Ce score est affiché sur des afficheurs dédiés. C'est aussi l'arbitre qui commande la remise au centre de la balle. Enfin l'arbitre ordonne aux robots de se placer et leur indique quand ils peuvent jouer une manche.&lt;br /&gt;
* Le dispositif de remise au centre de la balle est un robot qui capture la balle et va la déposer au point d'engagement en se repérant sur les marques au sol. Ce robot opère lorsque l'arbitre le demande et prévient l'arbitre lorsque la tâche est réalisée.&lt;br /&gt;
* Les robots ont comme tâche principale de s'approcher de la balle et de la lancer vers le but adverse. Les robots ne peuvent avancer que s'ils ne détectent pas d'obstacle à faible distance. Un robot ne repérant plus la balle peut se replier devant son but pour le bloquer. Un robot de jeu ne peut pas sortir du terrain.&lt;br /&gt;
&lt;br /&gt;
Pour que les robots puissent différencier les buts de la balle, les buts font clignoter leurs LEDs infrarouges suivant un code pré-établi.&lt;br /&gt;
&lt;br /&gt;
Les communications entre les acteurs s'effectuent par &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;. Les robots et les buts s'apparient avec l'arbitre et ne communiquent qu'avec lui. Votre premier travail consiste à analyser toutes les informations contenues dans cette page et à établir un schéma des communications qui doivent avoir lieu durant un jeu complet.&lt;br /&gt;
&lt;br /&gt;
= Matériel à votre disposition =&lt;br /&gt;
{| style=&amp;quot;float: right; height: 160px; margin-left:0.2em; border: 1px solid #bbb;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #bbb;&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:boite_mindstorm.jpg|150px]]&lt;br /&gt;
| style=&amp;quot;border: 1px solid #bbb;&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:ev3.png|120px]]&lt;br /&gt;
|- style=&amp;quot;font-size: 87%; text-align: center;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;center&amp;quot; | Legos Mindstorm&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;float: left; height: 160px; margin-left:0.2em; border: 1px solid #bbb;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #bbb;&amp;quot; valign=&amp;quot;middle&amp;quot; |[[File:pcduino1.png|150px]]&lt;br /&gt;
| style=&amp;quot;border: 1px solid #bbb;&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:attiny85.png|150px]]&lt;br /&gt;
|- style=&amp;quot;font-size: 87%; text-align: center;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;center&amp;quot; | Système pcDuino1&lt;br /&gt;
| valign=&amp;quot;center&amp;quot; | AVR attiny85&lt;br /&gt;
|}&lt;br /&gt;
Les robots et les buts doivent être réalisées à l'aide de Lego MindStorm. Le Lego va permettre de réaliser le chassis des robots avec sa motorisation et d'y installer divers capteurs. Le Lego permet aussi de réaliser les cages des buts, leur dispositif de capture de la balle et leur dispositif d'éjection.&lt;br /&gt;
&lt;br /&gt;
La communication des robots et des buts vers l'arbitre doit se faire grâce à la technologie &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt; intégrée au micro-contrôleur MindStorm.&lt;br /&gt;
&lt;br /&gt;
Pour la localisation des buts, des balises doivent être construites à base de LEDs infra-rouges modulées à l'aide d'une fréquence compatible avec les détecteurs des robots. Vous réaliserez un petit circuit électronique à base de micro-contrôleur AVR &amp;lt;tt&amp;gt;tiny85&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pour l'arbitre un système embarqué de type pcDuino est nécessaire. Doit lui être adjoint un adaptateur USB &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt; pour permettre la communication avec les contrôleurs MindStorm. Les afficheurs seront réalisés à partir de platines séries contrôlant des afficheurs 7 segments. Ces platines peuvent être contrôlées via le bus SPI du pcDuino.&lt;br /&gt;
&lt;br /&gt;
Pour la programmation des micro-contrôleurs MindStorm, vous pouvez utiliser le logiciel graphique fourni mais vous êtes encouragés à tester le langage [http://bricxcc.sourceforge.net/nbc/ NXC] (Not eXactly C) qui permet d'écrire efficacement des programmes plus conséquents. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Chaque binôme va se voir affecter une des problématiques décrites dans les sous-sections suivantes.&lt;br /&gt;
&lt;br /&gt;
== Cage de but ==&lt;br /&gt;
Une cage de but doit comporter les dispositifs décrits ci-dessous.&lt;br /&gt;
* La cage doit émettre un signal infra-rouge pour être facilement repérable par les robots. &lt;br /&gt;
* La cage doit détecter quand la balle rentre dans la cage en la dirigeant précisement vers un capteur de contact.&lt;br /&gt;
* La cage doit signaler un but à l'arbitre.&lt;br /&gt;
* Enfin la cage doit pouvoir expulser la balle quand l'arbitre le demande.&lt;br /&gt;
&lt;br /&gt;
Il existe des sites Web décrivant des montages électroniques pour réaliser une [http://ftcforum.usfirst.org/showthread.php?2147-DIY-IR-Beacon-using-Arduino-or-ATTiny-chip balise infra-rouge]. Votre balise doit pouvoir alterner des séquences d'émission et d'arrêt de période déterminée pour permettre de différencier les buts. Pour aller plus loin, prévoyez une LED classique pour indiquer les période d'émission et d'arrêt ainsi qu'un bouton pour sélectionner la durée en seconde des périodes d'arrêt. Enfin concevez un circuit imprimé pour votre montage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Vivian SENAFFE / Florian SAÏZ &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite Lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;LEDs infra-rouge&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;AVR attiny85&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Composants électroniques pour balise&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[CageBut2014-1|Cage de but 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Aurélien CAFFIAUX / Carl DUCHEMIN &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite Lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;LEDs infra-rouge&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;AVR attiny85&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Composants électroniques pour balise&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[CageBut2014-2|Cage de but 2]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robots de compétition ==&lt;br /&gt;
Lorsque qu'un robot de compétition a repéré la balle, il effectue les actions suivantes.&lt;br /&gt;
* Il se dirige vers la balle pour la capturer. Une fois la balle capturée le robot ne se déplace plus en translation.&lt;br /&gt;
* Il lance la balle vers le but adverse. Une rotation peut être nécessaire pour l'envoi.&lt;br /&gt;
&lt;br /&gt;
D'un point de vue mécanique certains dispositifs doivent être étudiés.&lt;br /&gt;
* Un dispositif de capture de la balle, un simple récupérateur non articulé devrait suffire.&lt;br /&gt;
* Un dispositif de lancement. Vous pouvez considérer le lancement par gravité, en utilisant un servo-moteur ou en utilisant la force centrifuge.&lt;br /&gt;
&lt;br /&gt;
Si le robot ne trouve pas la balle, il peut considérer qu'elle est en possession d'un robot adverse. Dans ce cas, le robot doit se rapprocher de toutes ses roues de son but pour en bloquer l'accès.&lt;br /&gt;
&lt;br /&gt;
En aucun cas, le robot ne doit quitter l'aire de jeu.&lt;br /&gt;
&lt;br /&gt;
Les capteurs nécessaires à un robot de compétition sont décrits ci-dessous.&lt;br /&gt;
* Le capteur infra-rouge pour se diriger vers la balle et estimer la position du but.&lt;br /&gt;
* Le capteur ultra-son pour éviter de percuter les objets (buts et autres robots).&lt;br /&gt;
* Un capteur de couleur pour éviter de sortir du terrain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Loïc Tombazzi / Eddine Farid Omar &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur infra-rouge&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[RobotCompetition2014-1|Robot de compétition 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Yves-Alain Agbodjogbe / Anthony Casisa &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur infra-rouge&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[RobotCompetition2014-2|Robot de compétition 2]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Antoine Mariette / Victor Forney &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur infra-rouge&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[RobotCompetition2014-3|Robot de compétition 3]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Arbitre ==&lt;br /&gt;
{| style=&amp;quot;float: right; height: 140px; margin-left:0.2em; border: 1px solid #bbb;&amp;quot;&lt;br /&gt;
| style=&amp;quot;border: 1px solid #bbb;&amp;quot; valign=&amp;quot;top&amp;quot; |[[File:Serie7segments.png|150px]]&lt;br /&gt;
|- style=&amp;quot;font-size: 87%; text-align: center;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;center&amp;quot; | Afficheurs 7 segments&lt;br /&gt;
|}&lt;br /&gt;
L'arbitre est réalisé à partir d'un système embarqué de type pcDuino. Les différentes tâches à réaliser sont décrites ci-dessous.&lt;br /&gt;
* Utiliser le bus SPI du pcDuino pour contrôler l'afficheur 7 segments.&lt;br /&gt;
* Etablir la communication &amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt; avec les robots et les buts, vous pouvez vous baser sur les [[https://peip-ima.polytech-lille.net:40001/archive/FoxLego-2012.tar sources C]] déjà développées les années précédentes.&lt;br /&gt;
* Implanter l'algorithme d'arbitrage décrit ci-après.&lt;br /&gt;
** demander aux cages de but d'éjecter la balle ;&lt;br /&gt;
** demander au ramasseur de balle d'opérer, revenir au premier point en cas d'échec du ramasseur ;&lt;br /&gt;
** demander aux robots de lancer la partie après que le ramasseur de balle ait terminé son travail ;&lt;br /&gt;
** attendre l'événement &amp;quot;but marqué&amp;quot; pour mettre à jour le score, revenir au premier point ;&lt;br /&gt;
** en cas d'attente trop longue, revenir au premier point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Prénom Nom / Prénom Nom &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;pcDuino&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Adaptateur USB/&amp;lt;tt&amp;gt;bluetooth&amp;lt;/tt&amp;gt;&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Afficheurs 7 segments&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[ArbitreRobots2014-1|Arbitre 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Robot ramasseur de balle ==&lt;br /&gt;
Le robot ramasseur de balle doit réaliser les actions décrites ci-dessous.&lt;br /&gt;
* Trouver la balle, se diriger vers elle et la capturer.&lt;br /&gt;
* Trouver le but le plus éloigné et se diriger vers lui.&lt;br /&gt;
* S'arrêter sur la première ligne médiane détectée.&lt;br /&gt;
* Suivre la ligne dans un sens, si la frontière du terrain est détectée inverser le sens de parcours.&lt;br /&gt;
* S'arrêter sur la marque de centre de terrain, relacher la balle.&lt;br /&gt;
* Prévenir l'arbitre.&lt;br /&gt;
* Retourner sur sa base.&lt;br /&gt;
&lt;br /&gt;
Le robot ramasseur de balle se met en marche quand l'arbitre lui demande.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;th&amp;gt;Elèves&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Matériel&amp;lt;/th&amp;gt; &amp;lt;th&amp;gt;Page&amp;lt;/th&amp;gt; &amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Amina Fahem / Marianne Butaye &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur infra-rouge&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[RobotRamasseur2014-1|Robot ramasseur de balle 1]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; Thomas Gosse / François Lefevre &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Boite lego MindStorm&amp;lt;/span&amp;gt;, &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;Capteur infra-rouge&amp;lt;/span&amp;gt; &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt; [[RobotRamasseur2014-2|Robot ramasseur de balle 2]] &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Interaction entre les acteurs =&lt;br /&gt;
Constituez un groupe complet d'acteurs avec 2 cages de buts, 2 robots de compétition, un robot de ramassage de balle et un arbitre.&lt;br /&gt;
Vérifiez que le match se déroule correctement.&lt;br /&gt;
&lt;br /&gt;
= Notation =&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Noms !! Rapport Wiki !! Soutenance vidéo !! Total&lt;br /&gt;
|-&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Flefevre</name></author>	</entry>

	</feed>