<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>FaitMain.org</title><link href="http://faitmain.org" rel="alternate"></link><link href="http://faitmain.orgfeed.xml" rel="self"></link><id>http://faitmain.org</id><updated>2013-05-01T00:00:00Z</updated><entry><title>5 petits trucs sur la photographie culinaire</title><link href="http://faitmain.org//volume-1/5-trucs.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Brin de cuisine</name></author><id>tag:faitmain.org,2013-02-01://volume-1/5-trucs.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/cuisine.html"&gt;Cuisine&lt;/a&gt; | &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/brin_de_cuisine.html"&gt;Brin de cuisine&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Contrairement à ce qu'on croit, réaliser une jolie photo culinaire nécessite de
la préparation. D'abord, imaginer, et cette étape doit avoir lieu avant même
d'avoir réalisé la recette ! Ensuite, si l'on est tout seul à revêtir à la fois
la toque de cuisinier, les gants des assistants lumière et la casquette de
photographe, mieux vaut s'organiser. C'est bien plus facile à plusieurs ... &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Retrouvez toutes les recettes sur  &lt;a href="http://short.faitmain.org/cuisine-recettes"&gt; http://www.brindecuisine.fr &lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="scenariser" class="section"&gt; &lt;h2&gt;1. Scénariser &lt;a class="headerlink" href="#scenariser"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Certains plats délicieux ne sont pas forcement présentables, il est donc
nécessaire d'en tenir compte. Par exemple, pour un plat mijoté, il vous sera
nécessaire de veiller à soigner le découpage de votre viande, ainsi que le
parage de vos légumes, pour pouvoir les présenter d'une manière agréable à
l'œil. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/tajine-leger-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/brindecuisine-2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le tajine est un bon exemple. Pour le rendre appétissant, j'ai disposé
les morceaux dans une assiette, en otant le jus de cuisson &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Penser aussi dès cette étape à l'harmonisation du plat avec la vaisselle et le
décor, que vous pouvez choisir neutre ou signifiant. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-caramel-de-fruits.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="spareribs.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Un fond blanc et un voilage très simple
sont un exemple de décor neutre. &lt;/td&gt; &lt;td&gt; Un décor signifiant donne aussi
beaucoup d'ambiance à une photo. &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="eclairer" class="section"&gt; &lt;h2&gt;2. Éclairer &lt;a class="headerlink" href="#eclairer"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Privilégiez autant que possible la lumière naturelle, c'est elle qui donne les
couleurs les plus appétissantes. Dehors ou derrière une fenêtre, le soleil
permet de multiples éclairages. Un voilage servira de diffuseur. Attention à la
lumière directe, qui donne des ombres dures. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-rasante.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="chow-colat-cha-mallow.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Une lumière du jour rasante donne de la
profondeur à l'image &lt;/td&gt; &lt;td&gt; La lumière artificielle est plus difficile
à gérer. Mais parfois, on n'a pas le choix,
notamment en hiver, lorsque le jour est de
courte durée. &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/mures-jardin-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/brindecuisine-mures.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les nuages forment le meilleur des diffuseurs. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="preparer" class="section"&gt; &lt;h2&gt;3. Préparer &lt;a class="headerlink" href="#preparer"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Avant de réaliser votre photo, faites votre mise en scène avec la vaisselle et
accessoires, sans le plat. Cela vous permettra de vérifier quelle prise de vues
est la plus adaptée. Variez la focale, les angles et l'orientation de la
lumière, la distance de prise de vues, et si votre appareil se débraye, la
profondeur de champ : ces paramètres ne donnent pas du tout les mêmes effets. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/comment-rater-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/brindecuisine-fudge.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La macro donne toute sa place au sujet de la photo &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="cadrer" class="section"&gt; &lt;h2&gt;4. Cadrer &lt;a class="headerlink" href="#cadrer"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; La photo culinaire se prête à de nombreux styles photographiques. Clair ou
sombre, en plan rapproché ou  plus éloigné, en nature morte ou avec présence
humaine, à vous de trouver votre préféré. Ou bien
de varier selon les recettes. Voici quelques exemples : &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-Gtovinblanc-1-2.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-ketchup-vert.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Lifestyle, c'est-à-dire prise de vue
intégrant la présence humaine &lt;/td&gt; &lt;td&gt; Style "nature", lumière du jour et
ingrédients frais &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-macaron-1-5.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-courge-sucrine-1.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Plan rapproché en studio, double éclairage
latéral de même puissance. &lt;/td&gt; &lt;td&gt; Clair-obscur. &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="brindecuisine-vue-plongeante.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="recette-avril-3.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; La vue plongeante est adaptée aux recettes
familiales, réalisées dans de grands plats. &lt;/td&gt; &lt;td&gt; Le high key consiste à éclairer fortement le sujet,
et à légèrement surexposer afin qu'il n'y ait aucune
zone de couleur noire, et le moins possible d'ombre grise. &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="planifier" class="section"&gt; &lt;h2&gt;5. Planifier &lt;a class="headerlink" href="#planifier"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Les préparations froides permettent évidemment de prendre tout son temps, mais
ce n'est pas le cas des plats chauds dont l'aspect se matifie en refroidissant,
le rendant moins appétissant. Il faut donc que tout soit prêt avant de mettre
votre préparation dans le cadre de la photo. Je vous conseille de poser votre
appareil sur pied, l'allumer, cadrer, et d'ensuite seulement disposer les
éléments. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/veloute-orties-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/brindecuisine-soupe-ortie.jpg"&gt;&lt;/img&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=7"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="cuisine"></category><category term="art"></category></entry><entry><title>Cable d'interface pour Raspberry Pi</title><link href="http://faitmain.org//volume-1/cable-gpio.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>François Dion</name></author><id>tag:faitmain.org,2013-02-01://volume-1/cable-gpio.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/francois_dion.html"&gt;François Dion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cable-final.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de circuit fait main relié a un Raspberry Pi, avec un cable fait
main. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Une des fonctions qui a contribué au succès du Raspberry Pi, c'est la
possibilité d'interface avec le monde extérieur. On parle ici des
 &lt;a href="http://fr.wikipedia.org/wiki/GPIO" class="wikipedia"&gt; GPIO &lt;/a&gt;   (en anglais les « General Purpose
Input and Output » – entrées et sorties pour tout usage), qui se retrouvent au
connecteur P1. En fabricant notre propre câble, on pourra se connecter à des
 &lt;a href="http://fr.wikipedia.org/wiki/Diode_%C3%A9lectroluminescente" class="wikipedia"&gt; DELs &lt;/a&gt;   (diodes
électroluminescentes), des moteurs ou autres composants physiques. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="comment-faire-un-cable-d-interface-gpio" class="section"&gt; &lt;h2&gt;Comment faire un cable d'interface GPIO &lt;a class="headerlink" href="#comment-faire-un-cable-d-interface-gpio"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Nous allons faire du recyclage aujourd'hui. En effet, le type de câble que
l'on va faire, un câble plat a 26 conducteurs, est très proche d'un câble
très commun que l'on peut retrouver un peu partout, dans le fond d'un tiroir,
dans une boite de vieux composantes d'ordinateur... Il suffit de fouiller
un peu, il y en a des dizaines de millions qui ne demandent qu'à se rendre
utile une fois de plus. &lt;/p&gt; &lt;p&gt; De quoi s'agit'il ? D'une nappe pour disque dur IDE (ou
 &lt;a href="http://fr.wikipedia.org/wiki/Advanced_Technology_Attachment" class="wikipedia"&gt; ATA &lt;/a&gt;  ) à 40
conducteurs. On peut aussi utiliser un câble ATA66/133 à 80
conducteurs, mais c'est beaucoup plus de boulot, et il y a le risque de se
retrouver avec un câble qui ne fonctionne pas, dû à un court-circuit entre la
mise à la masse et notre signal. Je recommande donc plutôt les câbles à 40
conducteurs, plus vieux et très communs : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/ide40.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Cable IDE pour disque dur, 40 conducteurs. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="au-boulot" class="section"&gt; &lt;h2&gt;Au boulot &lt;a class="headerlink" href="#au-boulot"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Nous aurons besoin de 2 connecteurs, et non de 3. Avec un câble comme celui de
la photo, on coupe une section avec des ciseaux : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/couper.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; On coupe l'extra avec des ciseaux. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il faut ensuite diviser le câble. En effet, on n'a besoin que de 26
conducteurs, et on en a 40. Avec le fil rouge a gauche, on compte 26 fils et on
marque avec un feutre permanent la division. On compte du cote droit pour
s'assurer que l'on a bien 14 fils, pas un de plus ou de moins. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/marquer.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Marquer au feutre une ligne qui délimite 26 et 14 conducteurs. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; La prochaine étape consiste a faire une incision avec un couteau genre X-acto
ou un scalpel, dans la rainure entre les 2 fils, et ceci sans endommager
l'isolation des fils. Le plus simple c'est de commencer l'incision au couteau
et de la finir à la main, en tirant de chaque cote de l'incision. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/separer.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Faire l'incision et séparer les 2 parties. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il faut maintenant couper le connecteur exactement sur la septième rangée de
trous, en partant de la droite. On peut le faire avec une petite scie a
découper le métal, ou encore avec une meule a découper, dans le genre Dremel. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/scier.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Faire la découpe. Ici, on a mis un connecteur male de 2x13 pour s'assurer de
ne pas se tromper d'endroit. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; On enlève la partie du dessus, puis la section de câble à 14 conducteurs, et
puis finalement, après avoir fait une entaille, on enlève la partie de dessous. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/enlever.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; On enlève la portion de droite. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; On est prêt à connecter notre câble à notre Raspberry Pi. Le fil rouge marque
la position #1 sur le connecteur P1. Il faut donc insérer le câble pour que ce
fil rouge soit du cote de la carte SD, et non pas du cote du connecteur RCA /
video composite (jaune) : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/connecter.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Conducteur rouge sur position #1, pres de la carte SD. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="connections" class="section"&gt; &lt;h2&gt;Connections &lt;a class="headerlink" href="#connections"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Afin de vérifier le fonctionnement de notre câble, on va faire une
connexion de 2 DELs, une rouge et une verte. Pas besoin de fil ou soudure car
on va simplement insérer les DELs dans les trous du câble. &lt;/p&gt; &lt;p&gt; En suivant le diagramme ci dessous : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; La patte courte de la DEL rouge et de la DEL verte vont se connecter au troisième trou du cote gauche &lt;/li&gt; &lt;li&gt; La patte longue de la DEL rouge au deuxième trou du cote droit &lt;/li&gt; &lt;li&gt; La patte longue de la DEL verte au troisième trou du cote droit &lt;/li&gt; &lt;/ul&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/2leds.jpg"&gt;&lt;/img&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-python" class="section"&gt; &lt;h2&gt;Le Python &lt;a class="headerlink" href="#le-python"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Avant toute chose, on doit se procurer un module Python du nom de
 &lt;a href="http://short.faitmain.org/rpigpio-041a"&gt; RPi.GPIO &lt;/a&gt;  . C'est un module qui
permet de contrôler les GPIO sur un Raspberry Pi. Sur Raspbian, il est
maintenant inclus, mais si on utilise une autre version de Linux, on peut
l'installer grâce a &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;easy_install RPi.GPIO
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; ou bien par  &lt;em&gt; apt-get &lt;/em&gt;   : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;sudo apt-get install python-rpi.gpio
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Créer un fichier portant le nom  &lt;em&gt; flashled.py &lt;/em&gt;  ayant le contenu suivant : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot; 2 DEL qui s&amp;#39;allument en alternance &amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;RPi.GPIO&lt;/span&gt; &lt;span class="kn"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;gpio&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;

&lt;span class="n"&gt;PINR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;  &lt;span class="c"&gt;# on utilisera 2 sur un RPi V2&lt;/span&gt;
&lt;span class="n"&gt;PING&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="c"&gt;# on utilisera 3 sur un RPi V2&lt;/span&gt;

&lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setmode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BCM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# mode Broadcom&lt;/span&gt;
&lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PINR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# DEL rouge en mode sortie (OUT)&lt;/span&gt;
&lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;OUT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c"&gt;# DEL verte en mode sortie (OUT)&lt;/span&gt;

&lt;span class="c"&gt;#On alterne pour l&amp;#39;eternite&lt;/span&gt;
&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PINR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PINR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;PING&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;HIGH&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;gpio&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;cleanup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;ul bullet="-"&gt; &lt;li&gt; PINR est le GPIO pour la DEL rouge (0 pour un Rpi V1 et 2 pour un V2) &lt;/li&gt; &lt;li&gt; PING est le GPIO pour la DEL verte (1 pour un Rpi V1 et 3 pour un V2) &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; On sélectionne le mode Broadcom (BCM), et on active les 2 GPIO comme sorties (OUT).
La boucle va alterner entre DEL rouge allumée / DEL verte éteinte durant 1 seconde,
et DEL rouge éteinte / DEL verte allumée durant une seconde ( &lt;em&gt; time.sleep(1) &lt;/em&gt; ).
Si on fait un CTRL-C durant l'exécution, le programme termine après avoir
fait le ménage, par l'entremise de  &lt;em&gt; gpio.cleanup() &lt;/em&gt; . &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="on-y-va" class="section"&gt; &lt;h2&gt;On y va &lt;a class="headerlink" href="#on-y-va"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Normalement, on doit toujours protéger une DEL avec une résistance, pour
limiter le courant. Toutefois, comme les GPIO ne peuvent fournir que 20mA et
que dans ce test on allume les DELs de façon intermittente, on peut ignorer
cette résistance sans risque dans ce cas particulier. &lt;/p&gt; &lt;p&gt; Pour un usage prolongé, on va devoir ajouter une résistance en série de 220 a
360 Ohm. &lt;/p&gt; &lt;p&gt; Pour lancer le script que l'on vient de sauver, on doit le rendre exécutable,
et le lancer avec permission root (sudo), à cause du module RPi.GPIO qui a
besoin d'accéder en écriture à /dev/mem : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;chmod +x flashled.py
&lt;span class="nv"&gt;$ &lt;/span&gt;sudo ./flashled.py
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; CTRL-C interrompt l'exécution. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="del-rouge.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="del-vert.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; DEL Rouge &lt;/td&gt; &lt;td&gt; DEL Vert &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; Ceci conclut notre petit article. Dans un prochain numéro, nous allons
fabriquer un adaptateur pour plaque de prototypage. &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=10"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="informatique"></category><category term="électronique"></category></entry><entry><title>Cindermedusae - Les Créatures Génératives</title><link href="http://faitmain.org//volume-1/cindermedusae.html" rel="alternate"></link><updated>2013-01-02T00:00:00Z</updated><author><name>Marcin Ignac</name></author><id>tag:faitmain.org,2013-01-02://volume-1/cindermedusae.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Avancé &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/marcin_ignac.html"&gt;Marcin Ignac&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/translation.png"&gt; &lt;/img&gt; &lt;strong&gt;Traduction&lt;/strong&gt;: &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Cet article est une traduction adaptée de l'article de Marcin Ignac
originalement paru en anglais sur son blog à
 &lt;a href="http://short.faitmain.org/marcin-ignac"&gt; cette addresse &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Vous pouvez retrouvez tous les projets de Marcin ici :
 &lt;a href="http://short.faitmain.org/marcin-ignac-4"&gt; http://marcinignac.com/projects/category/featured/ &lt;/a&gt; &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cindermedusae.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les méduses en action &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;em&gt; Cindermedusae &lt;/em&gt;  est un projet qui me tient beaucoup à cœur. Il a été
réalisé très vite (en une semaine) et a été intensif. Mais les résultats
que j'ai obtenus sont très concluants. J'ai toujours aimé l'idée de
 &lt;em&gt; livre génératif &lt;/em&gt;  et la première fois que j'ai entendu parler du concours
de  &lt;a href="http://short.faitmain.org/writtenimagesnet"&gt; Written Images &lt;/a&gt;   cela m'a tout de suite
donné envie de participer. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;em&gt; Written Images &lt;/em&gt;  est un projet de livre génératif qui a été financé via
la communauté  &lt;a href="http://short.faitmain.org/written-images"&gt; KickStarter &lt;/a&gt;  
et qui présente des images générées par des programmes fournis par des artistes.
Chaque impression de livre est calculée individuellement — afin de créer des
livres uniques. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;em&gt; Cindermedusae &lt;/em&gt;  a été selectionné avec 47 autres projets pour faire partie
du livre. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/toutes-tailles-2"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/book.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un des livres imprimés © d_effekt &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Je travaillais encore chez  &lt;a href="http://short.faitmain.org/shiftcontrol-studios"&gt; shiftcontrol &lt;/a&gt;   à
cette époque, pour un projet de jeu sous-marin pour la ZDF appelé
 &lt;a href="http://short.faitmain.org/universum-ozeane-2"&gt; Universum Der Oceane &lt;/a&gt;   en collaboration
avec les architectes de  &lt;a href="http://short.faitmain.org/hosoya-schaefer-1"&gt; Hosoya Schaefer &lt;/a&gt;  . Vous
pouvez trouver plus d'information sur ce projet
 &lt;a href="http://short.faitmain.org/universum-ozeane-3"&gt; ici &lt;/a&gt;  . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Nous avions beaucoup de réunions pour discuter de l'ergonomie du jeu et
du comportement des créatures sous-marines — et c'est probablement
ce qui m'a intéressé aux méduses géantes. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Ces animaux sont extraordinaires — j'adore la façon dont elles se
 &lt;a href="http://short.faitmain.org/jellyfish-vimeo"&gt; déplacent lentement &lt;/a&gt;  . Un choix parfait
pour tordre des fils de fers avec du code. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="animation-procedurale" class="section"&gt; &lt;h2&gt;Animation procédurale &lt;a class="headerlink" href="#animation-procedurale"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; L' &lt;a href="https://fr.wikipedia.org/wiki/Animation_proc%C3%A9durale" class="wikipedia"&gt; animation procédurale &lt;/a&gt;  
consiste à animer des objets en temps réel par le biais d'un ensemble de règles
procédurales, c'est-à-dire une description des règles de fonctionnement du
monde physique et un ensemble de conditions initiales. &lt;/p&gt; &lt;p&gt; Ce n'est pas la première fois que je fais de l'animation procédurale.
En fait, toute la  &lt;a href="https://fr.wikipedia.org/wiki/Demoscene" class="wikipedia"&gt; Scène démo &lt;/a&gt;   en use
et abuse. Un bon exemple est le torus en forme de cactus dans l'introduction de mon
projet  &lt;a href="http://short.faitmain.org/marcin-ignac-5"&gt; Borntro &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Le code original de  &lt;em&gt; Cindermedusae &lt;/em&gt;  est en C++ et utilise la bibliothèque
 &lt;a href="http://short.faitmain.org/cinder-library-1"&gt; Cinder &lt;/a&gt;   mais je décris dans cet article les idées de base
de l'animation de méduses avec des exemples
de code en  &lt;a href="http://short.faitmain.org/processingjs"&gt; processing.js &lt;/a&gt;  , le portage de
 &lt;a href="http://short.faitmain.org/processingorg"&gt; Processing &lt;/a&gt;   en Javascript. &lt;/p&gt; &lt;p&gt; La plupart des exemples sont interactifs et en 2D — c'est plus facile à
comprendre (et à dessiner !). Dans quelques cas je présente des exemples
en 3D et il faut un navigateur compatible  &lt;a href="https://fr.wikipedia.org/wiki/WebGL" class="wikipedia"&gt; WebGL &lt;/a&gt;  
pour que cela fonctionne. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="tete-de-la-meduse" class="section"&gt; &lt;h2&gt;Tête de la méduse &lt;a class="headerlink" href="#tete-de-la-meduse"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Commençons avec un cercle — ou une sphère en 3D, vue du dessus. C'est
l'ensemble des points équidistants d'un point unique, le centre
du cercle. Si ce cercle a pour coordonnées  &lt;em&gt; (0, 0) &lt;/em&gt; , et que
le rayon du cercle est  &lt;strong&gt; r &lt;/strong&gt; , tous les points du cercles peuvent
être décrits comme les fonction de l'angle  &lt;strong&gt; phi &lt;/strong&gt; , variant de
0 à 2π. &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; L'étape suivante consiste à ajuster dynamiquement le rayon avec une
fonction sinusoïdale pour qu'il varie de  &lt;em&gt; 0.925 &lt;/em&gt;  à  &lt;em&gt; 1.075 &lt;/em&gt;  soit
de 92.5% à 107.5% de sa valeur initiale. &lt;/p&gt; &lt;p&gt; On multiplie aussi l'angle par dix pour avoir cet effet de vague
dix fois dans le cercle. &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.075&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.075&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;phi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Les segments rouges que vous voyez sur l'image sont les segments
séléctionnés comme points de départ pour accrocher les tentacules
de la méduse. Nous nous y intéresserons plus tard. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-geometry"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_head.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Vue des têtes du dessus — cliquez pour le code &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Si l'on regarde la tête de notre méduse en 2D sur le côté, c'est aussi
un cercle, puisqu'à la fin nous jouons avec des sphères. &lt;/p&gt; &lt;p&gt; La différence avec le calcul précédent est que cette fois-ci, la
variation de l'angle  &lt;em&gt; theta &lt;/em&gt;  va de 0 (en haut) à 2π (en bas) &lt;/p&gt; &lt;p&gt; La tête est symétrique le long de l'axe Y, donc nous construirons 2 points
à chaque étape — un à gauche et un à droite : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;x = r * cos(theta)
y = r * sin(theta)
x&amp;#39; = -x
y&amp;#39; =  y
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Sachant que la tête de la méduse ressemble plus à un dôme qu'une sphère,
nous devons faire une forme qui est convexe au dessus et concave en dessous. &lt;/p&gt; &lt;p&gt; Il suffit d'inverser la valeur de la coordonnée Y en atteignant π/2, ou
90' dans notre cas. On ajoute aussi  &lt;em&gt; r/2 &lt;/em&gt;  pour pousser l'arc de cercle
obtenu après π/2 vers le bas, afin que les deux arcs ne se confondent pas : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theta&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;PI&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;theta&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Enfin, on arrondit les angles pour un meilleur rendu, et aussi pour éviter
des artefacts d'ombre. Je ne vais pas décrire cette étape ici, car
c'est juste un  &lt;em&gt; if &lt;/em&gt;  et un  &lt;em&gt; sin &lt;/em&gt;  supplémentaires. Vous pouvez lire le
code source fourni. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-geometry-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_head2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Vue des têtes de côté — cliquez pour le code &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;hr/&gt; &lt;p&gt; Il y a de meilleures techniques d'animations mais comme  &lt;em&gt; Written Images &lt;/em&gt; 
n'était pas un concours d'animation, j'ai utilisé l'outil le plus simple :
 &lt;em&gt; sin() &lt;/em&gt; . Personne ne verra la différence sur des pages statiques de
toute façon. &lt;/p&gt; &lt;p&gt; Pour chaque frame où je calcule les positions x et y, je calcule aussi
 &lt;a href="https://fr.wikipedia.org/wiki/Normale_%C3%A0_une_surface" class="wikipedia"&gt; la droite normale à la surface &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Ensuite, si l'animation est lancée, je déplace le point le long de la normale
en utilisant la valeur de la fonction  &lt;em&gt; sin() &lt;/em&gt;  à un instant  &lt;em&gt; t &lt;/em&gt;  . Cette formule
déplace les points mais sans rien faire de plus, la tête se mettrait à faire
des pulsations comme un cœur, en grossissant et rétrécissant — car tous les
points se déplacent en phase. &lt;/p&gt; &lt;p&gt; C'est pourquoi j'ajoute  &lt;em&gt; y * 0.5 &lt;/em&gt;  à  &lt;em&gt; t &lt;/em&gt;  pour introduire un décalage de phase
le long de l'axe Y et la structure en fil de fer ( &lt;em&gt; wireframe &lt;/em&gt;  ou  &lt;em&gt; mesh &lt;/em&gt; 
en anglais) commence à bouger d'une manière un peu plus naturelle. &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;normal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-animation"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_head3.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Vue animée des têtes de côté — cliquez pour code &amp; animation &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; J'ai décidé de combiner toutes les étapes dans un script processing.js en 3D,
et à ma surprise le code obtenu est quasiment un copier-coller de la version C++.
J'ai essayé de garder le code le plus simple &amp; clair possible pour cet article,
donc il n'est pas optimal : les performances ne sont pas au rendez-vous. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-animation-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_head4.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Vue animée en 3D — cliquez pour code &amp; animation &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="tentacules" class="section"&gt; &lt;h2&gt;Tentacules &lt;a class="headerlink" href="#tentacules"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; &lt;strong&gt; Problème &lt;/strong&gt;  Etant donné une courbe — ou plutôt une ligne polygonale, fabriquez un
mesh en forme de tube autour de cette ligne. &lt;/p&gt; &lt;p&gt; &lt;strong&gt; Solution &lt;/strong&gt;  On démarre avec trois vecteurs perpendiculaires : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;strong&gt; Forward &lt;/strong&gt;  - généralement le vecteur normal à l'endroit où je veux accrocher
la tentacule — ou si j'ai l'équation de la courbe, ce serait le vecteur
tangeant. &lt;/li&gt; &lt;li&gt; &lt;strong&gt; Up &lt;/strong&gt;  - choisi arbitrairement :  &lt;em&gt; (0,1,0) &lt;/em&gt;  et &lt;/li&gt; &lt;li&gt; &lt;strong&gt; Left &lt;/strong&gt;  qui peut être calculé avec  &lt;a href="https://fr.wikipedia.org/wiki/Regle_de_la_main_droite" class="wikipedia"&gt; la règle de la main
droite &lt;/a&gt;  . &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; La formule de la règle de la main droite s'applique ainsi : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;L = U x F
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Où  &lt;em&gt; x &lt;/em&gt;  est le  &lt;a href="https://fr.wikipedia.org/wiki/Produit_vectoriel" class="wikipedia"&gt; produit vectoriel &lt;/a&gt;  
des deux vecteurs à trois dimensions. &lt;/p&gt; &lt;p&gt; Pour le deuxième point de notre ligne, on a le nouveau vecteur
 &lt;strong&gt; F' &lt;/strong&gt;  et l'on conserve le même vecteur  &lt;strong&gt; L &lt;/strong&gt; , on peut calculer le
nouveau vecteur  &lt;strong&gt; U' &lt;/strong&gt;  : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;U&amp;#39; = F&amp;#39; x L
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; En répétant cette opération pour chaque point/segment de la ligne,
on obtient une série de coordonnées pour chaque vecteur
 &lt;em&gt; Up &lt;/em&gt; ,  &lt;em&gt; Front &lt;/em&gt;  et  &lt;em&gt; Left &lt;/em&gt; . &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/right_hand_rule.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Règle de la main droite &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Tous ces calculs sont inspirés du  &lt;a href="https://fr.wikipedia.org/wiki/Rep%C3%A8re_de_Frenet" class="wikipedia"&gt; repère
de Frenet &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Si vous développez dans Cinder, vous n'avez pas à vous soucier de
tous ces calculs, car le développeur  &lt;a href="http://short.faitmain.org/cinder-forums"&gt; Chaoticbob &lt;/a&gt;   a contribué
un système encore plus performant : les  &lt;a href="http://short.faitmain.org/cinder-forums-1"&gt; Parallel Transport Frames &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Maintenant que nous avons les vecteurs  &lt;em&gt; Up &lt;/em&gt;  et  &lt;em&gt; Forward &lt;/em&gt; , il est
facile de construire des triangles. Dans l'exemple suivant j'ai
ajouté deux élements supplémentaires. Le premier ajout
est une réduction du vecteur  &lt;em&gt; Up &lt;/em&gt;  pour que la pointe de la tentacule
apparaisse plus fine. &lt;/p&gt; &lt;p&gt; Le deuxième ajout est un enroulement de la
tentacule en fonction de la position de la souris.
La tentacule est de plus en plus enroulée au fur et à mesure que l'on
se rapproche de la pointe — la force de cette enroulement est
représentée par des lignes rouges. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-animation-2"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_tentacle.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Tentacules animées — cliquez sur l'image &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Nous sommes maintenant prêts à attacher les tentacules à la tête.
Je regroupe tous les éléments car le travail des ombres masquera les
discontinuités de la surface. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/jellyfish-tentacles"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/heads_tentacle.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Tentacules &amp; corps animés — cliquez sur l'image &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="rendu-final" class="section"&gt; &lt;h2&gt;Rendu final &lt;a class="headerlink" href="#rendu-final"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; J'ai utilisé une géométrie de triangles beaucoup plus dense pour le rendu ci-dessus,
pour des plus belles courbes et pour éviter des artefacts d'antialiasing. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/mesh.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Rendu final &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="ombres-procedurales" class="section"&gt; &lt;h2&gt;Ombres procédurales &lt;a class="headerlink" href="#ombres-procedurales"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Lorsque j'ai commencé ce projet, je faisais des essais avec de la
 &lt;a href="https://fr.wikipedia.org/wiki/Subsurface_scattering" class="wikipedia"&gt; Transluminescence &lt;/a&gt;  
et j'avais des  &lt;a href="http://short.faitmain.org/screen-2010-07-09-3"&gt; rendus &lt;/a&gt;  
 &lt;a href="http://short.faitmain.org/screen-2010-07-09-4"&gt; assez &lt;/a&gt;  
 &lt;a href="http://short.faitmain.org/screen-2010-07-09-5"&gt; beaux &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Mais j'ai changé d'avis après être tombé sur le travail de
 &lt;a href="https://fr.wikipedia.org/wiki/Ernst_Haeckel" class="wikipedia"&gt; Ernst Haeckel &lt;/a&gt;   et
son livre incroyable :  &lt;a href="http://en.wikipedia.org/wiki/Kunstformen_der_Natur" class="wikipedia"&gt; "Kunstformen der Natur" &lt;/a&gt;  .
Je savais que c'était la bonne voie. &lt;/p&gt; &lt;p&gt; La première étape est d'utiliser de la lumière diffuse standard juste pour
vérifier que mon wireframe est suffisament lisse et n'a pas de normales
au comportement étrange. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/diffuse.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Lumière diffuse appliquée au modèle 3D. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="hachurage" class="section"&gt; &lt;h2&gt;Hachurage &lt;a class="headerlink" href="#hachurage"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Il y a beaucoup d'articles de recherche sur les techniques pour
avoir un rendu  &lt;em&gt; croquis &lt;/em&gt; . J'ai basé mon implémentation sur du code
issu du livre  &lt;a href="http://short.faitmain.org/opengl-shading-1"&gt; OpenGL Shading Language Book &lt;/a&gt;  &lt;/p&gt; &lt;p&gt; L'algorithme génère d'abord des traits verticaux avec les coordonnées
de texture, puis choisit la densité des traits en fonction de la lumière
diffuse. Moins il y a de lumière, plus la densité des traits augmente. &lt;/p&gt; &lt;p&gt; Un paramètre important pour un beau rendu est de bien choisir l'épaisseur
des traits : ni trop fin pour ne pas avoir d'effet de
 &lt;a href="https://fr.wikipedia.org/wiki/Moir%C3%A9_%28effet_de_contraste%29" class="wikipedia"&gt; moiré &lt;/a&gt;  ,
ni trop épais pour ne pas perdre en finesse de rendu. &lt;/p&gt; &lt;p&gt; Un grand rendu hors-écran dans un  &lt;a href="http://short.faitmain.org/welcome-cinder"&gt; framebuffer object &lt;/a&gt;  
de 4080 sur 2720 pixels, et l'antialiasing aident beaucoup à choisir la
bonne épaisseur. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://marcinignac.com/blog/cindermedusae-making-generative-creatures/hatching_hi.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/hatching.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Hachurage — cliquez pour la version hi-res &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Malheureusement il n'y a aucun exemple basé sur processing.js, en partie car
j'utilise des fonctionnalités qui dépendent des extensions  &lt;em&gt; WebGL GLSL &lt;/em&gt; , comme
 &lt;em&gt; GL_OES_standard_derivatives &lt;/em&gt;  et les fonctions  &lt;em&gt; dFdx / dFdy &lt;/em&gt; . &lt;/p&gt; &lt;p&gt; Pour aller plus loin, vous pouvez consulter le livre mentioné. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="couleurs" class="section"&gt; &lt;h2&gt;Couleurs &lt;a class="headerlink" href="#couleurs"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Chaque image est composée de cinq couches : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; un fond jaune &lt;/li&gt; &lt;li&gt; des coins de page orange &lt;/li&gt; &lt;li&gt; un hachurage en noir &lt;/li&gt; &lt;li&gt; des reflets bleus &lt;/li&gt; &lt;li&gt; des bordures roses &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Les reflets bleus et les coins de pages ont été bruités
pour donner une impression de coloriage à la main. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://marcinignac.com/blog/cindermedusae-making-generative-creatures/color_layers_hi.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/color_layers.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Colorisation — cliquez pour la version hi-res &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/medusae_final.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Résultat final combiné &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="parametrage" class="section"&gt; &lt;h2&gt;Paramétrage &lt;a class="headerlink" href="#parametrage"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; J'ai aussi créé une interface graphique de paramètrage très simple.
Cette interface me permet de jouer avec l'ensemble des paramètres de la simulation
et de regarder comment la créature évolue en temps réel. Pour les paramètres
qui varient entre une valeur minimale et maximale, l'interface me permet
de calibrer ces limites afin de garder un rendu de méduse réaliste. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/gui.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Interface de paramétrage &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-suite" class="section"&gt; &lt;h2&gt;La suite ? &lt;a class="headerlink" href="#la-suite"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; J'ai très envie de continuer le travail sur ce projet. Une amélioration
évidente serait d'optimiser le code pour que le nombre de frames par secondes
(FPS) soit correct. Il plafonne actuellement à 10 FPS. &lt;/p&gt; &lt;p&gt; Je pensais aussi faire un portage sur  &lt;em&gt; WebGL &lt;/em&gt;  pour que les utilisateurs
puissent s'amuser à créer leurs propres créatures en ligne. &lt;/p&gt; &lt;p&gt; Enfin, j'aimerais étendre le système et jouer avec d'autres types d'organismes
ou de plantes. &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=4"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="art"></category><category term="informatique"></category></entry><entry><title>Le monde merveilleux des CNCs</title><link href="http://faitmain.org//volume-1/cncs.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Alcor Walter</name></author><id>tag:faitmain.org,2013-02-01://volume-1/cncs.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Moyen &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/alcor_walter.html"&gt;Alcor Walter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; 2012 a vu l'impression 3D devenir un sujet qui n'intéresse plus uniquement les
blogs spécialisés et certains geeks au fond de leur garage ; on entend dire que
"monsieur tout le monde" aura bientôt une imprimante 3D à coté de son
imprimante-jet-d'encre-A4-photo-wifi. L'effet "nouveauté" est réel même si on
ne sait pas encore l'avenir d'un tel produit. C'est également l'image
industrielle de ses semblables (découpe laser, découpe plasma, tours
numériques, CNCs etc) qui s'estompe ; on s'imagine possible d'utiliser, voire
de construire ou d'acheter ces outils. D'ailleurs on vient de s'y mettre et
voici ce qu'on peut vous dire pour vous accompagner lors de votre lancement : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_cnc.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Ce que nous allons apprendre de la CNC qui est dans ma cave &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="un-peu-d-histoire-pour-mieux-comprendre" class="section"&gt; &lt;h2&gt;Un peu d'histoire pour mieux comprendre &lt;a class="headerlink" href="#un-peu-d-histoire-pour-mieux-comprendre"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; L'histoire de la machine-outil à commande numérique n'est pas récente, on
trouve la première  &lt;em&gt; machine-outil &lt;/em&gt;  en 1751 ( &lt;a href="https://fr.wikipedia.org/wiki/Vaucanson" class="wikipedia"&gt; Jacques de Vaucanson &lt;/a&gt;   invente le tour à charioter), les
premières  &lt;em&gt; machines-outils automatisées &lt;/em&gt;  (par cames) au XIXème siècle et c'est
vraisemblablement en 1942 que l'histoire de la  &lt;em&gt; machine-outil à commande
numérique &lt;/em&gt;  débute, grâce à  &lt;a href="https://en.wikipedia.org/wiki/John_T._Parsons" class="wikipedia"&gt; John T. Parsons &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; La programmation se faisait avec des cartes perforées, tout d'abord pour les
calculs et quelques années plus tard - lorsque les servomoteurs ont été mis au
point - pour le contrôle. Cependant, les coûts et les usages réservent de
telles machines à l'industrie de pointe, à l'armement, etc et ne sortent que
rarement des laboratoires de recherche. &lt;/p&gt; &lt;p&gt; La technologie va continuer de se perfectionner mais aussi devenir plus
abordable et va rejoindre les bureaux d'études et les chaînes de production de
produits destinés au grand public. À tel point que depuis deux ou trois
décennies cette technologie devient accessible aux petites entreprises et aux
passionnés avertis ; demain elle arrivera peut-être dans le grand public sous
la forme d'une imprimante 3D, qui sait ? &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="definition" class="section"&gt; &lt;h2&gt;Définition &lt;a class="headerlink" href="#definition"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Une CNC  &lt;em&gt; (Computer Numerical Control) &lt;/em&gt;  ou MOCN  &lt;em&gt; (Machine-Outil à Commande
Numérique) &lt;/em&gt;  est donc tout d'abord une machine-outil : elle permet selon ses
caractéristiques d'effectuer diverses opérations - percer, scier, rectifier,
découper, fraiser, plier, graver, tarauder, souder, visser, déposer un
matériau, etc - nécessitant des gestes précis et/ou répétitifs, sur des
matériaux divers. Dans le cas d'une CNC, ces opérations seront donc commandées
par un ordinateur ou un dispositif numérique. &lt;/p&gt; &lt;div class="well note"&gt; &lt;p&gt; Sous la dénomination "CNC" se retrouvent de nombreux dispositifs qui
diffèrent entre eux principalement par l'outil qui est utilisé. Je
présenterai ici le principe d'une CNC permettant d'usiner par retrait de
matière à l'aide de fraises, forets, etc. Cette CNC a été imaginée et
construite par un particulier à qui nous l'avons achetée récemment. Enfin,
ma connaissance du domaine est très récente et surtout autodidacte ; je n'ai
jamais suivi de formation et n'ai aucun diplôme de technicien d'usinage ou
autre. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="possibilites" class="section"&gt; &lt;h2&gt;Possibilités &lt;a class="headerlink" href="#possibilites"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Les matériaux qui peuvent être usinés sont très divers, la caractéristique
principale qui les différencie est la dureté. Plus le matériau est dur, plus il
faudra que la CNC, ainsi que l'outil qui l'équipe aient la qualité et la
puissance nécessaires pour usiner le matériau. Cependant pour commencer à
usiner sans forcément aller rapidement, c'est principalement l'outil et la
vitesse de rotation de celui-ci qui vont influer. &lt;/p&gt; &lt;p&gt; Voici une liste non exhaustive de matériaux que l'on peut usiner : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; acier &lt;/li&gt; &lt;li&gt; aluminium &lt;/li&gt; &lt;li&gt; laiton &lt;/li&gt; &lt;li&gt; polycarbonate &lt;/li&gt; &lt;li&gt; bois massif &lt;/li&gt; &lt;li&gt; contreplaqué &lt;/li&gt; &lt;li&gt; résine &lt;/li&gt; &lt;li&gt; &lt;a href="https://fr.wikipedia.org/wiki/Panneau_de_fibres_%C3%A0_densit%C3%A9_moyenne" class="wikipedia"&gt; mdf &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; mousse &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Dans certains cas, l'usinage requiert de l'huile de coupe, de l'air sous
pression, ou autre. Le but recherché est de refroidir le matériau et l'outil,
mais également de lubrifier pour réduire les frottements et l'usure prématurée.
L'air comprimé est plus adapté lors de la découpe du polycarbonate par exemple
pour éviter que le matériau fonde et vienne se recoller sur l'outil ou le
matériau. Attention à ne pas utiliser n'importe quel produit, pensez d'abord à
votre sécurité et à votre santé. Dans tous les cas, avec ou sans huile de
coupe, le port d'un masque, de lunettes de protection et de bouchons d'oreille
est obligatoire si la CNC n'a pas d'équipement vous protégeant des nuisances
(projections de copeaux, de fluide de coupe, fumées, casse, bruit, etc). &lt;/p&gt; &lt;p&gt; En dehors de l'industrie, les domaines d'utilisation d'une CNC sont nombreux,
voici quelques exemples : Le modélisme (ailes et panneaux d'avions, châssis de
voiture, éléments de bâtiments), l'électronique (circuits imprimés, boîtier
pour montages), la réparation (poignées, butées, guides, engrenages), la
décoration, l'ébénisterie, la lutherie, la mécanique, etc. &lt;/p&gt; &lt;p&gt; L'imagination, l’expérimentation et la recherche de chacun amèneront leur part
de nouveauté dans ce domaine. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="structure" class="section"&gt; &lt;h2&gt;Structure &lt;a class="headerlink" href="#structure"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Observons techniquement de quoi est composée une CNC, en partant de la table
qui accueillera le matériau à usiner. La base est similaire à ce qu'on aurait
dans le cas d'un usinage manuel : le matériau doit être solidement fixé à une
table d'usinage à l'aide d'un étau, de butées, de pinces, ou collée, etc, selon
les besoins. Parfois la table d'usinage peut-être une table aspirante ou un
"martyr". &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="cnc1_table_martyr.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="cnc1_table_aspirante.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Table d'usinage  &lt;em&gt; "martyr" &lt;/em&gt; &lt;/td&gt; &lt;td&gt; Table aspirante &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; L'usinage du matériau peut se faire avec un outil (une fraise, un foret, une
lame, une pointe à graver, etc) dont les caractéristiques sont adaptées au
matériau et à l'opération à réaliser. Cet outil est monté sur ce qu'on appelle
une broche, c'est-à-dire, l'ensemble formé par le système de fixation de
l'outil et le moteur permettant la rotation à l'origine de l'usinage. &lt;/p&gt; &lt;p&gt; Tout cela est très proche de ce qui est mis en place lors d'une opération
manuelle. Maintenant voyons comment l'action de l'homme a été remplacée par la
commande d'une machine : &lt;/p&gt; &lt;p&gt; Si on usine avec un outil en position verticale, 3 axes (X, Y et Z) suffisent
pour le déplacer dans l'espace. Et pour se repérer dans cet espace orthonormé,
on utilisera l'unité de mesure du système international ou l'unité du
système anglo-saxon. &lt;/p&gt; &lt;p&gt; De nombreuses CNC ont pour base un châssis rigide sur lequel les différents
organes de la machine reposent pour opérer. Essentiellement deux catégories de
structures existent : la  &lt;em&gt; table mobile &lt;/em&gt;  et le  &lt;em&gt; portique mobile &lt;/em&gt; . Dans le
premier cas, le portique est fixé sur le châssis en son centre et c'est la
table d'usinage qui se déplace sur un axe (X). Dans le deuxième cas, plus
courant, c'est l'inverse : la table est fixée au châssis et le portique se
déplace sur l'axe (X) pour parcourir la table d'usinage. Ce dispositif est
moins coûteux en espace et se révèle plus versatile, c'est le cas de notre CNC. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_portique_mobile.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le portique est mobile sur toute la longueur du châssis. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Le portique quant à lui sert de base pour le déplacement sur l'axe Y du porte broche.
Le porte broche enfin sert de base pour le déplacement sur l'axe Z de la broche. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_axes.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; L'ensemble des axes X, Y et Z permet de déplacer l'outil de coupe verticalement. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Dans certaines situations, il est pratique d'avoir un quatrième, cinquième ou
énième axe pour orienter l'outil et/ou orienter le matériau ; ainsi des
opérations peuvent s'appliquer sur des faces du matériau non accessibles sur
une CNC 3 axes. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="mecanique" class="section"&gt; &lt;h2&gt;Mécanique &lt;a class="headerlink" href="#mecanique"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; La liberté de mouvement est donc gérée par ces axes mais il faut encore assurer
le déplacement avec force et précision ; ceci est possible grâce à de
nombreuses solutions mais je vais expliquer ici la plus populaire : les moteurs
pas à pas, les vis à billes et les axes supportés. &lt;/p&gt; &lt;p&gt; Le moteur pas à pas est un moteur dont le fonctionnement est relativement
fiable, puissant, précis mais pas très rapide. Lorsque les moyens le
permettent, des servomoteurs pas à pas sont utilisés, permettant d'avoir une
correction en cas d'erreur - le servomécanisme permettant l'asservissement et
la rétroaction (on donne une commande et on vérifie qu'elle se réalise). Un ou
parfois plusieurs moteurs pas à pas peuvent être utilisés pour mouvoir chaque
axe. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_moteurpasapas.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le moteur pas à pas de l'axe Z, couplé indirectement à la vis à billes &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; La vis à billes permet de convertir la rotation du moteur en translation
(comme lorsqu'on visse une vis !). Les billes remplacent les pas de l'écrou,
limitant ainsi les frottements et augmentant considérablement la précision. Le
couplage entre le moteur et la vis à billes peut être : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; direct, au moyen d'un  &lt;em&gt; coupleur d'axe &lt;/em&gt;  spécifique qui protégera de la casse le moteur et la vis, &lt;/li&gt; &lt;li&gt; ou indirect, au moyen de poulies et de courroies qui permettront une démultiplication de l'effort tout en gardant une certaine souplesse de mouvement. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Pour finir, un  &lt;em&gt; axe supporté &lt;/em&gt;  est un axe rond en acier trempé monté sur un
support en aluminium permettant ainsi de fixer et soutenir l'axe sur toute sa
longueur. Ces axes sont donc très utiles pour des axes longs qui pourraient
fléchir s'il n'étaient pas supportés. La partie mobile glisse sur l'axe grâce à
des  &lt;em&gt; paliers &lt;/em&gt;  montés sur des  &lt;em&gt; douilles à billes &lt;/em&gt; . On conserve ainsi une grande
stabilité lors du déplacement. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_materiel_guidage_translation.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un peu de mécanique ... &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; D'autres solutions existent : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; les vis trapézoïdales (meilleures que le pas de vis classique) et les axes
non supportés sont bon marché mais sont plus sensibles à l'usure et sont
moins précis que la solution vis à billes et axes supportés. &lt;/li&gt; &lt;li&gt; les rails guidés à billes sont coûteux mais remplacent avantageusement les
axes supportés et douilles à billes, offrant encore plus de précision et de
stabilité. &lt;/li&gt; &lt;li&gt; les vis à rouleaux satellites offrent également un niveau supérieur de
puissance, de durabilité et de précision par rapport aux vis à billes. On les
trouve sur des machines dont les conditions de mise en œuvre sont soumises à
de fortes contraintes ce qui explique leur coût élevé. &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="les-moteurs-pas-a-pas-et-les-controleurs" class="section"&gt; &lt;h2&gt;Les moteurs pas à pas et les contrôleurs &lt;a class="headerlink" href="#les-moteurs-pas-a-pas-et-les-controleurs"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Pour comprendre le pilotage d'une CNC, il faut d'abord connaître un peu le
fonctionnement d'un moteur pas à pas : &lt;/p&gt; &lt;p&gt; Un moteur pas à pas est conçu pour effectuer un tour complet en un certain
nombre de pas. Cette caractéristique est indiquée sur le moteur sous la forme
 &lt;em&gt; 1,8°/step &lt;/em&gt;  ou  &lt;em&gt; 200 steps/rotation &lt;/em&gt; . Le pas correspond donc à l'unité de
mouvement du moteur. Cette rotation peut se faire dans le sens des aiguilles
d'une montre ou inversement. &lt;/p&gt; &lt;p&gt; Le moteur pas à pas est généralement alimenté sur 4 fils, reliés deux à deux à
des bobines. C'est en alimentant ces bobines et en tenant compte de la polarité
d'alimentation, que le moteur tournera d'un pas dans un sens ou dans l'autre ;
en alternant cette alimentation dans un ordre précis, on fait faire plusieurs
pas au moteur. Sans rentrer dans le détail du fonctionnement, cela signifie
qu'il faut être capable d'alimenter le moteur avec un courant de forte
intensité en alternant très rapidement les bobines et les polarités, tout en
conservant une qualité d'alimentation. Pour cela, on peut utiliser un
 &lt;em&gt; contrôleur de moteur &lt;/em&gt; , sur lequel on branche directement le moteur pas à pas
et une alimentation électrique. Ce contrôleur peut être paramétré pour limiter
le courant fourni aux bobines afin de ne pas abîmer le moteur. &lt;/p&gt; &lt;div class="alert alert-info"&gt; &lt;h4&gt;Alimentation du contrôleur de moteur pas à pas&lt;/h4&gt; &lt;p&gt; Le contrôleur de moteur limite le courant fourni aux bobines par  &lt;a href="https://fr.wikipedia.org/wiki/Hacheur" class="wikipedia"&gt; hachage &lt;/a&gt;   ; il est par conséquent possible
d'utiliser une alimentation fournissant une tension supérieure à ce que peut
supporter le moteur. Le hacheur limite le courant en fonction du réglage
disponible sur le contrôleur de moteur. Sachant que la vitesse de montée du
courant à la valeur nominale décroit à l'approche de celle-ci, il est
intéressant d'utiliser une alimentation capable de fournir plusieurs fois la
tension dont on à besoin : le hachage du courant empêchera de toute manière
qu'on dépasse les valeurs désirées et on profitera d'une vitesse de montée
du courant bien meilleure ce qui permettra une réponse optimale des moteurs. &lt;/p&gt; &lt;/div&gt; &lt;p&gt; Le contrôleur de moteur pas à pas possède également une interface de commande
composée de 3 fils prenant en charge une commande chacun, sous forme de niveau
logique binaire (0 ou 5V) : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;strong&gt; [ENABLE] &lt;/strong&gt;  moteur allumé ou éteint, &lt;/li&gt; &lt;li&gt; &lt;strong&gt; [DIRECTION] &lt;/strong&gt;  direction de rotation horaire ou anti-horaire, &lt;/li&gt; &lt;li&gt; &lt;strong&gt; [STEP] &lt;/strong&gt;  rotation de l'axe du moteur d'un pas. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Le moteur peut donc être : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; éteint (ENABLE à 0V) : aucune autre commande n'est interprétée et l'axe du
moteur est en rotation libre (on peut le positionner à la main), &lt;/li&gt; &lt;li&gt; ou allumé (ENABLE à 5V) : en l'absence de commande de rotation, le moteur
maintient une position (on ne peut pas le bouger manuellement) ; lorsqu'une
commande de rotation arrive (passage de 0 à 5V sur le fil [STEP]), le
moteur effectue une unité de rotation dans le sens qui lui est commandé pas
le fil de direction. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; La vitesse de rotation du moteur dépend au final de la fréquence des commandes
sur le fil [STEP]. La documentation du contrôleur est importante pour connaître
la durée des impulsions et leur séquencement afin de bien optimiser le contrôle
du moteur. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_drivers.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un peu d'électronique ... &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="alert alert-info"&gt; &lt;h4&gt;Calculer la précision de la CNC&lt;/h4&gt; &lt;p&gt; En connaissant l'angle d'un pas du moteur pas à pas, ainsi que le pas de vis
à billes et le rapport de couplage, on peut calculer la précision théorique
de la CNC. Par exemple, pour l'axe X : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; notre moteur pas à pas peut effectuer un angle minimum de 1.8°, soient 200 pas par tour, &lt;/li&gt; &lt;li&gt; la poulie crantée sur l'axe du moteur a 15 dents , &lt;/li&gt; &lt;li&gt; la poulie crantée sur la vis à billes a 20 dents, &lt;/li&gt; &lt;li&gt; la vis à bille a un pas de 5mm (1 tour de vis déplace l'écrou de 5mm). &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; La précision théorique de l'axe X de la CNC est donc de : &lt;/p&gt; &lt;blockquote&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;(5 mm / 200 pas) * ( 15 / 20) = 0,025 * 0,75 = 0,01875 mm
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;/blockquote&gt; &lt;p&gt; La précision de cet axe est ici théorique puisqu'aucune mesure du jeu des
différentes parties mécaniques n'a été faite. Bien qu'un soin important ait
été apporté aux technologies utilisées, il existera toujours une marge
d'erreur lors de l'usinage dans laquelle intervient également le type
d'opération, sa vitesse d'exécution, la nature du matériau, l'usure de
l'outil, etc. Une autre source éventuelle d'imprécision est à évaluer
également, même si aujourd'hui les chances sont faibles d'avoir ce
problème, c'est la capacité électronique et surtout informatique à traiter
des informations avec une grande précision, tant pour le calcul que pour la
commande. &lt;/p&gt; &lt;p&gt; Dans notre cas, il reste possible d'augmenter la précision sans trop de
difficulté, soit en augmentant le rapport du couplage moteur/vis à billes, soit
en remplaçant le moteur par un moteur plus précis (attention de conserver des
caractéristiques suffisantes - couple moteur, vitesse), ou plus simplement, si
les moteurs pas à pas le permettent, en adaptant l'électronique de contrôle
pour permettre d'augmenter le nombre de pas par rotation. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-commande-numerique" class="section"&gt; &lt;h2&gt;La commande numérique &lt;a class="headerlink" href="#la-commande-numerique"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; On comprend que le moteur pas à pas répond à l'impératif de précision, mais le
principe de commande est trop basique pour pouvoir être programmé directement
par l'homme. &lt;/p&gt; &lt;p&gt; Dès lors, l'interface de commande de chaque contrôleur de moteur pas à pas sera
reliée à un dispositif numérique afin de permettre un contrôle intelligible et
programmable par l'homme. &lt;/p&gt; &lt;p&gt; Ce rôle sera tenu soit par l'ordinateur, soit par des systèmes dédiés à cette
tâche. Une troisième solution intermédiaire consiste à utiliser un ordinateur
pour les calculs et l'affichage, couplé à un contrôleur de CNC pour le
pilotage. La principale contrainte est d'être capable de délivrer les commandes
au contrôleur de moteur (enable/step/direction) de manière très rapide et
synchrone. L'ordinateur seul ne présente pas une solution idéale ; seul le port
parallèle permet de répondre en partie à ces impératifs mais l'architecture
matérielle n'est pas optimisée pour ce type d'utilisation et un ralentissement
de quelques microsecondes ne peut être toléré. Compléter ou remplacer
l'ordinateur par du matériel dédié est un peu plus coûteux mais permet un
contrôle plus adapté aux contraintes des CNCs. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_commande.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Schéma théorique d'une CNC 3 axes avec 2 moteurs sur l'axe X &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce système de commande envoie donc des informations de contrôle des moteurs,
mais peut aussi gérer l'activation et le réglage de la vitesse du moteur de la
broche, l'aspiration des copeaux, l'adjonction d'eau ou d'huile de coupe, la
ventilation des fumées, le changement d'outil automatique, etc. Le système de
commande nécessite cependant d'être informé de certains événements, par
exemple, la prise d'origine des axes (calibration du repère orthonormé). Cette
opération requiert l'utilisation de contacteurs de position sur chaque axe,
informant de manière précise le bout de course des axes. Autre exemple,
lorsqu'un outil est fixé à la broche, la hauteur de celui-ci doit être mesurée
à l'aide d'un contacteur pour que la commande ajuste le parcours d'outil.
Certains servomoteurs peuvent également envoyer un retour au système de
commande. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/cnc1_contacteur.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un des deux contacteurs de position de l'axe Y &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Toutes ces possibilités peuvent être gérées par l'homme en utilisant un langage
de programmation spécifique. Le langage le plus populaire aujourd'hui pour le
contrôle des CNCs est le G-Code ; le dispositif numérique sera donc en mesure
d'interpréter ce langage pour commander, entre autres, les contrôleurs de
moteurs pas à pas. Ce langage met à disposition des instructions de déplacement
de l'outil de coupe, de vitesse de coupe, de gestion de chemins, etc. &lt;/p&gt; &lt;p&gt; Le langage peut-être écrit directement par l'homme d'après les dessins
techniques du projet, en effectuant un certain nombre de calculs - pas toujours
évidents - pour prévoir le passage des outils. Mais cette tache de calcul du
passage d'outils, ainsi que la création des dessins techniques sont aujourd'hui
assistés par ordinateur. &lt;/p&gt; &lt;p&gt; Les outils informatiques qui interviennent dans le domaine des CNCs sont rangés dans les catégories suivantes : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; CAO (= CAD en anglais) : Conception Assistée par Ordinateur. Permet de
concevoir et d'élaborer les dessins techniques des pièces à réaliser. Les
fichiers sont souvent des formats propriétaires contenant des informations de
plans 2D ou de volumes 3D. &lt;/li&gt; &lt;li&gt; FAO (= CAM en anglais) : Fabrication Assistée par Ordinateur. Permet de
calculer les chemins des opérations d'usinages sous forme de parcours-outils.
Les fichiers sont également propriétaires mais les outils permettent pour la
plupart d'exporter ces parcours-outils en G-Code. &lt;/li&gt; &lt;li&gt; Interpréteurs G-Code et contrôleurs de CNCs (G-Code parser and CNCs
controller en anglais) : Permet d'interpréter le G-Code et de commander les
contrôleurs de moteurs de la CNC. &lt;/li&gt; &lt;/ul&gt; &lt;div class="well note"&gt; &lt;p&gt; La norme décrivant le G-Code est cependant rarement implémentée en sa
totalité, ni toujours conformément, et ce pour plusieurs raisons : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; d'une part, le langage a été standardisé en 1980 après 20 ans
d'utilisation, et cette norme n'a pas évoluée depuis 1980 ; depuis, de
nombreux fabricants de machines ont donc adapté le langage à leurs
besoins. &lt;/li&gt; &lt;li&gt; d'autre part, l'automatisation des tâches de conception et de fabrication
a rendu certaines instructions moins utiles, voir inutiles. &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;p&gt; Voici la chaîne de logiciels que j'utilise ; ces logiciels ont été choisis spécifiquement dans le domaine du libre : &lt;/p&gt; &lt;div id="cao" class="section"&gt; &lt;h2&gt;CAO &lt;a class="headerlink" href="#cao"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; FreeCAD gère de nombreux formats de fichiers en importation et en exportation.
L'outil est assez facile à prendre en main : un certain nombre "d'ateliers"
permettent de gérer la modélisation 3D à différentes étapes et en fonction des
besoins. Un système de graphe permet de revenir sur les étapes de modélisation
sans utiliser d'historique linéaire. L'approche globale est la modélisation
paramétrable basée sur des contraintes. Beaucoup plus facile à prendre en main
qu'à expliquer ! &lt;/p&gt; &lt;p&gt; LibreCAD gère la modélisation 2D avec une approche traditionnelle, un peu comme
si vous êtiez sur une table à dessin, avec rapporteur, équerre, papier
millimétré, calques, etc. &lt;/p&gt; &lt;/div&gt; &lt;div id="fao" class="section"&gt; &lt;h2&gt;FAO &lt;a class="headerlink" href="#fao"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; HeeksCAD + plugin HeeksCNC. Ce plugin permet le calcul de passages d'outils en
partant de modèles 2D ou 3D. La prise en main est plutôt ergonomique et le
novice s'y retrouve facilement après avoir regardé un ou deux tutoriaux vidéos.
Les opérations d'usinage de poche, de profil, de perçage, d'ébauche en zigzag,
etc sont disponibles mais il reste des bugs et il manque des opérations.
Dommage que le développement semble en pause parce que le plugin est fort
intéressant et il n'y a pas beaucoup de concurrent dans le monde libre sur ce
créneau. Voir également PyCam. &lt;/p&gt; &lt;/div&gt; &lt;div id="interpreteurs-g-code-et-controleurs-de-cnc" class="section"&gt; &lt;h2&gt;Interpréteurs G-Code et contrôleurs de CNC &lt;a class="headerlink" href="#interpreteurs-g-code-et-controleurs-de-cnc"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; LinuxCNC, anciennement EMC2 est incontournable et presque seul dans ce domaine.
L'outil possède plusieurs interfaces graphiques bien pratiques. Il gère le port
parallèle de votre ordinateur mais peut aussi gérer plusieurs types de cartes
dédiées au contrôle de cnc. Il accepte le G-Code le plus couramment utilisé. Il
est livré par défaut sur une distribution Ubuntu 10.04 LTS spécialement
optimisée pour LinuxCNC. &lt;/p&gt; &lt;p&gt; Il existe de nombreux autres logiciels libres de CAO et des scripts et petits
outils de FAO très pratiques (voir notamment le plugin de génération de G-Code
pour Inkscape, F-Engrave, etc). Et dans la catégorie interpréteur
G-Code/contrôleur de CNCs, l'arrivée de solutions embarquées ( &lt;a href="http://short.faitmain.org/grblgrbl-github"&gt; Grbl &lt;/a&gt;  
sur Arduino et son portage  &lt;a href="http://short.faitmain.org/smoothie-project-1"&gt; SmoothieWare &lt;/a&gt;   sur mbed,
Smoothieboard et autres) sont à tester rapidement ! Elles permettront à terme
de ne plus utiliser le port parallèle et d'obtenir de meilleures performances. &lt;/p&gt; &lt;div class="alert alert-info"&gt; &lt;h4&gt;Port parallèle et CNC&lt;/h4&gt; &lt;p&gt; Comme je l'indiquais plus haut, un ordinateur seul n'est pas vraiment conçu
pour répondre aux contraintes de commande numérique. Lors du paramétrage de
LinuxCNC, un programme permet d'effectuer un test de latence un peu
empirique mais fonctionnel, dont le résultat permettra de régler le débit
du port parallèle de votre ordinateur. Pour optimiser la réponse de
l'ordinateur et gérer au mieux l'envoi des données sur le port parallèle,
LinuxCNC utilise le noyau linux temps réel RTAI dont le développement
semble ne pas évoluer rapidement. De ce fait, il est difficile de l'adapter
à un environnement logiciel et du matériel récents. Il est d'ailleurs
recommandé d'installer le CD de LinuxCNC 2.5.1 (Ubuntu 10.04 LTS compilée
avec RTAI) sur un ordinateur simple cœur et dont la configuration mémoire
ne dépasse pas 1Go. Ces recommandations vont devenir rapidement
problématiques pour les utilisateurs, même si le logiciel n'est
effectivement pas gourmand en puissance, il deviendra de plus en plus
difficile de trouver ce type de matériel d'occasion. Le développement est
cependant toujours très actif et tente justement de se séparer de noyau
temps réel RTAI. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="et-maintenant" class="section"&gt; &lt;h2&gt;Et maintenant ? &lt;a class="headerlink" href="#et-maintenant"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Cet article aborde les bases du fonctionnement d'une CNC 3 axes pour
hobbyiste ; il reste ensuite à apprendre les techniques d'usinage ainsi que la
conception et la fabrication assistés par ordinateur. Ne pas oublier que c'est
un métier avant tout, ce qui n'empèche pas, avec du sérieux et des précautions,
d'attaquer le sujet sous divers angles. Sur internet on trouve assez facilement
des informations et de l'aide : &lt;/p&gt; &lt;p&gt; Plusieurs communautés existent, comme par exemple  &lt;a href="http://short.faitmain.org/portail-usinages-1"&gt; usinages.com &lt;/a&gt;   ou pour les anglophones :  &lt;a href="http://short.faitmain.org/cnczonecom-the-largest-1"&gt; cnczone.com &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Les sites des fabricants d'outils et des logiciels de CAO/FAO (principalement
dans la communauté du libre) ont souvent des ressources très bien faites et
complètes. Consultez la  &lt;a href="http://short.faitmain.org/documentation"&gt; documentation de LinuxCNC &lt;/a&gt;  , qui va bien au delà de
l'utilisation du logiciel et donne de nombreuses références, explications et
exemples. &lt;/p&gt; &lt;p&gt; Enfin, le détournement d'un tel outil est bien sûr possible, jetez un oeil sur
 &lt;a href="http://short.faitmain.org/search-results"&gt; hackaday.com &lt;/a&gt;   par exemple ! &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=2"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category></entry><entry><title>Piloter des dispositifs sans fil</title><link href="http://faitmain.org//volume-1/dispositifs.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Jonathan Schemoul</name></author><id>tag:faitmain.org,2013-02-01://volume-1/dispositifs.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Avancé &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/jonathan_schemoul.html"&gt;Jonathan Schemoul&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="leonardo_montage.jpg"&gt; &lt;/img&gt; &lt;span class="legend span12"&gt; Montage avec la Leonardo &lt;/span&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Partie 1: Réception en 433 MHz &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Vous avez sans doute entendu parler ou vu des détecteurs de fumée, d'ouverture
de porte, des télécommandes, des prises murales, etc. sans fil ? &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Que ce soit les modèles chers que vous trouvez en magasin ou les modèles
chinois bon marché, la plupart, s'ils ne sont pas avancés, utilisent la bande
de fréquence 433 MHz (n'essayez pas ceux en 315, ils sont illégaux en France).
Certains autres sont en 2.4 ghz, mais nous les laisserons de coté pour
l'instant. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; En ce qui concerne ces capteurs en 433 MHz, il se trouve qu'ils utilisent pour
la plupart un protocole très simple, introduit par des circuits intégrés
chinois à bas coût, les PT2262 côté émission et les PT2272 côté réception
(d'autres plus exotiques comme les SC5262 / SC5272, HX2262 / HX2272, EV1527,
RT1527, FP1527 ou encore HS1527 peuvent être trouvés et fonctionneront aussi). &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Plutôt que de nous lancer dans l'acquisition de ces chips, on va utiliser notre
microcontrôleur, plus que capable de le faire, pour décoder et encoder les
signaux, grâce à la librairie  &lt;a href="http://short.faitmain.org/rc-switch-arduino-1"&gt; RC-Switch pour Arduino &lt;/a&gt;  ,
ou  &lt;a href="http://short.faitmain.org/r10rrcswitch-pi-github"&gt; RCSwitch-pi pour la Raspberry Pi &lt;/a&gt;  . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Regardons de plus près ce que nous avons à disposition : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ul bullet="-"&gt; &lt;li&gt; Un  &lt;a href="http://short.faitmain.org/arduino-plateformes"&gt; Arduino &lt;/a&gt;   (ici un
 &lt;a href="http://short.faitmain.org/arduino-leonardo"&gt; Leonardo &lt;/a&gt;  , mais un  &lt;a href="http://short.faitmain.org/arduino-hackspark"&gt; Uno &lt;/a&gt;   ou  &lt;a href="http://short.faitmain.org/freeduino-complete"&gt; un &lt;/a&gt;    &lt;a href="http://short.faitmain.org/platine-iteaduino"&gt; clone &lt;/a&gt;  
 &lt;a href="http://short.faitmain.org/platine-seeeduino"&gt; quelconque &lt;/a&gt;  
fera l'affaire) - Une  &lt;a href="http://short.faitmain.org/breadboard-taille"&gt; breadboard &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; Un  &lt;a href="http://short.faitmain.org/433mhz-hackspark"&gt; 433 MHz RF link kit (un émetteur, un récepteur) &lt;/a&gt;   - Des  &lt;a href="http://short.faitmain.org/breadboard-renforces"&gt; fils à breadboard &lt;/a&gt;  &lt;/li&gt; &lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/composants1.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage détaillé &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Niveau détecteurs : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ul bullet="-"&gt; &lt;li&gt; Un  &lt;a href="http://short.faitmain.org/detecteur-douverture"&gt; détecteur d'ouverture de porte &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; Un détecteur PIR &lt;/li&gt; &lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="pir.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="doorswitch.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Détecteur PIR &lt;/td&gt; &lt;td&gt; Détecteur d'ouverture de porte &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Regardons ce détecteur d'ouverture de porte de plus près : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span3 offset4"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/doorswitch-grosplan.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Gros plan sur le détecteur d'ouverture de porte &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; On voit bien le PT2262 pour l'encodage et à gauche des jumper pour choisir le
code (ainsi chaque émetteur aura un code différent). Pas besoin de déduire le
code de ces jumpers, on va faire un petit programme Arduino qui nous les dira
au fur et à mesure de leur activation. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="installation-de-la-librairie-rc-switch" class="section"&gt; &lt;h2&gt;Installation de la librairie RC Switch &lt;a class="headerlink" href="#installation-de-la-librairie-rc-switch"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Télécharger  &lt;a href="http://short.faitmain.org/rcswitch_23zip-rc-switch"&gt; RCswitch_2.3.zip &lt;/a&gt;  
et extraire le contenu dans le sous-repertoire "libraries"
(s'il n'existe pas, créez le) de votre répertoire "sketchbook", pour que cela donne : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; sous Mac,  &lt;em&gt; /Users/VOTRE_UTILISATEUR/Documents/Arduino/libraries/RCswitch &lt;/em&gt; &lt;/li&gt; &lt;li&gt; sous Linux,  &lt;em&gt; /home/VOTRE_UTILISATEUR/sketchbook/libraries/RCswitch &lt;/em&gt; &lt;/li&gt; &lt;li&gt; sous Windows,  &lt;em&gt; C:UsersVOTRE_UTILISATEURDocumentsArduinolibrariesRCswitch &lt;/em&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="connexion-du-recepteur" class="section"&gt; &lt;h2&gt;Connexion du récepteur &lt;a class="headerlink" href="#connexion-du-recepteur"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le récepteur est simple, il suffit de le connecter au courant (+5v et GND) et à
un pin de l'Arduino ayant une interruption. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span3 offset4"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/recepteur.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Récepteur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Voici un petit tableau des interruptions : &lt;/p&gt; &lt;table class="table"&gt;        &lt;thead&gt; &lt;tr&gt; &lt;th&gt; Carte &lt;/th&gt; &lt;th&gt; int.0 &lt;/th&gt; &lt;th&gt; int.1 &lt;/th&gt; &lt;th&gt; int.2 &lt;/th&gt; &lt;th&gt; int.3 &lt;/th&gt; &lt;th&gt; int.4 &lt;/th&gt; &lt;th&gt; int.5 &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; Uno, Ethernet &lt;/td&gt; &lt;td&gt; 2 &lt;/td&gt; &lt;td&gt; 3 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Mega2560 &lt;/td&gt; &lt;td&gt; 2 &lt;/td&gt; &lt;td&gt; 3 &lt;/td&gt; &lt;td&gt; 21 &lt;/td&gt; &lt;td&gt; 20 &lt;/td&gt; &lt;td&gt; 19 &lt;/td&gt; &lt;td&gt; 18 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Leonardo &lt;/td&gt; &lt;td&gt; 3 &lt;/td&gt; &lt;td&gt; 2 &lt;/td&gt; &lt;td&gt; 0 &lt;/td&gt; &lt;td&gt; 1 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; Sur notre Leonardo, si nous voulons connecter notre récepteur sur l'interrupt
0, il nous faut le connecter sur le pin 3 : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/leonardo_montage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="recevoir-des-codes" class="section"&gt; &lt;h2&gt;Reçevoir des codes &lt;a class="headerlink" href="#recevoir-des-codes"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Pour cela, nous allons lancer l'IDE Arduino et charger l'exemple de RCSwitch,
"ReceiveDemo_Simple". &lt;/p&gt; &lt;p&gt; Pour le Leonardo, il faut ajouter "while (!Serial) ;" avant d'écrire sur le
port série (lié à l'utilisation de l'USB après le lancement) : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/sketch_demo.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le code dans Arduino IDE &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Envoyons le croquis sur la carte, et lancons le moniteur série (Outils &gt;
Moniteur Série, après avoir vérifié que le port était le bon dans Outils &gt; Port
série). &lt;/p&gt; &lt;p&gt; Actionnez votre senseur (ici le détecteur d'ouverture de porte, en écartant les
deux parties) : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/montage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Et magie, des codes s'affichent dans le moniteur série : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/serial_print.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Retours dans le port série &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce code, 13464924 dans cette capture d'écran, est l'id unique de votre senseur,
24bit est la taille de celui-ci et 1 le protocole utilisé (ici celui du
PT2262). &lt;/p&gt; &lt;p&gt; Si l'on active un autre senseur (le capteur de mouvement ici, il s'allume en
rouge lorsqu'il détecte un mouvement) : &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="capteur_move.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="deux_codes.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Détection de mouvement &lt;/td&gt; &lt;td&gt; Deux codes &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; On voit que l'on reçoit un nouveau code :  &lt;strong&gt; 12449942 &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; Note : si vous ne voyez rien dans la console avec un Leonardo, c'est quelque
chose qui arrive souvent, n'hésitez pas à ouvrir un autre moniteur série que
celui livré avec l'IDE Arduino. Par exemple, putty fait très bien l'affaire
même sous Linux. La commande "putty -serial /dev/ttyACM2 -sercfg 9600" permet
d'ouvrir ttyACM2 en 9600 baud. (remplacer /dev/ttyACMx par COMx sous windows
:)) &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="interpretation" class="section"&gt; &lt;h2&gt;Interprétation &lt;a class="headerlink" href="#interpretation"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; De là à garder ces codes et à donner une information humainement
compréhensible, il n'y a qu'un pas. &lt;/p&gt; &lt;p&gt; Essayons d'envoyer une information utile sur le port série &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include &amp;lt;RCSwitch.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#define couloir 12449942&lt;/span&gt;
&lt;span class="cp"&gt;#define porte 13464924&lt;/span&gt;

&lt;span class="n"&gt;RCSwitch&lt;/span&gt; &lt;span class="n"&gt;mySwitch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RCSwitch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enableReceive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getReceivedValue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;porte&lt;/span&gt;:
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Quelqu&amp;#39;un a ouvert la porte&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;couloir&lt;/span&gt;:
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Quelqu&amp;#39;un marche dans le couloir !&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

        &lt;span class="nl"&gt;default:&lt;/span&gt;
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Dispositif inconnu: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resetAvailable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; D'abord dans setup() on initialise mySwitch sur l'interrupt 0, ensuite, dans le
loop() lorsque l'on reçoit un message, on agit selon ce qui est reçu. On envoie
un message simple "Quelqu'un a ouvert la porte !" ou "Quelqu'un marche dans le
couloir !" selon le cas. &lt;/p&gt; &lt;p&gt; Voici ce que l'on reçoit sur le port série : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/Capture-du-2012-12-17-140454.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Capture du port série &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Comme vous pouvez le voir, on a l'information, mais elle se répète. C'est dû à
la nature du protocole, qui ne permet pas de vérifier la réception de
l'information. Du coup, elle est envoyée plusieurs fois pour être sûr de sa
réception. &lt;/p&gt; &lt;p&gt; Pour régler ce problème, il suffit d'ajouter un timer sur la réception, pour ne
l'avoir qu'une seule fois : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="cp"&gt;#include &amp;lt;RCSwitch.h&amp;gt;&lt;/span&gt;
&lt;span class="cp"&gt;#define couloir 12449942&lt;/span&gt;
&lt;span class="cp"&gt;#define porte 13464924&lt;/span&gt;

&lt;span class="n"&gt;RCSwitch&lt;/span&gt; &lt;span class="n"&gt;mySwitch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;RCSwitch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="c1"&gt;// On limite à un évènement par seconde long&lt;/span&gt;
&lt;span class="cp"&gt;#define debounceDelay 1000&lt;/span&gt;

&lt;span class="c1"&gt;// On a deux détecteurs, donc on a deux timers.&lt;/span&gt;
&lt;span class="n"&gt;last_times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setup&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;begin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;9600&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;enableReceive&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="nf"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;last_times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;millis&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;last_times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;debounceDelay&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;last_times&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;millis&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getReceivedValue&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// on remet à zero le timer&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;switch&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;porte&lt;/span&gt;:
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Quelqu&amp;#39;un a ouvert la porte !&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="n"&gt;couloir&lt;/span&gt;:
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debounce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
                &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Quelqu&amp;#39;un marche dans le couloir !&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nl"&gt;default:&lt;/span&gt;
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;Dispositif inconnu: &amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="n"&gt;mySwitch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resetAvailable&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Notre fonction debounce permet, pour un détecteur donné (de 0 à 1 ici), de dire
si c'est un nouvel événement ou pas. Voici ce que cela donne si j'ouvre la
porte, marche jusqu'à une autre porte puis ouvre cette autre porte inconnue : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/Capture-du-2012-12-17-142121.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Capture du port série &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Comme vous pouvez le voir, nous n'avons pas de timer sur l'émetteur inconnu
mais on en a un sur ceux qui sont connus. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-suite" class="section"&gt; &lt;h2&gt;La suite ? &lt;a class="headerlink" href="#la-suite"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Dans la deuxième partie nous verrons comment envoyer des signaux à une prise en
433 MHz, et envoyer et recevoir des signaux entre Arduino selon le même
principe. &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=8"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category></entry><entry><title>Rencontre au LabFab de Rennes</title><link href="http://faitmain.org//volume-1/labfab_rennes.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Florian Strzelecki</name></author><id>tag:faitmain.org,2013-02-01://volume-1/labfab_rennes.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/florian_strzelecki.html"&gt;Florian Strzelecki&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/accueil-labfab"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/hugue_arduino.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Hugues Aubin en train de montrer une carte Arduino à un atelier
du LabFab &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Depuis que je fréquente Hugues Aubin aka
 &lt;a href="http://short.faitmain.org/zolnir-hugobiwan"&gt; @Hugobiwan &lt;/a&gt;   sur Twitter, je suis chaque fois
surpris non seulement par ses projets et par les nouvelles qu'il apporte, mais
aussi (et surtout) par la ferveur et l'énergie qui l'animent. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Rencontre avec le porteur du projet "LabFab", un  &lt;em&gt; FabLab &lt;/em&gt;  à Rennes, qui
a ouvert ses portes l'année dernière, et qui va bientôt employer à temps plein
une personne pour accueillir le public. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="petite-introduction" class="section"&gt; &lt;h2&gt;Petite introduction &lt;a class="headerlink" href="#petite-introduction"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Lorsque je lui demande de se présenter en quelques mots, il me tend sa carte :
Hugues Aubin, "Chargé de Mission TIC", sous les logos de Rennes Métropole et de
la Mairie de Rennes. Sa situation est assez exceptionnelle pour être notée, car
elle lui permet de faire le pont entre des activités de la ville, et les
activités de toute l'agglomération. &lt;/p&gt; &lt;p&gt; Son lien avec le LabFab ? Il l'a mis en place, en contactant les bonnes
personnes, et en réunissant des acteurs locaux qui se posaient déjà les mêmes
questions sur les FabLab, les Hackerspaces, et tous ces lieux qui proposent des
espaces de fabrication au plus proche des gens. &lt;/p&gt; &lt;p&gt; Parce que le LabFab ne s'est pas fait tout seul ! D'abord, il y a
 &lt;a href="http://short.faitmain.org/eesab-rennes"&gt; l'Ecole européenne supérieure d'Art de Bretagne &lt;/a&gt;  ,
qui prête des locaux pour le LabFab. Et tout comme
 &lt;a href="http://short.faitmain.org/telecom-bretagne-1"&gt; Telecom Bretagne &lt;/a&gt;  , l'intérêt pour eux
est ce qu'un FabLab apporte aux étudiants. &lt;/p&gt; &lt;p&gt; Il y a la ville de Rennes, ainsi que
 &lt;a href="http://short.faitmain.org/accueil-rennes-1"&gt; Rennes Métropole &lt;/a&gt;  , qui s'intéressent tous
deux à ce qu'un FabLab peut apporter à ses habitants. Et n'oublions pas non plus
la région  &lt;a href="http://short.faitmain.org/portail-dinformations-1"&gt; Bretagne &lt;/a&gt;  , qui participe pour des raisons
similaires. &lt;/p&gt; &lt;p&gt; Enfin il y a les associations  &lt;a href="http://short.faitmain.org/association-preservons-1"&gt; BUG &lt;/a&gt;   et la
 &lt;a href="http://short.faitmain.org/cantine-numerique-1"&gt; Cantine Numérique Rennaise &lt;/a&gt;   (CNR), centrés
sur les communautés et les nouvelles technologies, ce que représente
parfaitement le LabFab. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="l-experience-du-labfab-a-rennes" class="section"&gt; &lt;h2&gt;L'expérience du LabFab à Rennes &lt;a class="headerlink" href="#l-experience-du-labfab-a-rennes"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; La question qui revient souvent, me dit-il, c'est comment apprivoiser ces
espaces ? Comment les inclure dans la société et dans ses projets ? Parce que
même s'il ne fait pas de doute que ces lieux ouverts sont très intéressants, il
reste à savoir comment les mettre en place. &lt;/p&gt; &lt;p&gt; À l'origine, le but de l'expérience est d'essayer quelque chose, et d'essayer
vite, en investissant peu de moyens d'une part, mais surtout sans attendre
quelque chose en retour : ni objectif, ni réussite, ni résultat particulier.
Le but est justement de savoir comment ça va se passer, comment l'espace
est pris en main, et qui s'y intéresse. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; Alors avec juste quelques hommes, des locaux et un peu de matériel, le LabFab
est mis en place, avec différents axes de recherche. &lt;/p&gt; &lt;p&gt; Tout d'abord, que le lieu soit utile aux gens qui viennent. Qu'il serve
à l'éducation populaire pour accéder au numérique, et aux objets qui touchent
à ces technologies. Hugues insiste d'ailleurs sur l'approche de consommation
actuelle de la technologie, qui amène selon lui peu d'innovation, et qui bloque
l'émergence de nouveaux usages, notamment démocratiques. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Aujourd'hui, Internet sort des PCs, mais il reste l'apanage des
spécialistes et de ceux qui savent. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; L'école des Beaux Arts formant des étudiants au design, elle cherche à obtenir
plus d'intégration dans la fabrique de nouveaux usages, avec les technologies
de l'information (réseau, électronique, communication inter-objets, etc.), dans
les savoirs dispensés. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Ils veulent générer une dynamique entre les étudiants et l'usage du LabFab. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; On retrouve aussi cette notion de mixité que ce soit pour la ville ou Télécom
Bretagne : comment faire venir autant des professionnels que Monsieur et
Madame tout le monde ? Comment intéresser à la fois des ingénieurs, des
chercheurs et des spécialistes ? Des jeunes, vieux, amateurs, néophytes et tous
les curieux ? &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Il y a une réelle volonté d'attirer tout le monde en même temps. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; Les axes de recherche ne manquent décidément pas, et Hugues est intarissable
sur le sujet. Il me raconte pêle-mêle que ce projet apporte un tas de
questions, que les gens se posent un tas de question : quel va être le regard
des experts auprès des amateurs ? Quelles questions est-ce que cela pose, de
fabriquer des choses sans brevet, sans règles sur la "propriété
intellectuelle" ? &lt;/p&gt; &lt;p&gt; Sans compter que si le LabFab s'inscrit dans un environnement local, il y a une
volonté d'essaimer, de faire qu'un écosystème international se développe. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; En 2012 à Montréal lors du MakerFair, ce qui se voyait le plus c'était
"tout le monde monte son FabLab" ! &lt;/p&gt; &lt;/blockquote&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-public-et-le-reseau-des-fablab" class="section"&gt; &lt;h2&gt;Le public et le réseau des FabLab &lt;a class="headerlink" href="#le-public-et-le-reseau-des-fablab"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Parce que le LabFab de Rennes, ce n'est qu'un tout petit élément finalement.
Depuis début 2012, c'est un véritable réseau de lieux qui est en train de se
développer : Hugues me parle du Vietnam, de Québec, de Dakar, ou encore du
Burkina Faso, bref, tout un ensemble de pays avec des communautés francophones. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Le problème rencontré aujourd'hui en Afrique, c'est qu'ils apprennent
éventuellement leur langue maternelle et le français, mais rarement
l'anglais. Alors que les documentations techniques, elles, sont toutes en
anglais. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; La traduction des documents et le partage de ces traductions, est devenu l'un
des objectifs du LabFab. &lt;/p&gt; &lt;p&gt; Parce que le public aujourd'hui est vraiment très hétérogène : j'ai pu
moi-même m'en rendre compte avec une petite séance photo lors d'un atelier sur
Arduino. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Nous avons des artistes, des vieux bricoleurs, etc. L'année dernière avec la
CNR, c'est 26 ateliers que nous avons fait. Et ils ont tous été complets en
moins de 48h ! Ça représente plus de 450 débutants qui ont été formés ! &lt;/p&gt; &lt;/blockquote&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/labfab_public.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un public hétérogène pour cet atelier du LabFab sur Arduino connecté. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Le succès est au rendez-vous, parce qu'outre les ateliers fréquents, il
y a les différents salons auxquels est invité Hugues pour parler du FabLab
Rennais : &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Entre Laval Virtual et le forum des usages à Brest, Vivacité, nous avons
aussi reçu des invitations pour aller à l'étranger. Ce n'était pas prévu
du tout à l'origine. &lt;/p&gt; &lt;/blockquote&gt; &lt;hr/&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/starter_kit.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Plusieurs "Starter Kit" sont disponibles pour former les gens sur
Arduino. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Hugues ayant un emploi du temps de ministre, l'entretien touche bientôt à sa
fin, et il y a encore une question ou deux que je me pose. La première, c'est
"comment peut-on utiliser le LabFab ?". &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Il n'y a pas de règles très précises. Les gens doivent venir avec un
projet, c'est à dire une phrase qui présente le projet et éventuellement un
dessin de ce que c'est censé faire, et c'est tout. On ne juge pas des
projets, chacun peut faire ce qu'il a envie, et chacun a accès au matériel
du LabFab (kit Arduino pour du prototypage, une MakerBot, etc.). On demande
seulement à ce que le porteur du projet partage quelque chose en échange. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; Intrigué, je lui demande pourquoi cette règle : pourquoi ne pas simplement
imposer une licence ou proposer des licences libres - puisque c'est le but. &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt; Les gens qui viennent n'ont pas forcément la culture du logiciel libre ou
de Creative Commons. Parfois ils ne savent même pas que ça existe. Alors
on leur demande de partager quelque chose : leur produit, une compétence,
un savoir ou une petite partie de leur projet. Certains arrivent et savent
tout de suite quelle licence utiliser, mais la majorité découvre le
concept en venant ici. &lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt; Ça laisse songeur… &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-futur-du-labfab" class="section"&gt; &lt;h2&gt;Le futur du LabFab &lt;a class="headerlink" href="#le-futur-du-labfab"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le succès étant au rendez-vous, Hugues est serein pour l'avenir. Il a présenté
un rapport d'activité à Rennes Métropole le 21 Décembre dernier, un bilan d'une
quarantaine de pages qu'il m'invite à télécharger sur le site du LabFab une fois
publié. &lt;/p&gt; &lt;p&gt; Il est plein d'espoir pour 2013, surtout qu'il a obtenu la création d'un poste
à temps plein pour l'année. Et puis il y a tellement de projets, et tellement
d'expériences à tenter. &lt;/p&gt; &lt;p&gt; Le lendemain de notre entretien, je suis passé à un atelier sur "Arduino
connecté", où j'en ai profité pour faire quelques photos. Il y avait quelque
chose de magique à voir autour de cette table toutes ces personnes : plusieurs
étudiants, un vieux pépé qui a fait de l'électronique, un couple qui vient en
apprendre plus, et tous avec des connaissances et compétences très variées. &lt;/p&gt; &lt;p&gt; Si seulement j'avais un peu plus de temps… En tout cas, je vous invite à
franchir les portes de ce FabLab, il y a plein de bonnes choses. &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=5"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category><category term="art"></category></entry><entry><title>Un Juke Box avec le Raspberry-Pi</title><link href="http://faitmain.org//volume-1/raspberry-jukebox.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Tarek Ziadé</name></author><id>tag:faitmain.org,2013-02-01://volume-1/raspberry-jukebox.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/electronique.html"&gt;Electronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Découverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/raspberry-jukebox.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le Raspberry-PI Jukebox &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Après trois mois d'attente interminable, j'ai finalement reçu mon
 &lt;a href="http://short.faitmain.org/raspberry-gnulinux-2"&gt; Raspberry Pi &lt;/a&gt;   (R-Pi), accompagné
d'un joli T-shirt  &lt;em&gt; Element 14 &lt;/em&gt; . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; J'ai plusieurs projets en tête avec un peu d'électronique, mais
pour me familiariser avec la bête, j'ai décidé de commencer par un projet
simple qui marcherait avec un R-PI nu. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le projet est un Juke-Box sans fil que je peux trimballer chez moi, qui
se connecte à mon réseau local en wifi - et qui fournit une application web
où tout le monde peut se connecter pour ajouter des morceaux de musique
dans une file d'attente. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le projet final est une petite boite qui contient le R-PI et : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ul bullet="-"&gt; &lt;li&gt; une clé USB pour stocker de la musique. J'ai choisi la
 &lt;a href="http://short.faitmain.org/micro-sleek-1"&gt; PNY 16G &lt;/a&gt;   qui est vraiment toute
petite. &lt;/li&gt; &lt;li&gt; un dongle USB wifi. J'ai choisi l' &lt;a href="http://short.faitmain.org/airlink-nano-adaptateur-1"&gt; Airlink Nano &lt;/a&gt;   pour les mêmes raisons : il
dépasse à peine du port USB. &lt;/li&gt; &lt;li&gt; Une batterie USB pour ne pas avoir à brancher le R-PI sur le courant ou sur
mon ordinateur. J'ai choisi  &lt;a href="http://short.faitmain.org/batterie-externe-1"&gt; celui-ci &lt;/a&gt;   qui s'avère être beaucoup plus
volumineux que le R-PI, mais qui fournit jusqu'à 1 ampère de courant - ce qui
couvre les besoins et devrait permettre d'éviter à avoir recours à un Hub USB
alimenté. &lt;/li&gt; &lt;li&gt; Un mini-speaker. J'ai commandé le  &lt;a href="http://short.faitmain.org/x-mini-capsule-1"&gt; X-Mini II &lt;/a&gt;   qui est tout simplement
incroyable. Ce petit speaker sort un très bon son vu sa taille, est
auto-alimenté et on peut en brancher plusieurs à la suite.  J'en ai acheté un
deuxième pour mon fils et je le recommande chaudement.  Dans tous les cas, le
Juke-Box peut toujours être branché sur de vraies enceintes. &lt;/li&gt; &lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Petit détail agréable : Le speaker et la batterie USB ont été tous les deux
livrés pré-chargés. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-carte-sd" class="section"&gt; &lt;h2&gt;La carte SD &lt;a class="headerlink" href="#la-carte-sd"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="pull-right margin-left"&gt; &lt;a href="http://short.faitmain.org/carte-memoire"&gt; &lt;img class="centered span12" src="http://ecx.images-amazon.com/images/I/41t75bYmx4L._SL500_AA300_.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Carte SD 4 Gigas &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;p&gt; A réception du R-PI, j'ai branché une carte SD qui traînait chez moi et elle
ne marchait pas du tout. J'ai contrôlé que la carte était bien alimentée
avec un multimètre et j'ai testé trois autres cartes SD glanées dans
les appareils photos de la famille en me disant que quelque chose clochait
à ce niveau là. &lt;/p&gt; &lt;p&gt; Avec la dernière carte que j'ai testé, le R-PI bootait mais freezait au
bout d'un moment avec une  &lt;strong&gt; -101 error &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; Il s'avère que le R-PI est très sensible au type de carte SD qu'il reçoit.
Rien à voir avec la marque ou le prix de la carte, ou sa classe. Certaines
marchent, certaines de marchent pas... &lt;/p&gt; &lt;p&gt; Le plus simple est de prendre une carte qui est listée ici :
 &lt;a href="http://short.faitmain.org/verifiedperipherals-elinuxorg"&gt; http://elinux.org/RPi_VerifiedPeripherals#SD_cards &lt;/a&gt; &lt;/p&gt; &lt;p&gt; Je suis allé au supermarché du coin et j'ai pris une
 &lt;a href="http://short.faitmain.org/carte-memoire"&gt; SanDisk SDHC 4G class 4 &lt;/a&gt;   à
7 euros - et tout a fonctionné. &lt;/p&gt; &lt;p&gt; Préparer la carte SD pour le R-PI sous Mac OS X est très simple.
Il y a même un script Python :  &lt;a href="http://short.faitmain.org/exaviornraspiwrite-github"&gt; RasPiWrite &lt;/a&gt;   qui automatise la tâche. &lt;/p&gt; &lt;p&gt; J'ai eu quelques bugs avec ce script pour ma part, j'ai donc utilisé quelques
commandes shell. &lt;/p&gt; &lt;p&gt; J'ai d'abord téléchargé l'image  &lt;strong&gt; Raspbian &lt;/strong&gt;  officielle. C'est une
Debian optimisée pour le R-PI : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;cd /tmp
wget http://files.velocix.com/c1410/images/raspbian/2012-12-16-wheezy-raspbian/2012-12-16-wheezy-raspbian.zip
unzip 2012-12-16-wheezy-raspbian.zip
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Vous pouvez regarder sur  &lt;a href="http://short.faitmain.org/downloads-raspberry"&gt; http://www.raspberrypi.org/downloads &lt;/a&gt;  s'il y en a une
plus récente. &lt;/p&gt; &lt;p&gt; Une fois que l'image est téléchargée et dézippée, il convient de la transférer
sur la carte SD avec la commande  &lt;strong&gt; dd &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; Sous  &lt;strong&gt; Mac OS X &lt;/strong&gt; , la commande  &lt;strong&gt; diskutil list &lt;/strong&gt;  m'a permis de trouver le
disque correspondant à la carte :  &lt;strong&gt; /dev/disk3 &lt;/strong&gt; &lt;/p&gt; &lt;p&gt; Puis le transfert s'opère en démontant la carte et en utilisant  &lt;strong&gt; dd &lt;/strong&gt;   : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ diskutil umountDisk /dev/disk3
Unmount of all volumes on disk3 was successful

$ sudo dd bs=1m if=/tmp/2012-10-28-wheezy-raspbian.img of=/dev/rdisk3
[... 5-10 minutes ...]
1850+0 records in
1850+0 records out
1939865600 bytes transferred in 388.257496 secs (4996338 bytes/sec)

$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Notez que la commande  &lt;strong&gt; dd &lt;/strong&gt;  prend beaucoup de temps à s'exécuter. La copie
peut durer de 5 à 10 minutes. &lt;/p&gt; &lt;div class="well note"&gt; &lt;p&gt; La notation  &lt;strong&gt; rdisk3 &lt;/strong&gt;  est spécifique à Mac OS X. Elle permet d'accélerer
la procédure. Sous Linux, il faut enlever le  &lt;em&gt; "r" &lt;/em&gt; . &lt;/p&gt; &lt;/div&gt; &lt;p&gt; Une fois que la carte est prête, il suffit de la plugguer dans le R-PI et de
le démarrer avec un écran et un clavier branchés. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="configuration-de-base-et-wifi" class="section"&gt; &lt;h2&gt;Configuration de base et wifi &lt;a class="headerlink" href="#configuration-de-base-et-wifi"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Vous devriez voir défiler la séquence de boot puis obtenir un écran
de configuration. &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; étendez la partition sur toute la carte SD grâce à  &lt;strong&gt; expand_rootds &lt;/strong&gt; , &lt;/li&gt; &lt;li&gt; overclockez votre R-PI dans le menu  &lt;strong&gt; overclock &lt;/strong&gt;   : J'ai mis le mien
en  &lt;strong&gt; medium &lt;/strong&gt; &lt;/li&gt; &lt;li&gt; activez le serveur SSH dans  &lt;strong&gt; ssh &lt;/strong&gt; &lt;/li&gt; &lt;li&gt; désactivez le desktop dans  &lt;strong&gt; boot_behavior &lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Je n'ai pas reconfiguré le clavier car j'utilise un QWERTY. &lt;/p&gt; &lt;p&gt; Une fois la configuration effectuée, branchez le dongle Wifi et
relancez le R-PI via  &lt;strong&gt; Finish &lt;/strong&gt; , Raspbian va appliquer au redémarrage
la configuration, et un prompt de login doit apparaître. &lt;/p&gt; &lt;p&gt; Pour se logguer le user est  &lt;strong&gt; pi &lt;/strong&gt;  et le mot de passe  &lt;strong&gt; raspberry &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; Une fois loggué, éditez le fichier  &lt;strong&gt; /etc/network/interfaces &lt;/strong&gt; 
pour que le dongle s'autoconnecte au réseau. J'ai branché le dongle sur
le port USB du bas, ce qui correspond selon  &lt;strong&gt; iwconfig &lt;/strong&gt;  à l'interface
 &lt;strong&gt; wlan0 &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; Voici ma configuration pour   &lt;em&gt; wlan0 &lt;/em&gt;   : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;auto wlan0

iface wlan0 inet dhcp
    wpa-ssid Villa_Des_Mouches
    wpa-psk motdepasse
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; &lt;strong&gt; Villa_Des_Mouches &lt;/strong&gt;  est le ESSID de mon réseau wifi. Une fois le fichier
modifié, relancer le réseau : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ sudo /etc/init.d/networking restart
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Votre R-PI va obtenir une adresse IP sur le réseau sur laquelle
on pourra se connecter en SSH pour la suite. &lt;/p&gt; &lt;p&gt; Éteignez le R-PI avec  &lt;strong&gt; sudo halt &lt;/strong&gt; , puis débranchez l'écran et le clavier.
Branchez la clef USB à la place du clavier et relancer le R-PI. &lt;/p&gt; &lt;p&gt; Au bout d'un moment il devrait réapparaitre dans le réseau et être
accessible en SSH. Le seul défaut de cette technique est que l'adresse
IP peut changer. Une adresse IP statique peut être préférée mais
dans mon cas ce n'est pas très grave car je retrouve facilement le R-PI
en scannant le réseau avec  &lt;em&gt; nmap 192.168.1.* &lt;/em&gt; . &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ ssh pi@192.168.1.96
Linux raspberrypi 3.2.27+ #250 PREEMPT Thu Oct 18 19:03:02 BST 2012 armv6l
...

Last login: Sun Oct 28 23:10:12 2012
pi@raspberrypi ~ $
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Pour la suite, il est plus simple de tout faire en SSH car à moins d'avoir
un écran adapté, la résolution du mode console du R-PI sur un écran
moderne va vous brûler les yeux en 5 minutes. &lt;/p&gt; &lt;p&gt; Testez que le son fonctionne en branchant une enceinte amplifiée sur le R-PI et
en téléchargeant un  &lt;strong&gt; WAV &lt;/strong&gt;  et en le jouant avec  &lt;strong&gt; aplay &lt;/strong&gt;   : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ wget http://www.freespecialeffects.co.uk/soundfx/sirens/police_s.wav
$ aplay police_s.wav
Playing WAVE &amp;#39;police_s.wav&amp;#39; : Unsigned 8 bit, Rate 22000 Hz, Mono
^CAborted by signal Interrupt...
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Vous devriez entendre une sirène. &lt;/p&gt; &lt;p&gt; Installez maintenant  &lt;strong&gt; mpg123 &lt;/strong&gt;  pour jouer des MP3 présents sur la clef
USB. Il a fallu monter le disque manuellement par contre : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ sudo mkdir /media/usbstick
$ sudo mount -t vfat  -o uid=pi,gid=pi /dev/sda1 /media/usbstick

$ mpg123 &amp;quot;/media/usbstick/01 Hidden Orchestra - Flight Mixtape.mp3&amp;quot;
High Performance MPEG 1.0/2.0/2.5 Audio Player for Layers 1, 2 and 3
    version 1.14.4; written and copyright by Michael Hipp and others
    free software (LGPL/GPL) without any warranty but with best wishes

Directory: /media/usbstick/
Playing MPEG stream 1 of 1: 01 Hidden Orchestra - Flight Mixtape.mp3 ...

MPEG 1.0 layer III, 320 kbit/s, 44100 Hz joint-stereo
Title:   Hidden Orchestra - Flight Mixtape
Artist:  Hidden Orchestra (Joe Acheson)
Comment: Exclusive mix for http://www.parisdjs.com
Album:   Paris DJs Podcast
Year:    2012                            Genre:  Podcast
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Victoire ! Et un super mix de  &lt;a href="http://short.faitmain.org/paris"&gt; ParisDjs &lt;/a&gt;   avec un son
propre. &lt;/p&gt; &lt;p&gt; &lt;strong&gt; mpg123 &lt;/strong&gt;  utilise environ 6% de CPU, ce qui est plus qu'acceptable. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="application-jukebox" class="section"&gt; &lt;h2&gt;Application JukeBox &lt;a class="headerlink" href="#application-jukebox"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Pour la partie JukeBox, je comptais écrire une petite application web
au dessus de  &lt;strong&gt; mpg123 &lt;/strong&gt;  et je le ferais peut-être un jour, mais
il en existe déjà plusieurs. &lt;/p&gt; &lt;p&gt; &lt;a href="http://short.faitmain.org/lociiijukebox-github"&gt; Jukebox &lt;/a&gt;   est écrite en Python
avec Django et fournit les fonctionnalités de base d'un JukeBox,
à savoir un affichage des morceaux présents et un moyen pour les
utilisateurs du réseau d'ajouter des morceaux dans la playlist. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="http://a248.e.akamai.net/camo.github.com/bb66587466563ff4b89af700ba14d0f31caabff0/687474703a2f2f7374617469632e6a656e736e6973746c65722e64652f6a756b65626f782e706e67"&gt; &lt;/img&gt; &lt;span class="legend span12"&gt; L'application Django Jukebox &lt;/span&gt; &lt;/div&gt; &lt;p&gt; Pour installer JukeBox, il faut un environnement Python/Virtualenv mais aussi
la librairie  &lt;strong&gt; libshout3 &lt;/strong&gt;  qui est utilisée par l'application : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ sudo apt-get install python-virtualenv libshout3 libshout3-dev pkg-config python-dev
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Une fois les paquets systèmes installés, il faut créer un virtualenv et y
installer  &lt;strong&gt; ez_setup &lt;/strong&gt;  puis JukeBox : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ virtualenv --no-site-packages jukebox
$ cd jukebox
$ bin/easy_install -U distribute
$ bin/pip install ez_setup
$ bin/pip install jukebox
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Pour la configuration de Jukebox, tout est expliqué ici :
 &lt;a href="http://short.faitmain.org/lociiijukebox-github-1"&gt; https://github.com/lociii/jukebox#readme &lt;/a&gt; &lt;/p&gt; &lt;p&gt; Le gros défaut de cette application est qu'elle force les utilisateurs
à utiliser un compte social comme Twitter - et je n'ai pas eu le temps
de plugger un système d'authentification plus simple. &lt;/p&gt; &lt;p&gt; Quoi qu'il en soit je suis ravi du résultat - ce petit juke box peut se
brancher sur de bonnes enceintes et rivaliser avec les systèmes sans fils hors
de prix du marché, comme les  &lt;em&gt; Sonos &lt;/em&gt; . &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=9"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="electronique"></category><category term="informatique"></category></entry><entry><title>Tribune - Semences stériles et données futiles</title><link href="http://faitmain.org//volume-1/semences-donnes.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>David Larlet</name></author><id>tag:faitmain.org,2013-02-01://volume-1/semences-donnes.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/autre.html"&gt;Autre&lt;/a&gt; | &lt;a href="http://faitmain.org/écologie.html"&gt;Écologie&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/david_larlet.html"&gt;David Larlet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/semences-donnees-champ.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Champ de blé &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; La problématique des  &lt;a href="https://fr.wikipedia.org/wiki/Organisme_g%C3%A9n%C3%A9tiquement_modifi%C3%A9" class="wikipedia"&gt; semences génétiquement modifiées &lt;/a&gt;  
pose des questions d'ordre éthique, sanitaire et social. Les semences stériles
— utilisant le gène au doux nom de  &lt;a href="https://fr.wikipedia.org/wiki/Technologie_terminator" class="wikipedia"&gt; Terminator &lt;/a&gt;   — sont emblématiques
de la société Monsanto qui est prête à diffuser à tout prix ses semences, même
 &lt;a href="http://short.faitmain.org/quand-monsanto"&gt; gratuitement à titre humanitaire &lt;/a&gt;   pour avoir un
contrôle de la production mondiale de nourriture. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Les schémas de pensées court-termistes — apportant un confort immédiat — ont
tendance à se reproduire d'un domaine à un autre et c'est notamment ce qui est
en train de se passer avec le Web. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Après une étape de standardisation prometteuse qui permettait une
interopérabilité entre les différentes publications (RSS, Atom, trackbacks), la
mode est plutôt à la centralisation des données (Twitter) voire à leur
déconnexion du Web (Facebook) au profit d'un confort de publication bien réel
avec la promesse de l'instantanéité et de l'approche ubiquitaire. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le tout associé à une flatterie de l'égo par une quantification du partage
(nombre de retweets/likes/followers/etc) qui se rapproche, osons le dire, d'une
compétition malsaine capitaliste du toujours plus, d'une approche en
consommateur des liens sociaux, d'une course effrénée à la socialisation
numérique qui détruit les communautés locales au profit d'une communauté de
suiveurs inconnus. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Or, au même titre que les  &lt;a href="https://fr.wikipedia.org/wiki/AMAP" class="wikipedia"&gt; associations pour le maintien d'une agriculture
paysanne (AMAP) &lt;/a&gt;  , il existe une voie pour
un web ouvert qui encourage l'artisanat et la réutilisation via un modèle
acentré et local. Certaines initiatives comme  &lt;a href="http://short.faitmain.org/distribution-apps-1"&gt; La Distribution &lt;/a&gt;   ou  &lt;a href="http://short.faitmain.org/friendly-personal-1"&gt; CozyCloud &lt;/a&gt;  
encouragent de telles approches permettant de garder un contrôle sur ses
données et même un hébergement sur son  &lt;a href="http://short.faitmain.org/ladistribution-distribution"&gt; propre &lt;/a&gt;    &lt;a href="http://short.faitmain.org/mycozycloud-cozy-1"&gt; serveur &lt;/a&gt;   afin d'assurer la pérennité de ses URI.
L'avènement d' &lt;a href="http://short.faitmain.org/pelican-pelican-1"&gt; outils de publication &lt;/a&gt;   générant
des fichiers statiques facilite grandement le déploiement et l'hébergement de
ses idées et minimise les connaissances techniques nécessaires à son expression
sur le web. Les problèmes techniques restants à résoudre sont la notification
de manière distribuée et l'agrégation en temps-réel mais ceux-ci ne pourront
être validés qu'après une adoption à large échelle de tels services, permettant
d'atteindre la masse sociale critique pour rendre ces services utiles. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Étudions la liste des composants nécessaires pour garder son indépendance
vis-à-vis de services web centralisés : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ul bullet="-"&gt; &lt;li&gt; &lt;em&gt; un nom de domaine &lt;/em&gt; , ce qui coûte entre 5 et 15 € selon le niveau de support
et de confiance que l'on souhaite avoir à ce niveau, en bonus non négligeable
vous pouvez associer à ce domaine un certificat SSL qui assurera la
confidentialité des échanges entre vos visiteurs et vos publications.
Même si vos écrits ne sont pas critiques, pensez au fait qu'une banalisation
de tels usages permet de rendre une telle pratique moins suspecte lorsqu'elle
est nécessaire (nous ne vivons pas tous en démocratie) ; &lt;/li&gt; &lt;li&gt; &lt;em&gt; un hébergement &lt;/em&gt; , il en existe à tous les prix et si vous vous dirigez
vers un site au rendu statique grâce à des générateurs locaux vous
n'êtes soumis à aucune contrainte technique si ce n'est celle de l'espace
disque et de la bande passante qui ne devraient pas poser problème
dans un premier temps au moins ; &lt;/li&gt; &lt;li&gt; &lt;em&gt; un logiciel de téléversement &lt;/em&gt; , permettant de déployer le contenu généré
sur le serveur d'hébergement. Il en existe de nombreux qui ne demandent
aucune connaissance technique particulière. &lt;/li&gt; &lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Et voilà ! Il ne reste plus qu'à faire connaître votre URI au reste du monde.
N'oubliez pas de  &lt;a href="http://short.faitmain.org/syndication-amour"&gt; produire un flux &lt;/a&gt;   permettant à vos
visiteurs de s'abonner à vos publications (cela est normalement géré par le
générateur) sans avoir à dépendre d'une plateforme non pérenne et
centralisée. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/semences-donnees-barbeles.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Barbelés &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Vos publications, même à titre futile, constituent une partie de votre identité
numérique, vos interactions sur le web participent à votre propre définition et
à vos relations sociales. &lt;/strong&gt;  Il serait dommage de laisser des services tiers
monétiser votre identité et vos interactions avec vos amis, d'autant plus
qu'ils ne garantissent aucun engagement dans la durée et conduisent à de
véritables génocides de données — que j'appelle datacides — lors de la
fermeture brutale des entreprises qui ont du mal à trouver un business modèle
rentable associé à la gratuité du service proposé. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Si vous êtes un jardinier numérique, je vous encourage à reprendre le contrôle
de vos semences^W^données afin de pérenniser votre récolte^W^identité
numérique. Il n'est pas trop tard pour nourrir d'idées ouvertes et gratuites
vos concitoyens du web. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=6"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</summary><category term="autre"></category><category term="écologie"></category></entry><entry><title>The Midst ?</title><link href="http://faitmain.org//volume-1/the_midst.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Bérenger Recoules</name></author><id>tag:faitmain.org,2013-02-01://volume-1/the_midst.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; | &lt;a href="http://faitmain.org/ informatique.html"&gt; informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/berenger_recoules.html"&gt;Bérenger Recoules&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/0c8b"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_title.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un arbre récursif &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; The Midst est un projet de  &lt;em&gt; art-game &lt;/em&gt;  se jouant en ligne : comme cela arrive
souvent aux personnages principaux de jeux vidéo, la petite-amie de Héro s'est
fait enlever ; cette fois ci ce sont de méchants pixels blancs qui ont fait le
coup (the white meanies) ; en conséquence Héro est condamné à errer dans un
labyrinthe de fenêtres pop-up en noir et blanc truffé d'obstacles, dans le but
de dénicher une sortie et d'alors pouvoir peut-être retrouver sa dulcinée. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Ce jeu se décline aussi en un atelier et une série de ressources en ligne
permettant de découvrir les technologies à l’œuvre : beaucoup de  &lt;a href="http://short.faitmain.org/processingjs"&gt; processing.js &lt;/a&gt;   pour la création graphique et l'animation, une
généreuse portion de  &lt;a href="http://short.faitmain.org/sebpiqwebpd-github"&gt; Webpd &lt;/a&gt;   pour la
synthèse sonore en temps réel, un soupçon de HTML5 et une pincée de  &lt;a href="http://short.faitmain.org/jquery"&gt; jQuery &lt;/a&gt;   pour faire en sorte que tout cela fonctionne dans une
page web. C'est du coup l'occasion de comprendre comment implémenter une
succession de petits jeux simples allant du  &lt;a href="http://fr.wikipedia.org/wiki/Pong" class="wikipedia"&gt; pong &lt;/a&gt;   au  &lt;a href="http://fr.wikipedia.org/wiki/Casse_brique" class="wikipedia"&gt; casse-brique &lt;/a&gt;  ... &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le code complet du jeu est disponible et consultable en ligne à cette adresse :
 &lt;a href="http://short.faitmain.org/b2rengerthemidst-github"&gt; https://github.com/b2renger/TheMidst &lt;/a&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Au programme et en vrac : système à particules, physique et vecteurs pour
l'animation, interaction,  &lt;a href="http://fr.wikipedia.org/wiki/Tweening" class="wikipedia"&gt; tweening &lt;/a&gt;  ,
collisions non orthogonales, synthèse sonore, musique générative... &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Du point de vue des technologies on utilise des outils libres et gratuits et
qui disposent d'une large communauté d'acteurs internationaux. Cet article va
se concentrer sur webpd qui n'est pas encore complètement documenté alors que
 &lt;em&gt; processing.js &lt;/em&gt; , lui, dispose déjà d'une communauté vibrante et d'une multitude
d'exemples de code en ligne. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Pour rappel,  &lt;a href="http://short.faitmain.org/processingorg-1"&gt; Processing &lt;/a&gt;   est un langage de
programmation apparu en 2001 au MIT, qui a pour vocation de faciliter
l'apprentissage de la programmation objet en l'appliquant au dessin, à
l'animation, à l'interaction et à la visualisation de données. Aujourd'hui il y
a une très large communauté internationale et le langage permet aussi bien de
développer pour des ordinateurs, que pour des téléphones Android ou encore des
navigateurs web. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;a href="http://short.faitmain.org/software-miller"&gt; Pure Data &lt;/a&gt;   est un langage de
programmation visuelle né en 1996, il est la résultante d'une partie des
travaux de Miller Puckette à l'IRCAM : c'est le petit frère libre et gratuit de
MAX/MSP. Il permet de créer du code en reliant des boîtes entre elles à l'aide
de fils : c'est un langage de programmation très utilisé pour la création
sonore, mais aussi graphique ainsi que pour l'interaction. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-structure-du-jeu-et-du-code" class="section"&gt; &lt;h2&gt;La Structure du jeu et du code &lt;a class="headerlink" href="#la-structure-du-jeu-et-du-code"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le code du jeu est structuré de manière assez simple. Pour chaque fenêtre nous
avons recours à un canvas html qui va exécuter un sketch processing ainsi qu'un
patch Pure Data. Deux pages html sont présentes,  &lt;em&gt; index.html &lt;/em&gt;  et
 &lt;em&gt; level-template.html &lt;/em&gt;  qui font appel a différents scripts JavaScript
permettant d'aller chercher les fichiers  &lt;em&gt; level*.pde &lt;/em&gt;  (pour l'animation) et
 &lt;em&gt; level*.pd &lt;/em&gt;  (pour le son). &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_title.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Écran d'accueil &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Lorsqu'on clique sur le bouton "start" une fenêtre pop-up va s'ouvrir : c'est
le premier niveau incarné par la fenêtre "level-template.html" : à partir de ce
moment là toutes les ressources seront chargées dans cette même fenêtre de
200x200 pixels. On se déplace ainsi de niveau en niveau en cherchant où sont
les murs et où sont les passages vers les cases adjacentes. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_level01.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La case de début du jeu. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; La base de code produite au niveau un permet d'avoir une ellipse (notre
personnage principal), qui est animée de deux façons : la première consiste à
modifier la largeur et la hauteur de cette ellipse en fonction de son
éloignement de la souris et la seconde animation consiste à permettre à ce
personnage de se déplacer dans l'espace de chaque case à l'aide de
l'application de lois physiques. &lt;/p&gt; &lt;p&gt; Le personnage à une masse, une position, une vélocité ainsi qu'une
accélération. Une force de friction a aussi été implémentée. Lorsque l'on
clique quelque part, le personnage va alors subir une modification de son
accélération qui va donc se répercuter sur sa vitesse puis sur sa position. La
relation est tout simplement une addition de vecteurs : pour obtenir le nouveau
vecteur de vélocité on lui ajoute le vecteur accélération; pour obtenir le
nouveau vecteur de position on y ajoute le vecteur de vélocité etc. &lt;/p&gt; &lt;p&gt; A partir de là tout est permis. L'avantage d'utiliser Processing dans ce
contexte se situe dans le fait que l'on peut avoir accès à des notions de
programmation objets, il est donc possible de structurer sont code à l'aide de
classes et du coup de gagner une certaine flexibilité. De plus procession offre
tout un tas de primitives de dessin dont la syntaxe est grandement simplifiée. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-moteur-audio-webpd" class="section"&gt; &lt;h2&gt;Le moteur audio : webpd &lt;a class="headerlink" href="#le-moteur-audio-webpd"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Webpd est une librairie JavaScript qui permet de faire de la synthèse audio en
temps réel. Pour ceux qui connaissent déjà Pure-Data, s'en est un port partiel
pour JavaScript : cela veut dire que vous pouvez faire tourner certains patchs
directement dans votre navigateur. Pour ceux qui ne connaissent pas Pure-Data
je vous invite à lire la suite... &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_hello_world.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le hello world de Pure Data. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;em&gt; The midst &lt;/em&gt;  présente une particularité au niveau du  &lt;em&gt; gameplay &lt;/em&gt;  et de
l'implémentation du moteur audio. J'ai choisi volontairement de conserver la
même fenêtre pour tous les niveaux, cela signifie qu'à chaque fois qu'on l'on
quittera une case une nouvelle page va se charger (un canvas avec un sketch
Processing et un patch Pure Data). J'ai donc choisit de créer l'ambiance sonore
de chaque case à l'aide d'un "drone" audio, c'est à dire un accord tenu le
temps que l'on reste dans la case, mais cet accord est modulé par la position
du héros dans sa case ainsi que par son animation. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_drone_source.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La source audio. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'accord est formé de deux sons : un oscillateur, et un  &lt;em&gt; phasor &lt;/em&gt;  (forme d'onde
en triangle), on utilise la convention MIDI pour choisir la fréquence à
laquelle vont osciller ces deux sources, l'objet  &lt;em&gt; [mtof] &lt;/em&gt;  permet la conversion
de notes midi en fréquences. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_drone_controletween.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Une première enveloppe contrôlée par l'animation du personnage. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_drone_controlpos.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Une seconde enveloppe contrôlée par la position du personnage dans la case. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_drone_output.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La sortie audio : l'objet [dac~] représente les haut-parleurs de votre
ordinateur. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il reste maintenant à dupliquer ce code quatre fois (et changer la valeur de la
note midi jouée à chaque fois pour former un accord) puis à interfacer le code
de notre ambiance sonore avec notre code processing.js qui régit l'animation de
notre personnage principal, c'est à dire permettre à notre code processing.js
d'envoyer des messages à webpd pour moduler le son de notre synthétiseur en
temps réel. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_interfacage.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; L’interfaçage d'un seul drone avec processing JS. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; En ce qui concerne le son de collision on peut se servir d'un bruit blanc qui
va être modulé par une enveloppe maison. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_collisions_source.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La source sonore est cette fois un bruit blanc [noise~]. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_collisions_env.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; L'enveloppe "maison" : un enveloppe attack (1ms) decay (10ms). &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_collisions_full.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les deux parties assemblées. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour jouer ce son, on pourra maintenant envoyer un message de type : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;patch.send(&amp;quot;pjstick&amp;quot;,&amp;quot;bang&amp;quot;);
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Il ne nous reste alors plus qu'à tout assembler, pour obtenir la base du moteur
audio du jeu : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/midst_moteur_audio.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le moteur audio au complet &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Nous ne sommes bien sûr pas du tout obligés de synthétiser tous les sons ! Il
est possible de charger des sons et de les jouer comme on le souhaite (une
fois, en boucle, ou alors juste des bouts à droite à gauche). Si vous y
arrivez, le dernier niveau vous permettra de découvrir une première approche de
la musique générative pour le web. L'avantage de Pure Data et qu'il existe une
large communauté de musiciens qui l'utilisent, ceux-ci seront à même de mettre
en place un moteur audio complet et interactifs pour le web. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="id1" class="section"&gt; &lt;h2&gt;The Midst ... &lt;a class="headerlink" href="#id1"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Comme je le mentionnais au début ce jeu est aussi un atelier dont la première
édition aura lieu du 16 janvier au 20 février à  &lt;a href="http://short.faitmain.org/accueil"&gt; Stereolux à Nantes &lt;/a&gt;  , sous forme de six séances de deux heures, qui
permettront à leurs participants de se familiariser avec ces technologies mais
aussi de développer une case du jeu. J'espère qu'avec le temps le jeu
s'étoffera que le labyrinthe s'étendra... alors si vous souhaitez contribuer
n'hésitez pas à me contacter ! &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=11"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="art"></category><category term=" informatique"></category></entry><entry><title>What The Feuille ?</title><link href="http://faitmain.org//volume-1/wtf.html" rel="alternate"></link><updated>2013-02-01T00:00:00Z</updated><author><name>Tarek Ziadé</name></author><id>tag:faitmain.org,2013-02-01://volume-1/wtf.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/écologie.html"&gt;Écologie&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/tarek-ziade-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/tarek-ronan.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Tarek &amp; Ronan en train de tester What The Feuille (by Kenneth Reitz) &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le  &lt;a href="https://fr.wikipedia.org/wiki/Hackathon" class="wikipedia"&gt; Hackathon &lt;/a&gt;   est un mot-valise,
m'apprend Wikipédia — contraction de  &lt;em&gt; hacking &lt;/em&gt;  et de  &lt;em&gt; marathon &lt;/em&gt; . Un
 &lt;em&gt; marathon de hacking &lt;/em&gt;  est un évènement durant lequel des
développeurs vont travailler ensemble pour tenter d'accélérer le développement
d'un projet en se concentrant dessus le temps d'un week-end ou parfois
d'une semaine. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Dans la communauté Python, on parlera plus de  &lt;em&gt; sprints &lt;/em&gt; , terme inventé par
Tres Seaver pour décrire les réunions de 2-3 jours pendant lesquelles
des paires de programmeurs bossaient sur Zope 3 — un logiciel écrit
en Python. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Les  &lt;em&gt; Hackatons &lt;/em&gt;  organisés par  &lt;a href="http://short.faitmain.org/angelhack-hackathon-1"&gt; AngelHack &lt;/a&gt;   sont
encore une autre variante : vous avez 24 heures pour produire un projet de A à Z
dans des locaux où tous les participants se réunissent et restent éveillés
toute la nuit — soignés à coup de pizzas et Red Bull par les organisateurs. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; A la clé, la possibilité de gagner un A/R à San Francisco pour pitcher
des Angel Investors de la Silicon Valley. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; La plupart des projets sont des applications web. Plus rarement des applications
desktop ou du hardware. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Il ne faut pas se leurrer, à mon avis, derrière la plupart des équipes participantes
se cachent des startups en devenir qui planchent sur leur sujet depuis des
mois voir des années — pour elles, un concours comme AngelHack est une opportunité
de s'exposer aux investisseurs, voire d'avoir la chance d'aller leur rendre
visite en Californie. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; De mon coté — la partie startup/pitch ne présentait aucun intéret. Mais
l'idée d'essayer d'écrire une appli fonctionnelle et moderne en
24h par contre... &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; On s'est donc inscrit avec Olivier &amp; Ronan et on a participé au concours
sans carte de visite, ni rien à vendre — juste l'envie de hacker une appli. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="id1" class="section"&gt; &lt;h2&gt;What The Feuille &lt;a class="headerlink" href="#id1"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; &lt;em&gt; What The Feuille &lt;/em&gt;  c'est l'excellent nom trouvé par Olivier pour l'application
que l'on a décidé de construire pendant le hackathon. &lt;/p&gt; &lt;p&gt; Le but de cette application est de deviner de quelle plante ou quel arbre provient
une feuille que l'on vient de prendre en photo depuis son mobile ou sa tablette. &lt;/p&gt; &lt;div class="well note"&gt; &lt;p&gt; Oui, j'ai déjà vu des promeneurs prendre des photos avec une tablette en forêt. &lt;/p&gt; &lt;/div&gt; &lt;p&gt; On a choisi assez rapidement d'écrire cette application web entièrement en
Javascript et HTML5 pour le coté utilisateur, sans passer par des dévelopements
spécifiques à la plateforme iOS ou Android pour plusieurs raisons : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; même si des outils comme  &lt;a href="http://short.faitmain.org/phonegap"&gt; PhoneGap &lt;/a&gt;   permettent de
développer une application mobile qui est ensuite compilée pour chaque plateforme
native, le principe de subir une modération sur l'app store d'Apple ou Google Play
nous rebute profondément. &lt;/li&gt; &lt;li&gt; le HTML5 et le Javascript sont compris par  &lt;em&gt; tous &lt;/em&gt;  les périphériques, et notre
application n'a pas besoin d'accéder à des fonctionnalités avancées des mobiles
ou tablettes, comme l'envoi de texto. &lt;/li&gt; &lt;li&gt; le HTML5 et le Javascript pour les applications mobile, c'est l'avenir ! &lt;/li&gt; &lt;li&gt; avec un peu de  &lt;em&gt; responsive design &lt;/em&gt; , la même interface marchera aussi sur les
ordinateurs de bureau ou laptop. Cette technique consiste à adapter la mise
en page en fonction du périphérique qui se connecte sur le site : téléphone,
tablette, ou ordinateur. En fonction de la taille de l'écran, le serveur
essayera d'optimiser l'affichage. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Côté serveur, l'application web n'a pas grand chose à faire : servir 2 ou 3 écrans,
récupérer les photos et les stocker, et enfin lancer l'algo d'apprentissage
automatique - ou  &lt;em&gt; machine learning &lt;/em&gt;  en anglais. &lt;/p&gt; &lt;p&gt; Mais mine de rien, ce genre d'application touche à pas mal de domaines de programmation : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; du  &lt;a href="https://fr.wikipedia.org/wiki/Responsive_Web_Design" class="wikipedia"&gt; responsive design &lt;/a&gt;  , de
manière à pouvoir afficher l'application sur une tablette, un téléphone, etc ; &lt;/li&gt; &lt;li&gt; du stockage d'images et de méta-données associées, avec potentiellement
beaucoup, beaucoup d'entrées ; &lt;/li&gt; &lt;li&gt; une bonne dose de Javascript pour les interactions avec l'utilisateur ; &lt;/li&gt; &lt;li&gt; du  &lt;a href="https://fr.wikipedia.org/wiki/Machine_learning" class="wikipedia"&gt; machine learning &lt;/a&gt;   pour
toute la partie intelligente ; &lt;/li&gt; &lt;li&gt; de la programmation web pour lier le tout, avec les composantes classiques
comme l'identification, le templating, etc. &lt;/li&gt; &lt;/ul&gt; &lt;hr/&gt; &lt;p&gt; Pour résumer le fonctionnement dans un schéma simple : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/wtf-schema.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; C'est pas compliqué... &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'utilisateur trouve une feuille — où l'arrache discrètement, puis
dégaine son portable pour prendre un cliché, et demande à notre
serveur de reconnaître la feuille. &lt;/p&gt; &lt;p&gt; En détail, le  &lt;em&gt; flow &lt;/em&gt;  est le suivant : &lt;/p&gt; &lt;ol enumtype="arabic" prefix="" suffix="."&gt; &lt;li&gt; La page principale permet d'uploader une photo géolocalisée. &lt;/li&gt; &lt;li&gt; La photo est stockée sous un nom unique sur le disque dur du serveur. &lt;/li&gt; &lt;li&gt; L'utilisateur  &lt;em&gt; édite &lt;/em&gt;  la photo en indiquant au doigt (ou à la souris)
le haut et le bas de la feuille. &lt;/li&gt; &lt;li&gt; Les informations de positionnement sont envoyées au serveur, qui
redimensionne la photo. &lt;/li&gt; &lt;li&gt; La photo est mise à jour et affichée pour que l'utilisateur valide
l'édition. &lt;/li&gt; &lt;li&gt; L'algorithme de reconnaissance de feuilles cherche ensuite
dans la base les feuilles considérées comme similaires. &lt;/li&gt; &lt;li&gt; Une liste de suggestions d'arbres/plantes est ensuite proposée,
et l'utilisateur peut en choisir une. &lt;/li&gt; &lt;li&gt; Enfin, toutes les informations sur la photo sont stockées dans
la base de données. &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; Le va-et-vient entre 3. et 4. est dû au fait que toutes les transformations
de l'image de la feuille se font sur le serveur, car à moins d'écrire une
application native à chaque périphérique, Javascript est assez limité
sur ce genre de fonctionnalités. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/wtf-edition.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Edition de la feuille &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; D'autres fonctionalitées mineures que nous avons ajoutées au fil de la nuit
sont un  &lt;em&gt; plantopedia &lt;/em&gt;  — une page qui liste les plantes et arbres avec
les feuilles correspondantes trouvées dans la base ; une page d'accueil
qui affiche les dernières photos uploadées et enfin un système
d'authentification basé
sur  &lt;a href="https://fr.wikipedia.org/wiki/Mozilla_Persona" class="wikipedia"&gt; Mozilla Persona &lt;/a&gt;  &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="responsive" class="section"&gt; &lt;h2&gt;Responsive ? &lt;a class="headerlink" href="#responsive"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Créer un joli design  &lt;em&gt; responsive &lt;/em&gt;  en 24 heures est impossible sans utiliser
un toolkit qui mâche le travail. Le plus souple et le plus
puissant est  &lt;a href="http://short.faitmain.org/bootstrap"&gt; Bootstrap &lt;/a&gt;  , qui permet
très rapidement de créer un design propre et qui s'adaptera tout seul comme
un grand à n'importe quel type de périphérique. &lt;/p&gt; &lt;p&gt; L'autre grande qualité de Bootstrap est de permettre à des développeurs
comme moi qui n'ont aucune notion de design, de faire une application
web à peu près jolie, avec des boîtes qui s'alignent bien, un rendu
moderne et standard. &lt;/p&gt; &lt;p&gt; C'est aussi le gros défaut de Bootstrap finalement : rien ne ressemble plus
à un site fait avec Bootstrap qu'un autre site fait avec Bootstrap, souvent
car les intégrateurs se sont contentés de copier-coller les mises en page
fournies en exemple, et aussi parce que il y a un  &lt;em&gt; Bootstrap look and feel &lt;/em&gt; . &lt;/p&gt; &lt;p&gt; Mais pour notre hackathon, c'est parfait ! &lt;/p&gt; &lt;p&gt; Si vous avez envie de tester Bootstrap, je vous conseille de tester
 &lt;a href="http://short.faitmain.org/bootswatch-themes-1"&gt; Bootswatch &lt;/a&gt;   qui offre plusieurs thèmes pour
Bootstrap. C'est un excellent moyen de démarrer son propre thème. &lt;/p&gt; &lt;p&gt; La  &lt;em&gt; killer feature &lt;/em&gt;  de Bootswatch c'est son  &lt;em&gt; Bookmarklet &lt;/em&gt;  en bas de la page.
Un lien à déposer dans Firefox dans la barre des bookmarks et  &lt;em&gt; hop ! &lt;/em&gt; , un
menu déroulant permet d'essayer les thèmes fournis par le projet
en live sur n'importe quel site fait avec Bootstrap ! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/bootswatch-themes-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/bootswatch.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le bookmarklet de bootswatch en plein action &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;hr/&gt; &lt;p&gt; L'autre outil indispensable pour un design propre en 24 heures, c'est
 &lt;a href="http://short.faitmain.org/google-fonts-1"&gt; Google Web Fonts &lt;/a&gt;  . &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/google-fonts-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/gwf.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La police facile. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; En quelques minutes, on trouve forcément une police qui nous plait,
et il suffit d'ajouter un lien vers la CSS fournie par Google. &lt;/p&gt; &lt;p&gt; En deux heures, les premières pages de What The Feuille étaient
affichées sur notre navigateur, et correctement retaillées sur
nos téléphones. &lt;/p&gt; &lt;p&gt; Il a quand même fallu par la suite tout le talent de Ronan pour ajouter
un logo, une texture de fond de page sympa et tous les petits réglages
qui ont donné à notre appli web un vrai look pro. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="du-javascript" class="section"&gt; &lt;h2&gt;Du Javascript &lt;a class="headerlink" href="#du-javascript"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Pour toutes les interactions avec l'utilisateur — et les petits effets
spéciaux,  &lt;a href="http://short.faitmain.org/jquery"&gt; jQuery &lt;/a&gt;   est incontournable. De toute
façon, il est disponible d'office dans un environnement Bootstrap. &lt;/p&gt; &lt;p&gt; On s'est servi de jQuery pour le positionnement interactif des feuilles
par exemple. L'utilisateur  &lt;em&gt; clique &lt;/em&gt;  sur la feuille pour indiquer le
haut et le bas, avec son doigt sur un écran tactile ou sa souris.
Les coordonnées sur l'image sont envoyées au serveur, qui applique
une rotation de l'image. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/editeur.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Tape ta feuille. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; On est loin de la barre d'outils de Photoshop, mais l'idée est là :
l'utilisateur peaufine son image avant de demander au serveur de faire
une reconnaissance de la plante ou l'arbre. &lt;/p&gt; &lt;p&gt; Ce genre de fonctionnalité n'est pas dure à ajouter mais prouve
qu'il est possible d'écrire des applications mobiles un minimum interactives
basées sur HTML5 et Javascript. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="elastic-search" class="section"&gt; &lt;h2&gt;Elastic Search &lt;a class="headerlink" href="#elastic-search"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Les photos uploadées dans l'application sont stockées sur le disque
dur, ainsi que les différents thumbnails, générés à la demande. &lt;/p&gt;  &lt;p&gt; &lt;a href="http://short.faitmain.org/elasticsearch-source"&gt; Elastic Search &lt;/a&gt;   est le système que
nous avons choisi pour stocker toutes les autres informations. &lt;/p&gt; &lt;p&gt; Ce n'est pas une base de données dans le sens strict du terme,
mais un moteur de recherche basé sur le très performant
 &lt;a href="http://short.faitmain.org/apache-lucene-1"&gt; Apache Lucene &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Au vu des données que nous stockons, et au vu des requêtes à
réaliser — comme par exemple une liste de feuilles correspondant
à une plante donnée, en batch — Elastic Search est l'outil idéal. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; Elastic Search ajoute au dessus de Lucène un service web
qui permet d'indexer et de rechercher en utilisant des messages
 &lt;em&gt; JSON &lt;/em&gt; , ce qui nous permet de ne pas avoir à manipuler du  &lt;em&gt; XML &lt;/em&gt; ,
qui est le format d'échange natif de Lucene — et assez laborieux. &lt;/p&gt; &lt;p&gt; Mais Elastic Search c'est bien plus que ça. Les données indexées
sont  &lt;em&gt; schemaless &lt;/em&gt; , c'est-à-dire qu'il n'est pas nécessaire comme
la plupart des moteurs de recherche de définir pour chaque type
de document les valeurs à indexer. On passe un dictionnaire
JSON à Elastic Search et il se débrouille comme un grand pour
créer ou mettre à jour le schéma. &lt;/p&gt; &lt;p&gt; L'autre intérêt d'Elastic Search est la possibilité de déployer
plusieurs serveurs et de le laisser  &lt;em&gt; sharder &lt;/em&gt; 
les données de manière redondante — c'est-à-dire de distribuer
les données sur au moins deux serveurs de manière à ne rien
perdre si un des serveurs tombe. &lt;/p&gt; &lt;p&gt; Pour le hackathon, on ne déploie qu'une machine avec tous les
élements, mais potentiellement, si on prend en photo toutes
les feuilles de la planète, le sharding devient indispensable. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-cloud" class="section"&gt; &lt;h2&gt;Le Cloud &lt;a class="headerlink" href="#le-cloud"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; En parlant de déploiement, nous avons choisi de mettre l'application
sur un serveur  &lt;a href="http://short.faitmain.org/amazon-elastic-1"&gt; Amazon EC2 &lt;/a&gt;   de
type  &lt;a href="http://short.faitmain.org/amazon-instances-1"&gt; Spot Instance &lt;/a&gt;  
pour minimiser les coûts au maximum pour ce premier prototype. &lt;/p&gt; &lt;p&gt; Les  &lt;em&gt; Spot Instance &lt;/em&gt;  sont des serveurs chez Amazon qui ne sont pas
attribués à des clients fixes et dont le prix de location fluctue
en fonction de l'offre et de la demande. &lt;/p&gt; &lt;p&gt; C'est un système malin pour réduire le parc de machines non utilisées :
Amazon met à jour en temps réel son prix de location, et pour
obtenir une  &lt;em&gt; Spot Instance &lt;/em&gt;  il faut faire une enchère dont le
montant est supérieur au prix fixé. &lt;/p&gt; &lt;p&gt; L'avantage est que l'on peut avoir une machine à un prix
très avantageux, comme l'explique  &lt;a href="http://short.faitmain.org/donrsquot-forget-1"&gt; cet article &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Le gros inconvénient est que si le prix fixé par Amazon dépasse
le prix de votre enchère, vous perdez brutalement la machine. &lt;/p&gt; &lt;p&gt; Pour notre démo, ce n'est pas très grave — et même à terme, on
peut très bien imaginer une architecture ou des machines
Spot Instance sont utilisées comme noeuds pour Elastic
Search — du moment que l'ensemble est tolérant à la disparition
d'un des noeuds. &lt;/p&gt; &lt;p&gt; Les données sont stockées dans un volume  &lt;a href="http://short.faitmain.org/elastic-block-1"&gt; EBS (Elastic Block Store) &lt;/a&gt;  ,
qui est complètement indépendant des instances. Un EBS est simplement
monté comme volume supplémentaire au démarrage d'une ou plusieurs
instances. Les EBS sont  &lt;em&gt; hautement disponibles &lt;/em&gt; , contrairement aux
spot instances, si bien qu'il est possible de déployer des projets
dont les bases de données sont stockées sur un EBS et dont toutes les
applications exécutées sur des instances plus ou moins fiables. &lt;/p&gt; &lt;p&gt; Il existe d'autres  &lt;em&gt; cloud providers &lt;/em&gt;  comme  &lt;a href="http://short.faitmain.org/cloud-computing-1"&gt; Rackspace &lt;/a&gt;  ,
qui offrent encore d'autres solutions — mais Amazon est probablement le provider
qui offre le plus d'options et de souplesse, et permet de s'adapter à tout
type de projet. &lt;/p&gt; &lt;p&gt; Bien sûr, toute cette belle technologie déployée sur  &lt;a href="http://short.faitmain.org/feuille"&gt; http://whatthefeuille.com &lt;/a&gt; 
n'avait aucun intérêt pour notre démo — puisque le WiFi était trop mauvais :
les manipulations ont été présentées sur une version locale  &lt;img class="subst" src="http://cnd.faitmain.org/media/thumbsup.png"&gt; &lt;/img&gt; . &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-partie-web" class="section"&gt; &lt;h2&gt;La partie web &lt;a class="headerlink" href="#la-partie-web"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Pour ce projet la partie web a pour principaux objectifs : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; l'authentification des utilisateurs &lt;/li&gt; &lt;li&gt; le requêtage de la base Elastic Search &lt;/li&gt; &lt;li&gt; le calcul et l'affichage de pages HTML &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Il existe une pléthore de frameworks qui permettent de fournir ces fonctionalités,
et nous avons choisi  &lt;a href="http://short.faitmain.org/pylons-project-1"&gt; Pyramid &lt;/a&gt;   pour pouvoir
recycler une petit application existante qui une fois dépouillée de son contenu, nous
a fourni un squelette avec tout les outils nécessaires. &lt;/p&gt; &lt;p&gt; Sans cette application de départ, nous aurions probablement choisi
un outil plus léger, comme le  &lt;em&gt; micro-framework &lt;/em&gt; 
 &lt;a href="http://bottlepy.org/docs/dev"&gt; Bottle &lt;/a&gt;   ou
 &lt;a href="http://short.faitmain.org/welcome-flask-1"&gt; Flask &lt;/a&gt;   qui permettent de monter une application
web en Python en quelques lignes. &lt;/p&gt; &lt;p&gt; La définition de  &lt;em&gt; micro-framework &lt;/em&gt;  est vague, mais dans le monde
Python, elle regroupe les outils dont le principal objectif est
de simplifier au maximum la création d'une application web, au
détriment des fonctionnalités secondaires habituellements fournies
dans les frameworks web. Il est rare par exemple de retrouver des
fonctionnalités de permissions très avancées, ou des systèmes de
schémas de base de donnés. &lt;/p&gt; &lt;p&gt; Bottle par exemple est un framework distribué dans un seul module
Python - et il est nécessaire d'intégrer des librairies externes
pour la plupart des fonctionnalités avancées. &lt;/p&gt; &lt;p&gt; Pyramid reste malgrès tout un bon choix, même en partant de zéro. Même
si démarrer une application avec ce framework est un exerice plus contraignant,
c'est en général un choix gagnant à moyen terme. En effet, il est assez
fréquent de voir les projets qui grossissent abandonner les micro-frameworks
pour passer à des outils qui fournissent plus de fonctionnalités de base. &lt;/p&gt; &lt;p&gt; Voici un exemple de code Pyramid dans notre application : &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nd"&gt;@view_config&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;route_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;plants&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request_method&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="n"&gt;renderer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;plants.mako&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;plants&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sd"&gt;&amp;quot;&amp;quot;&amp;quot;Plants page.&amp;quot;&amp;quot;&amp;quot;&lt;/span&gt;
    &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;StringQuery&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;plants&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;indices&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;plants&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
                              &lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;pop_flash&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
            &lt;span class="s"&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;&amp;#39;gravatar&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;gravatar_image_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;&amp;#39;came_from&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path_qs&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;&amp;#39;plants&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;plants&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;&amp;#39;format_date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;format_es_date&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Cette fonction est appelée quand l'utilisateur visite l'URL  &lt;strong&gt; /plants &lt;/strong&gt; .
 &lt;em&gt; request.db.search &lt;/em&gt;  lance une recherche sur la base Elastic Search pour
récuperer les 10 premières plantes.  &lt;em&gt; data &lt;/em&gt;  est un dictionnaire qui contient
toutes les données nécessaires à l'affichage. Dans ce cas, la liste des
plantes, et quelques données annexes comme l'utilisateur ( &lt;em&gt; user &lt;/em&gt; ). &lt;/p&gt; &lt;p&gt; La fonction renvoie à Pyramid le dictionnaire et indique le nom
du template a utiliser :  &lt;em&gt; plants.mako &lt;/em&gt; . Le rendu est automatiquement généré
et renvoyé par le framework. &lt;/p&gt; &lt;p&gt; Le reste de l'application est construit sur le même modèle : une fonction
par URL. &lt;/p&gt;  &lt;p&gt; L'authentification est gérée par  &lt;a href="https://fr.wikipedia.org/wiki/Mozilla_Persona" class="wikipedia"&gt; Mozilla Persona &lt;/a&gt;  ,
l'affichage des pages est obtenue via le moteur de template  &lt;a href="http://short.faitmain.org/074-documentation-1"&gt; Mako &lt;/a&gt;  
et les formulaires validés via  &lt;a href="http://short.faitmain.org/formencode-formencode"&gt; FormEncode &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Enfin le requêtage d'Elastic Search est fait par la librairie  &lt;a href="http://short.faitmain.org/python-elastic-1"&gt; pyes &lt;/a&gt;  . &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-partie-intelligente" class="section"&gt; &lt;h2&gt;La partie intelligente &lt;a class="headerlink" href="#la-partie-intelligente"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;a href="http://short.faitmain.org/scikit-image-image-1"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/scikit-image.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Scikit-image en action. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; La partie la plus intéressante est la reconnaissance des feuilles bien sûr,
et pour la mettre en oeuvre, nous avons utilisé la librairie Python
 &lt;a href="http://short.faitmain.org/scikit-image-image-1"&gt; scikit-image &lt;/a&gt;  
qui fournit un ensemble d'algorithmes pour la vision artificielle. &lt;/p&gt; &lt;p&gt; Chaque feuille entrée dans l'application subit d'abord une rotation et
une normalisation de taille, afin d'avoir un jeu de données le plus
homogène possible. La rotation consiste à positionner avec l'aide de
l'utilisateur le haut de la feuille en haut au milieu de l'image
et le bas de la feuille, sans compter la tige, en bas au milieu. &lt;/p&gt; &lt;p&gt; Ces étapes de normalisation améliorent grandement les résultats
puisque l'algorithme de reconnaissance ne sait pas qu'il manipule
des feuilles. Il se contente d'essayer de détecter sur chaque photo
le maximum de  &lt;em&gt; zones d'intérêt &lt;/em&gt; , ou  &lt;strong&gt; features &lt;/strong&gt;  en anglais. &lt;/p&gt; &lt;p&gt; Il existe plusieurs algorithmes d'extractions de features, celui que nous
avons choisi d'expérimenter est le  &lt;a href="https://fr.wikipedia.org/wiki/HOG" class="wikipedia"&gt; HOG &lt;/a&gt;  
(histogramme de gradient orienté). &lt;/p&gt; &lt;p&gt; HOG extrait des histogrammes de gradients sur des blocs carrés de
pixels contigus. &lt;/p&gt; &lt;p&gt; Cet algorithme est très efficace pour détecter des personnes sur une
photo, et par extension tous types d'objets comme des voitures, des
chiens, des chats, etc. Pour que l'algorithme soit efficace sur une
classe d'objets donnée, comme les feuilles, il convient
de faire varier certains paramètres comme les tailles de blocs. &lt;/p&gt; &lt;p&gt; Nous ne savons pas si les paramètres que nous utilisons sont optimaux
pour la détection de feuilles, et nous ne le saurons pas tant que
la base de données ne sera pas plus fournie. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; Une fois que chaque feuille de la base est transformée en son
histogramme, il devient possible de suggérer pour une nouvelle
feuille les feuilles qui s'en rapprochent le plus et donc
par extension la plante ou l'arbre d'appartenance. &lt;/p&gt; &lt;p&gt; Pour faire cette suggestion, notre application calcule la
 &lt;a href="https://fr.wikipedia.org/wiki/Distance_euclidienne" class="wikipedia"&gt; distance euclidienne &lt;/a&gt;  
entre l'histogramme de la feuille et l'intégralité des histogrammes
de la base. &lt;/p&gt; &lt;p&gt; Dans le prototype actuel, tous ces calculs sont faits à la volée.
Mais comme cette opération de comparaison est de complexité  &lt;em&gt; O(n) &lt;/em&gt; ,
elle ralentira au fur et à mesure que la base de feuilles grossit. &lt;/p&gt; &lt;p&gt; Une solution potentielle consisterait en la construction d'un
vocabulaire de taille limitée de 1000 à 10000 images  &lt;em&gt; prototypiques &lt;/em&gt; 
qu'ont appelle des  &lt;strong&gt; mots visuels &lt;/strong&gt; . Ce vocabulaire peut etre construit
par l'utilisation d'un algorithme de clustering sur les features
extraites de la base d'images existantes. &lt;/p&gt; &lt;p&gt; Chaque image de la base sera ensuite approximativement encodée dans ce
vocabulaire en lui attribuant les 10 ou 100 mots visuels les plus
représentatifs pour cette image. On utilise alors ces mots pour
indexer les images de la base dans l'index Elastic Search. &lt;/p&gt; &lt;p&gt; On parle de représentation creuse ( &lt;em&gt; sparse &lt;/em&gt;  en Anglais) car chaque image
est encodée en utilisant moins de 10% du vocabulaire possible. Cette
technique permet de faire des requetes de suggestion qui fonctionnent
mieux sur une base de données très large &lt;/p&gt; &lt;p&gt; En effet quand une nouvelle image normalisée arrive, on extrait ses
features, on cherche et on fait une requete de similarité
( &lt;em&gt; "MoreLikeThis" &lt;/em&gt; ) dans l'index Elastic Search avec les identifiants des
mots visuels les plus représentatif de la nouvelle image. &lt;/p&gt; &lt;p&gt; L'utilisation de l'index Elastic Search permet ainsi de pre-filtrer de
manière efficace les 1000 candidats les plus probables. &lt;/p&gt; &lt;p&gt; Pour trouver la suggestion finale on calcule la distance euclidienne sur
les features de ces 1000 candidats au lieu de la base complète. &lt;/p&gt; &lt;p&gt; Quoi qu'il en soit, toute la partie intelligente de l'application
ne prouvera son efficacité que lorsque la base sera suffisamment
riche en plantes et en arbres. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="conclusion" class="section"&gt; &lt;h2&gt;Conclusion &lt;a class="headerlink" href="#conclusion"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; On était pas très jolis à voir le lendemain matin, mais le pari a été tenu —
et la démo a fonctionné pendant les 3 minutes sur scène. Les retours étaient
assez positifs dans l'ensemble, et l'application va devenir un bon terrain
de jeu pour Olivier, qui va pouvoir peaufiner son algorithme de pattern matching. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://short.faitmain.org/toutes-tailles-3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/wtf-winners.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Des heu-reux gagnants du AngelHack (by Kenneth Reitz) &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce hackathon m'a fait réaliser la différence majeure entre les moyens
que nous avions il y a 5 ans et aujourd'hui — nous autres petits développeurs. &lt;/p&gt; &lt;p&gt; Il n'y a plus besoin d'un budget conséquent et d'une équipe complète pour
développer une idée d'application qui peut potentiellement s'adresser
à des centaines de milliers d'utilisateurs. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-1/Platane.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Du platane. C'est du platane je vous dis. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour un budget de moins de 50 euros et un petit week-end de travail,
nous avons pu mettre en ligne, dans le  &lt;em&gt; cloud &lt;/em&gt;  une application mobile qui
ressemble à quelque chose. &lt;/p&gt; &lt;p&gt; Le code source est ici :  &lt;a href="http://short.faitmain.org/whatthefeuillewhatthefeuille-github"&gt; https://github.com/whatthefeuille/whatthefeuille &lt;/a&gt; 
et l'application  &lt;a href="http://short.faitmain.org/feuille"&gt; en ligne &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; &lt;a href="http://forums.faitmain.org/viewtopic.php?id=3"&gt; Réagissez sur cet article &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="écologie"></category><category term="informatique"></category></entry><entry><title>Passer un projet sur batterie</title><link href="http://faitmain.org//volume-2/batterie.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Jonathan Schemoul</name></author><id>tag:faitmain.org,2013-05-01://volume-2/batterie.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Debutant &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/jonathan_schemoul.html"&gt;Jonathan Schemoul&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Article élaboré en partenariat avec Hackspark.fr.
Voir la page  &lt;a href="/partenariat.html"&gt; partenariats &lt;/a&gt;   pour plus de
détails. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Vous venez de finir votre projet, il est tout beau, tout propre.
Oui, mais est-il transportable ? S'il y a une coupure de courant, que se passe-t-il ? &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Il existe plusieurs solutions pour mettre un projet sur batterie : &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ul bullet="-"&gt; &lt;li&gt; Utiliser de bêtes piles, on a  &lt;a href="http://short.faitmain.org/stockage-batteries"&gt; plusieurs réceptacles &lt;/a&gt;   pour cela... mais la
recharge doit être séparée ou les piles changées régulièrement. Pas génial. &lt;/li&gt; &lt;li&gt; Utiliser une pile 12V de voiture ou d'onduleur, lourd et pas forcément efficace. &lt;/li&gt; &lt;li&gt; Notre solution préférée, et c'est celle que nous allons étudier ici, utiliser
des  &lt;a href="http://short.faitmain.org/stockage-batteries-1"&gt; batteries lithium polymer (li-poly) &lt;/a&gt;   protégées avec un module de charge usb. &lt;/li&gt; &lt;/ul&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Dans le cas d'une solution à base de li-poly, il y a plusieurs choses à prendre
en compte : la batterie en elle-même (combien allons-nous consommer), le module
de charge (combien allons nous consommer en pic) et la recharge
(usb ? énergie solaire ? eau qui coule ? roue de vélo ? etc.) &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="quelle-batterie" class="section"&gt; &lt;h2&gt;Quelle batterie ? &lt;a class="headerlink" href="#quelle-batterie"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/batterie/batteries.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Batteries 3.7v à 1000, 2000 et 6000 mAh &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Supposons que nous ayons un projet avec un
 &lt;a href="http://short.faitmain.org/arduino-arduinoboarduno"&gt; Arduino Uno &lt;/a&gt;  , quelques senseurs, une ou
deux leds et une carte SD, ça ne nous fait pas beaucoup d'énergie au final (5V
200mA environ). Si on veut être alimenté tout le temps, sauf de temps en temps,
et continuer à marcher lorsque l'on est débranché (continuer en cas de coupure
de courant), on pourra prendre une  &lt;a href="http://short.faitmain.org/batterie-lithium"&gt; petite batterie 1000mAh &lt;/a&gt;  . Pour tenir un
petit moment une  &lt;a href="http://short.faitmain.org/batterie-lithium-1"&gt; batterie 2000mAh &lt;/a&gt;  . (en 3.7v, cela équivaut à environ 1500mAh en 5v soit
7h30 environ). &lt;/p&gt; &lt;p&gt; Si l'on veut tenir plus longtemps ou que notre projet consomme plus (utilisant
une carte Raspberry Pi par exemple), on peut opter pour une  &lt;a href="http://short.faitmain.org/batterie-lithium-2"&gt; batterie de 6000mAh &lt;/a&gt;  
(donnant environ 22h d'autonomie à notre exemple précédent, 12 à 16h à un RPi
modèle A et 7 à 10h à un RPi modèle B, selon l'utilisation du cpu et de l'usb). &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="quel-module-de-charge" class="section"&gt; &lt;h2&gt;Quel module de charge ? &lt;a class="headerlink" href="#quel-module-de-charge"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/batterie/lipo-rider.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Modules de charge  &lt;a href="http://short.faitmain.org/rider-hackspark"&gt; LiPo Rider Pro &lt;/a&gt;  
et  &lt;a href="http://short.faitmain.org/rider-hackspark-1"&gt; LiPo Rider &lt;/a&gt;   côte à côte &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Avoir une batterie, c'est bien, mais autant faut-il pouvoir l'utiliser. &lt;/p&gt; &lt;p&gt; Certaines cartes de prototypage proposent un port permettant d'en raccorder une en
direct (la  &lt;a href="http://short.faitmain.org/seeeduino-hackspark"&gt; seeeduino mega &lt;/a&gt;   par
exemple), mais autant prendre une solution générique. &lt;/p&gt; &lt;p&gt; Pour cela, on en a choisi deux. &lt;/p&gt; &lt;p&gt; La carte  &lt;a href="http://short.faitmain.org/rider-hackspark-1"&gt; LiPo Rider &lt;/a&gt;  est un bon choix
car elle permet de brancher n'importe quel périphérique en usb et de l'alimenter
à partir de la batterie. Dès que vous branchez le lipo rider à l'ordinateur,
vous accédez de façon transparente au device alimenté (votre arduino pour
l'exemple précédent, et ainsi le programmer pendant que vous le chargez) tout
en rechargeant la batterie. L'autre avantage est qu'il supporte l'adjonction d'une source
externe comme un panneau solaire, une dynamo ou un générateur hydro.
Petit bémol, sa sortie d'énergie en pointe est de 350mA en 5V, donc ce sera
suffisant pour un arduino avec quelques capteurs, mais si vous voulez
alimenter une matrice de leds, un moteur ou autre chose, passez à la carte suivante. &lt;/p&gt; &lt;p&gt; La carte  &lt;a href="http://short.faitmain.org/rider-hackspark"&gt; LiPo Rider Pro &lt;/a&gt;  a
les mêmes fonctionnalités que sa petite soeur, mais
permet de sortir 1A en 5V, de quoi alimenter un raspberry pi avec sa clé wifi,
un arduino avec des petits moteurs, etc. Vous pourrez même l'utiliser pour
charger votre téléphone portable en fait. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="quelle-source-d-energie" class="section"&gt; &lt;h2&gt;Quelle source d'énergie ? &lt;a class="headerlink" href="#quelle-source-d-energie"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Lorsque l'on peut être branché au secteur ou à un ordinateur, pas de soucis, on
se recharge lorsque l'on est branché en USB, et on utilise la batterie lorsqu'on ne l'est pas. Pas besoin d'une source annexe. &lt;/p&gt; &lt;p&gt; En revanche, pour des projets nomades ou devant rester à l'extérieur, nous
avons plusieurs sources d'énergie à notre disposition, que ce soit une dynamo
sur un vélo, un  &lt;a href="http://short.faitmain.org/micro-hydro"&gt; générateur hydro &lt;/a&gt;  
ou des  &lt;a href="http://short.faitmain.org/collecte-denergie"&gt; panneaux solaires &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Pour notre exemple, nous allons nous intéresser plus particulièrement aux
panneaux solaires, en particulier les panneaux photo-voltaïques.
On les classe selon la puissance restituée, ceux proposés sur HackSpark sont
en 3.7v et proposent des puissances allant de 1.5 à 3W. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/batterie/solaire.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Panneaux solaires 1.5W, 2W et 3W &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Dans le cas de l'Arduino avec des capteurs, le projet consomme 200mA à 5V, soit
1W. Un  &lt;a href="http://short.faitmain.org/panneau-solaire"&gt; panneau de 1.5W &lt;/a&gt;   est
donc suffisant en source d'énergie d'appoint, mais
devient limité lorsque l'on doit tenir toute une nuit par exemple. &lt;/p&gt; &lt;p&gt; Si l'on utilisait un  &lt;a href="https://en.wikipedia.org/wiki/TI_MSP430" class="wikipedia"&gt; MSP 430 Launchpad &lt;/a&gt;  
à la place d'un Arduino, on pourrait consommer beaucoup moins, 50 à 100mA environ
et encore, uniquement lors des réveils (le msp430 peut entrer en veille
quasi-complète pendant de longues périodes); Dans ce cas le 1.5W serait parfait. &lt;/p&gt; &lt;p&gt; Revenons à notre exemple, on prendrait plutôt un  &lt;a href="http://short.faitmain.org/panneau-solaire-1"&gt; panneau solaire 2.5W &lt;/a&gt;  , laissant
1.5W à la charge d'une batterie lors des périodes ensoleillées. &lt;/p&gt; &lt;p&gt; Dans le cas d'un  &lt;a href="https://fr.wikipedia.org/wiki/Raspberry_Pi#Mod.C3.A8le_B" class="wikipedia"&gt; Raspberry Pi,
le Type B &lt;/a&gt;  
consomme environ 350mA en activité moyenne et jusqu'à 700mA lors des pics de cpu. &lt;/p&gt;  &lt;p&gt; Prenons la valeur moyenne de 300mA, cela nous fait 0.4x5 =&gt; 2W,
un  &lt;a href="http://short.faitmain.org/panneau-solaire-1"&gt; panneau de 2.5W &lt;/a&gt;  
sera tout juste suffisant alors qu'un
 &lt;a href="http://short.faitmain.org/panneau-solaire-2"&gt; panneau de 3W &lt;/a&gt;   sera
adapté. Un  &lt;a href="https://fr.wikipedia.org/wiki/Raspberry_Pi#Mod.C3.A8le_A" class="wikipedia"&gt; Raspberry Pi type A &lt;/a&gt;   en revanche,
consomme beaucoup moins, et pourra être opéré avec un
 &lt;a href="http://short.faitmain.org/panneau-solaire-1"&gt; panneau de 2.5W &lt;/a&gt;  
sans trop de soucis. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="connectons-tout-ca" class="section"&gt; &lt;h2&gt;Connectons tout ça... &lt;a class="headerlink" href="#connectons-tout-ca"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/batterie/schema.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Connexion &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Tout d'abord, il faut relier la batterie au LiPo Rider, grâce à la prise prévue
à cet effet. &lt;/p&gt; &lt;p&gt; Si vous avez choisi d'utiliser un panneau solaire pour augmenter l'autonomie de
votre projet, c'est le moment de le connecter également. &lt;/p&gt; &lt;p&gt; Maintenant, connectez votre dispositif (Arduino, Raspberry-Pi, etc.) avec la
prise USB host femelle (comme celle d'un ordinateur). &lt;/p&gt;  &lt;p&gt; Pour finir, allumez le dispositif à l'aide du sélecteur on/off sur le  &lt;a href="http://short.faitmain.org/rider-hackspark-1"&gt; Lipo
Rider &lt;/a&gt;  . Et voilà,
vous avez un dispositif autonome. Ce n'était pas très compliqué :) &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/batterie/arduino.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de montage. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="et-ensuite" class="section"&gt; &lt;h2&gt;Et ensuite ? &lt;a class="headerlink" href="#et-ensuite"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Faire marcher c'est une chose, avoir de l'autonomie c'en est une autre, et vous
devrez tôt ou tard penser à optimiser votre projet pour l'économie d'énergie. &lt;/p&gt; &lt;p&gt; Avec un Raspberry Pi la solution facile est de passer au Raspberry Pi modèle A
qui est beaucoup moins gourmand en énergie. &lt;/p&gt; &lt;p&gt; Avec un Arduino, une solution est de passer aux  &lt;a href="http://short.faitmain.org/msp430-launchpad"&gt; MSP430 &lt;/a&gt;  
qui ont un IDE équivalent à Arduino disponible sur internet, vous permettant de continuer à
utiliser votre code, l'autre, plus simple et aidant un peu (moins) est de
passer à une carte Arduino supportant l'exécution en 3.3v comme la
 &lt;a href="http://short.faitmain.org/platine-seeeduino"&gt; Seeeduino &lt;/a&gt;  
des photos ci-dessus ou
l' &lt;a href="http://short.faitmain.org/platine-iteaduino-1"&gt; iTeaduino &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Chacun a ses solutions pour moins consommer, l'essentiel étant d'arriver à
équilibrer la consommation électrique avec la vitesse de charge et/ou
l'autonomie désirée. &lt;/p&gt;       &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category></entry><entry><title>Le coût écologique de vos données</title><link href="http://faitmain.org//volume-2/cout-ecologique-donnees.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>David Larlet</name></author><id>tag:faitmain.org,2013-05-01://volume-2/cout-ecologique-donnees.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/écologie.html"&gt;Écologie&lt;/a&gt; | &lt;a href="http://faitmain.org/autre.html"&gt;Autre&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Decouverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/david_larlet.html"&gt;David Larlet&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/cout/donnees-hangar.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Hangar. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Des photos de vacances non triées aux mails archivés  &lt;em&gt; ad vitam aeternam &lt;/em&gt; , des
films collectionnés aux bibliothèques musicales dont la qualité est devenue
obsolète, des livres téléchargés mais jamais ouverts aux projets inachevés,
nous disposons tous de  &lt;strong&gt; poussières numériques &lt;/strong&gt;  plus ou moins évidentes. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; À l'heure où le stockage de données domestiques se compte en téra-octets, on
pourrait trouver saugrenue l'idée de limiter son impact en terme de stockage
numérique. Et pourtant. Songez un instant à cette masse de données accumulées,
à ce  &lt;em&gt; grenier numérique &lt;/em&gt;  qui encombre votre disque dur de ses données
antédiluviennes, et ces sauvegardes sur d'autres supports, et ces sauvegardes
distantes, et ces sauvegardes incrémentales.  &lt;strong&gt; Autant de duplications et de
transferts qui ont un coût écologique non négligeable. &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Comment réduire son empreinte numérique ? La première option pourrait être de
ne pas faire de sauvegarde du tout, ce qui règlerait le problème en faisant un
 &lt;em&gt; reset &lt;/em&gt;  du système à chaque itération de crash/réinstallation. Cette
éventualité vous fait peut-être sourire pourtant la plupart des personnes
(non-techniciennes) de mon entourage gèrent leur patrimoine numérique de cette
manière. En tant que lecteur du magazine, vous êtes probablement dans un cas
inverse et  &lt;strong&gt; vous accordez une certaine importance à la pérennité de vos
données &lt;/strong&gt; , ce qui vous a amené à effectuer des sauvegardes suivant la méthode
recommandée des 3 emplacements physiques distincts (ce qui soulève notamment un
problème de confidentialité diluée mais ce n'est pas l'objet de cette tribune). &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Pour venir à bout de cette poussière qui s'accumule, il faut se prêter à deux
exercices :  &lt;strong&gt; un ménage régulier et une hygiène de vie numérique &lt;/strong&gt; . Le ménage
initial est incroyablement chronophage en fonction de l'état de flemme dont
vous avez fait preuve au cours des précédentes années (décennies ?!). La
première étape pourra consister à localiser les fichiers qui sont les plus
volumineux pour procéder à un premier tri, et ce, dans chacune des catégories
possibles (films, livres, emails, etc.) tout en ajustant la qualité des données
à votre perception : inutile de conserver des rafales de photos en  &lt;em&gt; raw &lt;/em&gt;  de 30
Mo si vous avez un ordinateur portable de 13" non calibré… Une fois ce premier
ménage effectué (je vous conseille le printemps approchant, c'est une
excellente période pour ça) il va falloir suivre une certaine méthode de tri
des données qui doit devenir à terme une routine. En procédant ainsi, vous
allez pouvoir cultiver une base saine et propre à vos besoins. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Outre la satisfaction d'un travail bien fait et la préservation de votre santé
mentale, je parlais en introduction du coût écologique de ces données. Il faut
bien avoir conscience que, quelle que soit votre approche — traditionnelle et
locale ou récente et distante (Cloud) —  &lt;strong&gt; le stockage de données occasionne une
consommation d'électricité non négligeable &lt;/strong&gt; . Prenons l'exemple d'un film d'1Go
que vous conservez sur votre disque dur : celui-ci va être répliqué sur votre
sauvegarde locale (sur-consommation au moment du transfert et stockage
physique, obsolescence itérative non pas programmée mais matérialisée du
périphérique de stockage), puis répliqué sur votre sauvegarde distante
(sur-consommation au niveau du routeur/modem durant toute la durée du
transfert, des intermédiaires réseaux et du serveur qui est très certainement
lui-même redondé — peut-être en plusieurs points du globe) et enfin
éventuellement transféré physiquement dans un autre lieu. Que d'énergie
dépensée pour un film que vous n'allez en définitive peut-être même pas
visionner ! &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Un archivage raisonné de vos données est le garant d'une empreinte numérique
respectueuse des ressources naturelles finies dont nous disposons. &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;</summary><category term="écologie"></category><category term="autre"></category></entry><entry><title>Comment réparer soi-même les Internets</title><link href="http://faitmain.org//volume-2/ffdn.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Damien Nicolas</name></author><id>tag:faitmain.org,2013-05-01://volume-2/ffdn.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/écologie.html"&gt;Écologie&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Decouverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/damien_nicolas.html"&gt;Damien Nicolas&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Ça nous est tous arrivé. Vous regardiez tranquillement des vidéos de
chatons sur Youtube après une dure journée de travail, puis PAF, sans
prévenir, vous vous êtes rendu compte que quelque chose était cassé
sur l’Internet mondial. Non pas que la vidéo ne chargeait plus,
encore que selon votre FAI, cela pourrait en être un symptôme. Non,
le problème, c’est que vous avez lu la phrase précédente sans relever
particulièrement le mot Youtube. Et ça fait beaucoup de mal aux
Internets. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Voyez-vous, si on devait, comme certains vendeurs de temps de cerveau
aiment à le faire, considérer Internet comme un moyen de diffusion de
contenu, alors on penserait qu’il n’y a qu’une seule grande chaîne de
télévision que tout le monde regarde. Pas parce qu’il y a un seul
contenu imposé à tous, mais parce qu’il n’y a qu’un service. La
comparaison atteint très vite sa limite, car, bien sûr, on peut
regarder la vidéo de son choix sur Youtube, à tout moment. Du moment
que Youtube le veut bien, et c’est là toute l’importance. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; En effet,
et même si vous êtes l’auteur d’une vidéo que vous choisissez de
diffuser sur cette plateforme, si elle contrevenait aux conditions
générales d’utilisation, elle serait supprimée sans procès. Et c’est
tout à fait normal : il ne s’agit pas d’un service public, mais d’une
plateforme privée, appartenant à une grosse société américaine, et
pouvant légitimement définir les règles en vigueur en son sein. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Donc, si vous ne voulez pas subir la vilaine censure, parce que par
exemple votre vidéo tient des propos critiques vis-à-vis du
gouvernement en place, que pouvez-vous faire ? Bien sûr, vous pouvez
l’héberger sur Dailymotion, ou un autre service similaire. Le
problème se pose toujours : vous dépendez d’une grosse plateforme qui
peut à loisir décider que vous n’avez pas le droit de publier ça. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Et c’est un problème, parce que ce fonctionnement est censé être un
vestige du passé. Ce passé où Internet n’existait pas encore, où
pour porter un message avec plus de force que ce que notre propre
voix nous le permettait, il fallait écrire un livre et montrer patte
blanche à un éditeur, qui décidait si oui ou non vous méritiez de
porter ce message. Ce passé où l’information était essentiellement
en lecture seule, car écrite par une poignée — toutes proportions
gardées — de privilégiés. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; L’Internet d’aujourd’hui est en panne, parce que certains, dont (et
c’est tout le problème) ses propres acteurs techniques, tentent d’en
faire un outil du passé. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="internet-fonctionne-en-lecture-ecriture" class="section"&gt; &lt;h2&gt;Internet fonctionne en lecture/écriture &lt;a class="headerlink" href="#internet-fonctionne-en-lecture-ecriture"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Cela vous semble aujourd’hui naturel de pouvoir écrire sur Internet.
Qu’il s’agisse de laisser un commentaire sur un article, de publier
une vidéo (que ce soit sur Youtube ou pas), de tenir soi-même un blog
ou un site d’actualité indépendant, voire même de développer un
programme informatique permettant un usage nouveau du réseau, et de
le mettre à disposition de tous. Tout cela peut être fait sans
demander d’autorisation. Vous ne connaissez pas de nom ou d’adresse
d'une administration qui serait chargée de distribuer les
autorisations d’ouverture de blog, pour la simple raison qu’il
n’existe pas de telle chose. Pour ouvrir un blog, il vous suffit de
vous inscrire en quelques secondes sur un hébergeur gratuit, comme
 &lt;a href="http://short.faitmain.org/wordpresscom"&gt; http://www.wordpress.com &lt;/a&gt;  par exemple, ou de louer de l’espace sur un
serveur et d’installer un moteur de blog libre. Ou même, installer
un serveur web sur votre propre ordinateur, qui, sans plus de
formalités, pourra être accessible par tout utilisateur d’Internet. &lt;/p&gt; &lt;p&gt; D’un point de vue idéologique, cette dernière possibilité est
idéale. Car tout utilisateur d’Internet, représenté par une adresse
IP, peut sans restriction être un serveur aussi bien qu’un client.
L’adresse IP qui répond derrière google.com n’est pas
structurellement différente de celle que vous fournit votre
fournisseur d’accès à Internet (FAI). Il n’y a bien sûr pas le même
débit derrière, mais peu de gens ont besoin, pour un blog personnel,
du débit alloué à un mastodonte comme Google. &lt;/p&gt; &lt;p&gt; Mais techniquement, les choses sont plus compliquées. Pour
commencer, certains FAIs considèrent tout simplement que la
possibilité d’héberger des services (comme des sites web) sur une
connexion personnelle est marginale, et qu’il n’y a pas lieu de
l’encourager. Pire, certains interdisent contractuellement cette
pratique. De cette façon, ils transforment Internet en un réseau en
lecture seule. Bien sûr, il est toujours possible de poster des
commentaires sous une vidéo Youtube, ou de créer son blog ailleurs.
Mais vous n’avez plus la possibilité de devenir votre propre
fournisseur de votre propre contenu. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; L’autre problème est plus
sensible, et nettement plus technique. Aujourd’hui en France, la
majorité des accès à Internet personnels se fait par technologie
ADSL, dont le A signifie « Asymétrique ». En effet, cette
technologie, telle que déployée, permet généralement des débits de
téléchargement tout à fait corrects (on parle de « 20 mégas », mais
il s’agit d’une capacité potentielle maximale, autrement dit un flou
bien manipulé par le marketing), mais une capacité d’envoi
extrêmement limitée en termes de capacités théoriques potentielles,
on parle de « 20 mégas » en trafic descendant (download,
téléchargement), mais seulement « 1 méga » en montant (upload,
envoi, téléversement) ! La conséquence directe est que, quand vous
postez une vidéo du petit dernier de la famille, l’envoi est
généralement laborieux, alors que lire une vidéo haute définition sur
n’importe quelle plateforme se fait quasiment en temps réel. &lt;/p&gt; &lt;p&gt; Il s’agit d’un problème inhérent à l’ADSL, et pour le résoudre, il
faut donc se tourner vers d’autres technologies : la fibre optique,
dont le déploiement souffre, en France, d’un retard inquiétant, ou
bien du SDSL ou VDSL, qui offrent un débit montant plus important.
Mais le peu d’intérêt que portent les FAIs aux usages « en
lecture/écriture » d’Internet n’a, lui, pas de réponse technique
simple. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="les-fais-tous-salauds" class="section"&gt; &lt;h2&gt;Les FAIs, tous salauds ? &lt;a class="headerlink" href="#les-fais-tous-salauds"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Même si on considère que « non », un FAI commercial a, comme toute
entreprise commerciale, vocation à générer de l'argent. Partant de ce
principe, tout FAI commercial peut, un jour ou l'autre, retourner sa
veste et choisir de ne plus garder comme objectif que la satisfaction
de ses investisseurs au détriment des principes fondateurs d'internet. &lt;/p&gt; &lt;p&gt; Heureusement, un petit village d’irréductibles barbus résiste encore
et toujours à l’envahisseur. Plus exactement, des gens ont décidé de
combattre ces pratiques visant à faire d’Internet un outil du passé,
tout simplement en faisant eux-mêmes leur Internet équitable. Ces
gens, ce sont d’abord les membres de French Data Network (FDN), un
fournisseur d'accès Internet associatif, créé en un temps où dans ce
secteur l'association était la norme et l'entreprise l'exception, et
qui a gardé ce modèle depuis. &lt;/p&gt; &lt;p&gt; À l’époque, ces considérations
n’avaient pas lieu d’être. Quand on était FAI, on reliait des gens à
Internet, et c’est tout. Aujourd’hui, les gros FAIs ont la fâcheuse
tendance à être de grosses sociétés ayant des intérêts de grosses
societés, mais pas seulement : Par exemple, SFR, pour ne citer que
lui, appartient à Vivendi, spécialisé dans la distribution de
contenu. Naturellement, on comprendra qu’ils ont un intérêt
particulier à ce que leurs clients consomment leurs propres contenus,
et ça pose de gros problèmes de conflit d’intérêt. &lt;/p&gt; &lt;p&gt; À l’inverse de cela, FDN a préféré considérer qu’un FAI avait pour
seul rôle d’acheminer les données de son réseau du mieux possible,
ce qui est déjà une tâche conséquente. Et le fait de rester une
structure associative a naturellement éloigné l’envie de monétiser au
maximum cette activité. Et que le seul bénéfice à en tirer était la
possibilité d’utiliser soi-même un réseau fonctionnel et indépendant
et pouvoir, en cas de dysfonctionnement, intervenir soi-même. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="faire-de-linternet-avec-ses-bits-et-son-couteau" class="section"&gt; &lt;h2&gt;Faire de l’Internet avec ses bits et son couteau &lt;a class="headerlink" href="#faire-de-linternet-avec-ses-bits-et-son-couteau"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Internet, ce n’est pas une machine géante sur laquelle un milliard
d’internautes sont connectés. Internet, c’est « le réseau des
réseaux », à proprement parler. Il y a dans le monde quelques
dizaines de milliers d’opérateurs, qu’il s’agisse de FAIs grand
public, de sociétés suffisamment importantes pour avoir besoin de
leur propre accès, ou autres. Chacun de ces opérateurs dispose
d’adresses IP à redistribuer à ses clients, ou machines. Tout cela
compose son réseau. &lt;/p&gt; &lt;p&gt; Dans le cas d’un FAI commercial, le réseau est
l’ensemble des « box » connectées et dotées d’une adresse IP
publique. Et Internet, c’est tout simplement le fait que tous ces
réseaux sachent discuter entre eux. Il n’y a rien de plus au milieu,
aucune boîte noire centrale. Si un opérateur tombe en panne, tout le
reste fonctionne encore. C’est ce qui assure la robustesse du réseau
mondial, et sa célèbre « résistance à une frappe nucléaire ». Tout ce
qu’on a à faire, c’est donc de créer un petit opérateur qui prendra
sa place auprès des quelques 400 000 autres. Il s’agit d’une formalité
administrative, du même ressort que celle qui permet d’obtenir des
adresses IP à distribuer. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; Car s’il est vrai qu’Internet n’a pas de centre ou de chef technique,
il faut savoir qu’il y a tout de même une entité « à la tête »
administrative, ou ce qui s’en approche le plus, d’Internet. C’est
L’IANA (Internet Assigned Numbers Authority), qui a pour rôle de
s’assurer qu’une même IP ne peut être attribuée plusieurs fois en
même temps. Cette autorité (une organisation américaine) distribue de
gros blocs d’adresses à des autorités régionales (à l’échelle de
continents), les RIR (Regional Internet Registry), qui eux-mêmes
distribuent soit aux opérateurs en eux-mêmes, soit à de plus petits
revendeurs, les LIR (Local Internet Registry). Pour devenir
opérateur, il faut donc demander à l’autorité appropriée (les
opérateurs français dépendent du RIPE-NCC, le RIR eurasien) un numéro de
Système Autonome (AS), qui sera notre identifiant auprès des 40 000
autres, et des blocs d’adresses IP. &lt;/p&gt; &lt;p&gt; Une fois qu’on a ça, il y a 2 détails à prendre en compte : d’abord,
connecter ses utilisateurs (c’est la collecte), et ensuite se
connecter aux autres opérateurs (c’est le transit ou le peering). &lt;/p&gt; &lt;p&gt; Connecter ses utilisateurs, ça peut être très simple. Dans sa forme
la plus simple, il s’agit de brancher des câbles entre les
utilisateurs. S’il y en a plus de 2, on peut utiliser un commutateur
réseau (communément appelé switch). Ensuite, on peut attribuer
manuellement une adresse à chaque utilisateur. &lt;/p&gt; &lt;p&gt; On peut automatiser ça, dans la même configuration, en ajoutant une
machine qui fera office de serveur DHCP (dont le but est d’attribuer
automatiquement les adresses). C’est le fonctionnement par défaut
d’un réseau local derrière une  &lt;em&gt; machin &lt;/em&gt;  box. Cela a pour intérêt
d’être plus facile à administrer, car il ne faut gérer que le
serveur, les autres postes se configurant automatiquement. Quand on
commence à grimper en échelle, on voudrait être sûr de donner les
bonnes adresses aux bonnes machines. Pour cela, on va utiliser un
protocole d’authentification, qui assurera également qu’on distribue
la même adresse à une personne. &lt;/p&gt; &lt;p&gt; Quand on voit plus grand, et qu’on commence à avoir des machines qui
ne peuvent pas être branchées ensemble directement, car trop
distantes, on a besoin d’utiliser d’autres méthodes de liaison. C’est
là que l’xDSL, ou la fibre, ou d’autres moyens, entrent en jeu. Leur
rôle est de connecter les utilisateurs aux serveurs de routage de
l’opérateur. &lt;/p&gt; &lt;p&gt; Le problème, quand on est une petite association, c’est
qu’on peut difficilement se permettre financièrement de monter de
l’ADSL, ou de la fibre, jusqu’à chaque utilisateur. La solution
choisie par FDN a été de louer de la collecte à un autre opérateur
déjà en place. Ainsi, c’est l’équipement de cet opérateur qui relie
l’utilisateur aux serveurs, à coût abordable. &lt;/p&gt; &lt;p&gt; Il y a cependant d’autres possibilités. Selon le contexte
géographique, on peut imaginer relier connecter ses utilisateurs en
tirant soi-même de la fibre optique sur des poteaux, ou même utiliser
des ponts wifi à longue distance. Ces méthodes permettent
généralement de s’affranchir de la dépendance envers un opérateur de
collecte, et donc d’être plus indépendant. &lt;/p&gt; &lt;p&gt; Maintenant que nos utilisateurs sont connectés sur notre réseau, et
qu’on leur a attribué des adresses IP publiques, ils sont capables de
discuter entre eux, mais pas avec le reste des utilisateurs
d'Internet. Pour cela, il faut se connecter aux autres opérateurs. &lt;/p&gt; &lt;p&gt; Matériellement, cela n’a rien de compliqué : on pose une machine de
notre réseau dans un datacenter, et l'on se connecte aux routeurs
d’autres opérateurs. Encore faut-il leur demander l’autorisation.
Concrètement, ça se traduit en contrats de transit et accords de
peering, qui régulent les volumes d’échanges qu’il y aura entre les
deux parties. On ne peut pas se connecter physiquement aux 40 000
opérateurs, donc pour pouvoir discuter avec un opérateur lointain, on
devra transiter par un ou plusieurs intermédiaires, et ces derniers
facturent le débit consommé. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="les-rejetons-de-fdn" class="section"&gt; &lt;h2&gt;Les rejetons de FDN &lt;a class="headerlink" href="#les-rejetons-de-fdn"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="pull-right margin-left"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/ffdn/logo_ffdn_0.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; La Fédération FDN &lt;/span&gt; &lt;/div&gt; &lt;p&gt; Dans la continuité de sa volonté de rester un petit opérateur
associatif, FDN a, en 2006, considéré qu’il fallait « forker »
l’association, tel un projet logiciel. La Fédération des
fournisseurs d'accès à Internet associatifs (communément appelée
FFDN, soit « Fédération FDN ») a donc été initiée, dans le but
d’accompagner les projets d’opérateurs associatifs poussés par les
mêmes valeurs que FDN, c’est à dire la volonté de faire de l’Internet
neutre, donc en lecture/écriture. &lt;/p&gt; &lt;p&gt; Depuis lors, 16 autres fournisseurs d’accès à Internet ont rejoint la
fédération, et d’autres ont formulé leur demande d’adhésion. Chacun
d’entre eux met en avant la portée locale de son projet, pour
garantir une gestion humaine. &lt;/p&gt; &lt;p&gt; Au-delà de ça, des projets différents
ont émergé : certains se contentent de fournir des abonnements ADSL
en marque blanche de FDN (en se focalisant sur le développement du
tissu social de l’association), d’autres mettent en place leur propre
collecte, par déploiement de fibre optique ou de ponts wifi. Lorsque
FDN a appelé à la création de multiples FAIs locaux, on y comptait
une centaine d’adhérents. Aujourd’hui, la fédération compte plus de
1200 adhérents parmi ses 17 associations. &lt;/p&gt; &lt;p&gt; Faire partie d’Internet n’est pas un rêve. Mais le faire à plusieurs,
c’est mieux. &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="informatique"></category><category term="écologie"></category></entry><entry><title>Faire de la peinture sans support et sans tache, avec de la lumière</title><link href="http://faitmain.org//volume-2/light-painting.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Fabien Batteix</name></author><id>tag:faitmain.org,2013-05-01://volume-2/light-painting.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Facile &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/fabien_batteix.html"&gt;Fabien Batteix&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; C'est un fait, tout le monde aime les spectacles de son et lumière, qu'on soit
petit ou grand. Alors si comme moi vous aimez bricoler, photographier et
programmer, l'article qui suit devrait vous intéresser ;) &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Dans cet article je vais vous présenter une méthode de dessin, ou de
photographie, c'est une question de point de vue. Cette méthode s'appelle le
« light painting », « peinture de lumière » en français. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="qu-est-ce-que-le-light-painting" class="section"&gt; &lt;h2&gt;Qu'est-ce que le « Light Painting » ? &lt;a class="headerlink" href="#qu-est-ce-que-le-light-painting"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le  &lt;a href="http://fr.wikipedia.org/wiki/Light_painting" class="wikipedia"&gt; light painting &lt;/a&gt;  ,
qu'on pourrait traduire par « peinture de lumière » en
français est une technique de photographie consistant à réaliser une image avec
de la lumière comme seul outil de dessin. D'un point de vue technique cela se
résume à utiliser un appareil photo en
 &lt;a href="http://fr.wikipedia.org/wiki/Exposition_(photographie)" class="wikipedia"&gt; exposition manuelle &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Traditionnellement on prend une photo en exposition « courte », dans un
environnement bien éclairé. Si on manque de lumière la photo sera sombre et le
sujet masqué par l'obscurité. En light painting c'est tout le contraire ! On
prend une photo … dans l'ombre, voire même dans l'obscurité la plus totale.
Comme l'on utilise une exposition manuelle, pouvant aller jusqu'à 30 voire même
60 secondes (cela dépend bien sûr de l'appareil photo utilisé) toute « trace »
de lumière vue par l’appareil photo durant ce laps de temps sera reproduite
sur la photo finale. Donnant ainsi une image constituée d'un « historique »,
par couches successives, des traces lumineuses observées. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/example.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de light painting en étant face à l'objectif (source :  &lt;a href="http://short.faitmain.org/http://commons.wikimedia.org/wiki/File:Light_painting_example.jpeg"&gt; wikipedia &lt;/a&gt; , [Arcade, Light painting photography, 10/05/2009], licence  &lt;a href="http://short.faitmain.org/artlibreorg-license"&gt; Free Art &lt;/a&gt;  ) &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il existe deux techniques de light painting, celles-ci pouvant être utilisées
seules ou en duo. Dans les deux cas une simple lampe de poche ou un pointeur
laser peut suffire à donner un résultat impressionnant. La première technique
est la plus classique : on pointe une source lumineuse vers l'objectif pour
« dessiner » un tracé (en effet miroir) avec la lumière. Une variante de cette
technique consiste à pointer un laser de couleur sur un mur et de dessiner avec
le faisceau, cette variante à l’avantage de ne pas donner un résultat en
« miroir ». &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/hello.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de light painting basique en étant derrière l’appareil photo avec un
pointeur laser &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Une seconde technique consiste à éclairer, ou non, des zones d'une pièce ou
d'un objet. Le jeu de lumière ainsi obtenu donnant un certain effet « non
naturel » à l'image. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/caverne.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de light painting utilisant des jeux d'ombre et de lumière
(source :  &lt;a href="http://commons.wikimedia.org/wiki/File:Fort_de_Roppe_-_abri-caverne.jpg"&gt; wikipedia &lt;/a&gt; , photo :  &lt;a href="http://short.faitmain.org/flickr-computerhotline"&gt; Thomas Bresson &lt;/a&gt;  , licence  &lt;a href="http://short.faitmain.org/creative-commons-2"&gt; CC BY 2.0 &lt;/a&gt;  ) &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Seulement comme vous pouvez le remarquer il n'est pas possible de dessiner
quelque chose de précis. Certes il est possible de faire des choses vraiment
impressionnantes moyennant un peu d'imagination (et de pratique, chose que je
n'ai pas malheureusement) mais il est impossible par exemple de dessiner un
texte « propre » ou un pixel-art, du moins à la main. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-technologie-au-secours-du-light-painting" class="section"&gt; &lt;h2&gt;La technologie au secours du light painting &lt;a class="headerlink" href="#la-technologie-au-secours-du-light-painting"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Dans cet article je ne vais pas vous expliquer comment dessiner, ou comment
utiliser un appareil photo, je vous laisse chercher dans le manuel de celui-ci
comment utiliser l'exposition manuelle ;) &lt;/p&gt; &lt;p&gt; Ce que je vais vous expliquer c'est
comment - au moyen de matériels simples et facilement disponibles - fabriquer
une « digital light wand » (« baguette lumineuse numérique » en français, c'est
tout de suite moins glamour), l'outil ultime du « light painter ». &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/wand.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; L'outil magique du parfait light painter &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Le principe est simple : un humain ne peut pas dessiner quelque-chose de précis
et encore moins en plusieurs couleurs. Pour cela il faudrait une précision dans
les mouvements et une notion de position dans l'espace surhumaine ! &lt;/p&gt; &lt;p&gt; Un microcontrôleur par contre n'a pas ce problème. Un microcontrôleur peut sans
problème contrôler des leds RGB (leds tri-colores permettant de générer
n'importe quelle autre couleur), respecter des timings précis et même utiliser
des périphériques de stockage ! &lt;/p&gt; &lt;p&gt; C'est justement ce qu'est une « digital light
wand » : un microcontrôleur, un ruban de led RGB et (accessoirement) un lecteur
de carte SD. &lt;/p&gt; &lt;p&gt; Les leds RGB étant principalement vendues en ruban il suffit de
déplacer la ligne de « pixels lumineux » ainsi formée de manière rectiligne
devant l'appareil photo pour obtenir une image parfaite. La gestion des pixels
et des timings étant laissée à la charge du microcontrôleur, la seule action
humaine nécessaire est de déplacer le ruban de manière rectiligne le plus
régulièrement possible. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-materiel-necessaire" class="section"&gt; &lt;h2&gt;Le matériel nécessaire &lt;a class="headerlink" href="#le-materiel-necessaire"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/matos.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Pour un total d'une centaine d'euros environ cela reste un projet
relativement abordable &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Comme précisé précédemment le matériel nécessaire est très limité et est
facilement disponible. Pour fabriquer votre propre « digital light wand » il
vous faut : &lt;/p&gt; &lt;ul bullet="*"&gt; &lt;li&gt; une carte arduino « classique » (ici une carte Arduino UNO) &lt;/li&gt; &lt;li&gt; une shield possédant un support pour carte SD &lt;/li&gt; &lt;li&gt; une shield lcd avec boutons de DFRobots (ou compatible) &lt;/li&gt; &lt;li&gt; et bien sûr, un ruban de leds RGB &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; (la shield avec les borniers n'est pas obligatoire mais facilite grandement le câblage) &lt;/p&gt; &lt;div class="well note"&gt; &lt;p&gt; Pour ce projet il est obligatoire d'utiliser un ruban de leds RGB
bien précis : le  &lt;a href="http://short.faitmain.org/digital-weatherproof"&gt; LPD8806 &lt;/a&gt;  ,
vendu par  &lt;a href="http://short.faitmain.org/adafruit-industries"&gt; Adafruit &lt;/a&gt;  . Celui-ci a la particularité de
posséder des contrôleurs de led indépendants au sein même du ruban. Il est donc
possible de contrôler chaque led indépendamment et d'avoir une profondeur de
couleur de 21 bits (7 bits par composante R, G et B). &lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="assemblage-des-composants" class="section"&gt; &lt;h2&gt;Assemblage des composants &lt;a class="headerlink" href="#assemblage-des-composants"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; L'assemblage des composants est l'étape la plus facile du projet, si vous avez
choisi d'utiliser une carte arduino classique et des shields du commerce cette
étape se résumera à l'empilage des shields sur l'arduino. &lt;/p&gt; &lt;p&gt; Si vous avez choisi de
faire votre propre montage avec des composants séparés (arduino pro mini +
lecteur de carte SD + écran par exemple) il faudra sortir le fer à souder, les
fils et assembler le tout ;) &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/precieux.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Mon précieux &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="petite-modification-hardware" class="section"&gt; &lt;h2&gt;Petite modification hardware &lt;a class="headerlink" href="#petite-modification-hardware"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Durant le montage de mes composants j'ai remarqué un problème au niveau du
câblage de la shield « support pour carte SD » et de la shield lcd de DFRobots.
La shield pour carte SD utilisait la broche D4 pour le « chip select » (choix
du périphérique actif en communication SPI) de même que la shield lcd pour
l'afficheur ! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/schema.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Une simple broche aurait pu tout faire capoter … &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il y avait donc conflit entre ces deux shields, la solution : un fil et un
coup de cutter (léger) pour « re-router » la broche « chip select » de la carte
SD sur la broche D3 de l'arduino. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/routage.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un bon bricoleur ne se laisse pas faire aussi facilement &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="derniers-details-techniques" class="section"&gt; &lt;h2&gt;Derniers détails techniques &lt;a class="headerlink" href="#derniers-details-techniques"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Tenir un ruban de leds (flexible) droit, à la main, n'est pas une chose facile
… Si en plus il faut manipuler le contrôleur pour choisir quelle image dessiner
cela devient impossible... à moins d'avoir trois bras. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/scotch.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Simple mais efficace &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour résoudre le problème rien ne vaut une bonne baguette de bois rigide et du
scotch transparent. Ainsi la prise en main du système devient un jeu d'enfant. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-logiciel" class="section"&gt; &lt;h2&gt;Le logiciel &lt;a class="headerlink" href="#le-logiciel"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; C'est ici que les choses se corsent. &lt;/p&gt; &lt;p&gt; Pour le logiciel j'ai choisi de découper mon code en 5 parties, chacune ayant
une fonctionnalité bien précise : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; digital_light_wand.ino : le code principal, gérant le choix du fichier et du
délai entre chaque colonne de l'image source &lt;/li&gt; &lt;li&gt; bitmap.ino : gérant l'ouverture de fichiers au format Bitmap et la
récupération des couleurs de chaque pixel de l'image &lt;/li&gt; &lt;li&gt; lpd8806.ino : gérant l'affichage sur le ruban de leds des pixels de couleurs
et de la communication bas niveau avec les contrôleurs LPD8806 du ruban. &lt;/li&gt; &lt;li&gt; keys.ino : gérant les boutons de la shield lcd &lt;/li&gt; &lt;li&gt; screen.ino : gérant l'affichage sur l'écran lcd &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Comme vous pouvez le voir cela fait beaucoup de choses ! &lt;/p&gt; &lt;p&gt; Le principe de fonctionnement « haut niveau » lui reste très simple : &lt;/p&gt; &lt;p&gt; Setup() : &lt;/p&gt; &lt;ol enumtype="arabic" prefix="" suffix="."&gt; &lt;li&gt; Initialisation du matériel &lt;/li&gt; &lt;li&gt; Ouverture du dossier « root » de la carte SD &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; loop() : &lt;/p&gt; &lt;ol enumtype="arabic" prefix="" suffix="."&gt; &lt;li&gt; Choix du fichier &lt;/li&gt; &lt;li&gt; Choix du délai entre chaque colonne de pixels &lt;/li&gt; &lt;li&gt; Début du dessin &lt;/li&gt; &lt;li&gt; Arrêt des leds du ruban &lt;/li&gt; &lt;/ol&gt; &lt;p&gt; La majeure partie du code se trouve en réalité dans les différents codes « de
contrôle » du matériel. &lt;/p&gt; &lt;p&gt; L'interface homme / machine elle se résume à de simples messages textuels : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-1.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Premier écran de choix du fichier &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-2.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le choix du fichier s'effectue au moyen des touches droite, gauche et
sélection &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-3.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Un fichier bitmap a été détecté, les informations de taille s'affichent &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-6.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Plus de fichier dans le dossier courant, retour au début de la liste des
fichiers &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-4.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le choix du délai s'effectue au moyen des touches haut, bas et sélection &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/LCD-5.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le nom du fichier, le pourcentage de progression et une barre de progression
permettent de savoir instantanément où en est le dessin de l'image et ainsi
d'ajuster la vitesse de déplacement du ruban en conséquence. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Le code source complet est disponible sous licence GPLv3 sur mon compte GitHub :
 &lt;a href="http://short.faitmain.org/skywodddigital_light_wand-github"&gt; https://github.com/skywodd/digital_light_wand &lt;/a&gt; &lt;/p&gt; &lt;p&gt; Je vous invite à regarder les commentaires présents dans le code source pour
mieux comprendre le principe de fonctionnement du programme. Détailler ici
point par point chaque fonction, algorithme et structure de données demanderait
plusieurs jours et des centaines de pages de texte… &lt;/p&gt; &lt;p&gt; Je souhaiterai cependant détailler deux points en particulier concernant la
gestion des fichiers bitmap et des couleurs. &lt;/p&gt; &lt;p&gt; → Contrairement aux idées reçues, un fichier
 &lt;a href="http://fr.wikipedia.org/wiki/Windows_bitmap" class="wikipedia"&gt; Bitmap &lt;/a&gt;   peut être compressé ! &lt;/p&gt; &lt;p&gt; Gérer la décompression nécessiterait l'implémentation de l'algorithme de codage
de  &lt;a href="http://fr.wikipedia.org/wiki/Codage_de_Huffman" class="wikipedia"&gt; Huffman &lt;/a&gt;  ,
très coûteux en ressources. C'est pourquoi le programme rejettera
tout fichier Bitmap compressé. De même afin de faciliter la gestion des
couleurs celui-ci rejettera aussi tout fichier Bitmap dont les couleurs ne
seraient pas codées sur 24 bits (3 octets). &lt;/p&gt; &lt;p&gt; → Le contrôleur LPD8806 travaille avec des couleurs codées sur 21 bits, le
fichier Bitmap, lui, travaille avec des couleurs codées sur 24 bits ! &lt;/p&gt; &lt;p&gt; Deux solutions sont implémentées dans le programme, le choix se fait au moyen
d'un #define dans le fichier principal : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Correction linéaire : chaque couleur (R, G, B) est décalée d'un bit vers la
droite, cela a pour effet de diviser la valeur de chaque couleur par deux et
ainsi passer de 8 bits par couleur (0 ~ 255) à 7 bits par couleur (0 ~ 127)
soit 21 bits au total. &lt;/li&gt; &lt;li&gt; &lt;a href="http://fr.wikipedia.org/wiki/Correction_gamma" class="wikipedia"&gt; Correction gamma &lt;/a&gt;   :
chaque couleur est passée dans une table de correction
prenant en entrée une valeur sur 8 bits et générant en sortie une valeur sur 7
bits suivant la courbe de réponse de l’œil humain. C'est cette deuxième
solution qui est appliquée par défaut dans le programme, c'est celle-ci qui
permet d'avoir un résultat final au plus proche des couleurs voulues. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Remarque : les fichiers Bitmap doivent être retournés de 90° avant d'être
copiés sur la carte SD. De même ils ne devront pas dépasser 64 pixels de
largeur sinon la partie droite de l'image sera tronquée. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-resultat" class="section"&gt; &lt;h2&gt;Le résultat &lt;a class="headerlink" href="#le-resultat"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Après
toute cette lecture il est grand temps de prendre un peu de repos devant
quelques belles photos vous ne trouvez pas ? &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/cat.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Nyancat en light painting. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/light/logo.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Logo de Fait Main en light painting. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category><category term="art"></category></entry><entry><title>Comment ouvrir une puce ?</title><link href="http://faitmain.org//volume-2/ouvrir-puce.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Zeptobars</name></author><id>tag:faitmain.org,2013-05-01://volume-2/ouvrir-puce.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/autre.html"&gt;Autre&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Insolite &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/zeptobars.html"&gt;Zeptobars&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/translation.png"&gt; &lt;/img&gt; &lt;strong&gt;Traduction&lt;/strong&gt;: &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Cet article est une traduction adaptée de l'article de Zeptobars
originalement paru en anglais &amp; russe à
 &lt;a href="http://short.faitmain.org/open-microchip"&gt; cette adresse &lt;/a&gt;  . &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Les puces électroniques sont des petites boîtes noires. Si elles fonctionnent,
aucune raison d'essayer de regarder dedans. Mais comment faire si l'on a  &lt;em&gt; envie &lt;/em&gt; 
de regarder dedans ? &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Dans cet article, nous expliquons comment  &lt;em&gt; ouvrir &lt;/em&gt;  des puces électroniques
et ce qu'on peut trouver à l'intérieur. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="alert"&gt; &lt;p&gt; Toutes les manipulations de cet article sont faites avec de  &lt;strong&gt; l'acide chaud &lt;/strong&gt; 
et sont extrêmement dangeureuses. Seules des personnes aguerries et habilitées
à faire ce genre de manipulations, avec le materiel de protection adéquat
(gants anti-acide, lunettes de protection, combinaison, cheminée d'extraction
des fumées etc.) peuvent effectuer ces opérations. &lt;/p&gt; &lt;p&gt; Rappelez-vous que vous n'avez que deux yeux. &lt;/p&gt; &lt;p&gt; Cet article est juste informatif, n'essayez pas ces manipulations à la maison. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="ouvrir-une-puce" class="section"&gt; &lt;h2&gt;Ouvrir une puce &lt;a class="headerlink" href="#ouvrir-une-puce"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Prenez des puces qui vous intéressent et de l'acide sulfurique concentré.
Le récipient à utiliser doit être fermé mais pa hermétique, pour laisser les
fumées s'échapper - c'est très important. &lt;/p&gt; &lt;p&gt; Chauffez l'acide jusqu'à sa température d'ébulition (300ºC). La matière blanche
au fond est du bicarbonate de soude qui est utilisé pour neutraliser les
projections accidentelles d'acide et une partie de la fumée. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/acid1.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le bain d'acide. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Après 30 à 40 minutes, l'acide brûle le plastique en carbone: &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/acid2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Dépôt de carbone en surface. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Une fois le mélange refroidi, nous pouvons trier les éléments qui sont prêts pour
la prochaine étape de ceux qui ont encore besoin d'un bain d'acide. Les
composants enrobés d'une grosse couche ont en général besoin de trois bains. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/acid3.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Résultat du premier bain. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Si des morcaux de carbones sont coincés dans la puce et ne peuvent être retirés
mécaniquement - ils peuvent en général être retirés dans un bain d'acide
concentré maintenue à une température plus basse (~110-120 °C). &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/nitric.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Nettoyage de résidus. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="regardons-de-plus-pret" class="section"&gt; &lt;h2&gt;Regardons de plus prêt &lt;a class="headerlink" href="#regardons-de-plus-pret"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="well note"&gt; &lt;p&gt; Les images ci-dessous peuvent être cliquées pour afficher une image haute résolution.
Attention, les images en haute résolution pèsent entre 5 et 25Mb. &lt;/p&gt; &lt;p&gt; Les couleurs ont été saturées pour mieux visualiser les circuits. &lt;/p&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/PL2303HX-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/PL2303HX.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; PL2303HX - convertisseur USB &lt;&gt; RS232 converter.
Cette puce est un clone des chips FTDI, présents dans les anciens modèles d'Arduino. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/LM1117-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/LM1117.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; LM1117 — Régulateur ldo. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/74HC595-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/74HC595.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; 74HC595 - Shift register 8 bits. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/NXP-74AHC00D-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/NXP-74AHC00D.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; NXP-74AHC00D - porte NAND 2 entrées. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/MT4C1024-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/MT4C1024.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Micron MT4C1024 - 1 mebibit (220 bit) de RAM dynamique
Très utilisé dans les ordinateurs de la génération
286 et 386 dans les années 90. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/amd-palce16V8h-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/amd-palce16V8h.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; AMD Palce16V8h GAL est un tableau AND de 32 x 64.
Les puces GAL (Generic array logic) sont des puces reprogrammables,
ancêtres des  &lt;a href="https://fr.wikipedia.org/wiki/FPGA" class="wikipedia"&gt; FPGA &lt;/a&gt;   et
CPLD. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/atmel-attiny13a-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/atmel-attiny13a.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; ATtiny13A — un des plus petits micro-contrôleurs. Seulement 1kb de
mémoire flash et 32 bytes de SRAM. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/atmega8-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/atmega8.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; ATmega8 — un des micro-contrôleurs 8 bit les plus populaires. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/kr580ik80a-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/kr580ik80a.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; KR580IK80A renommé KR580VM80A par la suite - un des microprocesseurs
russe les plus répandus. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/STM32F100C4T6B-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/STM32F100C4T6B.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; STM32F100C4T6B, le plus petit micro-contrôleur fabriqué par STMicroelectronics et
basé sur un coeur ARM Cortex-M3. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/altera-epm7032-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/altera-epm7032.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Altera EPM7032 — une  &lt;a href="https://fr.wikipedia.org/wiki/Complex_Programmable_Logic_Device" class="wikipedia"&gt; CPLD &lt;/a&gt;   qui a roulé sa bosse. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;a href="http://s.zeptobars.ru/mifare-HD.jpg"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/puce/mifare.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Puce MIFARE, utilisée dans les carte RFID du métro de Moscou. &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Voila. Les boîtes noires sont ouvertes :-) &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="autre"></category></entry><entry><title>Quelques livres</title><link href="http://faitmain.org//volume-2/quelques-livres.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Tarek Ziadé</name></author><id>tag:faitmain.org,2013-05-01://volume-2/quelques-livres.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/cuisine.html"&gt;Cuisine&lt;/a&gt; | &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Decouverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Voici une petite sélection de livres qui m'ont paru intéressants à lire
pour vous en fournir une petite critique. Ils ne sont pas tous en français
mais lorsqu'ils sont en anglais, restent très abordables. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="programming-your-home" class="section"&gt; &lt;h2&gt;Programming Your Home &lt;a class="headerlink" href="#programming-your-home"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="pull-right margin-left"&gt; &lt;a href="http://short.faitmain.org/programming-home"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/livres/programming_home.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Mike Riley / Pragmatic Bookshelf &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;p&gt; J'ai acheté ce livre au stand O'Reilly pendant le FOSDEM 2013, pour
le lire dans l'avion que je prenais le lendemain. En feuilletant rapidement
la table des matières, il m'avait paru très bien. &lt;/p&gt; &lt;p&gt; La liste des projets est variée et intéressante. On y parle par exemple d'un détecteur
de colis qui envoie un mail lors de l'arrivé d'un colis ou un courrier,
un faux chien de garde qui aboie lorsqu'un intrus essaye de pénétrer la maison
ou encore une  &lt;em&gt; maison interactive &lt;/em&gt;  qui répond aux ordres oraux via de
la synthèse vocale. Programme alléchant. &lt;/p&gt; &lt;p&gt; Seulement voila: je m'attendais pour un livre consacré à de la domotique
à un minimum d'information sur les systèmes et protocoles existants dans
le domaine. Il y a moins d'une page sur le sujet: l'auteur parle furtivement
du protocole  &lt;a href="https://fr.wikipedia.org/wiki/X10_%28informatique%29" class="wikipedia"&gt; X10 &lt;/a&gt;  
dans l'introduction et puis l'utilise dans un projet de lumière pilotée
par le web - mais il y a très peu de détails sur le matériel et les usages
existants dans la communauté des domoticiens, ce qui est dommage. &lt;/p&gt; &lt;p&gt; Le livre n'est finalement qu'un regroupement de petits projets Arduino
qui ne forment pas un ensemble cohérent. &lt;/p&gt; &lt;p&gt; Par exemple, pourquoi ne pas avoir expliqué comment créer une centrale de
domotique, puis developpé les petits projets autour de cette centrale ? &lt;/p&gt; &lt;p&gt; Si j'automatise ma maison, je ne vais pas m'amuser à developper plusieurs
petits systèmes indépendants. Je vais vouloir centraliser l'ensemble. &lt;/p&gt; &lt;p&gt; L'autre souci est le choix exclusif de la puce radio
 &lt;a href="http://short.faitmain.org/zigbee-24ghz"&gt; X-Bee &lt;/a&gt;  ,
pour tous les projets sans fils, qui forment la grande majorité du livre.
Même si cette puce et son protocole Zigbee (lire notre dossier
 &lt;a href="/volume-2/xbee-arduino.html"&gt; Xbee &lt;/a&gt;  ) sont très intéressants,
à 20 euros par puce en moyenne, le prix de chaque projet monte très vite. &lt;/p&gt; &lt;p&gt; Pourquoi ne pas avoir aussi exploré des puces radios low-cost en 433 mhz,
comme ce que nous a montré Jonathan au
 &lt;a href="http://faitmain.org/volume-1/dispositifs.html"&gt; numéro précedent &lt;/a&gt;  ?
A moins de faire un projet point-à-point complexe, elles permettent de
faire la même chose que les puces X-Bee, pour quelques euros seulement. &lt;/p&gt; &lt;p&gt; Enfin,  &lt;em&gt; le &lt;/em&gt;  projet phare du livre, un système de verrouillage de porte,
est complètement tiré par les cheveux. Il faut carrément installer un
téléphone Android pour prendre des photos des personnes qui sonnent, pour
envoyer une photo via internet et demander à une autre personne de déverouiller
à distance. Cette technique n'est évidemment pas très sûre de l'aveu même de
l'auteur, qui suggère des pistes dans la conclusion. &lt;/p&gt; &lt;p&gt; Une solution à base de  &lt;a href="https://fr.wikipedia.org/wiki/Rfid" class="wikipedia"&gt; RFID &lt;/a&gt;   ou
un digicode à mot de passe unique auraient été plus réalistes. &lt;/p&gt; &lt;p&gt; Le prix prohibitif du projet est aussi rédhibitoire: pourquoi ne pas avoir opté
pour une simple web cam voir une board de type Raspberry-PI (ou
une autre board vu que le livre est sorti la même année que le Raspberry). &lt;/p&gt; &lt;p&gt; A vouloir montrer un maximum de techniques et périphériques différents,
l'auteur fini par faire quelques projets un peu bizarres. &lt;/p&gt; &lt;p&gt; Je vais arrêter de critiquer ce projet en particulier, vous l'aurez compris
le livre m'a un peu déçu. &lt;/p&gt; &lt;p&gt; Quelques points positifs tout de même: ce livre touche à beaucoup
de composants et donne de bonnes idées et j'ai bien aimé le volet éléctrique
automatique. &lt;/p&gt; &lt;p&gt; &lt;strong&gt; Programming Your Home &lt;/strong&gt;  reste une lecture intéressante pour découvrir
des techniques d'interaction avec l'environnement, mais vous ne ne construirez
pas la maison du futur avec ce livre là. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="cooking-for-geeks" class="section"&gt; &lt;h2&gt;Cooking For Geeks &lt;a class="headerlink" href="#cooking-for-geeks"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="pull-right margin-left"&gt; &lt;a href="http://short.faitmain.org/cooking-geeks"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/livres/cooking-geeks.gif"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Jeff Potter / O'Reilly Media &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;p&gt; La première fois que j'ai entendu parler de ce livre, c'est lorsque j'ai vu la vidéo
de Jeff Potter  &lt;a href="http://short.faitmain.org/cream-seconds"&gt; en train de faire de la glace avec de l'azote liquide &lt;/a&gt;  . Il y a même un glacier
à San Francisco -  &lt;a href="http://short.faitmain.org/727b"&gt; Smitten &lt;/a&gt;   qui vend des glaces
faites devant les clients avec de l'azote. Vu que le processus ne prend que
quelques secondes, l'eau n'a pas le temps de cristalliser et les fruits
frais et la crème fraîche expriment complètement leurs saveurs. &lt;/p&gt; &lt;p&gt; C'est un peu la même idée pour la cuisine sous vide: les aliments sont
emballés dans un sac plastique et cuits à basse température pendant des heures.
Un steak sera uniformément cuit et ses cellules ne seront pas éclatées par
une chaleur excessive. &lt;/p&gt; &lt;p&gt; Pour en revenir au livre, il est tout bonnement incroyable. Il traite de
la cuisine comme on peut traiter de la conception logicielle: l'outillage
et la préparation de la cuisine sont passés en revue, puis les principes
chimiques et physiques sont expliqués: du goût à l'odeur, en passant
par les textures, puis la cuisson, la température et les différentes
techniques pour enfermer de l'air dans les mousses, pates et autres
soufflés. &lt;/p&gt; &lt;p&gt; Ce livre a deux lectures: on peut lire chaque chapitre et apprendre
des techniques de cuisine, appuyées par des explications scientifiques -
puis tomber de temps à autre sur des recettes d'applications.  &lt;em&gt; Ou &lt;/em&gt; 
simplement se rendre à l'index des recettes et en faire une. &lt;/p&gt; &lt;p&gt; J'aurais plus tendance à regarder la liste des recettes et en faire une qui me
plaît, puis lire les explications techniques et scientifiques qui
l'entourent. &lt;/p&gt; &lt;p&gt; On oublie par contre les recettes basées sur de l'azote liquide car ce
n'est pas vraiment à la portée de tous - les précautions de sécurité
sont assez drastiques et le matériel très onéreux. &lt;/p&gt; &lt;p&gt; Pour conclure, j'ai trouvé  &lt;strong&gt; Cooking For Geeks &lt;/strong&gt;  absolument génial. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="photo-culinaire-gourmande" class="section"&gt; &lt;h2&gt;Photo Culinaire &amp; Gourmande &lt;a class="headerlink" href="#photo-culinaire-gourmande"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="pull-right margin-left"&gt; &lt;a href="http://short.faitmain.org/photo-culinaire"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/livres/photo_culinaire.gif"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Philippe Barret / Eyrolles &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;p&gt; &lt;a href="/volume-1/5-trucs.html"&gt; L'article du numéro 1 &lt;/a&gt;   sur la photographie
culinaire m'a donné envie de pousser un peu plus dans l'exploration
de ce domaine. &lt;/p&gt; &lt;p&gt; Les Éditions Eyrolles proposent deux ouvrages dans la photo culinaire:
 &lt;a href="http://short.faitmain.org/photo-culinaire"&gt; Photo Culinaire &lt;/a&gt;  
de Philippe Barret et  &lt;a href="http://short.faitmain.org/photo-gourmande"&gt; Photo Gourmande &lt;/a&gt;  
de Mouni Abdelli. &lt;/p&gt; &lt;p&gt; Deux ouvrages écrits par deux auteurs différents: Philippe Barret est
un photographe culinaire professionel et illustre des recettes dans
de nombreux ouvrages. Mouni Addelli est quant à elle bloggueuse
et photographe amateure. Elle tient le blog
 &lt;a href="http://short.faitmain.org/mignardises-mouni"&gt; Rdv Aux Mignardises &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Les Éditions Eyrolles m'ont gentiment envoyé les deux livres
pour que je puisse les étudier et les présenter ici.
(je présenterais le livre de Mouni Addelli dans le prochain numéro). &lt;/p&gt; &lt;p&gt; Le livre  &lt;em&gt; Photo Culinaire &lt;/em&gt;  est une belle édition au format
22x24 - un A4 un peu écrasé en quelque sorte, ce qui laisse la part
belle aux clichés. &lt;/p&gt; &lt;p&gt; Au niveau du contenu, on retrouve les principes de base de la
photographie et un passage en revue du matériel nécessaire, que ce
soit le matériel d'éclairage ou les décors et accessoires. &lt;/p&gt; &lt;p&gt; Rassurez vous, il n'y a pas besoin d'un studio onéreux pour
faire des photos culinaires - mais pour une bonne maîtrise de la
lumière, quelques spots deviennent vite indispensable si vous
ne pouvez pas prendre des photos en extérieur. &lt;/p&gt; &lt;p&gt; Le chapitre 2 sur les rappels techniques est très bien fait et
détaille les paramètres à prendre en compte lorsque l'on prend
des photos culinaire. Une dizaine de pages bien utiles. &lt;/p&gt; &lt;p&gt; Le reste du livre détaille les techniques propres à chaque
domaine de la photographie numérique - de la méthode employée
pour prendre les photos à la post-production: les photos
d'emballage &amp; de catalogue, les photos pour les livres et
la photographie avec les chefs. &lt;/p&gt; &lt;p&gt; Cette dernière catégorie est en fait l'art et la manière
de photographier des  &lt;em&gt; créations &lt;/em&gt;  de plat. Autant dire que si
vous n'avez pas un Paul Bocuse sous la main vous avez le
droit de photographier vos propres créations :) &lt;/p&gt; &lt;p&gt; Ce qui m'a le plus intêressé c'est la réalisation des recettes
en mode pas à pas et l'ouvrage donne de bonnes indications &lt;/p&gt; &lt;p&gt; Le clou du livre, page 73 - c'est les carottes qui se jettent
dans un plat avec un effet d'animation pour le mouvement. &lt;/p&gt; &lt;p&gt; Un petit détail que j'ai trouvé gênant est l'utilisation
du  &lt;a href="https://fr.wikipedia.org/wiki/Bokeh" class="wikipedia"&gt; bokeh &lt;/a&gt;   à outrance
sur de nombreux clichés. Sur certaines photos, le bokeh qui est
utilisé pour mettre en valeur un sujet, floute une partie
du sujet lui même et j'ai trouvé ca génant. &lt;/p&gt; &lt;p&gt; Il existe une technique appelée le
 &lt;a href="https://fr.wikipedia.org/wiki/Focus_stacking" class="wikipedia"&gt; Focus Stacking &lt;/a&gt;  
pour maîtriser parfaitement la profondeur de champ sur
des sujets où l'on souhaite flouter l'arrière plan. &lt;/p&gt; &lt;p&gt; Mais mis à part ce détail, j'ai trouvé l'ouvrage très bien,
même pour les photographe avertis: il donne de bonnes idées. &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="cuisine"></category><category term="électronique"></category><category term="informatique"></category></entry><entry><title>Interview de Sabine Blanc</title><link href="http://faitmain.org//volume-2/sabine-blanc.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Tarek Ziadé</name></author><id>tag:faitmain.org,2013-05-01://volume-2/sabine-blanc.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/autre.html"&gt;Autre&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Interview &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/sabine/obc2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Open Bidouille Camp #2 - Photo Ophelia Noor CC-BY-NC-ND &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Depuis l'an dernier, le mouvement DIY est en train de prendre de l'ampleur dans
l'hexagone, et on voit de plus en plus d'évènements organisés autour de ces
sujets, que ce soit dans les locaux de FabLabs ou dans le cadre de conférences,
hack days ou petits ateliers. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; La tout réçente association  &lt;a href="http://short.faitmain.org/bidouille"&gt; Open Bidouille Camp &lt;/a&gt;   (OBC)
organise depuis quelques temps des ateliers de bidouilles et commence à construire
un réseau de bidouilleurs partout en France. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Sabine Blanc est l'une des principales porteuses du projet  &lt;em&gt; OBC &lt;/em&gt; , et aussi
l'instiguatrice de  &lt;em&gt; Hack The Press &lt;/em&gt; ,  &lt;em&gt; Les hackers dans la cité arabe &lt;/em&gt;  (en stand-by),
et co-auteure de  &lt;a href="http://short.faitmain.org/hackers-batisseurs"&gt; Hackers : Bâtisseurs depuis 1959 &lt;/a&gt;  . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Les lecteurs de FaitMain lui ont posé quelques questions, sur son parcours,
ses projets et pleins d'autres sujets. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Quel est ton parcours/ta formation initiale ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; DEA de littérature comparée puis une école de journalisme, une caricature de
l'école française... Passés le collège et la fin des cours d'arts plastiques, que des
rédactions d'imagination: "tout est dans la tête rien dans les mains". Bref un assèchement de
la créativité. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; D'où peut-être ma fascination pour le DIY et les hackers. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Quelques mots sur ton expérience 'OWNI' ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Erf, il est trop tôt pour faire le bilan, c'est encore trop frais et
douloureux, les derniers mois ont été vraiment très durs humainement, en plus
de la charge de travail. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Juste une certitude : les idées de sujet ne me
manquent pas mais j'ai un sentiment de manque, dans le paysage médiatique
français, on occupait un créneau laissé vide, celui d'un traitement magazine,
sous l'angle de l'impact sociétale et politique au sens large du terme, du
numérique. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; "Hack The Press" c'est quoi ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Il s'agissait de joutes amicales entre équipes pluridisciplinaires
journalistes-développeurs-designers, sur le principe de hacks/hackers. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Owni a lancé l'initiative en octobre 2011, il y a eu une deuxième édition
en janvier de l'année dernière. Un  &lt;a href="http://short.faitmain.org/press"&gt; blog dédié &lt;/a&gt;  
rassemble les archives sur ces événements. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Les deux premiers OBC ont eu l'air de remporter un franc succès, c'est quoi la suite ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Effectivement, on a été débordé par le succès du premier OBC, fin septembre à
 &lt;a href="http://short.faitmain.org/mains-d8217oeuvres"&gt; Mains d'Oeuvres &lt;/a&gt;   à Saint-Ouen. Dès ce jour, des
gens nous ont demandé "alors c'est quand le prochain ?". &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Brest s'est lancé très vite dans la foulée, en Novembre. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Nous avons donc créé une association loi 1901 pour continuer
d'organiser des OBC, entre autres, dans le respect des valeurs initiales :
gratuité, partage, amusement... Une  &lt;a href="http://short.faitmain.org/bidouille-notre"&gt; charte est d'ailleurs en cours
d'élaboration &lt;/a&gt;  
et ouverte à tous les commentaires pour la patcher. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/sabine/header.obc.jpg"&gt;&lt;/img&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; La bidouille comme vecteur d'émancipation / quel rapport à l'éducation ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; La bidouille permet une approche par la pratique plutôt que par la théorie de
la connaissance, ce qui va à rebours du système éducatif traditionnel. Elle
donne aussi sa place à l'erreur, le fameux "learning by failing". Telle qu'elle
se développe depuis quelques années grâce à Internet, elle met aussi en avant
des pratiques de partage et de collaboration, de pair à pair. C'est bien sûr un
levier d'émancipation potentiel dans la mesure où elle nous incite à soulever
des capots qui sont de plus en plus fermés, que ce soit celui de la voiture ou
de nos iPad. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; J'avais écrit un article plus fouillé sur le sujet
 &lt;a href="http://short.faitmain.org/hackons-l8217ascole"&gt; http://owni.fr/2011/08/26/hackons-lecole/ &lt;/a&gt;  et c'était l'objet de la table ronde
d'OBC 2 qui a été documentée ici :
 &lt;a href="http://short.faitmain.org/unishared-hacker"&gt; http://unishared.com/notes/1V6acrSNk0dFHcYo-0DHSZd551LG3Dd6-ys4tLZTtn9E &lt;/a&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; "Les hackers dans la cité arabe" - encore un autre projet qui se lance -
peux-tu nous en parler un peu ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; C'est un projet qui est malheureusement en stand by, après avoir déjà visité
trois pays, la Tunisie, l'Algérie et l'Egypte. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Avec Ophelia Noor, photoreporter
qui travaillait aussi à Owni, nous sommes allées à la rencontre de ces
communautés naissantes, nous avons quand même publié une partie de nos
recherches sur un blog.  &lt;a href="http://short.faitmain.org/hackers-arabe"&gt; https://leshackersdanslacitearabe.wordpress.com/ &lt;/a&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/sabine/sabine.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Sabine Blanc (à gauche) et Anne-Sophie Novel (à droite) - Photo Ophelia Noor CC-BY-NC-ND &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Quelle est la place du hacking dans la société ?
Quelles évolutions peuvent apporter le hacking à la société? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Je pense que l'apport le plus fort du hacking à la société, par-delà les
apports tangibles, c'est une aspiration irréductible à la liberté, qui était
déjà dans l'ADN des premiers hackers du MIT quand ils crochetaient les portes
des pièces abritant les ordis. C'est la marque des hackers purs et durs, ceux
qui considèrent le hacking comme une philosophie de vie, un type comme
 &lt;a href="https://en.wikipedia.org/wiki/Mitch_Altman" class="wikipedia"&gt; Mitch Altman &lt;/a&gt;  . &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Au Caire aussi on a rencontré un gars comme ça, Tarek Ahmed le
co-fondateur du  &lt;a href="http://short.faitmain.org/cairohackerspace"&gt; Cairo hackerspace &lt;/a&gt;  .
Pour lui hacker, c'est trouver sa voie, et
il le fait dans tous les sens du terme en allant sauter d'immeuble en immeuble.
Du coup, il nous renvoie à notre propre tiédeur, une certaine attirance pour
les petites cases plus ou moins préformatées, c'est très subversif, à fortiori
dans des régimes autoritaires comme l'Egypte. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Et ça laisse comme un vertige : et si j'avais moi aussi la force
de suivre mon chemin... &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Le hacking devrait-il être une matière enseignée à l'école pour apprendre à
réfléchir, faire des choses soi même, etc. ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Le système peut-il enseigner la façon de le déconstruire ? Dubito. L'Éducation
Nationale reflète grosso modo la société, et les valeurs du hacking vont à
l'encontre dans l'ensemble. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Et le hacking ne devrait pas être une matière à part entière mais
une démarche guidant les modes d'apprentissage, quelle que soit la matière. Bon
après, je ne suis pas sûre qu'elle soit applicable tout le temps : je me suis
enquiquinée à apprendre la grammaire allemande, il fallait bien en passer par
là, le côté « on apprend uniquement en s'amusant » a des limites. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Le hacking &amp; la bidouille devraient -ils avoir une place centrale dans des
décheteries/ressourceries ? Pour faire société, doit-on faire lobby (douille) ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Je pense qu'il l'a déjà de facto : quand tu récupères une vieille chaise pour
la retaper, une carcasse d'ordi pour récupérer des composants, c'est de la
bidouille. Après, ça pourrait être utile de faire des ateliers récup' dans les
déchetteries municipales. Ca existe d'ailleurs déjà peut-être, je connais de
loin cet univers. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; &lt;strong&gt; Hacker nourrit-il son homme ? Ou comment est-ce qu'on hacke ses finances
personnelles pour réussir à hacker et manger ? Quels modèles économiques ? &lt;/strong&gt; &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Hé hé, j'aimerais bien faire un livre sur l'économie du hack. Je suis assez
pessimiste : Apple a fini comme on le sait,  &lt;a href="http://short.faitmain.org/http://www.makerbot.com"&gt; MakerBot &lt;/a&gt;  
suit le même chemin. En ce qui concerne le logiciel libre/open source
(han je vais me faire taper sur les doigts par les puristes), les business
models sont connus : développer des programmes sur mesure, faire du support. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Mais l'économie du logiciel libre ne
fait pas le poids par rapport au logiciel propriétaire, loin de là. Après, on
peut/doit aussi remettre en question la notion d'économie pour ne pas
considérer uniquement le CA généré mais l'apport à la société, de même qu'il
est important de mesurer celui du tissu associatif par exemple. Quand une
personne utilise des outils gratuits au lieu de payer une licence par exemple. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Dans les pays arabes que j'ai visités, qui sont plus pauvres que nous, les
logiciels propriétaires sont hors de prix, ils sont donc obligés d'utiliser des
versions crackées pleines de virus. Heureusement, la communauté du
logiciel libre est en plein développement et constitue une bonne alternative
légale et plus sûre. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Et si hacker ne nourrit pas son homme, ça permet de faire des économies en
amenant à davantage réparer, récupérer et bidouiller pour le plaisir, au lieu
d'aller acheter des saloperies toutes prêtes. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="dates-a-retenir" class="section"&gt; &lt;h2&gt;Dates à retenir &lt;a class="headerlink" href="#dates-a-retenir"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Dates des prochains OBC : &lt;/p&gt; &lt;ul bullet="*"&gt; &lt;li&gt; Lille 22 et 23 juin à Saint-Sauveur dans le cadre de la Fête de l'Environnement et des Solidarités. &lt;/li&gt; &lt;li&gt; Brest les 17 et 18 mai puis probablement le 12 octobre pendant Brest en Biens Communs et la fête de la science. &lt;/li&gt; &lt;li&gt; Île de France le 6 juillet - Le lieu reste encore à déterminer. &lt;/li&gt; &lt;/ul&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="autre"></category></entry><entry><title>Sérigraphie sur textile</title><link href="http://faitmain.org//volume-2/serigraphie.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Amina El Kamel</name></author><id>tag:faitmain.org,2013-05-01://volume-2/serigraphie.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/art.html"&gt;Art&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Decouverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/amina_el_kamel.html"&gt;Amina El Kamel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Cet article explique les techniques de base de la sérigraphie,
qui vont nous permettre de réaliser une jolie impression
monochrome sur un T-shirt. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; En France le matériel reste difficile à trouver et cher. Je m'équipe
chez  &lt;a href="http://short.faitmain.org/machines-produits"&gt; a.buisine &lt;/a&gt;  , et pour ceux qui ne veulent
pas de grosse quantité,  &lt;a href="http://short.faitmain.org/whefr-serigraphie"&gt; whe &lt;/a&gt;   vend des
packs pour débutant. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; La sérigraphie se passe en trois temps: &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;ol enumtype="arabic" prefix="" suffix="."&gt; &lt;li&gt; Enduction &lt;/li&gt; &lt;li&gt; Insolation &lt;/li&gt; &lt;li&gt; Impression &lt;/li&gt; &lt;/ol&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="enduction" class="section"&gt; &lt;h2&gt;1. Enduction &lt;a class="headerlink" href="#enduction"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; L'écran est enduit avec une émulsion photosensible, c'est ce produit qui après
séchage et insolation deviendra le pochoir de notre T-shirt. &lt;/p&gt; &lt;p&gt; Nettoyer, l'écran avec un dégraissant ménager, rincer, laisser sécher. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/nettoyage-ecran.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Nettoyage de l'écran &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour l'enduction, il faut une racle à enduction et de l'émulsion
photo-sensible. Mettre le produit dans la racle, ne pas avoir peur d'en mettre
trop, on pourra remettre le surplus dans le pot. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="serigraphie/materiel.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="serigraphie/enduction.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Matériel &lt;/td&gt; &lt;td&gt; Étalage de l'enduction. &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; Tenir l'écran verticalement et faire glisser la racle contre l'écran pour
déposer l'émulsion, 2 fois chaque côté : une fois a l'extérieur, une fois à
l'intérieur et recommencer, toujours finir par l'intérieur pour pousser
l'émulsion sur la partie extérieure. Laisser sécher à plat sur 2 cales, face
extérieur vers le bas à l'abri de la lumière, pendant au moins une journée,
mais cela peut varier d'une sorte d'émulsion à l'autre. Bien nettoyer les
outils juste après, et conserver le pot d'émulsion au frigo, il se gardera plus
longtemps. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="insolation" class="section"&gt; &lt;h2&gt;2. Insolation &lt;a class="headerlink" href="#insolation"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Sous l'action de la lumière, l'émulsion durcit, les parties masquées, elles, se
disolvent sous l'eau. Et voilà comment on obtient un joli pochoir! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/pochoir.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Préparation pochoir. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Imprimer le dessin à l'encre noire sur un transparent ou dessiner directement
dessus avec un feutre adéquat, le transparent servira de typon. &lt;/p&gt; &lt;p&gt; Installer une vitre à 1m20 du sol et poser 2 halogènes de chantier. &lt;/p&gt; &lt;p&gt; Poser le typon sur la vitre et caler l'écran dessus, couvrir avec un objet qui
coupe la lumière de la taille de l'écran, il faut qu'il soit noir pour éviter
les reflets. Poser un poids dessus et allumer les halogènes. Laisser 18 minutes
en moyenne. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/flashage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Flashage. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Rincer à l'eau des deux côtés, l'émulsion part aux endroits où se trouvait le
dessin. Laisser sécher à la lumière. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/nettoyage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Rinçage. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="impression" class="section"&gt; &lt;h2&gt;3. Impression &lt;a class="headerlink" href="#impression"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; L'encre pour textile est étalée sur l'écran avec une racle, puis poussée à
travers les mailles de l'écran aux endroits où il n'y a pas d'émulsion. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/cadre.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Mis en place du cadre. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;  &lt;p&gt; Vous pouvez utiliser une presse à sérigraphie pour les T-shirts, j'utilise la
presse print box de  &lt;a href="http://short.faitmain.org/http://www.whe.fr/store/fr"&gt; whe &lt;/a&gt;  . Mais il est
possible de faire sans. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/etalage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Placement de l'encre. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Coller le T-shirt à la table ou à la jeannette avec de la colle repositionnable. Pour le moment,
l'écran ne doit pas être en contact avec le T-shirt. Etaler l'encre à la
spatule sur le haut de l'écran. Avec une racle étaler l'encre sur tout le
dessin. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/encre2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Étalage de l'encre. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Poser l'écran sur le T-Shirt, repasser la racle sur tout le dessin pour
faire passer l'encre à travers le pochoir. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/sechage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Séchage de l'encre. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'encre est maintenant sur le
T-Shirt, il faut la faire sécher avec un décapeur thermique, sécher pendant 3
minutes en faisant des petits ronds comme avec un sèche cheveux. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/serigraphie/resultat.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Résultat final. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Et voilà, le beau T-Shirt. &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="art"></category></entry><entry><title>Station météo USB</title><link href="http://faitmain.org//volume-2/station-meteo.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Tarek Ziadé</name></author><id>tag:faitmain.org,2013-05-01://volume-2/station-meteo.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/ecologie.html"&gt;Ecologie&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation, moyen &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/jardin.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Surveillance de mon Jardin avec Yocto-Meteo &amp; Raspberry-Pi &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Article élaboré en partenariat avec Yoctopuce.
Voir la page  &lt;a href="/partenariat.html"&gt; partenariats &lt;/a&gt;   pour plus de
détails. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Après la sortie du premier numéro de FaitMain, j'ai été
contacté par  &lt;a href="http://short.faitmain.org/yoctopuce-1"&gt; Yoctopuce &lt;/a&gt;  qui
m'a proposé de tester son matériel dans un article. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Ca tombait plutôt bien puisque dans la (volumineuse) pile
des projets en attente de réalisation il y a la conception
d'une station météo. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Publier les courbes de température, pression atmosphérique
et humidité de mon jardin en Bourgogne, ne va intéresser que
ma mère qui vient de temps en temps jardiner chez moi.
Mais d'un point de vue réalisation technique c'est un projet
intéressant à conçevoir, surtout du coté logiciel. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Cet article ne va pas trop s'attarder sur le coté hardware
et va surtout vous expliquer comment on peut traiter et visualiser
un stream continu de données. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="station-meteo" class="section"&gt; &lt;h2&gt;Station météo &lt;a class="headerlink" href="#station-meteo"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Une station météo est composée d'une ensemble de senseurs qui
relèvent des informations comme la température, la pression
atmosphérique ou encore l'humidité, et les transmettent à un
afficheur ou à un autre périphérique de traitement. &lt;/p&gt; &lt;p&gt; Les stations météos vendues dans le commerce sont en générale des boîtes
noires. Pour les plus basiques, elles affichent sur un écran LCD les
informations des senseurs. &lt;/p&gt; &lt;p&gt; Les stations un peu plus haut de gamme conservent un historique des
données ou proposent un afficheur sans fil déporté, mais on grimpe
très vite dans les prix. &lt;/p&gt; &lt;p&gt; Et il faut compter 2000 euros pour les stations haut de gamme comme
la station Capricorn 2000EX qui à défaut de faire le café,
possède les senseurs de base ainsi qu'un pluviomètre et un
anénomètre. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/Cap2000EX-web.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Station Capricorn 2000EX - Columbia Weather System &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Les stations haut de gamme sont par contre communicantes, et
donc programmables, que ce soit par USB, Wifi ou tout autre moyen
de communication que le fabricant a fourni. &lt;/p&gt; &lt;p&gt; Le gros intérêt de communiquer avec une station est de pouvoir
conçevoir sa propre application avec les données collectées ou
de les transmettre à une application existante. &lt;/p&gt; &lt;p&gt; Un exemple très intéressant est le projet  &lt;a href="http://short.faitmain.org/personal-weather"&gt; Wunderground &lt;/a&gt;  
qui centralise toutes les informations envoyées par des particuliers
pour fournir une carte météo assez précise. &lt;/p&gt; &lt;p&gt; Wunderground reste un projet commercial, et je n'ai pas trouvé de projet
libre basé sur un protocole ouvert (je cherche encore..) c'est dommage &lt;/p&gt; &lt;p&gt; Les stations du commerce de toute façon sont en général basées sur
des protocoles et/ou des logiciels propriétaires. Quand on connaît
le prix des senseurs seuls, c'est assez rageant. &lt;/p&gt; &lt;div class="pull-right margin-left"&gt; &lt;a href="http://short.faitmain.org/humidity-temperature"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/RHT03.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; RHT03 - Senseur humidité + température (Sparkfun, $9.95) &lt;/span&gt; &lt;/a&gt; &lt;/div&gt; &lt;p&gt; Dans l'idéal, on peut fabriquer soi-même sa station météo complète en
achetant les senseurs séparément et en fabriquant une board connectée
à un Arduino ou un Raspberry-Pi. &lt;/p&gt; &lt;p&gt; En feuilletant le catalogue Sparkfun, on trouve tous les senseurs
nécessaires montés sur des petites breakout boards, comme le
 &lt;a href="http://short.faitmain.org/mpl3115a2-altitudepressure"&gt; MPL3115A2 &lt;/a&gt;   qui permet une
interaction en  &lt;a href="https://fr.wikipedia.org/wiki/I2C" class="wikipedia"&gt; I2C &lt;/a&gt;   avec
un Arduino. Ou encore la puce  &lt;em&gt; RHT03 &lt;/em&gt;  qui fournit une interface
digitale basique. &lt;/p&gt; &lt;p&gt; Ces puces ne sont pas chères mais nécessitent pas mal de travail
d'intégration pour construire sa station météo. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="les-puces-yoctopuce" class="section"&gt; &lt;h2&gt;Les puces Yoctopuce &lt;a class="headerlink" href="#les-puces-yoctopuce"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Les puces  &lt;a href="http://short.faitmain.org/yoctopuce"&gt; Yoctopuce &lt;/a&gt;  sont un bon compromis
entre les stations clef-en-main et les senseurs de base: ce sont de
petites boards USB plug'n'play qui peuvent être pilotées très
simplement depuis n'importe quel ordinateur. &lt;/p&gt; &lt;p&gt; Aucun driver n'est nécessaire, et le fabriquant fournit une librairie
dans  &lt;a href="http://short.faitmain.org/libraries"&gt; plusieurs languages &lt;/a&gt;  
et une documentation exhaustive des API. &lt;/p&gt; &lt;p&gt; Le code source des librairies est livré sous une license BSD-like
avec une restriction sur une utilisation exclusive sur le matériel
Yoctopuce. Le firmware est quant à lui propriétaire. &lt;/p&gt; &lt;p&gt; La puce  &lt;a href="http://short.faitmain.org/yocto-meteo-capteur"&gt; Yocto-Meteo &lt;/a&gt;  
fournit les trois senseurs de base qui nous
intéressent, à savoir la température, l'humidité et la pression. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/yoctopuces.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les puce Yocto-Meteo, Yocto-Light &amp; le mini-hub USB &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Les valeurs de pression fournies sont relatives au niveau de la mer.
Elles doivent donc être ajustées en fonction de l'altitude à laquelle
on se trouve. Il faut donc connaître son altitude, ce qui n'est
pas forcément toujours évident. &lt;/p&gt; &lt;p&gt; Une solution élégante consiste à géolocaliser la station
météo via internet et retrouver l'altitude via des bases de données
de géolocalisation open source. Mais laissons ce problème
de côté pour l'instant. &lt;/p&gt; &lt;p&gt; Après quelques échanges avec la sympathique équipe suisse de Yoctopuce,
je les ais convaincus en bon Pythonneur qu'il fallait absolument
que la librairie soit accessible sur le
 &lt;a href="http://short.faitmain.org/python-package"&gt; Python Package Index (PyPI) &lt;/a&gt;  
pour que les projets Python autour de ce matériel puissent très
facilement installer la librairie dans l'environnement d'exécution. &lt;/p&gt; &lt;p&gt; C'est chose faite et installer la librairie Python est aussi simple que: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;pip install yoctopuce
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; &lt;a href="http://short.faitmain.org/14dev1-documentation"&gt; Pip &lt;/a&gt;   est l'outil standard pour installer
des extensions Python. &lt;/p&gt; &lt;p&gt; Une fois la puce branchée, sur le port USB, la lecture des données
est très simple. &lt;/p&gt; &lt;p&gt; Voici un script en Python, inspiré de l'exemple
fourni par Yoctopuce: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# -* encoding: utf8 -*-&lt;/span&gt;
&lt;span class="c"&gt;#&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;time&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;yoctopuce.yocto_api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;YAPI&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;YModule&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;YRefParam&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;yoctopuce.yocto_humidity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;YHumidity&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;yoctopuce.yocto_temperature&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;YTemperature&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;yoctopuce.yocto_pressure&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;YPressure&lt;/span&gt;

&lt;span class="n"&gt;TURCEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;374.&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;convert_pressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;altitude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TURCEY&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1013.25&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="mf"&gt;288.15&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.0065&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;altitude&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;288.15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;5.255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;format_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_currentValue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_friendlyName&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;YHumidity&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%.2f&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;%%&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="nb"&gt;isinstance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;YPressure&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;convert_pressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%4.0f&lt;/span&gt;&lt;span class="s"&gt; mb&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;u&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%2.1f&lt;/span&gt;&lt;span class="s"&gt; ºC&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;


&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_info&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;errmsg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;YRefParam&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;YAPI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RegisterHub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;usb&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;errmsg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;YAPI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SUCCESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;IOError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;init error&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;errmsg&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;sensor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;YHumidity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FirstHumidity&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;IOError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;No module connected&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;module&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_module&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_serialNumber&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;sensors&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;YHumidity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindHumidity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;.humidity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
               &lt;span class="n"&gt;YPressure&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindPressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;.pressure&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
               &lt;span class="n"&gt;YTemperature&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindTemperature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;.temperature&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;


    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;module&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isOnline&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
            &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;IOError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;Device not connected&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;sensor&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;sensors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;format_value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sensor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;formatted&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;5.&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;get_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Et l'exécution donne: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;$ bin/python test.py
METEOMK1-0A918.humidity 47.00 %
METEOMK1-0A918.pressure 1096 mb
METEOMK1-0A918.temperature 15.8 ºC
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Le script paraît compliqué à premier abord car j'ai ajouté des
fonctionnalités d'affichage dans  &lt;strong&gt; format_value() &lt;/strong&gt;  et quelques
autres automatismes en vue de son intégration dans le projet. &lt;/p&gt; &lt;p&gt; Mais le coeur de la fonctionnalité est simple: une board
Yoctopuce est définie par un objet  &lt;strong&gt; module &lt;/strong&gt;  qui possède
un numéro de série correspondant à celui du matériel. &lt;/p&gt; &lt;p&gt; Une fois ce numéro obtenu,  &lt;strong&gt; METEOMK1-0A918 &lt;/strong&gt;  dans mon cas,
les API Yoctopuce fournissent des classes pour récupérer
la valeur en cours du senseur: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;humidity&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;YHumidity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindHumidity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;METEOMK1-0A918.humidity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;humidity&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_currentValue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;pressure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;YPressure&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindPressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;METEOMK1-0A918.pressure&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;pressure&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_currentValue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="n"&gt;temperature&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;YTemperature&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FindTemperature&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;METEOMK1-0A918.temperature&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_currentValue&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Enfin, pour corriger la valeur de la pression, il convient
d'appliquer la  &lt;a href="https://fr.wikipedia.org/wiki/Formule_du_nivellement_barom%C3%A9trique" class="wikipedia"&gt; formule du nivellement barométrique &lt;/a&gt;  
sur la valeur renvoyée par la sonde. &lt;/p&gt; &lt;p&gt; Traduite en Python, la formule donne: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="n"&gt;TURCEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;374.&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;convert_pressure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;altitude&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;TURCEY&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;1013.25&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(((&lt;/span&gt;&lt;span class="mf"&gt;288.15&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mf"&gt;0.0065&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;altitude&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mf"&gt;288.15&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mf"&gt;5.255&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Ma maison est à 374 mètres au dessus du niveau de l'eau. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-projet-grenouille" class="section"&gt; &lt;h2&gt;Le projet Grenouille &lt;a class="headerlink" href="#le-projet-grenouille"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Ce n'est pas un nom très original mais je n'ai pas trouvé mieux. Le
projet  &lt;strong&gt; Grenouille &lt;/strong&gt;  utilise la sonde Yocto-Meteo pour remplir une
base de données qui sert ensuite à afficher les informations dans
des séries temporelles. &lt;/p&gt; &lt;p&gt; Pour la base de données, j'ai choisi  &lt;a href="http://short.faitmain.org/elasticsearch-source-1"&gt; Elastic Search &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Elastic Search est un service de recherche au dessus de  &lt;a href="http://short.faitmain.org/apache-lucene-1"&gt; Apache Lucene &lt;/a&gt;  
qui permet d'indexer des données en continu et qui fournit une interface
 &lt;a href="https://fr.wikipedia.org/wiki/Rest" class="wikipedia"&gt; REST &lt;/a&gt;   pour faire des recherches, &lt;/p&gt; &lt;p&gt; Les performances d'Elastic Search sont assez bluffantes. Ce système est par
exemple utilisé par  &lt;a href="http://short.faitmain.org/foursquare"&gt; FourSquare &lt;/a&gt;  
pour son moteur de recherche de lieux qui
compte plus de 50 millions d'entrées. &lt;/p&gt; &lt;p&gt; Ce qui est intéressant pour un projet comme Grenouille est qu'Elastic Search
permet de faire des recherches par
 &lt;a href="http://short.faitmain.org/elasticsearch-facets"&gt; facettes &lt;/a&gt;  .
Les facettes permettent de faire des recherches puis d'aggréger les
occurences de résultats en fonction d'un ou plusieurs champs pour avoir
par exemple une moyenne. Dans notre cas par minute, heure, jour, semaine,
mois ou année. Cette fonctionnalité est un peu équivalente à un
 &lt;em&gt; SELECT AVG(TEMPERATURE) GROUP BY HOUR &lt;/em&gt;  en sql. &lt;/p&gt; &lt;p&gt; En stockant continuellement les relevés de température, pression
et humidité dans cette base, il devient donc possible de faire des requêtes pour
récupérer toute sorte de  &lt;em&gt; séries temporelles &lt;/em&gt; . &lt;/p&gt; &lt;p&gt; Elastic Search offre aussi le support de  &lt;a href="https://en.wikipedia.org/wiki/Cross-origin_resource_sharing" class="wikipedia"&gt; CORS &lt;/a&gt;  
(Cross-origin resource sharing) qui permet de construire une application
Javascript qui va faire directement des requêtes sur le moteur même si
ce dernier n'est pas déployé sur le même nom de domaine. &lt;/p&gt; &lt;p&gt; L'interface web de Grenouille n'est donc pas une application web
qui s'exécute coté serveur, mais du code Javascript qui se charge
dans le naviguateur et interagit avec ElasticSearch. &lt;/p&gt; &lt;p&gt; Pour l'affichage, Grenouille utilise  &lt;a href="http://short.faitmain.org/rickshaw-javascript"&gt; RickShaw &lt;/a&gt;  
qui est une librairie Javascript spécialisée dans l'affichage
de séries temporelles. &lt;/p&gt; &lt;p&gt; RickShaw est elle-même basée sur  &lt;a href="http://short.faitmain.org/d3js-data-driven"&gt; d3.js &lt;/a&gt;   un moteur de
visualisation de données qui est beaucoup utilisé dans la communauté
open source. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/rickshaw.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Rickshaw en action &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour résumer, RickShaw permet de faire de  &lt;em&gt; jolis &lt;/em&gt;  diagrammes en temps
réel sans difficultés. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="fonctionnement-de-grenouille" class="section"&gt; &lt;h2&gt;Fonctionnement de Grenouille &lt;a class="headerlink" href="#fonctionnement-de-grenouille"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Grenouille est organisé en deux parties: &lt;/p&gt; &lt;ol enumtype="arabic" prefix="" suffix="."&gt; &lt;li&gt; un script Python qui interroge la sonde et qui indexe le résultat dans
ElastiSearch. &lt;/li&gt; &lt;li&gt; Une application Javascript qui interroge ElasticSearch et affiche
les informations. &lt;/li&gt; &lt;/ol&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/grenouille.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Organisation de Grenouille &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; La partie indexation du script Python est basée sur la librairie
 &lt;a href="http://short.faitmain.org/pyelasticsearch-pyelasticsearch"&gt; pyelasticsearch &lt;/a&gt;   qui permet
d'indexer très simplement n'importe quel dictionnaire de données Python. &lt;/p&gt; &lt;p&gt; Le code d'indexation ressemble à cet extrait: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;pyelasticsearch&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ElasticSearch&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;datetime&lt;/span&gt;

&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;humidity&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;pressure&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;&amp;#39;temperature&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;17.3&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ElasticSearch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;http://0.0.0.0:9901&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#39;weather&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;sensor&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Ce code est appelé toute les 15 minutes. &lt;/p&gt; &lt;p&gt; La partie affichage est quant à elle un peu plus complexe, je ne vais
pas la détailler ici. &lt;/p&gt; &lt;p&gt; La partie la plus intéressante est la fonction qui envoie une requête
au serveur ElasticSearch, En voici un extrait qui permet d'afficher
la temperature par heure pour le 1 et 2 mai 2013: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt; &lt;span class="c1"&gt;// construction de la requête&lt;/span&gt;
&lt;span class="p"&gt;[...]&lt;/span&gt;

 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;match_all&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{}};&lt;/span&gt;
 &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;query&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;match&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
     &lt;span class="s2"&gt;&amp;quot;facets&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
         &lt;span class="s2"&gt;&amp;quot;facet_histo&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;date_histogram&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
             &lt;span class="s2"&gt;&amp;quot;key_field&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="s2"&gt;&amp;quot;value_field&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;temperature&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="s2"&gt;&amp;quot;interval&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;hour&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
             &lt;span class="s2"&gt;&amp;quot;facet_filter&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                       &lt;span class="s2"&gt;&amp;quot;range&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;gte&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;2013/05/01&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                                          &lt;span class="s2"&gt;&amp;quot;lte&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;2013/05/02&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                       &lt;span class="p"&gt;}&lt;/span&gt;
             &lt;span class="p"&gt;}&lt;/span&gt;
         &lt;span class="p"&gt;}&lt;/span&gt;
     &lt;span class="p"&gt;},&lt;/span&gt;
     &lt;span class="s2"&gt;&amp;quot;sort&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;date&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;order&amp;quot;&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;asc&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;}}],&lt;/span&gt;
     &lt;span class="s2"&gt;&amp;quot;size&amp;quot;&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
 &lt;span class="p"&gt;};&lt;/span&gt;

 &lt;span class="c1"&gt;// appel asynchrone&lt;/span&gt;
 &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
 &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;_async&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="p"&gt;[...]&lt;/span&gt;
&lt;span class="c1"&gt;// recuperation des resultats et affichage&lt;/span&gt;
&lt;span class="nx"&gt;_async_receive&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
   &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;series&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;series&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;facets&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;facet_histo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
     &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getHours&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
     &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;mean&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Number&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;toFixed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
     &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;line&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;time&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;mean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;};&lt;/span&gt;
     &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;line&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="p"&gt;});&lt;/span&gt;

   &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;sortbyx&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
   &lt;span class="nx"&gt;series&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="nx"&gt;chart&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
 &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="raspberry-pi" class="section"&gt; &lt;h2&gt;Raspberry-PI &lt;a class="headerlink" href="#raspberry-pi"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Passer tout le système sur le Raspberry-Pi est très simple. Je l'ai configuré
comme pour  &lt;a href="http://faitmain.org/volume-1/raspberry-jukebox.html"&gt; le projet de JukeBox &lt;/a&gt;  
du mois dernier, puis j'ai installé Java. &lt;/p&gt; &lt;p&gt; Oracle fourni une version spéciale embarqué et un
 &lt;a href="http://short.faitmain.org/getting-started"&gt; guide &lt;/a&gt;   d'installation. &lt;/p&gt; &lt;p&gt; Un peu refroidi par le besoin de donner mes infos personnelles pour
récupérer le logiciel, j'ai décidé d'utiliser le paquet  &lt;a href="http://short.faitmain.org/openjdk"&gt; OpenJDK &lt;/a&gt;  
disponible dans les repositories de Raspbian.  &lt;em&gt; OpenJDK &lt;/em&gt;  fait tourner ElasticSearch sans
erreurs, mais il est un peu plus lent. &lt;/p&gt; &lt;p&gt; Enfin, j'ai déployé un server  &lt;a href="http://short.faitmain.org/nginx"&gt; NGinx &lt;/a&gt;   qui se contente d'afficher la
page html statique qui contient les diagrammes Javascript. &lt;/p&gt; &lt;p&gt; Pour le reste de l'installation je fournis
un  &lt;a href="http://short.faitmain.org/grenouillemakefile-master"&gt; Makefile &lt;/a&gt;  
dans le code de Grenouille qui s'occupe d'installer ElasticSearch et
toutes les dépendances Python. &lt;/p&gt; &lt;p&gt; Extraits: &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="m"&gt;$(PYTHON) elasticsearch&lt;/span&gt;
       &lt;span class="k"&gt;$(&lt;/span&gt;PYTHON&lt;span class="k"&gt;)&lt;/span&gt; setup.py develop

&lt;span class="nf"&gt;elasticsearch&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
    curl -C - --progress-bar http://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-&lt;span class="k"&gt;$(&lt;/span&gt;ES_VERSION&lt;span class="k"&gt;)&lt;/span&gt;.tar.gz | tar -zx
    mv elasticsearch-&lt;span class="k"&gt;$(&lt;/span&gt;ES_VERSION&lt;span class="k"&gt;)&lt;/span&gt; elasticsearch
    chmod a+x elasticsearch/bin/elasticsearch
    mv elasticsearch/config/elasticsearch.yml elasticsearch/config/elasticsearch.in.yml
    cp elasticsearch.yml elasticsearch/config/elasticsearch.yml
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Une fois ElasticSearch et le script Python lancé sur le Raspberry-Pi, les
diagrammes vont commencer à se remplir. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/station/diags.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Grenouilles en action &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Et voila une première version d'une station météo tournant sur un Raspberry-Pi! &lt;/p&gt; &lt;p&gt; Tout le code source décrit dans cet article est disponible ici:  &lt;a href="http://short.faitmain.org/tarekziadegrenouille-github"&gt; https://github.com/tarekziade/grenouille &lt;/a&gt; &lt;/p&gt; &lt;p&gt; La fonctionnalité que je n'ai pas encore ajoutée pour rendre le code plus
générique est la récupération automatique de l'altitude
 &lt;a href="https://fr.wikipedia.org/wiki/G%C3%A9olocalisation#G.C3.A9olocalisation_par_adresse_IP_.28sur_internet.29" class="wikipedia"&gt; en fonction de l'addresse IP &lt;/a&gt;  ,
en utilisant une base de données de Géolocalisation. &lt;/p&gt; &lt;p&gt; Il en existe plusieurs, la plus connue étant celle de  &lt;a href="http://short.faitmain.org/maxmind-geolocation"&gt; MaxMind &lt;/a&gt;  . &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="limites-evolutions" class="section"&gt; &lt;h2&gt;Limites &amp; Evolutions &lt;a class="headerlink" href="#limites-evolutions"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le principal problème d'une station météo basé sur un Raspberry-PI et la
Yocto-Meteo est la consommation d'énergie. L'USB est un port très gourmand en
énergie et en branchant mon système complet sur une batterie lithium 3.7v en
6000 mAh et un panneau solaire censé charger la batterie la journée pour qu'elle
tienne le coup toute la nuit - je n'ai tenu que quelques heures... &lt;/p&gt; &lt;p&gt; Les puces Yoctopuce peuvent être coupées en deux afin de déporter les sondes
du port USB de quelques dizaines, voir centaines de mètre, mais ça n'enlève pas
la dépendance à une source d'énergie fixe. &lt;/p&gt; &lt;p&gt; Une évolution possible pour limiter la consommation serait de déporter la
base ElasticSearch sur un ordinateur dans la maison ou sur internet, et
de suspendre les ports USB pour ne les utiliser que toutes les 15 minutes
pour la récupération des valeurs. &lt;/p&gt; &lt;p&gt; Jonathan a écrit un article très intéressant à ce sujet dans ce numéro:
 &lt;a href="/volume-2/batterie.html"&gt; Passer un projet sur batterie &lt;/a&gt;  &lt;/p&gt; &lt;p&gt; Pour ma station météo, je reste quand même sur l'objectif de créér un
système autonome en énergie, qui puisse être interrogé sans fil -
donc la prochaine version de la station sera peut être réalisée avec
du matériel plus low-level. Donc peut être un Arduino, une puce radio
433mhz et une base déportée... &lt;/p&gt; &lt;p&gt; Dans tout les cas, pour une application indoor ou proche de la maison,
cette board est très simple à mettre en oeuvre et parfaite pour mettre
rapidement en place un projet sans avoir à jouer du fer à souder. &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category><category term="ecologie"></category></entry><entry><title>Surveillance de digues</title><link href="http://faitmain.org//volume-2/surveillance-digues.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Fritz van Deventer</name></author><id>tag:faitmain.org,2013-05-01://volume-2/surveillance-digues.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/écologie.html"&gt;Écologie&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; | &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Découverte &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/fritz_van_deventer.html"&gt;Fritz van Deventer&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/translation.png"&gt; &lt;/img&gt; &lt;strong&gt;Traduction&lt;/strong&gt;: &lt;a href="http://faitmain.org/auteurs/tarek_ziade.html"&gt;Tarek Ziadé&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Article conçu en Anglais pour Fait Main par Fritz van Deventer,
ingénieur chez Nelen &amp; Schuurmans, et traduit librement
par Tarek Ziadé. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; En Hollande, la sécurité relative au niveau de l'eau est probablement
un des problèmes majeurs auquel le pays doit faire face. En effet, 26%
du pays est en dessous du niveau de la mer, et cette surface hébèrge
60% de la population. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Ce problème est devenu un problème de sécurité national. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/digues/Grechtdijk2.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; source:  &lt;a href="http://short.faitmain.org/livedijk-utrecht"&gt; http://www.ijkdijk.nl/nl/livedijken/livedijk-utrecht &lt;/a&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Les digues sont les principales protections du pays contre l'eau. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; En 2013, mon entreprise  &lt;a href="http://short.faitmain.org/nelen-schuurmans"&gt; Nelen &amp; Schuurmans &lt;/a&gt;  
et l'association  &lt;a href="http://short.faitmain.org/ijkdijk"&gt; Ijkdijk &lt;/a&gt;  
(qui signifie  &lt;em&gt; Digue de calibration &lt;/em&gt;  en Hollandais) ont collaboré
pour mettre au point un système de surveillance automatisé. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; L'objectif est de rendre les digues communicantes. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="description-du-systeme" class="section"&gt; &lt;h2&gt;Description du système &lt;a class="headerlink" href="#description-du-systeme"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Une digue témoin a été construite par l'association  &lt;em&gt; IJkdijk &lt;/em&gt;  et a
été submergée volontairement pour qu'elle cède sous la pression
de l'eau. &lt;/p&gt; &lt;p&gt; Cette simulation a permis de récolter des mesures qui ont servi de
calibration pour mettre au point un système d'alerte qui
est capable de prévenir qu'une digue va céder  &lt;em&gt; bien avant &lt;/em&gt; 
que l'incident ne se produise. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/digues/DSC04627.JPG"&gt;&lt;/img&gt; &lt;span class="legend"&gt; source:  &lt;a href="http://short.faitmain.org/macrostability-ijkdijk"&gt; http://www.ijkdijk.nl/en/experiments/macrostability &lt;/a&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'objectif est d'équiper toutes les digues du pays avec des senseurs
et de récolter en continu et en temps réel les informations. Au jour
d'aujourd'hui, nous avons quatre digues déployées en production
en plus de la digue de test. &lt;/p&gt; &lt;p&gt; &lt;em&gt; IJkdijk &lt;/em&gt;  a placé dans chaque digue une multitudes de senseurs différents:
température, taux d'humidité du sol, acidité du sol, etc.
Ces senseurs sont gérés par le le  &lt;em&gt; Centre de données des digues &lt;/em&gt;   ou  &lt;em&gt; DDSC &lt;/em&gt; 
et vous trouverez plus de détails techniques sur leur site web:  &lt;a href="http://short.faitmain.org/ijkdijk"&gt; http://www.ijkdijk.nl/en &lt;/a&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/digues/fibres.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Fibres de mesure de l'humidité du sol. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Mais ce système pose un défi en terme de passage à l'échelle. Chaque digue produit
une quantité astronomique de données à traiter. &lt;/p&gt; &lt;p&gt; A  &lt;em&gt; Nelen &amp; Schuurmans &lt;/em&gt;  nous avons tenté de résoudre partiellement ce problème.
Avec le  &lt;em&gt; DDSC &lt;/em&gt; , nous avons construit un système pour stocker et afficher toutes
les données provenants des senseurs. &lt;/p&gt; &lt;p&gt; Nos serveurs de traitement peuvent réceptionner les données par plusieurs
moyens: un classique serveur FTP, un serveur TCP avec des connections
persistentes, ou encore via des importations de
fichiers XML. Pour résumer, nous acceptons toutes formes de transport en
fonction des contraintes, du moment que nous recevons des valeurs avec des
 &lt;em&gt; timestamps &lt;/em&gt; . &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/digues/sensors.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Récupération des donées &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Les données sont réceptionées et traitées via  &lt;a href="http://short.faitmain.org/rabbitmq-messaging"&gt; RabbitMQ &lt;/a&gt;  
puis stockées dans un cluster  &lt;a href="http://short.faitmain.org/apache-cassandra"&gt; Cassandra &lt;/a&gt;   et nous
utilisons une base de données  &lt;a href="http://short.faitmain.org/postgis-spatial"&gt; PostGIS &lt;/a&gt;  
pour mettre en cache les dernières valeurs reçues pour chaque digue. &lt;/p&gt; &lt;p&gt; Nous fournissons ensuite des services web  &lt;a href="https://fr.wikipedia.org/wiki/Rest" class="wikipedia"&gt; REST &lt;/a&gt;  
que nous avons construit avec Python et  &lt;a href="http://short.faitmain.org/framework-perfectionists"&gt; Django &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Utiliser Django pour des services web n'est peut être pas le meilleur choix,
mais comme ce framework est maîtrisé et apprécié par tout le monde dans
ce projet, nous sommes restés avec. &lt;/p&gt; &lt;p&gt; Comme nos API dépendent beaucoup de Django, nous avons aussi opté
pour  &lt;a href="http://short.faitmain.org/haystack-search"&gt; django-haystack &lt;/a&gt;   combiné
avec  &lt;a href="http://short.faitmain.org/apache-lucene-2"&gt; Apache Solr &lt;/a&gt;   pour offrir
un moteur de recherche. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="interface-web" class="section"&gt; &lt;h2&gt;Interface Web &lt;a class="headerlink" href="#interface-web"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Notre interface web récupère les données avec les API Rest de l'application
Django - et le plus gros travail consistait à trouver une bonne représentation
visuelle des données. &lt;/p&gt; &lt;p&gt; Réussir à synthétiser des millions de chiffres pour en faire une information
utile et simple n'a pas été une mince affaire, vu que les données sont
étalées dans le temps et l'espace. &lt;/p&gt; &lt;p&gt; Nous avons opté pour les visualisations suivantes: &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Avertissements en cas de dépassement de seuils &lt;/li&gt; &lt;li&gt; Diagrammes temporels et cartes &lt;/li&gt; &lt;li&gt; Recherche dans les données via Solr. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Les diagrammes temporels avaient le potentiel de devenir très denses,
étant donnée la quantité d'information pour chaque fenêtre de temps. &lt;/p&gt; &lt;p&gt; Nous avons utilisé l'algorithme de
 &lt;a href="https://fr.wikipedia.org/wiki/Algorithme_de_Douglas-Peucker" class="wikipedia"&gt; Douglas-Peucker &lt;/a&gt;  
pour simplifier les courbes sur des écrans basses résolutions.
Le code du client envoit sa résolution et la fenêtre de temps souhaitée au
serveur, qui lui retourne une liste de point à afficher. &lt;/p&gt; &lt;div class="pull-right margin-left"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/digues/220px-Douglas_Peucker.png"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Ramer-Douglas-Peucker (source: Wikipedia) &lt;/span&gt; &lt;/div&gt; &lt;p&gt; L'affichage de la carte a été complexe a mettre au point à cause de
la concentration de différents senseurs sur chaque digue. &lt;/p&gt; &lt;p&gt; Comment les classifier ? Comment réussir à naviguer sur cette carte
en comprenant ce qu'il s'y passe ? &lt;/p&gt; &lt;p&gt; Nous avons décidé de différencier les utilisateurs techniques
et non-techniques qui utilisent l'interface. La carte a des modes
d'affichages prédéfinis en fonction de l'utilisateur connecté. &lt;/p&gt; &lt;p&gt; Certains modes prédéfinis offrent même un affichage carte/diagramme
qui permet de faciliter certaines lectures et interprétations. &lt;/p&gt; &lt;p&gt; Le client web a été écrit avec  &lt;a href="http://short.faitmain.org/backbonejs"&gt; Backbone.js &lt;/a&gt;  
et l'extension  &lt;a href="http://short.faitmain.org/marionettejs-scalable"&gt; Marionette.js &lt;/a&gt;  &lt;/p&gt; &lt;p&gt; Ces outils ont été une découverte pour notre équipe puisque nous avions
l'habitude de faire tout le templating et le rendu des pages coté
serveur jusqu'ici. &lt;/p&gt; &lt;p&gt; Mais ce projet était l'occasion d'apprendre et de capitaliser sur
ces nouvelles techniques. Les appels asynchrones en JSON et l'architecture
 &lt;a href="https://en.wikipedia.org/wiki/MVC" class="wikipedia"&gt; MVC &lt;/a&gt;   de Backbone.js nous ont vraiment
beaucoup aidé, en particulier
sur toutes les vues d'affichage de séries temporelles. &lt;/p&gt; &lt;p&gt; Malgré tout, le débat sur ce qui appartient au coté client et ce qui doit
rester coté serveur fait encore rage dans notre équipe et est loin d'être
terminé. Surtout que Backbone est un framework très verbeux. &lt;/p&gt; &lt;p&gt; Peut être qu' &lt;a href="http://short.faitmain.org/angularjs-superheroic"&gt; Angular.js &lt;/a&gt;   aurait été un choix plus judicieux. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="conclusion" class="section"&gt; &lt;h2&gt;Conclusion &lt;a class="headerlink" href="#conclusion"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Nous sommes toujours en train de chercher la solution la plus  &lt;em&gt; simple &lt;/em&gt;  pour
l'affichage de données temps réel dans une application web - que ce soit
pour nos utilisateurs techniques ou non techniques. &lt;/p&gt; &lt;p&gt; Mais nous avons déjà fait de grandes avancées: &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; l'introduction de diagrammes prédéfinis au lieu du chaos que peut
représenter un  &lt;em&gt; "Nous voulons un Excel dans notre navigateur" &lt;/em&gt; ; &lt;/li&gt; &lt;li&gt; l'introduction de  &lt;em&gt; Douglas-Peucker &lt;/em&gt;  qui nous a permis de limiter le
nombre de points à afficher au nombre de pixels disponibles sur l'écran; &lt;/li&gt; &lt;li&gt; n'afficher que l'information nécessaire. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Retrouvez des informations sur ces projets à  &lt;a href="http://short.faitmain.org/github"&gt; http://github.com/ddsc &lt;/a&gt;  et  &lt;a href="http://short.faitmain.org/http://dijkdata.nl"&gt; http://dijkdata.nl &lt;/a&gt; 
Tout notre code est sous la licence  &lt;a href="https://fr.wikipedia.org/wiki/Licence_MIT" class="wikipedia"&gt; MIT &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; Vous pouvez aussi regarder une
 &lt;a href="http://short.faitmain.org/ijkdijk-all-in-one"&gt; vidéo qui montre la digue de tests en action &lt;/a&gt;  . &lt;/p&gt;       &lt;/div&gt;&lt;/p&gt;</summary><category term="écologie"></category><category term="informatique"></category><category term="électronique"></category></entry><entry><title>Table basse pliante</title><link href="http://faitmain.org//volume-2/table_basse.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Christophe Seyve</name></author><id>tag:faitmain.org,2013-05-01://volume-2/table_basse.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/bricolage.html"&gt;Bricolage&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/christophe_seyve.html"&gt;Christophe Seyve&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="introduction-une-table-basse-escamotable" class="section"&gt; &lt;h2&gt;Introduction : une table basse escamotable &lt;a class="headerlink" href="#introduction-une-table-basse-escamotable"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; J'avais pour idée de faire une petite table basse pliante, en table d'appoint
pour prendre l'apéro, faire manger les enfants, ... le tout avec des matériaux
de récupération, glanés dans les rues le mardi soir, veille du ramassage des
encombrants dans mon quartier. &lt;/p&gt; &lt;p&gt; Dans mon idée, une fois pliée, la table devait pouvoir être glissée derrière le
canapé, donc avoir un plateau désolidarisable des pieds, et les pieds
"compactables". De fait, le casse-tête était comment avoir des pieds à la fois
stables, une structure pliable et qu'elle soit un minimum design. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="les-materiaux-et-le-materiel" class="section"&gt; &lt;h2&gt;Les matériaux et le matériel &lt;a class="headerlink" href="#les-materiaux-et-le-materiel"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; En mode "DIY" (Do-It-Yourself, Fais-Le-Toi-Même pour les non anglophones) donc,
de A à Z, de la conception à la réalisation. Avec une contrainte importante :
je n'avais comme "outils électroportatifs" qu'une perceuse et une
scie-sauteuse. J'ai complété par une ponceuse excentrique quand j'ai découvert
l'ampleur du travail de ponçage à faire sur le plateau trouvé dans la rue... &lt;/p&gt; &lt;p&gt; L'idée était d'utiliser des grosses lattes de sommier pour lit simple,
trouvées dans la rue. Chacune mesurait 800 x 69 x 18 mm. &lt;/p&gt; &lt;p&gt; Et un plateau trouvé dans la rue, de dimensions 75x60 cm. &lt;/p&gt; &lt;p&gt; A compléter par des petites fournitures : vis, équerres, ... vernis. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="le-concept" class="section"&gt; &lt;h2&gt;Le concept &lt;a class="headerlink" href="#le-concept"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; C'est en feuilletant un magazine de mobilier design que le déclic est venu :
faire rejoindre les pieds au centre, formant la grande barre d'un "y", la
petite assurant le support du plateau. Un arc-boutant en bois. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/TableBasse-Declic_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; De l'idée au schéma initial &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce qui avec une configuration à 4 pieds donnera ça : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Final_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Résultat final &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Et du coup, on peut avoir un axe diagonal avec deux pieds opposés fixés entre
eux, et les deux autres qui se rabattent vers les deux fixes pour les ranger. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Pied-pliants-trous_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Deux pieds formant l'axe central + 2 pieds pivotants &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Vu que le plateau est amovible, et et que deux pieds pivotent, il faut
solidariser le tout quand la table est en place, sinon le plateau peut glisser
et les pieds se refermer. Et c'est la cata. &lt;/p&gt; &lt;p&gt; La solution consiste à faire des trous dans les pieds : un sur chaque pied
pivotant, et deux sur les pieds fixes, au centre, puis à mettre des têtes de
vis dépassant sous le plateau. Les têtes viennent s'encastrer dans les trous
des pieds : le plateau ne peut plus glisser, et les pieds ne peuvent plus
pivoter. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/plateau_et_pieds_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les têtes de vis à aligner avec les trous des pieds &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pas la peine d'en mettre sur les contre-forts, cela ne ferait qu'ajouter des
contraintes à l'ensemble. &lt;/p&gt; &lt;p&gt; Y'a plus qu'à remonter ses manches... &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="la-realisation" class="section"&gt; &lt;h2&gt;La réalisation &lt;a class="headerlink" href="#la-realisation"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div id="materiel-et-materiaux" class="section"&gt; &lt;h2&gt;Matériel et matériaux &lt;a class="headerlink" href="#materiel-et-materiaux"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Donc au final, on a besoin de : &lt;/p&gt; &lt;ul bullet="*"&gt; &lt;li&gt; Matériel : une scie (-sauteuse pour ma part, mais manuelle ou circulaire doivent marcher de même, voire mieux), une perceuse et des mèches de 3, 8 et 10mm, une ponceuse, papier de verre, paille de fer, et pinceau pour vernir. &lt;/li&gt; &lt;li&gt; Matériaux : 4 lattes de sommier de 80cm, 4 petites équerres, des vis (auto-taraudeuses pour éviter de prépercer) de 20mm, 40mm et 75mm, et en fonction du plateau : vernis, huile ou vitrificateur. &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div id="separer-les-planches" class="section"&gt; &lt;h2&gt;Séparer les planches &lt;a class="headerlink" href="#separer-les-planches"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Les planches étaient fixées à deux rubans de tissus par des agrafes, donc à
enlever avec un tournevis plat, et de la patience. Les agrafes et l'opération
ont tendance à marquer le bois, donc il faut faire attention. &lt;/p&gt; &lt;/div&gt; &lt;div id="les-decoupes" class="section"&gt; &lt;h2&gt;Les découpes &lt;a class="headerlink" href="#les-decoupes"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; La coupe en 'y' permet de réutiliser le bout coupé, quel que soit l'angle de
coupe. Après quelques mesures, il fallait que j'utilise un angle de près de 45
degrés pour avoir une table suffisamment haute pour l'usage. 45°, ça tombe
bien, c'est plus facile à mesurer ! &lt;/p&gt; &lt;p&gt; Et donc voici les découpes : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Plans_table_basse-pieds_fixes_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Découpe pour les 2 pieds fixes &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Plans_table_basse-pieds_pivotants_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Découpe pour les 2 pieds pivotants &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="assemblage" class="section"&gt; &lt;h2&gt;Assemblage &lt;a class="headerlink" href="#assemblage"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; &lt;em&gt; Fixation des contre-forts &lt;/em&gt; &lt;/p&gt; &lt;p&gt; Difficile de percer droit sans perceuse à colonne, donc pour fixer le petit
bras du 'y' sur le grand, un pré-trou petit (3mm) puis un plus large (diamètre
de la tête de vis) qui le rejoint depuis l'autre côté. Puis des chevilles pour
l'empêcher de pivoter. Au final, je n'ai pas trouvé de cheville de récup', mais
ça tient bien quand même comme ça ! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Plans_table_basse-assemblage_contrefort_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Pré-trous. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Plans_table_basse-assemblage_contrefort2_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Assemblage. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;em&gt; Axe diagonal = pieds fixes &lt;/em&gt; &lt;/p&gt; &lt;p&gt; Pour fixer les deux pieds de l'axe fixe diagonal, j'ai réutilisé une chute, en
découpant un petit morceau triangulaire, dans lequel j'ai mis deux vis de part
et d'autre (traits noirs) pour figer le bas. Elles sont complétées par une
troisième vis plus longue passée par le côté. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Plans_table_basse-assemblage_pieds_fixes_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Bidouille mais assez esthétique finalement. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;em&gt; Pivots des pieds mobiles &lt;/em&gt; &lt;/p&gt; &lt;p&gt; Pour le pliage des deux pieds mobiles, je n'ai pas trouvé de charnière adéquate
au magasin de bricolage du coin, du coup j'ai utilisé des petites équerres
(encore moins cher !) : &lt;/p&gt; &lt;p&gt; Du coup, c'est pas très symétrique, elle ne sera pas parfaite une fois pliée ! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Equerres_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Equerres &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Sur le pied, il faut faire deux fentes à la scie-sauteuse, puis les élargir
(salement, à la scie sauteuse aussi), puis un pré-trou et une grande vis pour
passer dans les trous des équerres. C'est pas très beau dans le principe, mais
ça marche ! &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Axes_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Pieds sur l'axe des équerres &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;em&gt; Plateau &lt;/em&gt; &lt;/p&gt; &lt;p&gt; Le plateau est aussi de récupération, poncé (il en avait bien besoin !!) puis
vitrifié. &lt;/p&gt; &lt;p&gt; Commencer par faire les trous sur les pieds : 2 au centre de l'axe
fixe, de part et d'autre de la séparation, puis un sur chaque contre-fort des
pieds pivotants. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Trous_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Pieds sur l'axe des équerres &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour positionner les vis, dessiner au crayon les deux diagonales sous le
plateau, puis le centre. Placer les pieds à l'envers sur la table, positionner
les vis en face des trous. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/plateau_et_pieds_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; &lt;em&gt; Astuce : &lt;/em&gt;  faire dépasser les vis au centre du plateau plus que celles sur
les bords, cela permet de soulever un coin du plateau sans déboîter le
centre. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; On peut ajouter des petites cales au besoin, comme des patins de chaise en
feutre, pour éviter les jeux dûs aux usinages et assemblages approximatifs. &lt;/p&gt; &lt;p&gt; Pour monter la table, il n'y a plus qu'à aligner vis et trous, et ainsi le
plateau ne glisse plus, et les pieds ne se referment pas. &lt;/p&gt; &lt;p&gt; Très peu de chutes à la fin : il ne reste que les coins et les morceaux rognés
sur les pieds mobiles. Optimisation maximale. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/Chutes_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Même pas de quoi faire un Tangram ! &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Et voilà le résultat final : &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/table_basse/FinalAvantApres_w600.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Avant/après montage &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il n'y a plus qu'à prendre l'apéro ou un petit café ! &lt;/p&gt;       &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;</summary><category term="bricolage"></category></entry><entry><title>XBee &amp; Arduino</title><link href="http://faitmain.org//volume-2/xbee-arduino.html" rel="alternate"></link><updated>2013-05-01T00:00:00Z</updated><author><name>Jérôme Abel</name></author><id>tag:faitmain.org,2013-05-01://volume-2/xbee-arduino.html/</id><summary type="html">&lt;p&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/info.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/électronique.html"&gt;Électronique&lt;/a&gt; | &lt;a href="http://faitmain.org/informatique.html"&gt;Informatique&lt;/a&gt; &lt;img class="subst" src="http://cnd.faitmain.org/media/flash.png"&gt; &lt;/img&gt; &lt;strong&gt;Niveau&lt;/strong&gt;: Vulgarisation,moyen &lt;img class="subst" src="http://cnd.faitmain.org/media/pen.png"&gt; &lt;/img&gt; &lt;a href="http://faitmain.org/auteurs/jerome_abel.html"&gt;Jérôme Abel&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/abeille.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; "Bee" pour abeille &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt; Quand il s'agit de concevoir des systèmes embarqués, interactifs ou bien quand
des objets doivent communiquer entre eux, plusieurs techniques de communication
sont envisageables. Nous explorerons ici le protocole  &lt;a href="http://fr.wikipedia.org/wiki/ZigBee" class="wikipedia"&gt; Zigbee &lt;/a&gt;   qui permet de communiquer par ondes
radio, c'est-à-dire sans fil. Je m'efforcerai dans un premier temps de
présenter les caractéristiques de ce protocole et d'éviter certaines
confusions. Ensuite, je présenterais des cas pratiques, avec et sans la carte
Arduino. Pour en savoir plus sur la carte Arduino, vous pouvez consulter ma
page  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste"&gt; Arduino &lt;/a&gt;  . À noter que ces cas
pratiques ne concernent pour l'instant (01/2013) que la série 1 du module XBee.
Nous aborderons des domaines variés faisant appel à des notions plus ou moins
avancées en réseaux informatiques. Loin d'être un obstacle, ce sera l'occasion
d'apporter quelques éléments de compréhension dans l'apprentissage classique
des systèmes informatiques. N'hésitez pas à me  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-1"&gt; contacter &lt;/a&gt;   pour me faire part de vos remarques,
améliorer ce document, rectifier certaines erreurs. &lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="well note"&gt; &lt;p&gt; Cet article est une version un peu réduite de celui-ci :
 &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-2"&gt; http://jeromeabel.net/ressources/xbee-arduino &lt;/a&gt; . La  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-3"&gt; partie 2 &lt;/a&gt;   notamment, concernant
les réseaux informatiques, ne sera pas retranscrite ici pour alléger l'article. &lt;/p&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div class="pull-right margin-left"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Le module XBee &lt;/span&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="presentation-du-xbee" class="section"&gt; &lt;h2&gt;Présentation du XBee &lt;a class="headerlink" href="#presentation-du-xbee"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt;  &lt;p&gt; Les produits MaxStream XBee™ sont des modules de communication sans fil très
populaires, fabriqués par l'entreprise  &lt;a href="http://short.faitmain.org/expert-international"&gt; Digi International &lt;/a&gt;  . Ils ont été  &lt;a href="http://short.faitmain.org/maxstream-premiere"&gt; certifiés &lt;/a&gt;   par la communauté
industrielle  &lt;a href="http://short.faitmain.org/zigbee-alliance"&gt; ZigBee Alliance &lt;/a&gt;   en 2006 après le
 &lt;a href="http://short.faitmain.org/international-acquires"&gt; rachat de MaxStream &lt;/a&gt;   par
Digi International. La certification  &lt;a href="http://fr.wikipedia.org/wiki/ZigBee" class="wikipedia"&gt; Zigbee &lt;/a&gt;   se base sur le standard  &lt;a href="http://fr.wikipedia.org/wiki/802.15.4" class="wikipedia"&gt; IEEE 802.15.4 &lt;/a&gt;   qui définit les fonctionnalités et
spécifications des réseaux sans fil à dimension personnelle (Wireless Personal
Area Networks : WPANs). Nous verrons plus loin chacun des termes qui peuvent
poser problème. &lt;/p&gt; &lt;p&gt; Les principales caractéristiques du XBee : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; fréquence porteuse : 2.4Ghz &lt;/li&gt; &lt;li&gt; portées variées : assez faible pour les XBee 1 et 2 (10 - 100m), grande pour le XBee Pro (1000m) &lt;/li&gt; &lt;li&gt; faible débit : 250kbps &lt;/li&gt; &lt;li&gt; faible consommation : 3.3V @ 50mA &lt;/li&gt; &lt;li&gt; entrées/sorties : 6 10-bit ADC input pins, 8 digital IO pins &lt;/li&gt; &lt;li&gt; sécurité : communication fiable avec une clé de chiffrement de 128-bits &lt;/li&gt; &lt;li&gt; faible coût : ~ 25€ &lt;/li&gt; &lt;li&gt; simplicité d'utilisation : communication via le port série &lt;/li&gt; &lt;li&gt; ensemble de commandes AT et API &lt;/li&gt; &lt;li&gt; flexibilité du réseau : sa capacité à faire face à un nœud hors service ou à
intégrer de nouveaux nœuds rapidement &lt;/li&gt; &lt;li&gt; grand nombre de nœuds dans le réseau : 65000 &lt;/li&gt; &lt;li&gt; topologies de réseaux variées : maillé, point à point, point à multipoint &lt;/li&gt; &lt;/ul&gt; &lt;div id="applications" class="section"&gt; &lt;h2&gt;Applications &lt;a class="headerlink" href="#applications"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le ZigBee semble avoir été conçu pour réaliser ce qu'on appelle l' &lt;a href="http://fr.wikipedia.org/wiki/Internet_des_objets" class="wikipedia"&gt; Internet des
objets &lt;/a&gt;   : un ensemble
d'objets communiquants voire "autonomes", une extension d'Internet aux objets
physiques. La  &lt;a href="http://fr.wikipedia.org/wiki/Domotique" class="wikipedia"&gt; domotique &lt;/a&gt;   est
l'exemple le plus parlant. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/domotique.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple d'une maison utilisant la domotique &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Sans entrer dans les détails, car ce n'est pas le propos ici, la vision d'un
monde où tout doit être connecté, du frigo aux enfants, se rapproche pour ma
part plus du cauchemar que du rêve. Les technologies de communication peuvent
être utilisées par des groupes mercantiles et cyniques qui font
reculer les principes démocratiques. Heureusement, des artistes s'approprient
ces technologies et les utilisent à des fins plus poétiques. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="xbee/jie-qi.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="xbee/robotic-drums.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Jie Qi messenger &lt;/td&gt; &lt;td&gt; Robotics Drums &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt; Ici un couple d'oiseaux de papier communiquent ensemble. Quand l'un est
manipulé, l'autre s'allume ( &lt;a href="http://short.faitmain.org/origami-messenger"&gt; Jie Qi messenger &lt;/a&gt;  ). &lt;/p&gt; &lt;p&gt; Dans  &lt;a href="http://short.faitmain.org/sweet-studio"&gt; Robotics drums &lt;/a&gt;  ,
des servo-moteurs contrôlés à distance tapent sur 18 percussions Darbukas pour
créer des rythmes inédits dans la ville. &lt;/p&gt; &lt;hr/&gt; &lt;p&gt; Une autre application peut s'avérer très utile : programmer à distance une
carte Arduino. D'habitude on relie sa carte par câble USB, mais
comment faire quand la carte est située à trois mètres de hauteur comme c'est
le cas dans mon projet  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-4"&gt; Chimères Orchestra &lt;/a&gt;   ? La programmation à distance
est donc la solution :  &lt;a href="http://short.faitmain.org/http://www.faludi.com/itp_coursework/meshnetworking/xbee/XBee_program_Arduino_wireless.html"&gt; programming Arduino Wirelessly &lt;/a&gt;  . &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/programming-arduino.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Programmer une Arduino à distance &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="pourquoi-choisir-le-sans-fil" class="section"&gt; &lt;h2&gt;Pourquoi choisir le sans fil ? &lt;a class="headerlink" href="#pourquoi-choisir-le-sans-fil"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; À première vue, le sans-fil présente bien des avantages. Il permet d'éviter
d'encombrer un espace de travail, d'équiper des appareils mobiles, de
communiquer dans des endroits inacessibles. Cependant, il faut aussi prendre
en considération d'autres paramètres : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; La communication sans fil ne sera jamais aussi fiable qu'une communication
filaire. Le signal peut être déformé par d'autres ondes et par des obstacles. &lt;/li&gt; &lt;li&gt; Par conséquent, commencez toujours à tester votre système avec une
communication filaire. &lt;/li&gt; &lt;li&gt; À moins de récupérer l'énergie des ondes électromagnétiques ambiantes ( &lt;a href="http://short.faitmain.org/powerpediafree-energy"&gt; Free
Energy &lt;/a&gt;  ), vous aurez
toujours besoin d'un fil pour alimenter votre module. &lt;/li&gt; &lt;li&gt; L'environnement semble aujourd'hui saturé d'ondes électromagnétiques, on
parle de  &lt;a href="http://fr.wikipedia.org/wiki/Pollution_%C3%A9lectromagn%C3%A9tique" class="wikipedia"&gt; pollution électromagnétique &lt;/a&gt;  . Le
XBee génère des radiations électromagnétiques, alors pourquoi en rajouter ? &lt;/li&gt; &lt;li&gt; La communication n'est pas 1-1 entre l'émetteur et le récepteur. En effet les
ondes radio rayonnent en cercle autour de l'émetteur. Seuls les appareils
décryptant le bon protocole peuvent différencier les informations provenant
d'un module Zigbee, d'un module Bluetooth ou de routeurs Wi-Fi, pourtant tous
modulés par la même fréquence de 2,4Ghz. &lt;/li&gt; &lt;/ul&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/benjamin-gaulon.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Projet 2.4Ghz de Banjamin Gaulon &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Par exemple, l'artiste Benjamin Gaulon démontre dans son projet  &lt;a href="http://short.faitmain.org/benjamin-gaulon"&gt; 2.4Ghz &lt;/a&gt;   qu'il est possible de recevoir
dans l'espace public le signal des vidéos de surveillance sensé rester privé… &lt;/p&gt; &lt;p&gt; //Note : certains éléments de cette rubrique s'inspirent de la page 178 du
livre  &lt;a href="http://short.faitmain.org/making-things"&gt; Making Things Talk &lt;/a&gt;  
de Tom Igoe.// &lt;/p&gt; &lt;/div&gt; &lt;div id="wi-fi-bluetooth-zigbee" class="section"&gt; &lt;h2&gt;Wi-Fi / Bluetooth / ZigBee &lt;a class="headerlink" href="#wi-fi-bluetooth-zigbee"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/wireless-techniques.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Comparaisons des principaux protocoles de communication sans fils &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="xbee-ou-zigbee" class="section"&gt; &lt;h2&gt;XBee ou Zigbee ? &lt;a class="headerlink" href="#xbee-ou-zigbee"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; &lt;strong&gt; Bee &lt;/strong&gt;  signifiant "abeille", le choix du nom donne l'image qu'il peut y avoir
plusieurs petits modules connectés ensemble comme une colonie d'abeilles. Au
début, on peut confondre les termes XBee et ZigBee. En fait, comme expliqué au
début de l'article, le  &lt;strong&gt; ZigBee &lt;/strong&gt;  est un protocole de communication qui
s'appuie sur le travail du groupe IEEE 802.15.4 et est défini par le groupe de
professionnels  &lt;em&gt; ZigBee Alliance &lt;/em&gt; . Le  &lt;strong&gt; XBee &lt;/strong&gt;  est une marque, un produit qui
utilise le protocole ZigBee. Do you bien compris ? &lt;/p&gt; &lt;div class="pull-right margin-left"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/bluetooth-bee.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple d'un module Bluetooth utilisant la même forme que les modules XBee &lt;/span&gt; &lt;/div&gt; &lt;p&gt; Le XBee est devenu si populaire que sa forme si particulière est aujourd'hui
reprise par des fabricants de puces Bluetooth. Comme il existe beaucoup de
shields Arduinos et d'adaptateurs XBee, cela sera sans doute compatible avec
les puces Bluetooth. &lt;/p&gt; &lt;/div&gt; &lt;div id="zigbee-et-802-15" class="section"&gt; &lt;h2&gt;ZigBee et 802.15 &lt;a class="headerlink" href="#zigbee-et-802-15"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/zigbee-architecture.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Architecture du XBee &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Dans cette image, on voit bien la répartition des rôles entre le standard
802.15 et le protocole ZigBee. Tout cela est expliqué dans la partie qui traite
des réseaux, des protocoles et des couches du modèle OSI, sur  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-3"&gt; mon site &lt;/a&gt;  . &lt;/p&gt; &lt;/div&gt; &lt;div id="series-1-et-2" class="section"&gt; &lt;h2&gt;Séries 1 et 2 ? &lt;a class="headerlink" href="#series-1-et-2"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Plusieurs produits XBee existent, ce qui peut créer quelques confusions. Il
faut retenir qu'il y a deux catégories de XBee :  &lt;strong&gt; la série 1 et la série 2 &lt;/strong&gt; .
Les modules de la série 1 ont souvent un "802.15.4" qui s'adossent à leurs
noms. Les modules de la série 2 sont disponibles en plusieurs versions :  &lt;strong&gt; XBee
ZNet 2.5 &lt;/strong&gt;  (obsolète), le  &lt;strong&gt; ZB &lt;/strong&gt;  (l'actuel) et le  &lt;strong&gt; 2B &lt;/strong&gt;  (le plus récent). Vous
avez aussi des  &lt;strong&gt; XBee Pro &lt;/strong&gt; , qui font la même chose, mais avec de plus grandes
capacités, notamment la portée qui semble pouvoir aller jusqu'à 1000 mètres !
Pour en savoir plus, télécharger le tableau de comparaison des modules XBee :
 &lt;a href="http://short.faitmain.org/3490"&gt; http://www.digi.com/pdf/chart_XBee_rf_features.pdf &lt;/a&gt; . &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-series.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Tableau de comparaison des séries 1 et 2 &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce qu'il faut retenir : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;strong&gt; les modules des séries 1 et 2 ne sont pas compatibles entre eux &lt;/strong&gt;  ; &lt;/li&gt; &lt;li&gt; la portée et la consommation sont sensiblement les mêmes ; &lt;/li&gt; &lt;li&gt; le nombre
d'entrées et sorties est différent et surtout  &lt;strong&gt; la série 2 ne possède pas de
sorties analogiques PWM &lt;/strong&gt;  ; &lt;/li&gt; &lt;li&gt; les  &lt;a href="http://fr.wikipedia.org/wiki/Topologie_de_reseau" class="wikipedia"&gt; topologies de réseaux &lt;/a&gt;   possibles ne sont pas
les mêmes. Avec la série 1, l'architecture est simple : point à point
(//pair//) ou multipoint (//star//). La  &lt;strong&gt; série 2 permet en plus de créer des
réseaux plus complexes &lt;/strong&gt;  : maillés (//mesh//) ou en "arbre" (//cluster
tree//). &lt;/li&gt; &lt;/ul&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/zigbee-topologies.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Topologies des réseaux XBee &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="antennes" class="section"&gt; &lt;h2&gt;Antennes &lt;a class="headerlink" href="#antennes"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Vous aurez aussi à choisir le type d'antennes du module. En effet, les ondes radios ont besoin d'antennes pour émettre et recevoir les signaux. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-antennas.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les différents types d'antennes &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Ce qu'il faut retenir : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;strong&gt; wire &lt;/strong&gt;  : simple, radiations omnidirectionnelles ; &lt;/li&gt; &lt;li&gt; &lt;strong&gt; chip &lt;/strong&gt;  : puce plate
en céramique, petite, transportable (pas de risques de casser l'antenne),
radiations cardioïdes (le signal est atténué dans certaines directions) ; &lt;/li&gt; &lt;li&gt; &lt;strong&gt; U.FL &lt;/strong&gt;  : une antenne externe n'est pas toujours nécessaire; &lt;/li&gt; &lt;li&gt; &lt;strong&gt; RPSMA &lt;/strong&gt;  : plus gros que le connecteur  &lt;em&gt; U.FL &lt;/em&gt; , permet de placer son antenne à
l'extérieur d'un boîtier. &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div id="communication-avec-l-ordinateur" class="section"&gt; &lt;h2&gt;Communication avec l'ordinateur &lt;a class="headerlink" href="#communication-avec-l-ordinateur"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-explorer.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Connecter le XBee à l'ordinateur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour établir une communication avec l'ordinateur, il y a deux options :
l'assemblage de différents éléments comme sur l'image ou le XBee USB Explorer.
J'ai choisi la première option car cela était un peu moins cher et plus flexible.
L'inconvénient est que ça nécessite un peu de soudure (3 minutes) et un petit
montage sur plaque à essais. Bref, cela revient au même. &lt;/p&gt; &lt;p&gt; La communication en direct sans passer par une Arduino vous permet de
configurer rapidement votre XBee. On verra plus loin dans les cas pratiques
qu'on peut aussi configurer le module en le branchant à l'Arduino. Donc se
procurer un explorateur n'est pas indispensable, mais c'est à conseiller pour
débuter car c'est tout de même plus simple. &lt;/p&gt;  &lt;p&gt; La communication entre l'ordinateur et le XBee se fait via une liaison série,
que je détaille dans la  &lt;a href="http://short.faitmain.org/jeacuterocircme-artiste-3"&gt; partie 2 &lt;/a&gt;  . &lt;/p&gt; &lt;/div&gt; &lt;div id="alimentation" class="section"&gt; &lt;h2&gt;Alimentation &lt;a class="headerlink" href="#alimentation"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-supply-voltage.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Alimentation du XBee &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'alimentation doit être comprise entre 2,8V et 3,4V. Dans mes montages
j'utilise l'alimentation stabilisée 3.3V. Dans d'autres  &lt;a href="http://short.faitmain.org/802154-digital"&gt; exemples &lt;/a&gt;  ,
il semblerait qu'assembler deux piles 1,5V ensemble soit suffisant. &lt;/p&gt; &lt;p&gt; Pour être plus autonome, on peut trouver des montages sur le Web avec le
régulateur de tension LM7833 qui sort directement une tension de 3,3V ou bien
avec le LM317 qui permettrait avec des valeurs de résistances adaptées
d'obtenir ce que l'on souhaite, mais je ne l'ai pas testé. &lt;/p&gt; &lt;table class="table"&gt;   &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="xbee/LM7833.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;td&gt; &lt;div class="row-fluid"&gt; &lt;img class="centered span12" src="xbee/LM317.jpg"&gt; &lt;/img&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; Régulateur LM7833 &lt;/td&gt; &lt;td&gt; Régulateur LM317 &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;div id="materiel-necessaire" class="section"&gt; &lt;h2&gt;Matériel nécessaire &lt;a class="headerlink" href="#materiel-necessaire"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Vous trouverez une liste intéressante de magasins en ligne sur  &lt;a href="http://short.faitmain.org/acheter-composant"&gt; codelab.fr/177 &lt;/a&gt;  . Je vous conseille de prendre tout dans le même
magasin pour limiter les frais de transports et en France ou en Europe pour
éviter les taxes (TVA) qui ne sont pas incluses dans certains pays, je pense
surtout aux magasins situés aux États-Unis. En gros, essayez d'éviter Sparkfun. &lt;/p&gt; &lt;p&gt; Synthèse de ce dont nous aurons besoin : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/trace-antenna"&gt; Modules XBee &lt;/a&gt;   x 2 (au moins 2 pour créer une connection !) : série 1 ou 2, antennes filaires ou à puce &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/explorer-sparkfun"&gt; XBee Explorer USB &lt;/a&gt;   (Platine d'interface USB pour modules "XBee") : en option si vous choisissez la carte FT232 &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/breakout-board"&gt; Breakout Board for FT232RL USB to Serial &lt;/a&gt;   (Module "FTDI Basic Breakout" - 3,3V) &lt;/li&gt; &lt;li&gt; Câble mini-USB/USB &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/breakout-board-1"&gt; Breakout board XBee &lt;/a&gt;   x 2 (Platine d'interface pour modules "XBee") &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/10pin-socket"&gt; 2mm XBee socket &lt;/a&gt;   x 2 &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/connecteur-mh100"&gt; Break away headers &lt;/a&gt;   x 1 &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/boite-ponts"&gt; Fils pré-découpés de prototypages &lt;/a&gt;   x 1 &lt;/li&gt; &lt;li&gt; Plaques à essais x 2 (solderless boards) &lt;/li&gt; &lt;li&gt; Potentiomètres 10K &lt;/li&gt; &lt;li&gt; LEDs x 4 (n'importe lesquelles) &lt;/li&gt; &lt;li&gt; Bouton poussoir x 1 &lt;/li&gt; &lt;li&gt; Résistances : 10K, 330 Ohms &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/coupleur-piles"&gt; Coupleurs deux piles 1.5V &lt;/a&gt;    x 2 &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/breadboard-power"&gt; Breadboard Power Supply 5V/3.3V &lt;/a&gt;   (si besoin) &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/cordon-alimentation"&gt; Connecteur embase jack/T pour pile 9V &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; Pile 9V &lt;/li&gt; &lt;li&gt; Piles 1.5V x 2 &lt;/li&gt; &lt;li&gt; Cartes Arduino x 2 &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/shield-sparkfun"&gt; XBee Shield &lt;/a&gt;   (si besoin) &lt;/li&gt; &lt;/ul&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-power.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de réalisation pour voir comment tout cela s'articule &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="configuration" class="section"&gt; &lt;h2&gt;Configuration &lt;a class="headerlink" href="#configuration"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Une fois le matériel acheté, il ne reste plus qu'à assembler notre premier
montage, à établir une connexion avec l'ordinateur et à connaître la syntaxe
pour configurer le module XBee. &lt;/p&gt; &lt;div id="montage" class="section"&gt; &lt;h2&gt;Montage &lt;a class="headerlink" href="#montage"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-ftdi.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage XBee et FTDI &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Soudez l'adaptateur XBee, il permet juste d'avoir des contacteurs avec le bon
espacement pour pouvoir enfoncer le module dans une platine d'essais. Placez la
carte FTDI. Connectez l'ensemble suivant le schéma. &lt;/p&gt; &lt;/div&gt; &lt;div id="connaitre-son-materiel" class="section"&gt; &lt;h2&gt;Connaître son matériel &lt;a class="headerlink" href="#connaitre-son-materiel"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Sous Linux et Mac OSX, en ouvrant un Terminal, on peut taper quelques commandes
pour savoir si le module est bien reconnu par votre ordinateur :  &lt;em&gt; dmesg | tail
, lsusb, ls /dev/tty &lt;/em&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/terminal-hardware.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Commandes utiles &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Les réponses du terminal à ces commandes indiquent que l'adaptateur série est
bien connecté à l'ordinateur, vous voyez  &lt;strong&gt; FTDI USB Serial Device &lt;/strong&gt;  ou  &lt;strong&gt; FT232
USB-Serial &lt;/strong&gt; , son identifiant est  &lt;strong&gt; ttyUSB0 &lt;/strong&gt; . &lt;/p&gt; &lt;/div&gt; &lt;div id="terminal" class="section"&gt; &lt;h2&gt;Terminal &lt;a class="headerlink" href="#terminal"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le but maintenant est de pouvoir envoyer des commandes au module et recevoir
ses retours. Pour cela il faut utiliser un programme, appelé Terminal ou plus
précisément  &lt;a href="https://fr.wikipedia.org/wiki/%C3%89mulateur_de_terminal" class="wikipedia"&gt; émulateur de terminal &lt;/a&gt;  . On l'utilise dans
notre cas pour communiquer en série avec le port ouvert par le contrôleur USB.
Des spécifités existent entre les différents systèmes d'exploitation que je ne peux
répertorier (par exemple pour Windows : programme Putty et Xctu à télécharger). &lt;/p&gt; &lt;p&gt; Trois possibilités : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; dans le logiciel Arduino, il y a  &lt;strong&gt; un moniteur série &lt;/strong&gt; &lt;/li&gt; &lt;li&gt; sur Linux, installer le logiciel  &lt;pre&gt; screen &lt;/pre&gt;  pour avoir un utilitaire ultra simple
( &lt;pre&gt; sudo apt-get install screen &lt;/pre&gt; ). Ensuite, vous avez accès au port série avec
la commande :  &lt;strong&gt; screen /dev/ttyUSB0 9600 &lt;/strong&gt; . Le logiciel  &lt;pre&gt; screen &lt;/pre&gt;  se connecte au
port série de notre adaptateur FTDI. Si vous avez lu la partie concernant la
communication en série, vous ne serez pas surpris de voir le chiffre 9600. En
effet, étant donné qu'il s'agit d'une communication asynchrone, il faut se mettre
d'accord sur le débit en binaire (bits/seconde).
Commandes utiles de screen :
Ctl-A ? : help et Ctl-A : quit (en tapant "y" pour "yes") &lt;/li&gt; &lt;li&gt; Une autre solution, sans doute la meilleure, car très agréable à utiliser et
multi-plateforme : télécharger le programme de Tom Igoe &lt;/li&gt; &lt;/ul&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/terminal-tom-igoe.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Exemple de communication avec le programme de Tom Igoe. &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div id="modes" class="section"&gt; &lt;h2&gt;Modes &lt;a class="headerlink" href="#modes"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; Le XBee possède trois modes :  &lt;strong&gt; TRANSPARENT &lt;/strong&gt; ,  &lt;strong&gt; COMMAND &lt;/strong&gt;  et  &lt;strong&gt; API &lt;/strong&gt; . Le mode
TRANSPARENT est le mode sélectionné par défaut à la mise en marche du module, celui qui
reçoit et envoie les données. Le mode COMMAND permet de configurer le module :
ses entrées, ses sorties, son adresse, l'adresse de destination de ses
messages, etc. &lt;/p&gt; &lt;p&gt; Le mode API est un peu plus compliqué, et, pour dire vrai, je n'ai pas encore pu
l'expérimenter avec succès. Une  &lt;a href="http://fr.wikipedia.org/wiki/Interface_de_programmation" class="wikipedia"&gt; API &lt;/a&gt;   (//Application
programming interface//) est un terme bien connu en informatique. Il désigne
une interface fournie par un programme informatique, c'est-à-dire un ensemble
de fonctions qui facilitent la programmation d'un côté et qui de l'autre
communiquent en langage binaire pour le XBee, sous forme de paquets. Je crois
comprendre que ce mode devient utile quand il s'agit de construire des messages
au format XBee à partir d'un ordinateur ou d'un microcontrôleur comme Arduino.
Le mode API n'est possible qu'avec une connexion locale en série et filaire
avec l'ordinateur ou la Arduino, pas entre modules XBee. &lt;/p&gt; &lt;/div&gt; &lt;div id="commandes-at" class="section"&gt; &lt;h2&gt;Commandes AT &lt;a class="headerlink" href="#commandes-at"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; &lt;strong&gt; MODE COMMAND &lt;/strong&gt; &lt;/p&gt; &lt;p&gt; Ouvrez le terminal choisi. Avant tout, il faut signaler au XBee que l'on veut
quitter le mode TRANSPARENT pour entrer dans le mode COMMAND. Pour cela il faut
prendre le coup de main, suivez bien ces instructions à la lettre : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Taper  &lt;strong&gt; +++ &lt;/strong&gt;  et attendre 1 seconde sans appuyer sur aucune autre touche,
le message  &lt;strong&gt; OK &lt;/strong&gt;  devrait alors s'afficher comme sur l'image du terminal
juste en haut. Par ce OK, le XBee nous signale qu'il passe en mode COMMAND et
qu'il est prêt à recevoir les messages de configuration. &lt;/li&gt; &lt;li&gt; Si vous attendez
plus de 10 secondes sans appuyer sur une touche, le XBee revient en mode
TRANSPARENT. Vous devez alors retaper  &lt;strong&gt; +++ &lt;/strong&gt;  pour revenir en mode COMMAND. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; &lt;strong&gt; COMMAND AT &lt;/strong&gt; &lt;/p&gt; &lt;p&gt; Dans les télécommunications, l'ensemble de commandes Hayes est un langage de
commandes spécifiques développé pour le modem Hayes SmartModem 300 en 1981. Les
commandes sont une série de mots courts qui permettent de contrôler le modem
avec un langage simple : composer un numéro de téléphone, connaître l'état de
la ligne, régler le volume sonore, etc. Ce jeu de commandes s'est ensuite
retrouvé dans tous les modems produits (sources :
 &lt;a href="http://fr.wikipedia.org/wiki/Commandes_Hayes" class="wikipedia"&gt; http://fr.wikipedia.org/wiki/Commandes_Hayes &lt;/a&gt; ,
 &lt;a href="http://en.wikipedia.org/wiki/Hayes_command_set" class="wikipedia"&gt; http://en.wikipedia.org/wiki/Hayes_command_set &lt;/a&gt; ). &lt;/p&gt; &lt;p&gt; Pour avoir un aperçu rapide des commandes disponibles pour le XBee, télécharger
le  &lt;a href="http://short.faitmain.org/405b"&gt; guide de référence des commandes AT de Sparkfun &lt;/a&gt;  . &lt;/p&gt; &lt;p&gt; &lt;strong&gt; TEST &lt;/strong&gt; &lt;/p&gt; &lt;p&gt; La syntaxe est simple, il faut taper  &lt;strong&gt; AT &lt;/strong&gt; , puis le nom de la commande, les options si besoin et appuyer sur la touche &lt;Entrée&gt;. Essayez donc ces commandes pour faire vos premiers tests : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; +++ (attendre OK) &lt;/li&gt; &lt;li&gt; &gt; OK &lt;/li&gt; &lt;li&gt; ATMY1234 &lt;Enter&gt; &lt;/li&gt; &lt;li&gt; &gt; OK &lt;/li&gt; &lt;li&gt; ATMY &lt;Enter&gt; &lt;/li&gt; &lt;li&gt; &gt; 1234 &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; Vous avez défini ici l'adresse du module à 1234 (ATMY 1234) puis demandé quelle était votre adresse (ATMY). &lt;/p&gt; &lt;/div&gt; &lt;div id="adressage" class="section"&gt; &lt;h2&gt;Adressage &lt;a class="headerlink" href="#adressage"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-adressing.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Les différents types d'adresses &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Pour tout XBee, il faut impérativement définir l'adresse du réseau  &lt;strong&gt; ATID &lt;/strong&gt; ,
son adresse personnelle  &lt;strong&gt; ATMY &lt;/strong&gt;  et si besoin, l'adresse de destination des
paquets  &lt;strong&gt; ATDL &lt;/strong&gt; . &lt;/p&gt; &lt;/div&gt; &lt;div id="entrees-sorties" class="section"&gt; &lt;h2&gt;Entrées / sorties &lt;a class="headerlink" href="#entrees-sorties"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-IO-pins.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Entrées et sorties &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Le XBee series 1 possède un certain nombre d'entrées et sorties. Les sorties
analogiques sont PWM0 et PWM1. Les entrées et sorties numériques sont DIO1,
DIO2, DIO3, DIO4, DIO5, DIO6, DIO7 ("DIO" pour Digital Input Output). Les
entrées analogiques sont : AD1, AD2, AD3, AD4, AD5 ("AD" pour Analog Digital,
l'échantillonnage des tensions analogiques converties en numérique). Pour
trouver la bonne commande AT, on peut se référer aux pages 12, 31, 39 et 43 du
 &lt;a href="http://short.faitmain.org/9b4d"&gt; manuel (.pdf) &lt;/a&gt;   ou
à l'image ci-dessous. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-IO-configurations.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Configuration des entrées et sorties &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Par exemple, si l'on veut configurer le XBee pour qu'il capte un bouton
poussoir sur l'entrée numérique 1, il faudrait écrire  &lt;strong&gt; ATD1 3 &lt;/strong&gt; . D1 pour pin19
(DIO1, AD1) et 3 pour Digital Input. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-linepassing.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Explications concernant le  &lt;em&gt; line passing &lt;/em&gt; &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Il faut savoir que les entrées fonctionnent par paire, c'est la notion de
" &lt;strong&gt; line passing &lt;/strong&gt; ". L'entrée 0 du XBee#2 correspond à la sortie 0 du XBee#1.
Puisqu'il y a deux sorties 0 (PWM0, DIO0), si on veut avoir deux sorties
différentes il faut choisir une autre sortie DIO1 pour l'autre LED. &lt;/p&gt; &lt;/div&gt; &lt;div id="mode-api" class="section"&gt; &lt;h2&gt;Mode API &lt;a class="headerlink" href="#mode-api"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;p&gt; En mode API, on peut reconstituer la trame ZigBee pour communiquer directement en binaire avec le module. &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/zigbee-trame.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Trame ZigBee &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Voilà, ce que cela pourrait donner en langage Arduino, pris sur  &lt;a href="http://short.faitmain.org/5de5"&gt; http://www.faludi.com/classes/sociableobjects/code/XBee_Analog_Duplex_Sender.pde &lt;/a&gt; . &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setRemoteState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// pass either a 0x4 or and 0x5 to turn the pin on or off&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x7E&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// high part of length (always zero)&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// low part of length (the number of bytes that follow, not including checksum)&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x17&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 0x17 is a remote AT command&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// frame id set to zero for no reply&lt;/span&gt;

    &lt;span class="c1"&gt;// ID of recipient, or use 0xFFFF for broadcast&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mo"&gt;00&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 0xFF for broadcast&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 0xFF for broadcast&lt;/span&gt;

    &lt;span class="c1"&gt;// 16 bit of recipient or 0xFFFE if unknown&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0xFE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x02&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 0x02 to apply changes immediately on remote&lt;/span&gt;

    &lt;span class="c1"&gt;// command name in ASCII characters&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;D&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sc"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// command data in as many bytes as needed&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="c1"&gt;// checksum&lt;/span&gt;
    &lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x17&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0xFE&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mh"&gt;0x02&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;D&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;1&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;BYTE&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Une autre solution, au lieu de reconstituer la trame, est d'utiliser une bibliothèque spéciale : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/whyapimode-xbee-api"&gt; http://code.google.com/p/xbee-api/wiki/WhyApiMode &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/configuring-xbees"&gt; http://www.instructables.com/id/Configuring-XBees-for-API-Mode/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/example-frames"&gt; http://rubenlaguna.com/wp/2009/03/12/example-of-xbee-api-frames/ &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; D'autres infos : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/definition-trames"&gt; http://domotique.benchi.fr/domotique/definition-des-trames-du-reseau-zigbee/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/zigbee-modules"&gt; http://domotique.benchi.fr/domotique/zigbee-oem-rf-modules-trame-complete/ &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="montages" class="section"&gt; &lt;h2&gt;Montages &lt;a class="headerlink" href="#montages"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div id="xbee-xbee" class="section"&gt; &lt;h2&gt;XBee &gt; XBee &lt;a class="headerlink" href="#xbee-xbee"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/type-xbee-xbee.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage en direct &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; On peut faire un montage très simple, le montage direct entre deux modules
XBee. On met deux capteurs sur le XBee#2, un bouton poussoir et un
potentiomètre et deux actionneurs sur le XBee#1, deux LEDs. Le bouton allume et
éteint une LED en on/off (//digital//), le potentiomètre allume et éteint
l'autre LED de façon progressive (en PWM). &lt;/p&gt; &lt;p&gt; &lt;strong&gt; XBee#2 : émetteur (INPUT) &lt;/strong&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-direct-send.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage émetteur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;strong&gt; XBee#1 : receveur (OUTPUT) &lt;/strong&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span6 offset3"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-direct-receive.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage récepteur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;hr/&gt; &lt;p&gt; &lt;strong&gt; Configuration &lt;/strong&gt; &lt;/p&gt; &lt;table class="table"&gt;     &lt;thead&gt; &lt;tr&gt; &lt;th&gt; COMMAND &lt;/th&gt; &lt;th&gt; INPUT &lt;/th&gt; &lt;th&gt; OUTPUT &lt;/th&gt; &lt;th&gt; DESCRIPTION &lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt; &lt;p&gt; Unexpected possible title overline or transition.
Treating it as ordinary text because it's so short. &lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Entrer dans le mode COMMAND &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATRE &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Restaure les paramètres par défaut &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATID &lt;/td&gt; &lt;td&gt; 1111 &lt;/td&gt; &lt;td&gt; 1111 &lt;/td&gt; &lt;td&gt; Adresse du réseau &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATMY &lt;/td&gt; &lt;td&gt; 1 &lt;/td&gt; &lt;td&gt; 0 &lt;/td&gt; &lt;td&gt; Adresse du module dans le réseau &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATDL &lt;/td&gt; &lt;td&gt; 0 &lt;/td&gt; &lt;td&gt; 1 &lt;/td&gt; &lt;td&gt; Adresse du destinataire dans le réseau &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATIR &lt;/td&gt; &lt;td&gt; 14 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Taux d'échantillonnage 20ms (14 en hexadecimal) (p.43 du manuel) &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATIT &lt;/td&gt; &lt;td&gt; 5 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Nombre d'échantillons à effectuer avant l'envoi des données &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATIU &lt;/td&gt; &lt;td&gt; 1 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; I/O output enabled : autoriser émission des I/O sans passer par l'UART &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATIA &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; 1 &lt;/td&gt; &lt;td&gt; I/O input from address 1 &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATD0 &lt;/td&gt; &lt;td&gt; 2 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; POTENTIOMETRE : D0 pour pin20 (DIO0, AD0) et 2 pour ADC (p.12, p.39) &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATP0 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; 2 &lt;/td&gt; &lt;td&gt; LED : P0 pour PWM 0 et 2 pour PWM mode (p.31) &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATD1 &lt;/td&gt; &lt;td&gt; 3 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; BOUTON : D1 pour pin19 (DIO1, AD1) et 3 pour Digital Input &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATD1 &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; 4 &lt;/td&gt; &lt;td&gt; LED : D1 pour pin19 (DIO1, AD1) et 4 pour Digital Out Low Support &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATWR &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Écrit la nouvelle configuration dans la mémoire flash du module &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ATCN &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; &lt;/td&gt; &lt;td&gt; Sort du mode configuration &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;div id="xbee-xbee-ordinateur" class="section"&gt; &lt;h2&gt;XBee &gt; XBee/ordinateur &lt;a class="headerlink" href="#xbee-xbee-ordinateur"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/type-xbee-xbee-computer.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Communication XBee vers un ordinateur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; Avec le même montage, on peut visualiser dans le terminal, les informations
reçues par le XBee#1 avec le convertisseur relié à l'ordinateur. Ces
informations ne sont cependant pas tout à fait compréhensibles dans le
terminal. On ne voit pas de chiffres par exemple car il s'agit de paquets
ZigBee. &lt;/p&gt; &lt;/div&gt; &lt;div id="xbee-arduino-xbee-ordinateur" class="section"&gt; &lt;h2&gt;XBee/Arduino &gt; XBee/ordinateur &lt;a class="headerlink" href="#xbee-arduino-xbee-ordinateur"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/type-arduino-computer.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Communication entre l'Arduino et l'ordinateur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'Arduino capte un bouton poussoir et envoie un message tout ou rien au XBee#1
pour allumer la LED. Cette fois, on peut lire dans le terminal les informations
de façon compréhensible. &lt;/p&gt; &lt;p&gt; &lt;strong&gt; Montage émetteur &lt;/strong&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-arduino-send-bb.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage émetteur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;strong&gt; Code émetteur &lt;/strong&gt; &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Téléchargement :  &lt;a href="http://short.faitmain.org/196d"&gt; http://jeromeabel.net/files/ressources/xbee-arduino/code/arduino_xbee_bouton/arduino_xbee_bouton.ino &lt;/a&gt; . &lt;/li&gt; &lt;li&gt; Simplification du code de Robert Faludi :  &lt;a href="http://short.faitmain.org/5de5"&gt; http://www.faludi.com/classes/sociableobjects/code/XBee_Analog_Duplex_Sender.pde &lt;/a&gt; . &lt;/li&gt; &lt;/ul&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Xbee configuration&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setDestination&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;+++&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;\r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// wait for xbee response&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATRE&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATDL0&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// sent to xbee 0&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATMY1&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// this xbee is 1&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATID1111&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATCN&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Le code n'a rien de compliqué. Tout d'abord on configure le module XBee
connecté avec RX et TX comme indiqué ci-dessus. On écrit "+++" en communication
série, puis on attend la réponse du XBee avec le caractère 'r' qui marque la fin
d'une ligne et ensuite on écrit seulement cinq commandes pour configurer
uniquement l'adressage du module comme vu dans la partie précédente. On
récupère ensuite les informations numériques de l'entrée numérique de l'Arduino
et on envoie le chiffre reçu en série, donc au module XBee. &lt;/p&gt; &lt;/div&gt; &lt;div id="xbee-arduino-xbee-arduino" class="section"&gt; &lt;h2&gt;XBee/Arduino &gt; XBee/Arduino &lt;a class="headerlink" href="#xbee-arduino-xbee-arduino"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/type-arduino-arduino.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Communication Arduino vers Arduino &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; L'émetteur est le même que précédemment, une Arduino avec un bouton poussoir et le XBee#2. &lt;/p&gt; &lt;p&gt; &lt;strong&gt; Montage récepteur &lt;/strong&gt; &lt;/p&gt; &lt;div class="row-fluid"&gt; &lt;div class="span12"&gt; &lt;img class="centered span12" src="http://cnd.faitmain.org/volume-2/xbee/xbee-arduino-receive-bb.jpg"&gt;&lt;/img&gt; &lt;span class="legend"&gt; Montage récepteur &lt;/span&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;strong&gt; Code récepteur &lt;/strong&gt; &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Téléchargement :  &lt;a href="http://short.faitmain.org/0a73"&gt; http://jeromeabel.net/files/ressources/xbee-arduino/code/arduino_xbee_led/arduino_xbee_led.ino &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Simplification du code de Robert Faludi  &lt;a href="http://short.faitmain.org/5de5"&gt; http://www.faludi.com/classes/sociableobjects/code/XBee_Analog_Duplex_Sender.pde &lt;/a&gt; . &lt;/li&gt; &lt;/ul&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c1"&gt;// Xbee configuration&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;setDestination&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;+++&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;\r&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// wait for xbee response&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;thisByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATRE&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATMY0&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATID1111&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;ATCN&lt;/span&gt;&lt;span class="se"&gt;\r&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; On configure tout d'abord le module XBee#1 pour qu'il reçoive les données de
l'autre XBee. &lt;/p&gt; &lt;div class="syntax rounded"&gt; &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;handleSerial&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;char&lt;/span&gt; &lt;span class="n"&gt;inByte&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Serial&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="c1"&gt;// save only ASCII numeric characters (ASCII 0 - 9):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;isDigit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inByte&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
        &lt;span class="n"&gt;inputString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inputString&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;inByte&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// if you get an ASCII newline:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;inByte&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sc"&gt;&amp;#39;\n&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="c1"&gt;// convert the string to a number:&lt;/span&gt;
        &lt;span class="n"&gt;receiveValue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inputString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toInt&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="c1"&gt;// set the analog output LED:&lt;/span&gt;
        &lt;span class="n"&gt;digitalWrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;led&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;receiveValue&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="c1"&gt;// clear the input string for the&lt;/span&gt;
        &lt;span class="c1"&gt;// next value:&lt;/span&gt;
        &lt;span class="n"&gt;inputString&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
 &lt;/div&gt; &lt;p&gt; Et on récupère les données du port Série. Ce bout de code est un peu plus
compliqué.  &lt;strong&gt; Pour l'instant il ne permet de recevoir qu'une donnée à la fois &lt;/strong&gt; . &lt;/p&gt; &lt;p&gt; &lt;strong&gt; Limites &lt;/strong&gt; &lt;/p&gt; &lt;p&gt; En pratique, on voudrait avoir la possibilité d'envoyer plusieurs données
différentes provenant de plusieurs capteurs et d'actionner plusieurs sorties.
Les méthodes présentées ici ne le font pas. Pour cela, deux options semblent
envisageables : construire des messages série plus compliqués avec un
identifiant (comme  &lt;a href="http://short.faitmain.org/arduino-puredata-messagesystem"&gt; ici &lt;/a&gt;  )
ou bien utiliser l'API XBee pour Arduino. &lt;/p&gt; &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;
&lt;p&gt;&lt;hr/&gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="ressources" class="section"&gt; &lt;h2&gt;Ressources &lt;a class="headerlink" href="#ressources"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;div id="livres" class="section"&gt; &lt;h2&gt;Livres &lt;a class="headerlink" href="#livres"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/building-wireless"&gt; Building Wireless Sensor Networks &lt;/a&gt;  , de Robert Faludi. Cet
ouvrage se consacre uniquement au XBee de la série 2 pour la mise en place de
réseaux maillés. &lt;/li&gt; &lt;li&gt; &lt;p&gt; Duplicate explicit target name: "making things talk". &lt;/p&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div id="manuels-et-references" class="section"&gt; &lt;h2&gt;Manuels et références &lt;a class="headerlink" href="#manuels-et-references"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Le manuel du XBee 802.15.4 (Series 1) :  &lt;a href="http://short.faitmain.org/9b4d"&gt; http://ftp1.digi.com/support/documentation/90000982_B.pdf &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Series 1 :  &lt;a href="http://short.faitmain.org/http://www.sparkfun.com/datasheets/Wireless/Zigbee/xbee-Datasheet.pdf"&gt; http://www.sparkfun.com/datasheets/Wireless/Zigbee/xbee-Datasheet.pdf &lt;/a&gt; &lt;/li&gt; &lt;li&gt; XBee Znet 2.5 (old Series 2) :  &lt;a href="http://short.faitmain.org/http://www.sparkfun.com/datasheets/Wireless/Zigbee/xbee-2.5-Manual.pdf"&gt; http://www.sparkfun.com/datasheets/Wireless/Zigbee/xbee-2.5-Manual.pdf &lt;/a&gt; &lt;/li&gt; &lt;li&gt; ZB (current Series 2) :  &lt;a href="http://short.faitmain.org/8f3b"&gt; http://ftp1.digi.com/support/documentation/90000976_G.pdf &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Guide de référence des commandes AT :  &lt;a href="http://short.faitmain.org/405b"&gt; http://www.sparkfun.com/datasheets/Cellular%20Modules/AT_Commands_Reference_Guide_r0.pdf &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Comparaisons des modules :  &lt;a href="http://short.faitmain.org/3490"&gt; http://www.digi.com/pdf/chart_XBee_rf_features.pdf &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div id="telechargements" class="section"&gt; &lt;h2&gt;Téléchargements &lt;a class="headerlink" href="#telechargements"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;ul bullet="-"&gt; &lt;li&gt; XBee Serial Terminal (processing) :  &lt;a href="http://short.faitmain.org/http://www.itp.nyu.edu/physcomp/uploads/XBeeSerialTerminal.zip"&gt; http://www.itp.nyu.edu/physcomp/uploads/XBeeSerialTerminal.zip &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Code Arduino :  &lt;a href="http://short.faitmain.org/5de5"&gt; http://www.faludi.com/classes/sociableobjects/code/XBee_Analog_Duplex_Sender.pde &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Codes Arduino de mes exemples :  &lt;a href="http://short.faitmain.org/index-filesressourcesxbee-arduinocode"&gt; http://jeromeabel.net/files/ressources/xbee-arduino/code/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Schémas électroniques - Fritzing :  &lt;a href="http://short.faitmain.org/welcome-fritzing"&gt; http://fritzing.org/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Schémas électroniques - Eagle :  &lt;a href="http://short.faitmain.org/download-latest"&gt; http://www.cadsoftusa.com/download-eagle/?language=en &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;div id="sites" class="section"&gt; &lt;h2&gt;Sites &lt;a class="headerlink" href="#sites"title="Lien vers cette section"&gt;¶&lt;/a&gt;&lt;/h2&gt; &lt;ul bullet="-"&gt; &lt;li&gt; Magasins d'électronique :  &lt;a href="http://short.faitmain.org/acheter-composant"&gt; http://codelab.fr/177 &lt;/a&gt; &lt;/li&gt; &lt;li&gt; Quelques astuces pour bien choisir le XBee :  &lt;a href="http://short.faitmain.org/buying-guide"&gt; XBee buying guide &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://www.faludi.com/projects/common-xbee-mistakes"&gt; http://www.faludi.com/projects/common-xbee-mistakes/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://www.faludi.com/bwsn/xbee-level-shifting"&gt; http://www.faludi.com/bwsn/xbee-level-shifting/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/centre-ressources"&gt; http://wiki.labomedia.org/index.php/XBee &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://www.kobakant.at/DIY/?p=1215"&gt; http://www.kobakant.at/DIY/?p=1215 &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/bildr-swarm"&gt; http://bildr.org/2011/04/arduino-xbee-wireless/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://itp.nyu.edu/physcomp/Tutorials/XBeeBasics"&gt; http://itp.nyu.edu/physcomp/Tutorials/XBeeBasics &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/xbeer-examples"&gt; http://examples.digi.com/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/christophe-nowicki"&gt; http://www.csquad.org/tag/xbee/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/zigbee-doc-travail"&gt; http://iris.appert44.org/~plegal/index.php/ZigBee-doc-travail &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/reseaux-zigbee"&gt; http://www.pobot.org/-Reseaux-ZigBee-.html &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/wi-fi-bluetooth"&gt; http://veille-techno.blogs.ec-nantes.fr/index.php/2012/01/06/wi-fi-bluetooth-zigbee-et-la-domotique/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://fisherinnovation.com/simple-xbee-communication-with-arduino"&gt; http://fisherinnovation.com/simple-xbee-communication-with-arduino/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/configuring-xbees"&gt; http://www.instructables.com/id/Configuring-XBees-for-API-Mode/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/cooking-hacks"&gt; http://www.cooking-hacks.com/index.php/documentation/tutorials/arduino-xbee-shield &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/wisps"&gt; http://www.johnhenryshammer.com/WOW2/mainPage.php &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/zigbee-decouverte"&gt; http://djynet.net/?p=96 &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/ucopia__________lettre-dinformation"&gt; http://www.ucopia.com/uploads/newsletters/01/part3.htm &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/zigbee-antennas"&gt; http://homewireless.org/wp/2010/05/antennas-part-1/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/wireless-arduino"&gt; http://john.crouchley.com/blog/archives/750 &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/zigbee-domotique"&gt; http://domotique.benchi.fr/domotique/zigbee-2/ &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt; En savoir plus sur les réseaux : &lt;/p&gt; &lt;ul bullet="-"&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/http://www.courstechinfo.be/Techno/LiaisonsSP.htm"&gt; Liaisons série et parallèle &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/jdnet-deacuteveloppeurs"&gt; Bauds et bps &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/transport-linformation"&gt; Transport de l'Information &lt;/a&gt;  &lt;/li&gt; &lt;li&gt; Notion de  &lt;a href="http://fr.wikipedia.org/wiki/Valence_%28r%C3%A9seau%29" class="wikipedia"&gt; valence &lt;/a&gt;  . &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/reseaux"&gt; http://www.siteduzero.com/informatique/tutoriels/les-reseaux-de-zero &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/comprendre-lordinateur"&gt; http://sebsauvage.net/comprendre/tcpip/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/transmission-control"&gt; http://www.software-engineer-training.com/higher-layer-network-protocols/transmission-control-protocol-tcp/ &lt;/a&gt; &lt;/li&gt; &lt;li&gt; &lt;a href="http://short.faitmain.org/protocoles-reseaux"&gt; http://www.zeitoun.net/articles/les_protocoles_reseaux/start &lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;       &lt;/div&gt; &lt;/div&gt;&lt;/p&gt;</summary><category term="électronique"></category><category term="informatique"></category></entry></feed>