<?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=Vkersken</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=Vkersken"/>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Vkersken"/>
		<updated>2026-04-25T04:59:01Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9832</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9832"/>
				<updated>2018-05-07T08:26:18Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*   Conclusion   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous reste plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournies par l’école dans un souci de place et de poids.&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques tests afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. &lt;br /&gt;
C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall. Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5 V.&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &amp;lt;br&amp;gt;&lt;br /&gt;
- Présence d'une lumière IR ?&amp;lt;br&amp;gt;&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous sommes arrivé à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouté d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'études a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3 D). Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons dû certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fiers du travail que nous avons accompli. C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9831</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9831"/>
				<updated>2018-05-07T08:25:53Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*   Fonctionnalités du robot final   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous reste plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournies par l’école dans un souci de place et de poids.&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques tests afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. &lt;br /&gt;
C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall. Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5 V.&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &amp;lt;br&amp;gt;&lt;br /&gt;
- Présence d'une lumière IR ?&amp;lt;br&amp;gt;&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous sommes arrivé à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouté d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9830</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9830"/>
				<updated>2018-05-07T08:25:17Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Code – Dernière partie 20 - et plus */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous reste plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournies par l’école dans un souci de place et de poids.&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques tests afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. &lt;br /&gt;
C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall. Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5 V.&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &amp;lt;br&amp;gt;&lt;br /&gt;
- Présence d'une lumière IR ?&amp;lt;br&amp;gt;&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&amp;lt;br&amp;gt;&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9828</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9828"/>
				<updated>2018-05-07T08:24:17Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 19 : Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous reste plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournies par l’école dans un souci de place et de poids.&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques tests afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. &lt;br /&gt;
C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall. Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5 V.&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9827</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9827"/>
				<updated>2018-05-07T08:23:53Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 18 : Assemblage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous reste plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournies par l’école dans un souci de place et de poids.&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9826</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9826"/>
				<updated>2018-05-07T08:23:35Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 17 : Soudure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés.&lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle). Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9825</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9825"/>
				<updated>2018-05-07T08:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 15-16 : Châssis 2D - Rectification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs surs la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseil aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodons (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9824</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9824"/>
				<updated>2018-05-07T08:22:36Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 10-11 : Conception du châssis 2D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois-ci en 2D. La prise en main du logiciel s’est avérés plus faciles que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au-dessus de celui-ci, et enfin les leds et les différents capteurs au-dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9823</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9823"/>
				<updated>2018-05-07T08:22:09Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 8-9 : Code – Première partie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclaré nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimale raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9822</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9822"/>
				<updated>2018-05-07T08:21:32Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 6-7 : Châssis 3D */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au-dessus de certains autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseil. Ils nous ont alors précisé que les impressions 3Ds n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ces modèles 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9821</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9821"/>
				<updated>2018-05-07T08:20:26Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 5-10 : Mise en place sur Shield */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de réaliser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminé les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9820</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9820"/>
				<updated>2018-05-07T08:19:30Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimerons au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9819</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9819"/>
				<updated>2018-05-07T08:19:07Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*  Introduction   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrées.&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9818</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9818"/>
				<updated>2018-05-07T08:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*  Objectif : Réaliser un robot proie autonome et communiquant   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9817</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9817"/>
				<updated>2018-05-07T08:18:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*  Objectif : Réaliser un robot proie autonome et communiquant   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9816</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9816"/>
				<updated>2018-05-07T08:17:55Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /*  Objectif : Réaliser un robot proie autonome et communiquant   */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Fichier:phototk.jpeg|400px]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Après impression, le résultat final :''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:Phototk.jpeg&amp;diff=9815</id>
		<title>Fichier:Phototk.jpeg</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:Phototk.jpeg&amp;diff=9815"/>
				<updated>2018-05-07T08:16:14Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9785</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9785"/>
				<updated>2018-05-06T22:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
== Séance 5-10 : Mise en place sur Shield ==&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9784</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9784"/>
				<updated>2018-05-06T22:37:49Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 15-16 : Châssis 2D - Rectification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9783</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9783"/>
				<updated>2018-05-06T22:37:36Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 15-16 : Châssis 2D - Rectification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Séance 17 : Soudure ==&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9782</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9782"/>
				<updated>2018-05-06T22:37:12Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 19 : Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code – Dernière partie 20 - et plus ==&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9781</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9781"/>
				<updated>2018-05-06T22:36:43Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 19 : Test */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Parlons à présent du code, qui a occupé 60% du projet, les corrections étant très très très régulières.&lt;br /&gt;
&lt;br /&gt;
Comment avons-nous procédé ? &lt;br /&gt;
&lt;br /&gt;
La première chose, primordial, était de définir les PINs sur lesquelles seront connectés tous les éléments.&lt;br /&gt;
Afin de détecter tout problème, nous avons ajouté au code fonctionnalité par fonctionnalité.&lt;br /&gt;
&lt;br /&gt;
La première était la mise en route des moteurs, et le contrôle de la vitesse et de leur fonction...&lt;br /&gt;
&lt;br /&gt;
Pour cela, nous avons créé des fonctions annexes afin de les appelés et de réduire notre code afin de le rendre plus lisible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Avant() {&lt;br /&gt;
  digitalWrite (AIN1, HIGH);&lt;br /&gt;
  digitalWrite (AIN2, LOW);&lt;br /&gt;
  digitalWrite (BIN1, HIGH);&lt;br /&gt;
  digitalWrite (BIN2, LOW);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void Arriere() {&lt;br /&gt;
  digitalWrite (AIN1, LOW);&lt;br /&gt;
  digitalWrite (AIN2, HIGH);&lt;br /&gt;
  digitalWrite (BIN1, LOW);&lt;br /&gt;
  digitalWrite (BIN2, HIGH);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goForward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Avant();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void goBackward (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  Arriere();&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateRight (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, 2 * pwm);&lt;br /&gt;
  analogWrite(PWMB, pwm);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void rotateLeft (int pwm)&lt;br /&gt;
{&lt;br /&gt;
  analogWrite(PWMA, pwm);&lt;br /&gt;
  analogWrite(PWMB, 2 * pwm);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le robot étant capable de rouler, nous avons ajouté la détection d'obstacle afin qu'il évite d'abimer son visage... L'utilisation du sonar permet cette fonction.&lt;br /&gt;
Nous avons moyenné afin d'éviter les erreurs arrivant quelques fois... (des réductions de (10-15) cm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int Distance1 = sonar.ping_cm();&lt;br /&gt;
delay(100);&lt;br /&gt;
int Distance2 = sonar.ping_cm();&lt;br /&gt;
int Distance = max(Distance1, Distance2);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La fonction boucle a permis de créer le scénario type que va effectuer le robot :&lt;br /&gt;
&lt;br /&gt;
- Présence d'un champ magnétique ? &lt;br /&gt;
- Présence d'une lumière IR ?&lt;br /&gt;
- Si aucun des deux : On détecte la distance et on avance si elle est supérieure à 20cm.&lt;br /&gt;
- Si présence de lumière IR, alors le robot se place en mode FUITE et la vitesse des moteurs augmentent, les détections sont plus rapides, et il perd son sourire....&lt;br /&gt;
- Si présence d'un champ magnétique, le robot est considéré comme mort et s'arrête, définitivement. &lt;br /&gt;
&lt;br /&gt;
Pour l'émission du signal IR, nous avons opté pour un code très simple :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Emettre(){&lt;br /&gt;
   IRsend.sendNEC(2, 32);&lt;br /&gt;
   IRrecv.enableIRIn();}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La réception d'un signal IR est également très simple  : &lt;br /&gt;
&lt;br /&gt;
Nous avons cependant retourné seulement 0 ou 1, car nous utilisions la télécommande pour activer lors de nos tests.&lt;br /&gt;
Il est cependant possible bien sûr d'envoyer et d'utiliser uniquement un message !&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int IR_Mesure()&lt;br /&gt;
{&lt;br /&gt;
  irrecv.enableIRIn();&lt;br /&gt;
  if (irrecv.decode(&amp;amp;results))&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    irrecv.resume();&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9776</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9776"/>
				<updated>2018-05-06T21:51:05Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 15-16 : Châssis 2D - Rectification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
Imprimer une carte ne suffit pas, il faut également s'assurer que tous les éléments que l'on souhaite sont bien connectés. &lt;br /&gt;
Grâce au schéma initiale, on a pu corriger ce qui n'était pas possible à l'impression (notamment croiser deux routes, le double couche n'étant pas possible sur cette imprimante). C'est donc tout naturellement que nous avons étaient amenés à utiliser le fer à souder. On a également ajouté les connecteurs femelles, permettant de connecter les fils connecteurs (mâle/mâle - mâle/femelle).&lt;br /&gt;
Ce fut une étape agréable, nous rappelant les années au collège.&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous avons codé la leds IR et le capteur à effet hall.&lt;br /&gt;
Description (leds IR, capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9775</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9775"/>
				<updated>2018-05-06T21:41:24Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant les modifications et adaptations pour l'imprimante (ce n'est pas le schéma final) :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
Après impression, le résultat final :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous avons codé la leds IR et le capteur à effet hall.&lt;br /&gt;
Description (leds IR, capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9772</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9772"/>
				<updated>2018-05-06T21:24:27Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant impression :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous avons codé la leds IR et le capteur à effet hall.&lt;br /&gt;
Description (leds IR, capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9771</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9771"/>
				<updated>2018-05-06T21:24:14Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant impression :&lt;br /&gt;
&lt;br /&gt;
PHOTO&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png|400px|]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous avons codé la leds IR et le capteur à effet hall.&lt;br /&gt;
Description (leds IR, capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9770</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=9770"/>
				<updated>2018-05-06T21:23:44Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Séance 1-4 : Planification */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''Objectif''' : Réaliser un robot proie autonome et communiquant  &amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Cahier des charges''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Éviter des obstacles durs &lt;br /&gt;
   - Communiquer avec  les autres robots (émission d’un message IR)&lt;br /&gt;
   - Reconnaître les signaux de ses amies proies&lt;br /&gt;
   - Repérer ses prédateurs en détectant leurs signaux IR et tenter de leur échapper&lt;br /&gt;
   - S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Matériel utilisé ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 2 LEDs IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 6x Pile 1.5V&lt;br /&gt;
   - 1 Capteur à effet hall&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
   - 1 Interrupteur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Introduction ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Dans le cadre de ce bureau d'étude, notre but est de réaliser un robot proie, capable de de communiquer avec les autres robots. Le robot est censé évoluer de façon autonome tout en indiquant sa présence via émission IR. Au cours de ses déplacements, il doit savoir détecter les signaux des prédateurs afin de leur échapper.  En plus de cela, il doit être capable d‘éviter les obstacles durs (murs).&lt;br /&gt;
Ce wiki relatera les différentes parties de sa réalisation, le raisonnement suivit pour la conception des éléments du robot ainsi que les difficultés que nous avons rencontrés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; '''Journal de Bord ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Séance 1-4 : Planification ==&lt;br /&gt;
&lt;br /&gt;
Après avoir décidé de partir sur un robot proie, nous avons dû décider de la forme que prendra celui-ci. Nous nous sommes dit qu’il valait mieux faire un robot de petite  taille, agile et rapide. Il nous faudra donc modéliser le châssis. Nous partirions sur un Adruino, que nous avons déjà eu le plaisir de découvrir en cours de spécialité IMA au S3. Afin de rendre notre robot original, nous avons décidé de partir sur un châssis modélisé en 3D, que nous imprimeront au Fabricarium.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Fritzing 5-10&lt;br /&gt;
&lt;br /&gt;
Le robot fonctionnera à l'aide d'une carte Arduino sur laquelle est connecté une carte imprimée que nous allons réaliser totalement adaptée à nos besoins.&lt;br /&gt;
Pour cela, nous avons utilisé le logiciel Fritzing sur lequel il est très facile de realiser son circuit et observer la présence, ou non, d'erreurs.&lt;br /&gt;
&lt;br /&gt;
Les premières séances ont étaient très compliqués car le monde de l'électronique est un monde que nous connaissions peu. Le fonctionnement du circuit graphique et le lien avec le PCB ont dû être compris et cela est passé par de nombreuses phases de tests. Au final, après avoir déterminés les éléments nécessaires pour notre robot, le circuit a pris forme pour au final être imprimé après validation.&lt;br /&gt;
&lt;br /&gt;
Voici le schéma, autrement appelé PCB, avant impression :&lt;br /&gt;
&lt;br /&gt;
PHOTO&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Circuittk.png]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:image32018.jpg|400px|]]&lt;br /&gt;
&lt;br /&gt;
''Shield final conçu via Fritzing''&lt;br /&gt;
&lt;br /&gt;
== Séance 6-7 : Châssis 3D ==&lt;br /&gt;
&lt;br /&gt;
Partant de notre première planification nous avons modélisé un camion 3D  sur Sketchup adapté aux dimensions de notre robot. La prise en main s’est avérée laborieuse mais instructive. Cependant, nous du faire face à de nombreux problèmes. Tout d’abord le modèle était un peu trop complexe pour être imprimable en 3D, il aurait fallu de nombreuses calles et réimpression afin d’avoir un châssis de robot acceptable. Le 2ème problème était dû au faite, que la modélisation du châssis avait était conçue en une seule pièce. Ainsi le modèle posait problème avec le logiciel 3D car il considérait que certain solide était positionné au dessus de certain autres solides creux. De plus, le logiciel, Cura, prévoyait plus de 10h d’impression pour un robot de 20x12x10cm. Ce qui est presque impossible à réaliser avec le matériel du Fabricarium, à moins de lancer l’impression la nuit, auquel cas nous n’aurions pas pu intervenir sur l’imprimante en cas de bug. C’est alors que nous nous sommes tournés vers nos professeurs afin de leur demander conseils. Ils nous ont alors précisé que les impressions 3D n’étaient pas très robustes, et qu’il valait mieux partir sur un châssis en plexiglas ou en bois. Après plus d’une dizaine d’heures de travaux personnels pour la modélisation de notre robot, nous avons pris la décision de repartir de zéros et de partir sur un châssis en plexiglas. Le choix a été difficile à prendre car plusieurs fonctionnalités « fun » de notre robot reposaient sur ce modèle 3D.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:chassis3D.png|800px|]]&lt;br /&gt;
&lt;br /&gt;
''Modélisation 3D du châssis sur Sketchup''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 8-9 : Code – Première partie == &lt;br /&gt;
&lt;br /&gt;
Dans une première partie, nous avons déclarer nos ports en tant que constantes, afin de nous faciliter la tâche lors de la programmation de l’Arduino. Ensuite nous nous sommes occupés des fonctions de déplacement du robot : avancer, reculer, tourner à gauche ou à droite. Une fois ces fonctions codées, nous avons relié le sonar à l’Arduino, puis nous avons déterminé une distance minimal raisonnable à partir de laquelle le robot tourne à gauche pour éviter l’obstacle.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 10-11 : Conception du châssis 2D == &lt;br /&gt;
&lt;br /&gt;
Après notre échec en modélisation 3D, nous sommes repartis pour la modélisation mais cette fois ci en 2D. La prise en main du logiciel s’est avéré plus facile que celle de skecthup, et nos bonnes pratiques de mesures et de précision, développées lors de la modélisation 3D, nous ont permis de concevoir un châssis fiable et précis. Nous sommes partis sur une conception de 2 étages superposables, munis de 2 encoches pour les roues. Les piles et les moteurs CC seront fixés en dessous du 1er étage, l’Arduino et le shield au dessus de celui-ci, et enfin les leds et les différents capteurs au dessus du 2ème étage dans un souci d’esthétique.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 12-13 : Code - Seconde partie ==&lt;br /&gt;
&lt;br /&gt;
Dans  notre deuxième phase de programmation, nous nous sommes occupés du TSOP. Tout d’abord, nous avons codé la fonction de détection du signal, que nous convertissons en hexadécimal dans un second temps. Pour tester notre TSOP, nous avons utilisé une télécommande mise à notre disposition. C’est alors que nous avons eu l’idée de récupérer le code hexadécimal du bouton on/off de la télécommande. Nous avons ainsi programmé notre Arduino pour qu’il s’arrête dès qu’il détecte ce code hexadécimal. Il est aussi capable de reprendre son fonctionnement lorsqu’il le redétecte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 14 : Montage == &lt;br /&gt;
&lt;br /&gt;
Après avoir dessiné nos 2 étages, nous nous sommes rendus au Fabricarium afin de réaliser la découpe. Nous avons appris à régler la machine et à lancer la découpe de A à Z. Cela a été très enrichissant pour nous, et nous a permis de nous rendre compte de la simplicité de réalisation d’un  châssis 2D comparé à un modèle 3D. Cependant nous nous sommes aperçus que les moteurs ne tenaient pas très bien sur notre 1er étage.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 15-16 : Châssis 2D - Rectification == &lt;br /&gt;
&lt;br /&gt;
Dans un premier temps nous nous sommes dit qu’il valait mieux coller les moteurs sur la plaque de plexiglas, afin d’éviter qu’ils bougent, mais après avoir demandé conseils aux professeurs, nous avons décidé de nous inspirer des robots des sessions précédentes, et de partir sur un système 4 encodes (contre 2 actuellement), tout en réduisant légèrement la taille des pièces de fixation du robot.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:etage1.png|360px]]&lt;br /&gt;
&lt;br /&gt;
''Modèle final du châssis en plexiglass''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Soudure 17&lt;br /&gt;
&lt;br /&gt;
description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 18 : Assemblage ==&lt;br /&gt;
&lt;br /&gt;
Fort de notre expérience en découpe laser, c’est avec facilité que nous avons découpé le 2ème étage de notre robot. Une fois les 2 étages découpés et le shield soudé, il ne nous resté plus qu’une étape dans la conception mécanique de notre robot : l’assemblage. En une petite demi-heure, nous avons collé, visé... et notre robot pris forme ! &lt;br /&gt;
Nous avons décidé d’acheter une petite batterie 9V plutôt que de prendre les 6 piles fournis par l’école dans un souci de place et de poids. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance 19 : Test == &lt;br /&gt;
&lt;br /&gt;
Une fois le robot assemblé nous avons procédé à quelques test afin de nous assurer que le montage avait bien était fait et que le shield avait bien été soudé. C’est avec joie que nous avons pu voir notre robot rouler de façon autonome dans la classe tout en évitant les murs et les armoires ! Il ne nous restait plus qu’à coder les leds et le capteur à effet hall.&lt;br /&gt;
Cependant nous nous sommes vite aperçus que la batterie 9V se déchargeait beaucoup trop vite, nous avons donc dû repartir sur 6 piles de 1,5V.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Code – Dernière partie 20 - et plus&lt;br /&gt;
&lt;br /&gt;
Pour finir, nous avons codé la leds IR et le capteur à effet hall.&lt;br /&gt;
Description (leds IR, capteur à effet hall)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Fonctionnalités du robot final ''' &amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Après de longues séances de travail, nous somme arriver à obtenir un robot fonctionnel, disposant de nombreuses fonctions. Certaines étaient imposées par notre BE, mais nous en avons rajouter d’autre, afin d’avoir un robot unique et personnalisé. Désormais nous fière de vous présenter notre robot qui est capable de :&lt;br /&gt;
&lt;br /&gt;
   -Évoluer de façon autonome tout en évitant les obstacles (en tournant sur sa gauche)&lt;br /&gt;
   -Arrêter et recommencer sa course grâce au bouton d’une télécommande (en détectant le code hexadécimal envoyé par le bouton on/off de la télécommande)&lt;br /&gt;
   -Commencer/arrêter sa course grâce à un interrupteur mécanique &lt;br /&gt;
   -S’arrêter lorsqu’il est capturé par un robot proie (via un capteur à effet hall)&lt;br /&gt;
   -Émettre des signaux infrarouge&lt;br /&gt;
   -Récupérer des signaux infrarouge grâce à un TSOP&lt;br /&gt;
   -Se mettre en mode fuite : le robot enclenche plusieurs virages en allant beaucoup plus vite&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span style=&amp;quot;color:darkblue&amp;quot;&amp;gt; ''' Conclusion ''' &amp;lt;/span&amp;gt; = &lt;br /&gt;
&lt;br /&gt;
En conclusion, ce bureau d'étude a été un excellent moyen de découvrir ce que le département IMA avait à nous proposer. Nous avons pu découvrir des notions d'électronique, d'informatique, ou encore de modélisation (2D/3D).&lt;br /&gt;
Lors de ce BE, nous nous sommes rendu compte que la simple notion d’électronique ou d’informatique ne suffisait pas à la réalisation d’un robot. Nous avons dû lier la pratique à la théorie, l’électronique à la mécanique tout en restant pragmatique. L’esprit critique était aussi de la partie, nous avons du certes prendre des décisions difficiles, quitte à revoir notre feuille de route, mais nous sommes aujourd’hui fier du travail que nous avons accompli.&lt;br /&gt;
C’est donc sur un point positif que nous achevons notre projet qui nous a permis de nous faire une bonne idée du département IMA.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:Circuittk.png&amp;diff=9769</id>
		<title>Fichier:Circuittk.png</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Fichier:Circuittk.png&amp;diff=9769"/>
				<updated>2018-05-06T21:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=8673</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=8673"/>
				<updated>2018-01-19T15:34:57Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Objectif :''' - Réaliser un robot capable d'éviter collisions et prédateurs.&lt;br /&gt;
&lt;br /&gt;
'''Cahier des charges :'''&lt;br /&gt;
&lt;br /&gt;
   - Robot de dimensions inférieures à un cube de 10cm.&lt;br /&gt;
   - Mode &amp;quot;Échappement&amp;quot; permettant de facilité l'évitement de prédateur.&lt;br /&gt;
   - Capable de détecter un prédateur situé à une distance inférieure à X cm.&lt;br /&gt;
   - Capable d'éviter un mur, objet... situé sur le chemin du robot.&lt;br /&gt;
&lt;br /&gt;
'''Matériel utilisé :'''&lt;br /&gt;
&lt;br /&gt;
   - Arduino MEGA&lt;br /&gt;
   - 2 Moteur CC&lt;br /&gt;
   - 1 LED IR&lt;br /&gt;
   - 1 Récepteur IR&lt;br /&gt;
   - 1 &amp;quot;Shield&amp;quot; adapté à l'Arduino&lt;br /&gt;
   - Sonar HCSR04&lt;br /&gt;
   - Contrôleur de moteur TB6612FNG&lt;br /&gt;
   - 4x Pile 1.5V&lt;br /&gt;
   - 1 Buzzer&lt;br /&gt;
   - 1 Servomoteur&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Introduction :'''&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
'''Compte Rendu des séances :'''&lt;br /&gt;
&lt;br /&gt;
''[[Séance 1 :]]''&lt;br /&gt;
&lt;br /&gt;
Après avoir pris connaissance du sujet, nous avons préparé une ligne directrice pour notre projet.&lt;br /&gt;
L'objectif est de réaliser un robot de petite taille, rapide et capable d'éviter toutes collisions.&lt;br /&gt;
Afin que notre binôme comprennent bien les objectifs à atteindre et les souhaits individuelles, nous avons mis en place le cahier des charges et l'avons modifié afin de ne pas rendre impossible le projet.&lt;br /&gt;
Nous avons également réfléchis à l'aspect esthétique du robot en s'inspirant de ceux déjà présent dans la salle.&lt;br /&gt;
&lt;br /&gt;
''[[Séance 2 :]]'' &lt;br /&gt;
&lt;br /&gt;
Cahier des charges commencé, nous avons réfléchis à la mise en œuvre de nos idées. Pour cela, nous avons pris connaissance de l'ensemble du matériel actuel disponible.&lt;br /&gt;
Afin de modéliser plus facilement le circuit électronique présent dans notre robot, nous avons utilisé Freezing tout d'abord à l'aide d'un Arduino ainsi qu'une Breadboard.&lt;br /&gt;
&lt;br /&gt;
''[[Séance 3 :]]''&lt;br /&gt;
&lt;br /&gt;
Conception des fonctionnalités (servomoteur et système mécanique associé).&lt;br /&gt;
Nous avons finis la modélisation de notre partie électronique sur Breadboard, il faut à présent transféré ceci sur un Shield.&lt;br /&gt;
Afin d'avoir un coté &amp;quot;Fun&amp;quot; au robot lorsqu'il s'échappe, nous avons mis en place un mode dit &amp;quot;furtif&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
''[[Séance 4 :]]''&lt;br /&gt;
&lt;br /&gt;
Mise en place du Shield.&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=8597</id>
		<title>Binome2017-3</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2017-3&amp;diff=8597"/>
				<updated>2018-01-15T09:19:08Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : Page créée avec « Objectif : - Faire une proie légère, rapide et renforcé sur ses cotés pour éviter toutes collisions.            - Prévoir en cas de poursuite par un prédateur un sy... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Objectif : - Faire une proie légère, rapide et renforcé sur ses cotés pour éviter toutes collisions.&lt;br /&gt;
           - Prévoir en cas de poursuite par un prédateur un système d'esquive&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2017-2018&amp;diff=8592</id>
		<title>BE 2017-2018</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=BE_2017-2018&amp;diff=8592"/>
				<updated>2018-01-15T09:03:17Z</updated>
		
		<summary type="html">&lt;p&gt;Vkersken : /* Réalisations des binômes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Objectif à atteindre =&lt;br /&gt;
&lt;br /&gt;
Le thème de la saison 8 est la réalisation de robots communicant sur le modèle proies et prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Pour toute la partie identification et poursuite, une interaction par signal infra-rouge modulé est préconisée. Les proies émettent un signal propre à leur condition et sont ainsi identifiées par les prédateurs. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s'orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu'elles sont prises en chasse. Pour simuler la capture de la proie, la conception d'un système de communication à très faible distance est laissé à la sagacité des élèves.&lt;br /&gt;
&lt;br /&gt;
Les proies comme les prédateurs peuvent être autonomes ou télécommandés. Pour le mode de télécommande deux solutions sont envisagées : utilisation d'une télécommande infra-rouge ou utilisation d'un téléphone intelligent. Pour la dernière solution, il est nécessaire d'embarquer une Raspberry Pi 3 sur le robot.&lt;br /&gt;
&lt;br /&gt;
La taille du robot n'est pas fixé. Vous pouvez envisager des robots miniatures d'une dizaine de centimètres de coté.&lt;br /&gt;
 &lt;br /&gt;
= Matériel à votre disposition pour les robots =&lt;br /&gt;
&lt;br /&gt;
Votre robot doit pouvoir réaliser les actions suivantes :&lt;br /&gt;
* avancer et reculer le tout en tournant éventuellement ;&lt;br /&gt;
* émettre des signaux infra-rouges pulsés ;&lt;br /&gt;
* décoder des signaux infra-rouges pulsés ;&lt;br /&gt;
* détecter des obstacles sur son chemin.&lt;br /&gt;
&lt;br /&gt;
Nous vous imposons de construire ce robot à base de micro-contrôleur ATMega. Par contre nous vous laissons le choix de la variante. Les possibilités sont classées de la plus simple à la plus complexe.&lt;br /&gt;
* Vous pouvez partir d'un des robots construits lors des saisons précédentes. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées peuvent vous faire gagner du temps que vous pourrez consacrer à la programmation du robot.&lt;br /&gt;
* Vous pouvez construire un robot à partir d'un des deux chassis proposés, utiliser un Arduino Mega et concevoir un bouclier pour cet Arduino comportant des emplacements pour les divers composants nécessaires (contrôleur moteur, détecteur ultrason, LED infra-rouge, récepteur infra-rouge TSOP, etc).&lt;br /&gt;
* Vous pouvez aussi fabriquer votre propre chassis avec deux plaques de plexiglass produites par la découpeuse laser ou avec une structure imprimée en 3D. Il ne reste plus qu'à intégrer à ce chassis deux moto-réducteurs et leurs roues ainsi qu'une roue folle. Pour le micro-contrôleur vous pouvez aussi vous passer de l'Arduino Mega et concevoir votre propre circuit intégré à base de micro-contrôleur ATMega328p et d'un contrôleur moteurs TB6612FNG. Seul le sonar ultrason est trop complexe pour être conçu à partir des composants de base.&lt;br /&gt;
* Si vous aimez les défis vous pouvez aussi construire un robot avec un moto-réducteur de meilleure qualité ou avec une carte électronique réalisée uniquement avec des composants électroniques de surface. Vous pouvez même construire un robot miniature.&lt;br /&gt;
&lt;br /&gt;
Les montages photographiques ci-dessous présentent les éléments permettant de construire un robot sans trop souffrir et les composants de base pour construire un robot plus optimisé et personnalisé.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:robot-kit-2018.jpg|300px|thumb|left|Chassis, Arduino Mega, récepteur infra-rouge, sonar, contrôleur moteurs]]&lt;br /&gt;
[[Fichier:robot-composant-2018.jpg|300px|thumb|right|Moto-réducteurs et roues, micro-contrôleurs ATMega328p et quartz, contrôleur de moteurs TB6612FNG, LED infra-rouge]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des robots miniatures peuvent être réalisés en utilisant des servo-moteurs continus et des pièces en plexiglas ou en contreplaqué découpées à l'aide de la découpeuse laser du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Certaines formes plus complexes peuvent éventuellement être réalisées à l'aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d'imprimer des pneus avec du PLA flexible.&lt;br /&gt;
Pour les fixations vous avez de la visserie (vis, écrous, entretoises).&lt;br /&gt;
&lt;br /&gt;
= Logiciels à utiliser =&lt;br /&gt;
&lt;br /&gt;
Pour concevoir un schéma propre du câblage de votre robot vous pouvez utiliser [http://fritzing.org/home/ fritzing]. Tous les composants de votre robot ne sont pas modélisés dans fritzing. Voici une liste de composants supplémentaires mis au points par des élèves IMA de la promotion 2017 (Julie Debock, Hugo Vandenbunder et Sylvain Verdonck) et revus par les encadrants du bureau d'études :&lt;br /&gt;
* détecteur ultrason : [[Fichier:UltrasonicSensor_HCSR04.zip]]&lt;br /&gt;
* contrôleur de moteurs : [[Fichier:MotorDriver_Pololu_md08a.zip]]&lt;br /&gt;
&lt;br /&gt;
Pour la conception de circuits imprimés nous vous recommandons le logiciel [http://www.cadsoftusa.com/download-eagle/freeware/ eagle] ou le précédent.&lt;br /&gt;
&lt;br /&gt;
Pour la découpe laser de nombreux utilisateurs utilisent [https://inkscape.org/fr/ inkscape].&lt;br /&gt;
&lt;br /&gt;
Pour la conception 3D solidwork est très utilisé. Vous pouvez tenter [http://www.freecadweb.org/?lang=fr_FR freeCAD] si vous cherchez un logiciel plus libre. Une solution en ligne existe : [https://www.onshape.com/ onshape].&lt;br /&gt;
&lt;br /&gt;
Pour le développement avec les plateformes Arduino, utilisez l'environnement du même nom. Si la programmation C++ vous fait peur, n'hésitez pas à ajouter l'outil [http://sourceforge.net/projects/ardublock/ ardublock] à cet environnement.&lt;br /&gt;
&lt;br /&gt;
Pour vous aider dans la conception des circuits imprimés nous vous proposons des circuits modélisés avec fritzing que vous pourrez adapter à vos robots. Ces circuits ont été ébauchés par des élèves IMA et retouchés par les encadrants du bureau d'études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d'éviter tous les câbles entre l'Arduino et les contrôleurs de moteurs : [[Fichier:robot_bouclier.zip]]. Ce circuit est prévu pour 4 moteurs, les binômes avec des chassis bi-moteurs devront le simplifier. Après téléchargement, prenez soin de modifier le suffixe &amp;lt;code&amp;gt;.zip&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;.fzz&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:robot_bouclier_bb.png|Bouclier : plaque d'essai&lt;br /&gt;
Fichier:robot_bouclier_schem.png|Bouclier : schéma&lt;br /&gt;
Fichier:robot_bouclier_pcb.png|Bouclier : circuit imprimé&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un second circuit permet de se passer totalement d'un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l'Arduino. La plupart des capteurs et actionneurs nécessaires à vos robots sont présents sur la carte. Après téléchargement, prenez soin de modifier le suffixe &amp;lt;code&amp;gt;.zip&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;.fzz&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;gallery style=&amp;quot;margin: 0 auto;&amp;quot;&amp;gt;&lt;br /&gt;
Fichier:RobotPCB_bb.png|Contrôleur : plaque d'essai&lt;br /&gt;
Fichier:RobotPCB_schem.png|Contrôleur : schéma&lt;br /&gt;
Fichier:RobotPCB_pcb.png|Contrôleur : circuit imprimé&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration du système embarqué =&lt;br /&gt;
&lt;br /&gt;
Pour contrôler les robots télécommandés vous utiliserez un ordinateur miniature Raspberry Pi 3. Cet ordinateur doit être configuré comme un point d'accès WiFi pour permettre une connexion à partir d'un téléphone intelligent.&lt;br /&gt;
&lt;br /&gt;
Il existe au moins deux méthode de se connecter sur la Raspberry PI 3 pour la configurer. La première méthode est la méthode &amp;quot;grand public&amp;quot; en utilisant la carte graphique intégrée sur la Raspberry et en lui connectant écran, clavier et souris. La seconde méthode est plus spartiate et traditionnellement utilisée dans le monde des systèmes embarqués : la connexion par liaison série.&lt;br /&gt;
&lt;br /&gt;
== Connexion série ==&lt;br /&gt;
&lt;br /&gt;
Vous êtes de futurs ingénieurs, la méthode &amp;quot;liaison série&amp;quot; est à votre portée et vous pourrez l'employer pour d'autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n'avons pas besoin de l'interface graphique, il est préférable de choisir la distribution &amp;quot;Raspbian Jessie Lite&amp;quot; plus légère en terme d'espace disque. La configuration décrite ci-après a été effectuée sur la version du 2017-01-11.&lt;br /&gt;
&lt;br /&gt;
Une fois l'archive zippée de la distribution récupérée vous pouvez l'installer sur la carte SD après l'avoir décompressée en utilisant la commande &amp;lt;code&amp;gt;dd&amp;lt;/code&amp;gt; :&lt;br /&gt;
 dd if=2017-01-11-raspbian-jessie-lite.img of=/dev/sdb&lt;br /&gt;
Le nom du périphérique &amp;lt;code&amp;gt;/dev/sdb&amp;lt;/code&amp;gt; peut varier suivant votre machine, vous pouvez lister les noms des périphériques blocs avec la commande &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt;. Exécutez cette commande avant et après l'insertion de votre carte SD et vous aurez le nom utilisé par votre système.&lt;br /&gt;
&lt;br /&gt;
Avant de démarrer la Raspberry Pi 3 sur cette carte SD, vous devez modifier quelques paramètres de démarrage. En effet sur les dernières version de la distribution raspbian, la connexion série a été laissée de coté. Plusieurs explications à cela : la Raspberry vise plus le marché du jouet grand public que celui du système embarqué, de plus la Raspberry Pi 3 intégre maintenant une interface bluetooth disponible via le port série principal. Il est cependant possible d'utiliser le second port série désigné sous le nom de périphérique &amp;lt;code&amp;gt;/dev/serial0&amp;lt;/code&amp;gt;. Montez la première partition de votre carte SD Raspian Lite avec la commande&lt;br /&gt;
 mount /dev/sdb1 /mnt&lt;br /&gt;
puis examinez les fichiers &amp;lt;code&amp;gt;cmdline.txt&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;config.txt&amp;lt;/code&amp;gt;. Attention le nom de la partition n'est pas forcément &amp;lt;code&amp;gt;/dev/sdb1&amp;lt;/code&amp;gt;, utilisez &amp;lt;code&amp;gt;lsblk&amp;lt;/code&amp;gt; pour déterminer le nom de la première partition de votre carte SD sur votre machine. Vérifiez que l'option &amp;lt;code&amp;gt;console=serial0,115200&amp;lt;/code&amp;gt; est bien présente dans la ligne du fichier &amp;lt;code&amp;gt;cmdline.txt&amp;lt;/code&amp;gt; et ajoutez &amp;lt;code&amp;gt;enable_uart=1&amp;lt;/code&amp;gt; à la fin du fichier &amp;lt;code&amp;gt;config.txt&amp;lt;/code&amp;gt;. N'oubliez pas de libérer votre carte SD par la commande&lt;br /&gt;
 umount /mnt&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ensuite insérer la carte SD dans la Raspberry Pi. Utilisez le câble USB/série pour connecter votre Raspberry à votre PC. Il faut enficher les câbles noir, blanc et vert du câble USB/série [https://www.adafruit.com/product/954] sur les entrées/sorties correspondantes de la Raspberry [https://pinout.xyz/]. Le câble noir doit être sur la broche 6, le câble blanc sur la broche 8 et le câble vert sur la broche 10. Alimentez votre Raspberry Pi et lancez la commande suivante sur votre PC &lt;br /&gt;
 minicom -o -8 -b 115200 -D /dev/ttyUSB0&lt;br /&gt;
Vous devez obtenir, in fine, l'invite de connexion de la Raspberry&lt;br /&gt;
 Raspbian GNU/Linux 8 raspberrypi ttyS0&lt;br /&gt;
  &lt;br /&gt;
 raspberrypi login:&lt;br /&gt;
Vous pouvez vous connecter avec l'identifiant &amp;lt;code&amp;gt;pi&amp;lt;/code&amp;gt; et le mot de passe &amp;lt;code&amp;gt;raspberry&amp;lt;/code&amp;gt;. Pour passer administrateur utilisez la commande &amp;lt;code&amp;gt;sudo su&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Mise à jour de la distribution ==&lt;br /&gt;
&lt;br /&gt;
La distribution Raspbian vient avec le système de démarrage &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt;. Ce système n'est pas forcément adapté à l'usage que nous souhaitons faire de la Raspberry : utilisation en tant que système embarqué et manipulation en mode texte. Il est assez simple de supprimer, en tant qu'administrateur, le paquetage &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; ainsi que deux autres paquetages qui tentent de gérer automatiquement la configuration réseau &amp;lt;code&amp;gt;dhcpcd5&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;openresolv&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get purge dhcpcd5 openresolv &lt;br /&gt;
 apt-get purge systemd &lt;br /&gt;
Attention pour que la seconde commande fonctionne, il faut que la Raspberry Pi puisse récupérer des paquetages, donc soit connectée au réseau. En salle E304, vous pouvez connecter votre Raspberry sur la seconde interface réseau d'une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interface&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
   address 172.26.79.1XX&lt;br /&gt;
   netmask 255.255.240.0&lt;br /&gt;
   gateway 172.26.79.254&lt;br /&gt;
avec &amp;lt;code&amp;gt;XX&amp;lt;/code&amp;gt; le numéro de votre Zabeth. Il faut aussi mettre une adresse de serveur de noms dans le fichier &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
 nameserver 193.48.57.34&lt;br /&gt;
Enfin pour que la Raspberry accède aux dépôts de paquetage sur Internet, il faut lui indiquer d'utiliser les serveurs mandataires Web de l'école :&lt;br /&gt;
 export http_proxy=http://proxy.polytech-lille.fr:3128&lt;br /&gt;
Il est normal que la suppression de &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; retourne une erreur, il faudra relancer la Raspberry pour l'enlever définitivement. Avant cela modifiez le fichier &amp;lt;code&amp;gt;/etc/inittab&amp;lt;/code&amp;gt; et remplacez la ligne&lt;br /&gt;
 #T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100&lt;br /&gt;
par la ligne&lt;br /&gt;
 T0:23:respawn:/sbin/getty -L serial0 115200 vt100&lt;br /&gt;
Après le redémarrage de la Raspberry enlevez définitivement &amp;lt;code&amp;gt;systemd&amp;lt;/code&amp;gt; en tapant à nouveau la commande&lt;br /&gt;
 apt-get purge systemd &lt;br /&gt;
&lt;br /&gt;
== Connexion sur la Raspberry par &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
La connexion sur la Raspberry par série a ses limites : le terminal texte est assez mal géré et à terme la connexion série sera dédié à la communication avec le micro-contrôleur. Maintenant que la Raspberry est configurée sur le réseau, il est souhaitable de s'y connecter en utilisant la commande &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Pour activer le serveur &amp;lt;code&amp;gt;ssh&amp;lt;/code&amp;gt; sur la Raspberry, utilisez les commandes suivantes :&lt;br /&gt;
 update-rc.d ssh enable&lt;br /&gt;
 invoke-rc.d ssh start &lt;br /&gt;
&lt;br /&gt;
Vous pouvez alors vous connecter sur la Raspberry avec la commande :&lt;br /&gt;
 ssh pi@172.26.79.1XX&lt;br /&gt;
Si le message d'erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l'appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l'avant-dernière ligne du fichier &amp;lt;code&amp;gt;/etc/profile.d/sshpasswd.sh&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Configuration en point d'accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d'accès, installez le paquetage &amp;lt;code&amp;gt;hostapd&amp;lt;/code&amp;gt; :&lt;br /&gt;
  apt-get install hostapd&lt;br /&gt;
&lt;br /&gt;
Copiez le fichier de configuration de &amp;lt;code&amp;gt;hostapd&amp;lt;/code&amp;gt; qui se trouve dans le répertoire &amp;lt;code&amp;gt;/usr/share/doc/hostapd/examples/&amp;lt;/code&amp;gt; dans le répertoire &amp;lt;code&amp;gt;/etc/hostapd&amp;lt;/code&amp;gt; :&lt;br /&gt;
  cp /usr/share/doc/hostapd/examples/hostapd.conf.gz /etc/hostapd&lt;br /&gt;
  gunzip /etc/hostapd/hostapd.conf.gz&lt;br /&gt;
Examinez le fichier &amp;lt;code&amp;gt;/etc/hostapd/hostapd.conf&amp;lt;/code&amp;gt; à la recherche des mots-clefs suivants :&lt;br /&gt;
* &amp;lt;code&amp;gt;ssid&amp;lt;/code&amp;gt;, indiquez votre nom de réseau WiFi ;&lt;br /&gt;
* &amp;lt;code&amp;gt;country_code&amp;lt;/code&amp;gt;, mettez le code de la France &amp;lt;code&amp;gt;FR&amp;lt;/code&amp;gt; ;&lt;br /&gt;
* &amp;lt;code&amp;gt;channel&amp;lt;/code&amp;gt;, faites en sorte que les Raspberry n'écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l'option (mettre à 1) ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa_passphrase&amp;lt;/code&amp;gt;, donnez le mot de passe de votre réseau (au moins 8 caractères) ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa_key_mgmt&amp;lt;/code&amp;gt;, à configurer à la valeur &amp;lt;code&amp;gt;WPA-PSK&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Enfin dans le fichier &amp;lt;code&amp;gt;/etc/default/hostapd&amp;lt;/code&amp;gt;, définissez le chemin du fichier de configuration :&lt;br /&gt;
 DAEMON_CONF=/etc/hostapd/hostapd.conf&lt;br /&gt;
Relancez le service par la commande :&lt;br /&gt;
 service hostapd restart&lt;br /&gt;
&lt;br /&gt;
Vous pouvez vérifier avec votre téléphone que votre réseau WiFi est bien visible.&lt;br /&gt;
&lt;br /&gt;
== Configuration IP des clients WiFi ==&lt;br /&gt;
&lt;br /&gt;
Pour que les clients WiFi puissent obtenir une adresse IP et autres coordonnées réseau, installez le paquetage &amp;lt;code&amp;gt;isc-dhcp-server&amp;lt;/code&amp;gt; :&lt;br /&gt;
  apt-get install isc-dhcp-server&lt;br /&gt;
&lt;br /&gt;
Tout d'abord choisir un réseau IPv4, par exemple &amp;lt;code&amp;gt;192.168.100.0/24&amp;lt;/code&amp;gt; et affecter à la Raspberry une adresse de ce réseau, par exemple &amp;lt;code&amp;gt;192.168.100.1&amp;lt;/code&amp;gt;. Pour cela ajoutez le bloc ci-dessous à la fin du fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; :&lt;br /&gt;
 auto wlan0&lt;br /&gt;
 iface wlan0 inet static&lt;br /&gt;
   address 192.168.100.1&lt;br /&gt;
   netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
Il est alors possible de configurer le serveur DHCP au travers de son fichier de configuration &amp;lt;code&amp;gt;/etc/dhcp/dhcpd.conf&amp;lt;/code&amp;gt;. Les directives à modifier sont les suivantes :&lt;br /&gt;
* &amp;lt;code&amp;gt;option domain-name&amp;lt;/code&amp;gt;, spécifiez un nom de domaine de votre choix (&amp;lt;code&amp;gt;monrobot.org&amp;lt;/code&amp;gt; par exemple) ;&lt;br /&gt;
* &amp;lt;code&amp;gt;option domain-name-servers&amp;lt;/code&amp;gt;, spécifiez l'adresse &amp;lt;code&amp;gt;192.168.100.1&amp;lt;/code&amp;gt; comme serveur DNS ;&lt;br /&gt;
* &amp;lt;code&amp;gt;authoritative&amp;lt;/code&amp;gt;, déclarez votre serveur DHCP comme légitime.&lt;br /&gt;
Il faut aussi ajouter un bloc réseau comme celui-ci :&lt;br /&gt;
 subnet 192.168.100.0 netmask 255.255.255.0 {&lt;br /&gt;
   range 192.168.100.100 192.168.100.200;&lt;br /&gt;
   option routers 192.168.100.1;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Relancez le service par la commande :&lt;br /&gt;
 service isc-dhcp-server restart&lt;br /&gt;
Vous devez maintenant pouvoir connecter votre téléphone sur votre réseau WiFi. La bonne connexion au réseau WiFi doit se voir dans le fichier de contrôle &amp;lt;code&amp;gt;/var/log/daemon.log&amp;lt;/code&amp;gt; et l'obtention d'une adresse IP doit se lire dans le fichier &amp;lt;code&amp;gt;/var/log/syslog&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Ajout d'un nom réseau pour la Raspberry Pi ==&lt;br /&gt;
&lt;br /&gt;
A ce point votre téléphone peut contacter la Raspberry par son adresse IP. Pour pouvoir faire de même avec un nom significatif installez le paquetage &amp;lt;code&amp;gt;bind9&amp;lt;/code&amp;gt; :&lt;br /&gt;
  apt-get install bind9&lt;br /&gt;
&lt;br /&gt;
Ajoutez un bloc dans le fichier de configuration &amp;lt;code&amp;gt;/etc/bind/named.conf&amp;lt;/code&amp;gt; :&lt;br /&gt;
 zone &amp;quot;monrobot.org&amp;quot;  {&lt;br /&gt;
   type master;&lt;br /&gt;
   file &amp;quot;/etc/bind/db.monrobot&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Créez le fichier &amp;lt;code&amp;gt;/etc/bind/db.monrobot&amp;lt;/code&amp;gt; avec un contenu de ce type :&lt;br /&gt;
 $TTL    604800&lt;br /&gt;
 @       IN      SOA     localhost. root.localhost. (&lt;br /&gt;
                              2         ; Serial&lt;br /&gt;
                         604800         ; Refresh&lt;br /&gt;
                          86400         ; Retry&lt;br /&gt;
                        2419200         ; Expire&lt;br /&gt;
                         604800 )       ; Negative Cache TTL&lt;br /&gt;
 @       IN      NS      localhost.&lt;br /&gt;
 robot   IN      A       192.168.100.1&lt;br /&gt;
&lt;br /&gt;
Enfin ajoutez en tête du fichier &amp;lt;code&amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt; la ligne&lt;br /&gt;
 domain monrobot.org&lt;br /&gt;
&lt;br /&gt;
Vous pouvez vérifier le bon fonctionnement du résolveur de nom en tapant &lt;br /&gt;
  host -t any robot 192.168.100.1&lt;br /&gt;
&lt;br /&gt;
== Installation d'un serveur Web ==&lt;br /&gt;
&lt;br /&gt;
La commande du robot doit se faire via une interface Web. Il faut donc installer un serveur Web sur la Raspberry Pi avec un système de page dynamiques pour exécuter du code sur la Raspberry. Il suffit pour cela d'installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php5&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php5&lt;br /&gt;
&lt;br /&gt;
Un premier test consiste à donner &amp;lt;code&amp;gt;robot&amp;lt;/code&amp;gt; dans la barre d'adresses du navigateur Web de votre téléphone. La page de test du serveur Web &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; doit s'afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d'effectuer une action comme l'arrêt de la Raspberry Pi. Cette page est à mettre dans le répertoire &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt;. Voila un exemple de page PHP, nommez la &amp;lt;code&amp;gt;index.php&amp;lt;/code&amp;gt; et supprimez le fichier &amp;lt;code&amp;gt;index.html&amp;lt;/code&amp;gt; :&lt;br /&gt;
 &amp;lt;?php&lt;br /&gt;
 if(array_key_exists('stop',$_POST)){ &lt;br /&gt;
   system('super halt');&lt;br /&gt;
   die('halting ...');&lt;br /&gt;
   }&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
 &amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
   &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;title&amp;gt;Contrôle Web&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
   &amp;lt;form method=&amp;quot;POST&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;stop&amp;quot; value=&amp;quot;Arrêter&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
 &amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notez l'appel de fonction &amp;lt;code&amp;gt;system('super halt')&amp;lt;/code&amp;gt;. Pour que cet appel ait l'effet désiré, c'est à dire l'arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n'est pas possible pour une raison de droits : l'utilisateur &amp;lt;code&amp;gt;www-data&amp;lt;/code&amp;gt; sous lequel tourne le serveur &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; n'a pas le privilège de lancer la commande &amp;lt;code&amp;gt;halt&amp;lt;/code&amp;gt;. Nous allons donc utiliser l'utilitaire &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; pour autoriser le serveur Web à lancer la commande :&lt;br /&gt;
  apt-get install super&lt;br /&gt;
Ajoutez ensuite la ligne ci-dessous à la fin fichier de configuration de &amp;lt;code&amp;gt;super&amp;lt;/code&amp;gt; qui se nomme &amp;lt;code&amp;gt;/etc/super.tab&amp;lt;/code&amp;gt; :&lt;br /&gt;
 halt    /sbin/halt      uid=root        www-data&lt;br /&gt;
&lt;br /&gt;
Voila, vous devriez pouvoir arrêter votre Raspberry Pi en cliquant sur le bouton &amp;quot;Arrêter&amp;quot; de votre page Web.&lt;br /&gt;
&lt;br /&gt;
== Communication série ==&lt;br /&gt;
&lt;br /&gt;
Votre Raspberry Pi va probablement devoir communiquer avec un micro-contrôleur. Le plus simple est d'établir une communication série. Par contre les pages Web dynamiques peuvent difficilement utiliser le port série étant donné leur durée de vie, c'est à dire d'exécution, limitée. La solution propre pour permettre à des pages Web d'utiliser un port série est de passer par un serveur websocket. Ce type de processus est lancé au démarrage de la machine et accapare le port série. L'intérêt est que le serveur websocket est facilement contactable par un programma javascript tournant sur le navigateur.&lt;br /&gt;
&lt;br /&gt;
Sur votre Raspberry, vous devez installer le paquetage &amp;lt;code&amp;gt;libwebsockets-dev&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install libwebsockets-dev&lt;br /&gt;
Récupérez ensuite le programme C stocké sur ce Wiki [[Fichier:Webserial.zip‎]]. Décompressez-le et compilez-le avec la commande :&lt;br /&gt;
  gcc -Wall webserial.c -o webserial -lwebsockets&lt;br /&gt;
Vous pouvez faire en sorte que ce programme soit lancé dès le démarrage de la Raspberry Pi en modifiant le fichier &amp;lt;code&amp;gt;/etc/rc.local&amp;lt;/code&amp;gt;. Pensez à préciser le chemin complet du programme et à suffixer par un &amp;amp; pour que le programme soit lancé en tâche de fond.&lt;br /&gt;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L'exemple qui suit permet d'allumer et d'éteindre des LEDs connectées à un Arduino et à savoir quels boutons sont pressés. Pour les LEDs, le numéro de la LED à gérer est donné par les 7 bits de poids faible et le bit de poids fort permet de savoir s'il faut l'allumer ou l'éteindre. Pour les boutons, un octet est envoyé par l'Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l'Arduino est très court :&lt;br /&gt;
 #define LED1       8&lt;br /&gt;
 #define Bouton1    2&lt;br /&gt;
 #define Bouton2    3&lt;br /&gt;
 &lt;br /&gt;
 void setup(void){&lt;br /&gt;
 Serial.begin(9600);&lt;br /&gt;
 for(int i=0;i&amp;lt;6;i++) pinMode(LED1+i,OUTPUT);&lt;br /&gt;
 pinMode(Bouton1,INPUT);&lt;br /&gt;
 pinMode(Bouton2,INPUT);&lt;br /&gt;
 digitalWrite(Bouton1,HIGH);&lt;br /&gt;
 digitalWrite(Bouton2,HIGH);&lt;br /&gt;
 for(int i=0;i&amp;lt;6;i++){&lt;br /&gt;
     digitalWrite(LED1+i,HIGH);&lt;br /&gt;
     delay(200);&lt;br /&gt;
     digitalWrite(LED1+i,LOW);&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop(void){&lt;br /&gt;
 if(Serial.available()&amp;gt;0){&lt;br /&gt;
   unsigned char actions=Serial.read();&lt;br /&gt;
   int led=LED1+actions&amp;amp;0x7f;&lt;br /&gt;
   if((actions&amp;amp;0x80)==0) digitalWrite(led,HIGH); else digitalWrite(led,LOW);&lt;br /&gt;
 }&lt;br /&gt;
 unsigned char capteurs=0;&lt;br /&gt;
 if(digitalRead(Bouton1)==LOW) capteurs |= 0x01;&lt;br /&gt;
 if(digitalRead(Bouton2)==LOW) capteurs |= 0x02;&lt;br /&gt;
 Serial.write(capteurs);&lt;br /&gt;
 delay(100);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
La page Web qui dialogue avec le serveur websocket encore plus courte est disponible sur ce Wiki [[Fichier:Jsserial.zip]].&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n'imposons pas de répartition rigide des tâches. Pour qu'une démonstration puisse se faire en fin de bureau d'étude il faut au moins un robot proie et un robot prédateur.&lt;br /&gt;
&lt;br /&gt;
== Robot proie ==&lt;br /&gt;
&lt;br /&gt;
Un robot proie est constitué comme suit :&lt;br /&gt;
* un châssis roulant, un contrôleur pour chaque paire de moteurs, un Arduino Uno ou un circuit électronique maison à base de micro-contrôleur ATMega328p ;&lt;br /&gt;
* des détecteurs ultrason pour éviter les collisions ;&lt;br /&gt;
* un récepteur infra-rouge TSOP pour décoder les signaux infra-rouges modulés ;&lt;br /&gt;
* un émetteur infra-rouge pour émettre un signal signalant le robot comme une proie ;&lt;br /&gt;
* un dispositif récepteur à courte distance pour simuler la capture par un prédateur, vous pouvez partir sur l'idée d'un capteur à effet Hall.&lt;br /&gt;
&lt;br /&gt;
Dans son mode autonome, le robot se promène dans la pièce en évitant les obstacles de façon tranquille et prévisible. Quand il repère un prédateur à son signal infra-rouge, la proie se déplace plus vivement avec de brusques changements de direction. Quand le détecteur à courte distance indique que le robot proie est à portée du prédateur, il s'arrête. Faire clignoter des LED rouges serait assez à propos. &lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter un mode télécommande au robot. La modification la plus simple consiste à recevoir des ordres d'une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres pour accélèrer ou décélérer, pour tourner tranquillement ou brusquement.&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin vous pouvez équiper votre robot d'une Raspberry PI 3 communiquant avec la carte de contrôle en série. Le robot peut alors être téléguidé par un téléphone.&lt;br /&gt;
&lt;br /&gt;
== Robot prédateur ==&lt;br /&gt;
&lt;br /&gt;
Un robot prédateur est constitué comme suit :&lt;br /&gt;
* un châssis roulant, un contrôleur pour chaque paire de moteurs, un Arduino Uno ou un circuit électronique maison à base de micro-contrôleur ATMega328p ;&lt;br /&gt;
* un détecteur ultrason pour ne pas rentrer dans les obstacles ;&lt;br /&gt;
* des récepteurs infra-rouges TSOP pour décoder les signaux infra-rouges modulés ;&lt;br /&gt;
* un émetteur infra-rouge pour émettre un signal signalant le robot comme un prédateur ;&lt;br /&gt;
* un dispositif émetteur à courte distance pour simuler la capture d'une proie, par exemple un électro-aimant.&lt;br /&gt;
&lt;br /&gt;
Dans son mode autonome, le robot tourne en rond à la recherche d'une proie. Dès qu'il en repère une, il se précipite vers elle en se calant sur son signal infra-rouge. Quand le prédateur pense être à porté de la proie, il active la communication à faible portée. Cette activation est temporaire pour donner une chance à la proie de s'échapper.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez ajouter un mode télécommande au robot. La modification la plus simple consiste à recevoir des ordres d'une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d'activation de la communication &amp;quot;capture&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Pour aller plus loin vous pouvez équiper votre robot d'une Raspberry PI 3 communiquant avec la carte de contrôle en série. Le robot peut alors être téléguidé par un téléphone.&lt;br /&gt;
&lt;br /&gt;
== Réalisations des binômes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Numéro !! Elèves !! Type de robot !! Page&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 1&lt;br /&gt;
| Prénom Nom / Prénom Nom&lt;br /&gt;
| &lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Prénom Nom / Prénom Nom&lt;br /&gt;
| &lt;br /&gt;
| [[Binome2017-2|Binôme 2 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 3&lt;br /&gt;
| Valentin Kerskens / Kadir Tekin&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-3|Binôme 3 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 4&lt;br /&gt;
| Prénom Nom / Prénom Nom&lt;br /&gt;
| &lt;br /&gt;
| [[Binome2017-4|Binôme 4 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 5&lt;br /&gt;
| Clémence Béchet / Pierre Gautreau&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Prénom Nom / Prénom Nom&lt;br /&gt;
| &lt;br /&gt;
| [[Binome2017-6|Binôme 6 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 7&lt;br /&gt;
| Nour Ekhlas &lt;br /&gt;
| Proie &lt;br /&gt;
| [[Binome2017-7|Binôme 7 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 8&lt;br /&gt;
| Vincent Dubois&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-8|Binôme 8 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 9&lt;br /&gt;
| Raphaël Bonvalet / Damien Tillaux&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-9|Binôme 9 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Vkersken</name></author>	</entry>

	</feed>