<?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=Vlefebvr</id>
	<title>Wiki de bureau d&#039;é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=Vlefebvr"/>
	<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Vlefebvr"/>
	<updated>2026-11-10T00:09:52Z</updated>
	<subtitle>Contributions de l’utilisateur</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10156</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10156"/>
		<updated>2019-05-09T14:45:09Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #0080FF; vertical-align: top; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10155</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10155"/>
		<updated>2019-05-09T14:44:54Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #0080FF; vertical-align: top; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10154</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10154"/>
		<updated>2019-05-09T14:44:26Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #0080FF; vertical-align: top; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10153</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10153"/>
		<updated>2019-05-09T14:44:08Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #0080FF; vertical-align: top; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10152</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10152"/>
		<updated>2019-05-09T14:42:08Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=&amp;lt;div class=&amp;quot;mcwiki-header&amp;quot; style=&amp;quot;border-radius: 15px; padding: 15px; font-weight: bold; text-align: center; font-size: 80%; background: #0080FF; vertical-align: top; width: 98%;&amp;quot;&amp;gt; Introduction &amp;lt;/div&amp;gt;=&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10151</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10151"/>
		<updated>2019-05-09T14:40:33Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
 &lt;br /&gt;
= Compétences et matériel utilisé =&lt;br /&gt;
&lt;br /&gt;
Compétences :&lt;br /&gt;
&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
Matériel ;&lt;br /&gt;
&lt;br /&gt;
* Nous avons pu nous inspirer des robots des années précédentes pour construire notre robot. Nous étions même autorisé à les détruises pour récupérer leur matos. Ces robots ne sont pas forcément totalement fonctionnels mais les parties déjà réalisées nous ont fait gagner du temps que nous avons pu consacrer à la programmation du robot.&lt;br /&gt;
&lt;br /&gt;
* Pour faire le support du robot c&amp;#039;est à dire son châssis nous avion utilisé du plexiglas. Pour faire la découpe du support, nous avons utilisé la découpe laser.&lt;br /&gt;
Il faut faire attention de bien optimiser l&amp;#039;espace de son châssis. Dans l&amp;#039;absolue il vaut mieux faire trop grand et faire tenir le tout avec des ajouts non prévus que d&amp;#039;avoir un support trop petit et de devoir retirer du matos initialement prévu pour le robot. &lt;br /&gt;
&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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10150</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10150"/>
		<updated>2019-05-09T14:31:01Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
Durant notre année nous avons du réaliser des robots dans le domaine des proies ou prédateurs.&lt;br /&gt;
&lt;br /&gt;
Les prédateurs doivent repérer et rattraper des proies. Ils sont donc lourd et on besoin de moteurs puissants. Les proies émettent un signal qui permet aux prédateurs de les détecter et sont donc ainsi identifiées grâce aux tsops. Les prédateurs possèdent un système de réception infra-rouge directionnel permettant de s&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Les prédateurs n&amp;#039;ont pas besoin de connaître le relief de la pièce une fois la poursuite lancée. En effet, comme les proies ne savent pas voler, c&amp;#039;est à elle d&amp;#039;éviter les murs ce qui permet d’alléger le programme des robots prédateurs. &lt;br /&gt;
&lt;br /&gt;
Les proies et les prédateurs doivent être clairement autonome. &lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Mais il est préférable d&amp;#039;avoir un robot plus rapide pour les proies là où un robot plus massif sera conseillé pour les robots prédateurs.&lt;br /&gt;
Nous avons choisi pour notre projet de faire un robot prédateur.&lt;br /&gt;
 &lt;br /&gt;
= Matériel à notre disposition pour les robots =&lt;br /&gt;
&lt;br /&gt;
Notre robot doit pouvoir réaliser les actions suivantes :&lt;br /&gt;
* avancer et tourner ;&lt;br /&gt;
* s&amp;#039;orienter par rapport aux signaux que les tsops lui transmettent lors d&amp;#039;une course poursuite ;&lt;br /&gt;
* éventuellement émettre des signaux pour complexifier et rendre plus tacte la chasse ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Vous pouvez partir d&amp;#039;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&amp;#039;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&amp;#039;à intégrer à ce chassis deux moto-réducteurs et leurs roues ainsi qu&amp;#039;une roue folle. Pour le micro-contrôleur vous pouvez aussi vous passer de l&amp;#039;Arduino Mega et concevoir votre propre circuit intégré à base de micro-contrôleur ATMega328p et d&amp;#039;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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10149</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10149"/>
		<updated>2019-05-09T14:21:24Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&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&amp;#039;orienter dans la phase de poursuite. Les prédateurs émettent aussi un signal infra-rouge permettant ainsi aux proies de savoir qu&amp;#039;elles sont prises en chasse. Pour simuler la capture de la proie, la conception d&amp;#039;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&amp;#039;une télécommande infra-rouge ou utilisation d&amp;#039;un téléphone intelligent. Pour la dernière solution, il est nécessaire d&amp;#039;embarquer une Raspberry Pi 3 sur le robot.&lt;br /&gt;
&lt;br /&gt;
La taille du robot n&amp;#039;est pas fixé. Vous pouvez envisager des robots miniatures d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;à intégrer à ce chassis deux moto-réducteurs et leurs roues ainsi qu&amp;#039;une roue folle. Pour le micro-contrôleur vous pouvez aussi vous passer de l&amp;#039;Arduino Mega et concevoir votre propre circuit intégré à base de micro-contrôleur ATMega328p et d&amp;#039;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&amp;#039;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&amp;#039;aide des imprimantes 3D du [http://www.fabricarium.fr/mediawiki-1.23.5/index.php?title=Accueil Fabricarium]. Il est possible d&amp;#039;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&amp;#039;é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&amp;#039;environnement du même nom. Si la programmation C++ vous fait peur, n&amp;#039;hésitez pas à ajouter l&amp;#039;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&amp;#039;études.&lt;br /&gt;
&lt;br /&gt;
Un premier circuit de type bouclier Arduino permet d&amp;#039;éviter tous les câbles entre l&amp;#039;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&amp;#039;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&amp;#039;un Arduino : [[Fichier:RobotPCB.zip]]. Le coeur de la carte est un micro-contrôleur ATMega328p comme sur l&amp;#039;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&amp;#039;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&amp;#039;accès WiFi pour permettre une connexion à partir d&amp;#039;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&amp;#039;employer pour d&amp;#039;autres dispositifs. Vous allez commencer par récupérer la dernière version de la distribution Linux pour Raspberry Pi. Comme nous n&amp;#039;avons pas besoin de l&amp;#039;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&amp;#039;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&amp;#039;archive zippée de la distribution récupérée vous pouvez l&amp;#039;installer sur la carte SD après l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;est pas forcément adapté à l&amp;#039;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&amp;#039;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&amp;#039;une Zabeth. Dans le fichier &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; vous pouvez écrire la configuration ci-dessous :&lt;br /&gt;
 auto eth0&lt;br /&gt;
 iface eth0 inet dhcp&lt;br /&gt;
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&amp;#039;utiliser les serveurs mandataires Web de l&amp;#039;é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&amp;#039;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&amp;#039;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&amp;#039;erreur à la connexion vous énerve, il vous suffit de rajouter un &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt; devant l&amp;#039;appel de fonction &amp;lt;code&amp;gt;check_hash&amp;lt;/code&amp;gt; à l&amp;#039;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&amp;#039;accès ==&lt;br /&gt;
&lt;br /&gt;
Pour que votre Raspberry Pi 3 devienne un point d&amp;#039;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&amp;#039;écoutent pas toutes sur le même canal ;&lt;br /&gt;
* &amp;lt;code&amp;gt;wpa&amp;lt;/code&amp;gt;, activez l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;obtention d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;installer les paquetages &amp;lt;code&amp;gt;apache2&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;php7&amp;lt;/code&amp;gt; :&lt;br /&gt;
 apt-get install apache2 php7&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&amp;#039;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&amp;#039;afficher.&lt;br /&gt;
&lt;br /&gt;
Vous pouvez aussi écrire une petite page permettant d&amp;#039;effectuer une action comme l&amp;#039;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(&amp;#039;stop&amp;#039;,$_POST)){ &lt;br /&gt;
   system(&amp;#039;super halt&amp;#039;);&lt;br /&gt;
   die(&amp;#039;halting ...&amp;#039;);&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[&amp;#039;PHP_SELF&amp;#039;]; ?&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&amp;#039;appel de fonction &amp;lt;code&amp;gt;system(&amp;#039;super halt&amp;#039;)&amp;lt;/code&amp;gt;. Pour que cet appel ait l&amp;#039;effet désiré, c&amp;#039;est à dire l&amp;#039;arrêt propre de la Raspberry Pi, il faut que le serveur Web puisse déclencher cet arrêt. De base, ce n&amp;#039;est pas possible pour une raison de droits : l&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;é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&amp;#039;est à dire d&amp;#039;exécution, limitée. La solution propre pour permettre à des pages Web d&amp;#039;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&amp;#039;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‎]] ou [[Fichier:Webserialv2.zip]] suivant la version de votre bibliothèque &amp;lt;code&amp;gt;libwebsockets&amp;lt;/code&amp;gt;). 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;
&lt;br /&gt;
Avec notre serveur websocket nous pouvons implanter des protocoles simples. L&amp;#039;exemple qui suit permet d&amp;#039;allumer et d&amp;#039;é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&amp;#039;il faut l&amp;#039;allumer ou l&amp;#039;éteindre. Pour les boutons, un octet est envoyé par l&amp;#039;Arduino dont chaque bit indique si le bouton est appuyé ou non.&lt;br /&gt;
&lt;br /&gt;
Le programme de l&amp;#039;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;
Penser à placer le fichier jquery.js stocké sur [[Fichier:jquery.zip]] dans votre dossier &amp;lt;code&amp;gt;/var/www/html&amp;lt;/code&amp;gt; pour assurer le bon fonctionnement de la page web.&lt;br /&gt;
&lt;br /&gt;
= Répartition des tâches =&lt;br /&gt;
&lt;br /&gt;
Nous n&amp;#039;imposons pas de répartition rigide des tâches. Pour qu&amp;#039;une démonstration puisse se faire en fin de bureau d&amp;#039;é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&amp;#039;idée d&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;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&amp;#039;une proie. Dès qu&amp;#039;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&amp;#039;é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&amp;#039;une télécommande infra-rouge. Le robot pourrait ainsi recevoir des ordres de direction, de vitesse et d&amp;#039;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&amp;#039;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;
| Ziyad Houssaini* / Lucas Houziaux*&lt;br /&gt;
| Proie&lt;br /&gt;
| [[Binome2017-1|Binôme 1 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 2&lt;br /&gt;
| Théo Evrard! / Valériane Salingue*&lt;br /&gt;
| Prédateur&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;
| Alex Lagneau* / Adrien Piednoel!&lt;br /&gt;
| Proie&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;
| Prédateur&lt;br /&gt;
| [[Binome2017-5|Binôme 5 2017/2018]]&lt;br /&gt;
|-&lt;br /&gt;
| Binôme 6&lt;br /&gt;
| Claire Devisme° / Noémie Lounici!&lt;br /&gt;
| Prédateur&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;
| Prédateur &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>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10144</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10144"/>
		<updated>2019-05-09T13:37:52Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : Contenu remplacé par « presentation du robot      objectifs      materiel  la carte      etude de la carte modele      modification de la carte      soudure  le... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[presentation du robot]]&lt;br /&gt;
     [[objectifs]]&lt;br /&gt;
     [[materiel]]&lt;br /&gt;
&lt;br /&gt;
[[la carte]]&lt;br /&gt;
     [[etude de la carte modele]]&lt;br /&gt;
     [[modification de la carte]]&lt;br /&gt;
     [[soudure]]&lt;br /&gt;
&lt;br /&gt;
[[le robot]]&lt;br /&gt;
     [[schema inkscape]]&lt;br /&gt;
     [[montage]]&lt;br /&gt;
&lt;br /&gt;
[[le programme]]&lt;br /&gt;
     [[algorithme]]&lt;br /&gt;
     [[fonction utile]]&lt;br /&gt;
     [[difficultés avec les TSOP]]&lt;/div&gt;</summary>
		<author><name>Vlefebvr</name></author>
	</entry>
	<entry>
		<id>https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10136</id>
		<title>Binome2018-1</title>
		<link rel="alternate" type="text/html" href="https://peip-ima.plil.fr/mediawiki/index.php?title=Binome2018-1&amp;diff=10136"/>
		<updated>2019-05-09T12:49:02Z</updated>

		<summary type="html">&lt;p&gt;Vlefebvr : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;include nopre noesc src=&amp;quot;/home/pedago/ppeip/include/video-Robot_Binome02_2017-iframe.html&amp;quot; /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;&amp;gt;&lt;br /&gt;
Copyright &amp;#039;&amp;#039;&amp;#039;Valérianne et Théo&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notre PROJEEEET: ==&lt;br /&gt;
&lt;br /&gt;
 [[Fichier:macron.png|200px|thumb|left|&amp;quot;Parce que c&amp;#039;est notre projet&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Mission:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 Créer un être robotoïde, à la fois autonome et sensible aux commandes par ondes electromagnétiques, capable de se hisser au plus haut rang de l&amp;#039;échelle alimentaire de son écosystème.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Nous nous lançons donc dans la conception d&amp;#039;un prédateur si puissant, dangereux, féroce ! Si bien que la Terre n&amp;#039;aura jamais rien connu de tel depuis la disparition des dinosaures mouahahah&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Caractéristiques:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Nom: &amp;#039;&amp;#039;Jean Kevin&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Espèce: &amp;#039;&amp;#039;Indeterminé mais dangereux&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Taille: &amp;#039;&amp;#039;10*15*5 (#cpaslataillequicompte)&lt;br /&gt;
&lt;br /&gt;
Vitesse de pointe: &amp;#039;&amp;#039;30km/h, soit 8,333 m/s&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Il sera doté d&amp;#039;intelligence artificielle, de 2 roues motrices indépendantes mais reliées par un même axe ainsi que de capteurs ultra son et infra rouge dans le but de détecter obstacles et proies. Il s&amp;#039;intégrera à son écosystème au moyen d&amp;#039;une led infrarouge, qui lui confèrera le titre de prédateur aux yeux de tous les autres robots en présence. Il pourra occasionnelement passer sous contrôle télécommandé grâce à une rapsberry intégrée dans son organisme.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour donner vie à Jean Kevin il nous fallait donc:&lt;br /&gt;
* Créer le circuit imprimé, reliant le micro processeur aux différents actionneurs et capteurs.&lt;br /&gt;
* Concevoir un algorythme de fonctionnement.&lt;br /&gt;
* Programmer une &amp;quot;RapsberryPi&amp;quot; de façon à pouvoir contrôler notre robot à distance.&lt;br /&gt;
* Imaginer et réaliser une base mécanique, capable de contenir les organes de Jean Kevin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; I: Création du circuit imprimé &amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
pour commencer nous avonsprit pour modele la carte proposé [[Fichier:RobotPCB pcb.png|200px|right]]. Nous avons essayé de la comprendre, à savoir un Servo moteur, deux Moteurs standars, trois Capteurs infrarouges, un Sonar et différentes leds de contrôle. Le 2nd Servo moteur et le détecteur de suivi de ligne ont donc été enlevé, et la carte réorganisée, pour un placement plus &amp;quot;propre&amp;quot; des trous de fixation ainsi que pour rapprocher une capacité servant à stabiliser le courant entrant dans la carte (en effet la distance entre l&amp;#039;alimentation et la capacité aurait pu créer des variations de courant).&lt;br /&gt;
&lt;br /&gt;
Après avoir modifier le routage de la carte nous avions ceci:&lt;br /&gt;
&lt;br /&gt;
[[Fichier:fritzing.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
Nous avons envoyé ce modèle à imprimer en Chine.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:circuit-vide.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
Vient ensuite le soudage des composants:&lt;br /&gt;
*Les composants non traversants tels que les résistances, les capacités ou le processeur sont soudés au circuit à l&amp;#039;aide d&amp;#039;une pâte. Après un passage au four, cette pâte durcie et permet d&amp;#039;assurer le lien entre les composants et le circuit.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:soudurev2.jpg|200px|thumb|left]]&lt;br /&gt;
[[Fichier:four.jpg|200px|thumb||center|&amp;quot;Four de soudure&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Les composants traversants quant à eux sont soudé au fer avec de l&amp;#039;étain.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:soudurev1.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
*Il a fallu effectuer avec l&amp;#039;aide de Thierry des corrections sur certaines soudures à cause de la présence de ponts. On a donc eu recourt au fil à désouder ainsi qu&amp;#039;au décapeur thermique. Notre circuit était maintenant prêt pour ses premiers tests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* TEST 1:&lt;br /&gt;
Mise sous alimentation du circuit -&amp;gt; une led s&amp;#039;allume ✔&lt;br /&gt;
[[Fichier:test-alim.jpg|200px|right]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TEST 2:&lt;br /&gt;
Installation d&amp;#039;un boot loader à partir d&amp;#039;un Arduino Uno, ce boot permettra à notre circuit de ce comporter comme un arduino, en regardant à  chaque démarrage si rien ne se trouve dans la partie USB. Si un programme s&amp;#039;y trouve, celui ci sera exécuté directement. -&amp;gt; installation réussie ✔&lt;br /&gt;
[[Fichier:test-arduino.jpg|200px|right]]&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* TEST 3:&lt;br /&gt;
Programmation directe sur la carte -&amp;gt; ✗ ECHEC&lt;br /&gt;
&lt;br /&gt;
En effet lors du téléversement de notre programme rien ne se passe, l&amp;#039;information n&amp;#039;est pas transmise. Après observation le problème provenait d&amp;#039;un pont présent entre les pâtes de la fiche USB, entre la masse et Rx. La localisation du pont le rendait compliqué à enlever, cependant, à l&amp;#039;aide d&amp;#039;un décapeur thermique, d&amp;#039;un fer à soudé, d&amp;#039;un clou et de Alexandre Boé (sourtout Alexandre Boé) celui ci fut détruit.&lt;br /&gt;
&lt;br /&gt;
* TEST 3.1:&lt;br /&gt;
Programmation directe sur la carte -&amp;gt; ✗ ECHEC encore&lt;br /&gt;
&lt;br /&gt;
Cette fois on s&amp;#039;aperçoit grâce aux leds de contrôle que la communication fonctionne de l&amp;#039;USB au processeur mais pas du processeur à l&amp;#039;USB. Le problème venant probablement d&amp;#039;une mauvaise soudure entre ces deux points. Cette fois la solution fut donnée par Xavier Redon qui souda à nouveau le chemin entre ces deux points.&lt;br /&gt;
&lt;br /&gt;
* TEST 3.2:&lt;br /&gt;
&lt;br /&gt;
Programmation directe sur la carte -&amp;gt; Le programme fonctionne ✔&lt;br /&gt;
&lt;br /&gt;
Le cerveau de notre prédateur était donc prêt. Il restait à vérifier que ce cerveau communique bien avec ses différents membres (moteurs capteurs etc...)&lt;br /&gt;
&lt;br /&gt;
* TEST 4:   &lt;br /&gt;
[[Fichier:test-sonar.jpg|150px|right]]&lt;br /&gt;
&lt;br /&gt;
Communication avec les composants:&lt;br /&gt;
**Servo moteur: ✔&lt;br /&gt;
**Moteur A et B: ✔           &lt;br /&gt;
**Sonar: ✔&lt;br /&gt;
**Tsop: ✔&lt;br /&gt;
&lt;br /&gt;
Au moment ou plus rien ne semblait pouvoir altérer la croissance de notre JeanKevin, une nouvelle analyse de Xavier Redon lui décela une malformation électronique : En effet lors du déplacement d&amp;#039;une capacité lors du rootage de la carte, une des sortie du FTDI (le 3.3v) fut relié directement à l&amp;#039;alimentation 9V. Fort heureusement l&amp;#039;erreur fut repérée avant la mise sous tension du circuit par la sortie en question, ce qui nous évita de voir notre FTDI griller.&lt;br /&gt;
&lt;br /&gt;
Quelques coups de bistouri/soudeur plus tard notre circuit fut corrigé et intégralement fonctionnel !&lt;br /&gt;
Cependant nous avons ici un cerveau vide ou presque, il est temps de le remplir.&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Etape 2: L&amp;#039;algorithme de fonctionnement &amp;lt;/span&amp;gt;===&lt;br /&gt;
Jean Kévin, s&amp;#039;il n&amp;#039;est pas télécommandé, doit être autonome, capable d&amp;#039;éviter les obstacles, de rechercher et d&amp;#039;identifier un proie, de la poursuivre et pourquoi pas, d&amp;#039;anticiper sa trajectoire.&lt;br /&gt;
Nous avons bâti un algorithme se subdivisant en différentes fonctions:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;-La recherche d&amp;#039;une cible :&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notre robot s&amp;#039;il ne trouvait pas de proie, devait partir à leur recherche. Dans le but de ne pas toujours chercher dans la même zone, il effectuera donc une rotation de 420° autour de lui même. Sil détecte une proie durant sa rotation il s&amp;#039;arrête, sinon il continue. Une fois sa rotation terminée, le robot avance de 30cm et recommence jusqu&amp;#039;à ce qu&amp;#039;il trouve une cible. La rotation de 420° permet d&amp;#039;éviter d&amp;#039;effectuer des recherches en ligne droite.&lt;br /&gt;
&lt;br /&gt;
Ce mode de recherche donne lieu à l&amp;#039;algorithme ci contre:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;-Avancer Tout droit :&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 ToutDroit() &lt;br /&gt;
 digitalWrite(MotorD1,HIGH);&lt;br /&gt;
 digitalWrite(MotorD2,LOW);&lt;br /&gt;
 analogWrite(SpeedD,150);&lt;br /&gt;
 digitalWrite(MotorG1,HIGH);&lt;br /&gt;
 digitalWrite(MotorG2,LOW);&lt;br /&gt;
 analogWrite(SpeedG,142);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;-Rotation :&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 void Rotation () &lt;br /&gt;
 {&lt;br /&gt;
 // Tourne dans le sens des aiguilles d&amp;#039;une montre , moteur droit à l&amp;#039;arrêt, moteur gauche tourne&lt;br /&gt;
 beaucoupD();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;-Les virages :&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Dans un soucis d&amp;#039;efficacité nous avons doté notre robot de 2 modes de rotations:&lt;br /&gt;
Le choix entre ces deux modes se fera en fonction de l&amp;#039;angle du virage à effectuer.&lt;br /&gt;
&lt;br /&gt;
*Pour un virage &amp;lt; 30°: On module la vitesse des moteurs pour faire des virages légers&lt;br /&gt;
*Pour un virage &amp;gt; 30°, une des deux roues inversera son sens de rotation pendant que l&amp;#039;autre gardera le même, la rotation sera donc plus rapide et plus forte.&lt;br /&gt;
&lt;br /&gt;
C&amp;#039;est à cette fin que nous avons créer les fonctions ci contre:&lt;br /&gt;
&lt;br /&gt;
 void beaucoupG() &lt;br /&gt;
 {&lt;br /&gt;
 // moteur droit tourne, gauche recule&lt;br /&gt;
 digitalWrite(MotorG2,HIGH); // gauche&lt;br /&gt;
 digitalWrite(MotorG1,LOW); // gauche&lt;br /&gt;
 analogWrite(SpeedG,100); // vitesse gauche&lt;br /&gt;
 digitalWrite(MotorD2,LOW); // droite&lt;br /&gt;
 digitalWrite(MotorD1,HIGH); // droite&lt;br /&gt;
 analogWrite(SpeedD,100);// vitesse droite&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void beaucoupD() &lt;br /&gt;
 {&lt;br /&gt;
 // moteur gauche tourne, droit recule&lt;br /&gt;
 digitalWrite(MotorG1,HIGH);// gauche&lt;br /&gt;
 digitalWrite(MotorG2,LOW);//gauche&lt;br /&gt;
 analogWrite(SpeedG,100); // vitesse gauche&lt;br /&gt;
 digitalWrite(MotorD1,LOW);// droit&lt;br /&gt;
 digitalWrite(MotorD2,HIGH);// droit&lt;br /&gt;
 analogWrite(SpeedD,100);// vitesse droite&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void trenteD() &lt;br /&gt;
 {&lt;br /&gt;
 // moteur gauche tourne plus vite que le gauche&lt;br /&gt;
 digitalWrite(MotorG1,HIGH);// gauche&lt;br /&gt;
 digitalWrite(MotorG2,LOW);//gauche&lt;br /&gt;
 analogWrite(SpeedG,VitesseG); // vitesse gauche&lt;br /&gt;
 digitalWrite(MotorD1,LOW);// droit&lt;br /&gt;
 digitalWrite(MotorD2,HIGH);// droit&lt;br /&gt;
 analogWrite(SpeedD,VitesseD);// vitesse droite&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void trenteG() &lt;br /&gt;
 {&lt;br /&gt;
 // moteur droit tourne plus vite que le gauche&lt;br /&gt;
 digitalWrite(MotorG1,HIGH);// gauche&lt;br /&gt;
 digitalWrite(MotorG2,LOW);//gauche&lt;br /&gt;
 analogWrite(SpeedG,VitesseG); // vitesse gauche&lt;br /&gt;
 digitalWrite(MotorD1,LOW);// droit&lt;br /&gt;
 digitalWrite(MotorD2,HIGH);// droit&lt;br /&gt;
 analogWrite(SpeedD,VitesseD);// vitesse droite&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;-Les obstacles :&amp;lt;/span&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
La détection des obstacles est également très importante, celle-ci s&amp;#039;effectue à l&amp;#039;aide du sonar et donne lieu à 2 fonctions, une fonction calculant la distance entre le sonar et les obstacles, une autre étant une procédure d&amp;#039;évitement des obstacles.&lt;br /&gt;
&lt;br /&gt;
 int DetectObstacle()&lt;br /&gt;
 {&lt;br /&gt;
 long cm;&lt;br /&gt;
 cm=mesureSonar();&lt;br /&gt;
 Serial.print(&amp;quot;Distancem : &amp;quot;);&lt;br /&gt;
 Serial.println(cm);&lt;br /&gt;
 if (cm&amp;lt;20)&lt;br /&gt;
  {&lt;br /&gt;
    return 1;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return 0;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 void EviteObstacle(long temps)&lt;br /&gt;
 {   &lt;br /&gt;
    reculer();&lt;br /&gt;
    delay(400);&lt;br /&gt;
    while (millis() - (temps+400) &amp;lt;= 500)&lt;br /&gt;
    {&lt;br /&gt;
    beaucoupG();&lt;br /&gt;
    if (DetectObstacle() == 1 &amp;amp;&amp;amp; DectectCible() == 0)&lt;br /&gt;
 {&lt;br /&gt;
    EviteObstacle(previousMillis = millis());&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
On utilise donc toute ces fonctions dans le loop qui permet au robot de fonctionner de façon autonome en faisant appel aux différentes fonctions.&lt;br /&gt;
Pour identifier les différentes pin du micro processeur nous avons utiliser l&amp;#039;image ci-contre:&lt;br /&gt;
[[Fichier:Arduinovaltheo.png|300px|thumb|left|&amp;quot;Atmega&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Puis dans un soucis de lisibilité nous avons modifié dans le programme le numéro des pins par un nom plus explicite:&lt;br /&gt;
 int broche_reception = A0; &lt;br /&gt;
 int MotorG2 = A5;&lt;br /&gt;
 int MotorG1 = 4;&lt;br /&gt;
 int Stdby = 9;&lt;br /&gt;
 int SpeedG = 10;&lt;br /&gt;
 int MotorD1 = 8;&lt;br /&gt;
 int MotorD2 = 7;&lt;br /&gt;
 int SpeedD = 6;&lt;br /&gt;
 int servo = 3;&lt;br /&gt;
 int SonarEnvoi = A4;&lt;br /&gt;
 int SonarRecept = A3;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Etape 3: Conception Mécanique &amp;lt;/span&amp;gt;===&lt;br /&gt;
Jean Kévin possède un cerveau et des organes, il est donc temps de lui donner une structure ! L&amp;#039;idéal est que cette structure s&amp;#039;adapte aux formes des différents composants pour éviter d&amp;#039;avoir trop de trous et fixations.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc eu plusieurs idées et versions de châssis [[Fichier:araignee.jpg|200px|thumb|right|&amp;quot;Les prémices de Jean Kévin&amp;quot;]] pour au final arriver à un châssis sur 2 étages pour permettre la fixation de la carte électronique, de la Rapsberry, d&amp;#039;une batterie et d&amp;#039;un bloc de piles.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Etage_1.jpg|500px|thumb|left|&amp;quot;Etage 1&amp;quot;]] [[Fichier:Etage_2.jpg|410px|thumb|center|&amp;quot;Etage 2&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les composants du robots sont maintenus sur le châssis à l&amp;#039;aide d&amp;#039;un système de cales sur chacun de leurs côtés.&lt;br /&gt;
&lt;br /&gt;
Conception:&lt;br /&gt;
Les plans du châssis ont donc été créés sur le logiciel en ligne &amp;quot;Onshape&amp;quot;. Ce logiciel nous a permis de paramétrer les distances entre les différents éléments du châssis ainsi que de stocker ces distances dans des variables pour rendre plus simple et plus rapide les éventuelles modifications de dimension que nous pouvions apporter à Jean Kévin.&lt;br /&gt;
La découpe de ces éléments s&amp;#039;effectua à la découpeuse laser. Il a donc fallu exporter les plans de Onshape au logiciel &amp;quot;Inkscape&amp;quot;. Le transfert de logiciel a, pour une raison inconnue, engendrer une modification de l&amp;#039;échelle du plan. Après avoir calculé le coefficient entre les dimensions réelles et les dimensions sur Inkscape nous avons pu corriger celles ci et lancer la découpe.&lt;br /&gt;
Nos éléments découpés, nous n&amp;#039;avions plus qu&amp;#039;à assembler notre robot à l&amp;#039;aide des vis et des cales prévues à cet effet.&lt;br /&gt;
&lt;br /&gt;
Et voilà ! Après plusieurs semaines/mois de gestation, notre Jean Kévin arriva physiquement parmi nous ! Prêt à détruire le monde.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; Etape 4: La Rapsberry &amp;lt;/span&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Nous souhaitions pouvoir prendre le contrôle de Jean Kévin pour éviter tout débordement. Pour cela, nous l&amp;#039;avons doté d&amp;#039;une Raspberry Pi. Après avoir initialisé la Raspberry, nous avons commencé à concevoir la page html qui servira d&amp;#039;interface entre nous et Jean Kévin. Nous pouvons donc soit le contrôler à l&amp;#039;aide de deux curseurs, un qui gère la vitesse, et l&amp;#039;autre la rotation, soit avec une manette NES connectée en USB sur le PC. &lt;br /&gt;
Pour prendre le contrôle, il faut se connecter au réseau &amp;quot;Pouloulou&amp;quot; et de se rendre à l&amp;#039;adresse: 192.168.100.1/serial.php&lt;br /&gt;
&lt;br /&gt;
= Détail des séances : =&lt;br /&gt;
&lt;br /&gt;
== Séance du 15 janvier: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Découverte des objectifs et mise en place du cahier des charges. Nous souhaitons réaliser un robot &amp;quot;prédateur&amp;quot;. Nous allons concevoir un robot simple car nous voulons nous concentrer sur la partie électronique et informatique. Nous allons réaliser notre circuit imprimé en nous basant sur celui qui nous est donné en exemple. Enfin, nous allons programmer le robot pour qu&amp;#039;il puisse se déplacer de manière autonome. Cependant, lorsqu&amp;#039;il captera un signal wifi avec sa raspberry pi, on pourra le commander depuis notre téléphone.  &lt;br /&gt;
&lt;br /&gt;
== Séance du 16 janvier: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons réfléchi sur l&amp;#039;aspect esthétique de notre futur robot. Nous allons lui concevoir une coque pour que tous les éléments soient invisibles de l&amp;#039;extérieur.&lt;br /&gt;
Nous avons analysé le circuit imprimé fourni par les professeurs sur le logiciel Fritzing pour ne garder que les éléments dont nous avions besoin. Nous avons donc enlevé le détecteur de ligne, un servo moteur. Nous avons passé du temps pour rétablir les connections compromises par la suppression de ces éléments. C&amp;#039;est très intéressant de travailler sur le circuit imprimé, et de voir les différentes vues proposées, qui permettent de bien se rendre compte de la forme de chaque fonction, et comment elles sont reliées entre elles.&lt;br /&gt;
&lt;br /&gt;
== Séance du 18 janvier: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons travaillé sur le routage de notre circuit imprimé pour qu&amp;#039;il soit le plus efficace possible. Nous avons modifié le placement de la capacité 4, qui était trop loin de l&amp;#039;alimentation. Elle ne remplissait pas sa fonction, qui est de lisser la tension dans les câbles. Notre circuit est prêt à être imprimé. Nous avons ensuite commencé le code de notre robot. La difficulté est de savoir dans quelle direction tourner en fonction de là où est la proie et de trouver la manière la plus efficace de tourner dans le but de rattraper la proie. Nous avons 3 capteurs infrarouge sur notre robot. La meilleure solution pour nous est de réduire le champs de balayage des capteurs pour avoir une plus grande information de l&amp;#039;emplacement de la proie. Par exemple, si le capteur de droite et du milieu détecte une présence, alors on fera tourner le robot vers la droite, à l&amp;#039;aide du servo-moteur qui va incliner l&amp;#039;axe des roues. S&amp;#039;il y a uniquement le capteur de droite qui détecte une proie, alors on fera tourner le robot en faisant tourner la roue gauche plus vite que l&amp;#039;autre.&lt;br /&gt;
&lt;br /&gt;
== Séance du 19 janvier: ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé le squelette du code. Cependant, nous avons beaucoup d&amp;#039;interrogations sur la façon dont va réagir notre robot. La difficulté est que nous ne pouvons pas tester notre code sur le robot pour le moment et que beaucoup de parties vont rester en suspens. Nous avons choisi d&amp;#039;utiliser la fonction milis(). Cette fonction permet d&amp;#039;effectuer plusieurs actions en même temps, ici tourner et repérer une proie, contrairement à la fonction delay().&lt;br /&gt;
&lt;br /&gt;
== Séance du 22 janvier: ==&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes familiarisés avec le logiciel Onshape. Nous ne sommes pas habitués à raisonner de manière mécanique, c&amp;#039;est-à-dire en étant efficace dans l&amp;#039;utilisation du logiciel comme par exemple en enregistrant les distances dans des variables. Il a été difficile de construire notre dôme en 3d que nous allons mettre à l&amp;#039;arrière du châssis. Il abritera le circuit imprimé et les piles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 25 janvier: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons conçu la base de notre châssis. Nous avons choisi de faire des encoches pour fixer le dôme sur ce châssis. Il reste maintenant à réfléchir à l&amp;#039;emplacement des trous pour fixer le circuit imprimé et les autres éléments (moteurs, servo moteur, sonar et capteurs infrarouge) au châssis. Nous avons ensuite continué notre code en définissant les différentes fonctions principales de notre robot. Par exemple, avancer tout droit, tourner, détecter une cible...&lt;br /&gt;
&lt;br /&gt;
== Séance du 26 janvier: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé à programmer la raspberry pi 3. Elle va nous permettre de commander notre robot depuis notre téléphone. Il faut d&amp;#039;abord lui installer un système d&amp;#039;exploitation, ici nous utilisons la dernière version de la distribution Linux pour Raspberry Pi, Raspbian Jessie Lite. &lt;br /&gt;
&lt;br /&gt;
== Séance du 29 janvier: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé la configuration en point d&amp;#039;accès de la Raspberry. Puis nous avons fait l&amp;#039;inventaire des pièces dont nous avions besoin pour notre circuit imprimé.&lt;br /&gt;
&lt;br /&gt;
== Séance du 1 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons continué la configuration de notre raspberry. Nous avons initialisé le serveur web puis nous avons ajouté un nom de réseau pour la Raspberry Pi, nous l&amp;#039;avons appelé jeankevin.org. Enfin, nous avons établi une communication série. Cependant, pour que le serveur Web communique avec notre raspberry il faut passer par un serveur websocket. Ce type de processus est lancé au démarrage de la machine et accapare le port série. Nous ne pensions pas que la configuration de la raspberry nous prendrait autant de temps. Nous avons du mal à utiliser le terminal linux et nous ne connaissons pas les différentes commandes, ce qui ralentit notre progression.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 5 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons installé le fichier Jsserial et nous avons testé la page web. Le programme ne se lançait pas automatiquement car on ne l&amp;#039;avait pas mis au bon endroit. Les LEDs ne fonctionnaient pas non plus. Ce problème réglé, nous avons pu tester la page web avec l&amp;#039;allumage des LEDs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 8 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé la soudure des gros composants. Nous sommes allés en C203. Nous avons déposé une pâte sur les emplacements des composants. Puis nous avons posé les composants dessus. La difficulté est de savoir combien de pâte mettre et de mettre les bons composants aux bons endroits, sans les bouger en manipulant la carte. Ensuite, on passe la carte dans un four qui chauffe à 280 degrés pour faire fondre la pâte sur nos composants. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 12 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons continué la soudure de notre carte avec le même procédé que la séance d&amp;#039;avant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 15 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons réfléchi sur la page Web que nous voulons faire pour contrôler notre robot à partir de notre téléphone grâce à la raspberry. Nous pensons mettre des flèches gauche, droite et tout droit, mais nous pensons aussi mettre des flèches en diagonales. en effet, nous avons prévu des virages à 90 degrés, mais aussi des virages à 30 degrés pour permettre une poursuite plus efficace. &lt;br /&gt;
&lt;br /&gt;
En testant notre circuit, nous avons constaté un pont entre les pattes D+ et D- du connecteur USB. Après ce problème réglé, l&amp;#039;ordinateur détectait notre circuit. Nous l&amp;#039;avons testé avec le programme blink de l&amp;#039;arduino. Il nous a quand même fallu changer le nom du port pour que le programme arduino détecte notre circuit. Cependant, nous avons remarqué que la communication n&amp;#039;allait que dans un sens. C&amp;#039;était un problème de soudure que le professeur a remarqué. Après avoir ressoudé ce qui faisait la liaison entre Tx et Rx, tout fonctionnait normalement. Il nous reste à tester les moteurs, le sonar et les détecteurs infrarouge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 19 février: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons testé les moteurs A et B et le sonar à l&amp;#039;aide de petits programmes simples. Nous avons décidé de ne plus utiliser de servo moteur pour les virages de 30 degrés car nous pensons qu&amp;#039;il n&amp;#039;aura pas assez de force pour entraîner la rotation des roues. Nous utiliserons l&amp;#039;emplacement du servo moteur pour y mettre un buzzer pour que notre robot puisse faire un peu de musique.&lt;br /&gt;
&lt;br /&gt;
== Séance du 22 février: == &lt;br /&gt;
&lt;br /&gt;
Nous avons repris la conception mécanique du robot. Finalement, nous n&amp;#039;allons pas mettre de dôme car notre led infrarouge doit être à l&amp;#039;extérieur, pour pouvoir être captée des autres robots. De plus, il n&amp;#039;y aurait pas eu assez de places pour tous les éléments de notre robot. Nous partons donc sur un robot à deux étages pour avoir la place de mettre le circuit, les piles, la raspberry et la batterie pour la raspberry. &lt;br /&gt;
&lt;br /&gt;
== Séance du 5 mars: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons testé le fonctionnement de notre TSOP. Nous avons remarqué qu&amp;#039;il captait les signaux de la télécommande de très loin. Il faudra se documenter sur les TSOP pour comprendre comment récupérer le signal reçu et comment l&amp;#039;interpréter pour faire prendre une décision au robot (aller un peu à droite, aller beaucoup à gauche ...).&lt;br /&gt;
&lt;br /&gt;
== Séance du 8 mars :==&lt;br /&gt;
&lt;br /&gt;
Nous avons voulu tester tous les éléments en même temps. Cependant, nous avons remarqué que les moteurs ne tournaient plus. En effet, nous les avions testé avant les vacances, et avant la correction du court circuit par Xavier Redon. En étant uniquement branché sur le PC, les moteurs étaient alimentés par le microprocesseur alors qu&amp;#039;ils doivent uniquement être alimentés par les piles 9V. Une fois les piles branchées, tout fonctionnait correctement. Nous avons aussi continué le code en modifiant les noms des pins que l&amp;#039;ont avait mis aléatoirement par celles correspondantes en se référant à de la documentation.&lt;br /&gt;
&lt;br /&gt;
== Séance du 12 mars :==&lt;br /&gt;
&lt;br /&gt;
Nous avons fini le dessin de notre robot sur onshape avec toutes les encoches. Nous avons aussi continué le code en faisant des fonctions pour aller tout droit, un peu à droite, un peu à gauche, beaucoup à droite ... Nous avons aussi ressoudé les fils reliés au moteur.&lt;br /&gt;
&lt;br /&gt;
== Mardi 13 mars: ==&lt;br /&gt;
&lt;br /&gt;
Nous sommes allés au Fabricarium pour découper dans du plexiglas le châssis de notre robot. Nous avons eu des problèmes sur l&amp;#039;échelle entre le fichier sur onshape et inkscape.&lt;br /&gt;
&lt;br /&gt;
== Séance du 15 mars: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons monté notre robot et nous avons effectué les premiers tests de mise en marche des moteurs et détection d&amp;#039;obstacles avec le sonar.&lt;br /&gt;
&lt;br /&gt;
== Séance du 19 mars: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons remarqué un défaut au niveau des moteurs : à une même vitesse donnée ils ne tournent pas à la même vitesse donc notre robot ne va pas exactement tout droit. Nous mettons un décalage de 10 entre la vitesse du moteur gauche et celui du moteur droit. Nous avons amélioré le code en utilisant la fonction millis() à la place de la fonction delay() pour permettre de continuer à détecter les cibles et obstacles pendant qu&amp;#039;il avance ou qu&amp;#039;il tourne. Nous avons aussi remarqué que le robot fonctionnait très bien en l&amp;#039;air quand on teste avec nos mains ses réactions, mais une fois au sol, il détecte des obstacles imaginaires. L&amp;#039;environnement est trop complexe pour le sonar qui a une faible précision.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 26 mars: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons découpé des morceaux de plexiglas pour mieux maintenir les piles et la raspberry. Puis nous avons essayé d&amp;#039;inclure la gestion des TSOPs dans notre code. Les 3 TSOPs envoient les informations sur le même pin donc nous les allumons un par un pour savoir d&amp;#039;où vient le signal reçu (TSOP de gauche ou TSOP de droite par exemple). Dans un code à part, les TSOPs fonctionnent. Sans TSOPS, le robot fonctionne normalement. Mais lorsqu&amp;#039;on intègre les TSOPs dans le code principal, le robot ne réagit plus normalement, il ne détecte plus les obstacles et ne tourne plus. On pense qu&amp;#039;il reste bloqué dans la boucle de détection d&amp;#039;IR, qui ne fait rien tant qu&amp;#039;il ne capte rien. Alors que s&amp;#039;il ne capte rien, il ne doit pas rentrer dans la boucle de détection d&amp;#039;IR. De plus, les TSOPs ont une trop grande zone de détection donc il est difficile de s&amp;#039;en servir pour se diriger. A cause du manque de temps, nous avons décidé de ne pas mettre les TSOPs sur notre robot. Il est donc capable de se déplacer tout seul mais il ne pourra pas capter les proies. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Séance du 9 avril: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons commencé la page html qui nous permettra de télécommander le robot. Au début, nous pensions faire quatre flèches dans chaque direction pour le diriger. Puis nous avons décidé de le commander à l&amp;#039;aide de deux curseurs, un qui gère la vitesse et un qui gère les virages. Cependant, les deux curseurs envoyaient en simultanée des informations donc nous avons essayé d&amp;#039;utiliser delay() et millis() dans le code pour réussir à discerner s&amp;#039;il s&amp;#039;agit de la vitesse ou du virage mais cette solution ne fonctionnait pas.&lt;br /&gt;
&lt;br /&gt;
== Séance du 16 avril: ==&lt;br /&gt;
&lt;br /&gt;
Nous avons eu l&amp;#039;idée de faire varier le curseur qui gère la vitesse entre 0 et 125 et le curseur qui gère le virage entre 130 et 250. Si le curseur virage est à 130, il tourne à gauche à 90 degrés, s&amp;#039;il est à 250, il tourne à droite à 90 degrés, et à 190 le robot va tout droit. Nous avons modifié le code en conséquence. Enfin, nous voulons pouvoir choisir à partir de la page html si on prend le contrôle du robot ou si on le laisse en mode automatique. Nous avons eu quelques difficultés à faire en sorte que le mode automatique tourne en permanence tant qu&amp;#039;on ne reprend pas le contrôle. &lt;br /&gt;
&lt;br /&gt;
= Loop final =&lt;br /&gt;
&lt;br /&gt;
void loop() &lt;br /&gt;
{ &lt;br /&gt;
  if (Serial.available()&amp;gt;0)&lt;br /&gt;
  {&lt;br /&gt;
    int action=(int)Serial.read();&lt;br /&gt;
    if (action == 253) etat=0; else etat=-1; // INTELLIGENCE ARTIFICIELLE &lt;br /&gt;
    if (action&amp;lt;125 &amp;amp;&amp;amp; action != 0) vitesse = action*2;&lt;br /&gt;
    else if (action&amp;gt;=130 &amp;amp;&amp;amp; action&amp;lt;190 &amp;amp;&amp;amp; vitesse != 0)&lt;br /&gt;
      {&lt;br /&gt;
       gauche = (190-action)*2;&lt;br /&gt;
       droite=0;&lt;br /&gt;
      }&lt;br /&gt;
    else if (action&amp;gt;=190 &amp;amp;&amp;amp; action&amp;lt;251 &amp;amp;&amp;amp; vitesse != 0)&lt;br /&gt;
      {&lt;br /&gt;
       droite = (action-190)*2;&lt;br /&gt;
       gauche=0;&lt;br /&gt;
      }&lt;br /&gt;
    else if (action == 0)&lt;br /&gt;
      {vitesse=0; gauche=0; droite=0;}&lt;br /&gt;
    else if (action == 254) {arriere(vitesse); delay(1000);}&lt;br /&gt;
    &lt;br /&gt;
 &lt;br /&gt;
    droite1=vitesse-droite;&lt;br /&gt;
    gauche1=vitesse-gauche;&lt;br /&gt;
    if (droite1&amp;lt;0) droite1=0;&lt;br /&gt;
    if (gauche1&amp;lt;0) gauche1=0;&lt;br /&gt;
    ToutDroit3(droite1,gauche1);&lt;br /&gt;
  }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
  if (etat==0)&lt;br /&gt;
    {&lt;br /&gt;
      previousMillis = millis();&lt;br /&gt;
      while (DetectObstacle() == 0 &amp;amp;&amp;amp; etat==0)&lt;br /&gt;
        {&lt;br /&gt;
          if (Serial.available()&amp;gt;0)&lt;br /&gt;
            {&lt;br /&gt;
             int action=(int)Serial.read();&lt;br /&gt;
             if (action == 253) etat=0; else etat=-1;&lt;br /&gt;
            }&lt;br /&gt;
          if (millis() - previousMillis &amp;lt;= delaiTtDroit) ToutDroit();&lt;br /&gt;
          else&lt;br /&gt;
            {&lt;br /&gt;
              Rotation();&lt;br /&gt;
              delay(500);&lt;br /&gt;
              previousMillis = millis();&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
      if (DetectObstacle() == 1)&lt;br /&gt;
        {&lt;br /&gt;
          EviteObstacle();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
= Bilan : =&lt;br /&gt;
 &lt;br /&gt;
Si nous devions résumer ce BE, nous dirions que c&amp;#039;est d&amp;#039;abord des rencontres, des profs qui nous ont tendu la main,&lt;br /&gt;
peut-être à un moment où nous ne pouvions pas, où nous étions seuls dans notre galère. Nous sommes fiers du résultat final. Ce BE nous a permis de gagner en autonomie et en confiance en soi grâce à la liberté que nous avons eu pour créer, que ce soit pour notre robot avec l&amp;#039;utilisation du Fabricarium, mais aussi de part le choix de se consacrer à la partie qui nous plait le plus (mécanique, électronique ou informatique). Ce BE a vraiment confirmé notre envie de continuer dans cette voie. Pour finir en beauté cette page wikipédia, voici quelques clichés de notre robot :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:jk-face.jpg|200px|thumb|left|&amp;quot;Jean Kévin de face&amp;quot;]]&lt;br /&gt;
[[Fichier:jk-dos.jpg|200px|thumb|left|&amp;quot;Jean Kévin de dos&amp;quot;]]&lt;br /&gt;
[[Fichier:jk-gauche.jpg|200px|thumb|left|&amp;quot;Jean Kévin de son meilleur profil&amp;quot;]]&lt;br /&gt;
[[Fichier:jk-droit.jpg|200px|thumb|left|&amp;quot;Jean Kévin de son autre meilleur profil&amp;quot;]]&lt;br /&gt;
[[Fichier:jk-roue.jpg|200px|thumb|left|&amp;quot;Jean Kévin s&amp;#039;entraîne pour le cirque&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Nous avons récupéré le robot avec les deux roues avec moteurs, la roue à bille, 6 piles avec le boitier et le sonar.&lt;/div&gt;</summary>
		<author><name>Vlefebvr</name></author>
	</entry>
</feed>