<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
		<id>https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aroussel</id>
		<title>Wiki de Projets IMA - Contributions de l’utilisateur [fr]</title>
		<link rel="self" type="application/atom+xml" href="https://projets-ima.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aroussel"/>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Aroussel"/>
		<updated>2026-07-20T12:55:24Z</updated>
		<subtitle>Contributions de l’utilisateur</subtitle>
		<generator>MediaWiki 1.29.2</generator>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2020/2022_P10&amp;diff=87965</id>
		<title>IMA3/IMA4 2020/2022 P10</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=IMA3/IMA4_2020/2022_P10&amp;diff=87965"/>
				<updated>2022-01-19T16:57:54Z</updated>
		
		<summary type="html">&lt;p&gt;Aroussel : Page créée avec «                                          '''&amp;lt;big&amp;gt;'''&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;Projet S6-S7 : Voiture radiocommandée autonome&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;'''&amp;lt;/big&amp;gt;''' &amp;lt;sm... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;                                         '''&amp;lt;big&amp;gt;'''&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;Projet S6-S7 : Voiture radiocommandée autonome&amp;lt;/span&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;'''&amp;lt;/big&amp;gt;'''&lt;br /&gt;
&amp;lt;small&amp;gt;POURRIER Matéo / AMOROS Paul / BLACK Baptiste / ROUSSEL Alexandre&amp;lt;/small&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'objectif de ce wiki est de permettre (aux futurs personnes intéressées par ce projet) la pleine réalisation de cette voiture radiocommandée/autonome en suivant simplement les instructions expliquées et détaillées ci-dessous.&lt;br /&gt;
&lt;br /&gt;
== '''Configuration de la voiture et de la Raspberry'''==&lt;br /&gt;
Dans un premier temps, il faut pouvoir paramétrer la direction et la vitesse de notre voiture. Pour se faire, il nous faut utiliser différents programmes sur Arduino. Le premier d'entre eux  que nous avons choisi est le servomoteur.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Le servomoteur (code Arduino)===&lt;br /&gt;
Nous avons utilisé l'interface d'Arduino (dont le langage est Python) afin de calibrer notre servomoteur. La configuration du spectre de rotation de ce dernier peut se faire via le code suivant :&amp;lt;br&amp;gt;&lt;br /&gt;
  #include &amp;lt;Servo.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;Servo servo;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.begin&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;9600&amp;lt;/span&amp;gt;);    &amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;//Serial.begin permet d'initialiser la communication série, ici à 9600 bauds&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.attach&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;);       &amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;//servo.attach permet de configurer le numéro du pin lié au servomoteur, ici 9&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;Serial.println&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;60&amp;lt;/span&amp;gt;);    &amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;//serial.println affiche la valeur passée en paramètre&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;60&amp;lt;/span&amp;gt;);       &amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;//servo.write envoie la valeur passée en paramètre au servomoteur&amp;lt;/span&amp;gt;&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;Serial.println&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;120&amp;lt;/span&amp;gt;);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;120&amp;lt;/span&amp;gt;);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;180&amp;lt;/span&amp;gt;);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;120&amp;lt;/span&amp;gt;);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;60&amp;lt;/span&amp;gt;);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;);&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Une fois que la calibration du servomoteur est effectuée, nous pouvons passer au moteur.&lt;br /&gt;
&lt;br /&gt;
===   Le moteur (code Arduino)===&lt;br /&gt;
Le moteur brushless étant également dirigé par l'Arduino, il nous faut connaître la plage de valeurs à lui transmettre pour aller à une vitesse consigne.&amp;lt;br&amp;gt;&lt;br /&gt;
Voici le code que nous avons utilisé :&lt;br /&gt;
  #include &amp;lt;Servo.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;Servo brushless;&lt;br /&gt;
  int mode = 0;&lt;br /&gt;
  boolean sent = false;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void setup&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.begin&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;9600&amp;lt;/span&amp;gt;);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.attach&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt;);&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;(!sent)&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;(mode == 1)&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;90&amp;lt;/span&amp;gt;);&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.println&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;quot;Neutral point&amp;quot;&amp;lt;/span&amp;gt;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;else if&amp;lt;/span&amp;gt;(mode == 2)&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;180&amp;lt;/span&amp;gt;);&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.println&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;quot;Full throttle&amp;quot;&amp;lt;/span&amp;gt;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;else if&amp;lt;/span&amp;gt;(mode == 3)&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.write&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;);&lt;br /&gt;
        &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.println&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;&amp;quot;Full brake&amp;quot;&amp;lt;/span&amp;gt;);&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
      sent = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void serialEvent&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;while&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.available&amp;lt;/span&amp;gt;())&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
      char inChar = (char)&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.read&amp;lt;/span&amp;gt;();&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;(inChar = '1')&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
        mode++;&lt;br /&gt;
        sent = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt; &lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===   La Raspberry===&lt;br /&gt;
Toute la partie de pré-configuration + configuration (paquets et prgm à installer).&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Contrôle à distance'''==&lt;br /&gt;
La première des 2 étapes de ce projet consiste à piloter la voiture à l'aide d'un site web hébergé par un serveur Node.js. Le principal atout de ce serveur est la possibilité de coder en Javascript, un langage de programmation déjà connu. On peut également utiliser Node.js pour faire des applications cross-plateforme.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====   Le server node js====&lt;br /&gt;
Nous en arrivons à l’étape où nous allons devoir paramétrer la transmission de l’information. Pour cela nous nous sommes basés sur le travail d’étudiants ayant réalisé un projet similaire en tant que projet de fin d’étude, le projet 4xCar. En étudiant leur travail nous avons compris la nécessité de l’implantation d’un serveur faisant le lien entre l’application web, et la raspberry qui est en quelque sorte le client de l’information apportée par la page web et transmise par le serveur.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons fait nos premiers tests sur les serveurs en faisant tourner le programme serveur.js depuis un ordinateur premièrement, puis directement sur la raspberry par la suite.&lt;br /&gt;
&lt;br /&gt;
De ces essais nous avons pu déduire que les deux cas de figure sont fonctionnels et que l’on peut donc utiliser les deux configurations selon nos besoins.&lt;br /&gt;
&lt;br /&gt;
	Le serveur en lui même est codé dans le programme serveur.js, disur le git du projet 4xCar : https://github.com/EloiZalczer/4xCar/blob/master/server.js&lt;br /&gt;
&lt;br /&gt;
Notre groupe étant composé d’étudiants connaissant le langage C, mais débutant dans le domaine de la programmation web, nous avons commencé par réutiliser le serveur fonctionnel proposé par le groupe de 4xCar. Celui basé son fonctionnement sur la transmission de requêtes http grâce à des websockets.  Ainsi, il convient de définir le port que l’on souhaite écouter pour recevoir ces requêtes, qui correspond donc à la page web par laquelle on passe la commande souhaitée.&lt;br /&gt;
&lt;br /&gt;
On défini également différentes sockets servant à la transmission d’une information telle que :&lt;br /&gt;
le début de l’utilisation du véhicule&lt;br /&gt;
la fin de l’utilisation&lt;br /&gt;
une commande composée d’une valeur de vitesse et de direction&lt;br /&gt;
&lt;br /&gt;
Enfin, les fonctions composées à l’aide de socket.emit.broadcast s’occupent d’envoyer les sockets transmises par la page web sur l’adresse de broadcast du serveur. C'est-à-dire que l'information est transmise à tous les clients connectés, sauf à l’envoyeur des sockets.&lt;br /&gt;
&lt;br /&gt;
Cette étape nous amène à la réception et au traitement de ces sockets par la raspberry.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La RaspberryPi====&lt;br /&gt;
&lt;br /&gt;
Comme nous avons pu en parler précédemment, le premier travail réalisé au niveau de la raspberry pi à été l’installation de nombreux paquets/librairies/utilitaires nécessaires au bon fonctionnement de l’ensemble. Cette étape du travail a été la plus évolutive dans la mesure où nous avons dû nous adapter aux différents éléments ajoutés à l’ensemble, la réception des sockets du serveur, la transmission à l’arduino, c’est à dire le traitement côté “client” des informations envoyées par la page web.&lt;br /&gt;
&lt;br /&gt;
Mais par la suite la partie la plus importante réalisée sur la rapsberry à été la partie programmation pour récupérer les websockets transmises par le serveur, en extraire l’information et enfin les transmettre à l’arduino par liaison série. Arduino qui, comme expliqué précédemment, est déjà prêt à recevoir l’information par liaison série.&lt;br /&gt;
&lt;br /&gt;
Tout d’abord nous utilison le programme pilot.py :&lt;br /&gt;
https://github.com/EloiZalczer/4xCar/blob/master/ironcar/pilot.py&lt;br /&gt;
	&lt;br /&gt;
Ce programme était initialement conçu par le groupe de projet dont nous nous sommes principalement inspirés pour faire fonctionner notre véhicule. Il contient toutefois des informations non nécessaires à l’application actuelle : En effet, nous n’avons pas encore traité la partie pilote automatique. Nous nous sommes donc principalement intéressés à la classe ManualPilot et à son fonctionnement.&lt;br /&gt;
&lt;br /&gt;
Cette classe utilise des variables telles que self.commande[] le tableau des commandes transmises grâce au websockets du serveur mais aussi des variables telles que self.images[] un tableau qui servira par la suite du projet à récupérer les images transmises par la caméra.&lt;br /&gt;
&lt;br /&gt;
L’utilisation de ce programme s’explicite par l’importation de la classe ManualPilot dans le main qui est disponible ici :&lt;br /&gt;
https://github.com/EloiZalczer/4xCar/blob/master/ironcar/main.py&lt;br /&gt;
&lt;br /&gt;
En effet on remarque  dans ce programme: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/1/1e/IpSerial.png&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Cette adresse ip est passable en paramètre du main et doit donc également être modifiée selon la configuration réseau utilisée.&lt;br /&gt;
Dans notre cas, nous utilisons ce programme exécuté avec l’option -m pour manual mode.&lt;br /&gt;
&lt;br /&gt;
L’action combinée de ces 2 programmes permet donc à notre RaspberryPi d’établir le contact avec le serveur et donc la page web de commande, mais également de communiquer avec ces derniers. C’est ainsi que nous parvenons à transmettre les commandes speed et direction à l’arduino. En outre nous pourrons probablement continuer de les exploiter pour, dans le futur, récupérer les informations de la caméra ou d’autres appareil de mesures du véhicule pour ensuite les transmettre au serveur et les traiter (en affichant par exemple l’image mesurée par la caméra sur la page web, ou encore en stockant dans une base de donnée des mesures d’autres capteurs pour l’automatisation) &lt;br /&gt;
&lt;br /&gt;
Évidemment, nous avons encore une fois dû appliquer quelques modifications aux programmes pour notre cas d’application, mais nous avons préféré citer le modèle original qui nous a permis d’en comprendre le fonctionnement.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== L’application web de commande====&lt;br /&gt;
&lt;br /&gt;
En dernier lieu nous avons dû nous intéresser à la conception d’une page web, et plus précisément à celle d’une page web capable de transmettre l’information définie par ses boutons et autres entrées. En nous inspirant une nouvelle fois sur nos homologues de 4xCar nous avons pu établir notre application en réutilisant le dossier complet :&lt;br /&gt;
https://github.com/EloiZalczer/4xCar/tree/master/public&lt;br /&gt;
&lt;br /&gt;
Les différents boutons nécessaires sont implantés dans le fichier HTML, ainsi qu’un panneau de contrôle qui permet d’envoyer deux données en fonction de la position de la souris en x,y sur le panneau, ce qui permet dans notre cas d’énoncer les données speed (verticalement) et direction (horizontalement). &lt;br /&gt;
&lt;br /&gt;
Le panneau est disposé sur la page dans la HTML file, mais est toutefois initialisé dans le fichier annexe qui lui est dédié nommé controller.js. En effet ce fichier définit les différentes variables dont le panneau de contrôle à besoin pour fonctionner, c'est-à-dire pour déchiffrer la donnée entrée par l’utilisateur, et ensuite la transmettre via une websocket de commande, comme expliqué dans les parties précédentes.&lt;br /&gt;
&lt;br /&gt;
En outre pour le bon fonctionnement de l’application web il est nécessaire d’intégrer au projet un autre fichier dependencies qui contient simplement la librairie socket.io qui est encore une fois utilisée pour transmettre les websockets au serveur. &lt;br /&gt;
A la fin de notre fichier HTML il convient donc d'intégrer ses lignes de code pour donner au site web les ressources nécessaires à son bon fonctionnement.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/1/10/RessourcesWebProj.png&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====  Le site web====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
&amp;lt;url&amp;gt;&lt;br /&gt;
https://upload.wikimedia.org/wikipedia/commons/9/97/SiteWebProj.png&lt;br /&gt;
&amp;lt;/url&amp;gt;&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Le code Arduino final====&lt;br /&gt;
Nous avons, dans une précédente partie, calibrer notre servomoteur ainsi que notre moteur. Nous sommes donc prêt à concevoir, puis téléverser, le code final de notre Arduino. Ce dernier devra être en communication série avec la Raspberry. De plus, il devra appliquer les valeurs envoyées depuis la Raspberry et les affecter correctemetn entre le servomoteur et le moteur. Voici notre code final :&lt;br /&gt;
  #include &amp;lt;Servo.h&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;String command = &amp;quot;&amp;quot;;&lt;br /&gt;
  bool received = false;&lt;br /&gt;
  Servo servo;&lt;br /&gt;
  Servo brushless;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;void setup()&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.begin&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;9600&amp;lt;/span&amp;gt;);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;command.reserve&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;3&amp;lt;/span&amp;gt;);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.attach&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;9&amp;lt;/span&amp;gt;);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.attach&amp;lt;/span&amp;gt;(&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;11&amp;lt;/span&amp;gt;);&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;br&amp;gt;&lt;br /&gt;
  void loop&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;(received)&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;control_motors&amp;lt;/span&amp;gt;(command[&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;0&amp;lt;/span&amp;gt;], command[&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt;]);&lt;br /&gt;
      command = &amp;quot;&amp;quot;;&lt;br /&gt;
      received = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;false&amp;lt;/span&amp;gt;;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;br&amp;gt;&lt;br /&gt;
  void serialEvent&amp;lt;/span&amp;gt;()&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;while&amp;lt;/span&amp;gt;(Serial.available()) &lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
      char inChar = (char)&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;Serial.read&amp;lt;/span&amp;gt;();     &amp;lt;span style=&amp;quot;color: grey;&amp;quot;&amp;gt;// get the new byte&amp;lt;/span&amp;gt;&lt;br /&gt;
      command += inChar;&amp;lt;br&amp;gt;&lt;br /&gt;
      &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;(inChar == 0) &lt;br /&gt;
        received = &amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;true&amp;lt;/span&amp;gt;;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;br&amp;gt;&lt;br /&gt;
  void control_motors&amp;lt;/span&amp;gt;(char &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;direction&amp;lt;/span&amp;gt;, char &amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;speed&amp;lt;/span&amp;gt;)&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;{&amp;lt;/span&amp;gt;&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;servo.write&amp;lt;/span&amp;gt;(((unsigned int)&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;direction&amp;lt;/span&amp;gt;)*5);&lt;br /&gt;
    &amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;brushless.write&amp;lt;/span&amp;gt;((unsigned int)&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;speed&amp;lt;/span&amp;gt;);&lt;br /&gt;
  &amp;lt;span style=&amp;quot;color: brown;&amp;quot;&amp;gt;}&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Autopilote'''==&lt;br /&gt;
Cette étape permet à la voiture d'apprendre à piloter grâce à la reconnaissance d'images (cette partie pourra être réalisée avec un prolongement du projet au S8).&lt;/div&gt;</summary>
		<author><name>Aroussel</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=87962</id>
		<title>Projets IMA3 IMA4 2020/2022</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Projets_IMA3_IMA4_2020/2022&amp;diff=87962"/>
				<updated>2022-01-19T16:57:32Z</updated>
		
		<summary type="html">&lt;p&gt;Aroussel : /* Répartition des binômes 2021/2022 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Répartition des binômes 2021/2022 ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Projet !! Encadrants école !! Eleves&lt;br /&gt;
|-&lt;br /&gt;
| P8 [[IMA3/IMA4 2020/2022 P8|Objet connecté pour la gestion des applications]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Aymerick SERGEANT / Alix DUFOUR / Thibault MEYNIER / Arthur VAIN / Maxime BALBASTRE&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P5 [[IMA3/IMA4 2020/2022 P5|Machine learning pour le diagnostic de machines défectueuses]]&lt;br /&gt;
| Othman Lakhal / K. Midzodzi PEKPE&lt;br /&gt;
| Antoine BROSSAS / Tom CARRERE / Loïc BAL  / Aymen BACCAR / Florian DERLIQUE&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P6 [[IMA3/IMA4 2020/2022 P6|Network monitoring]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Valentin DOSIAS/ Simon DOUTEAU / Théo LEFEBVRE/ Tristan PAYEN&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P7 [[IMA3/IMA4 2020/2022 P4|Conception et commande d'un minisegway]]&lt;br /&gt;
| Midzodzi Pekpe / Othman Lakhal&lt;br /&gt;
| Maxence Neus/ Omar Sifa / Logan Paquin/ Ayman Moummadi&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P1 [[IMA3/IMA4 2020/2022 P1|Emulation d'une ferme éolienne connectée au réseau]]&lt;br /&gt;
| Florian CHEVALIER / Betty SEMAIL / Philippe DELARUE / Abdelkader BENABOU&lt;br /&gt;
| LACROIX Héloïse / WANG Miaoqi / HENRY Flavie / MAZOUZI Janet&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P11 [[IMA3/IMA4 2020/2022 P11|Mise en place d'un réseau de capteurs dans les salles de Polytech]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| Yanis LACROIX/ Florian VALLEE / Haitam BLGRIM/ Abdelillah EL KHOTRI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P14 [[IMA3/IMA4 2020/2022 P13| Utilisation de la plate-forme virtuelle Godot pour la mise en œuvre du concept de jumelage numérique sur un robot]]&lt;br /&gt;
| Othman Lakhal / Blaise Conrard &lt;br /&gt;
| Brahim LEMRABET / Ayoub ER-REGUYBY &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P9 [[IMA3/IMA4 2020/2022 P9|Conception et commande d'une main bio inspiré ]]&lt;br /&gt;
| Othman Lakhal / K. Midzodzi PEKPE&lt;br /&gt;
| Sami AGGAR / Ali KHALAF / Florian PRIN / Ilyass MEHARZI&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P4 [[IMA3/IMA4 2020/2022 P7|Conception d'une mangeoire connectée]]&lt;br /&gt;
| Thomas Vantroys&lt;br /&gt;
| BLONDELLE Victor, GARIN Benoit, GIELEN Corentin, LAURENT Maxence, PAPASEIT Matthieu&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P2 [[IMA3/IMA4 2020/2022 P2|Véhicule Autonome]]&lt;br /&gt;
| Midzodzi Pekpe / Othman Lakhal&lt;br /&gt;
| Clément KOPERSKI / Konstantin PATRIKEEV / Julien DUMON / Ronan SING&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P3 [[IMA3/IMA4 2020/2022 P3|Conception et commande d'un Drone]]&lt;br /&gt;
| Midzodzi Pekpe / Othman Lakhal&lt;br /&gt;
| Louise Maës / Léo Poumaer / Niels Godbert / Rémi Brachot / Lucas Postollec / Chaimae Yasmine &lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| P10 [[IMA3/IMA4 2020/2022 P10| Voiture Radiocommandée Autonome]]&lt;br /&gt;
| Vantroys Thomas&lt;br /&gt;
| ROUSSEL Alexandre / BLACK Baptiste / AMOROS Paul / POURRIER Matéo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Aroussel</name></author>	</entry>

	</feed>