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

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=28254</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=28254"/>
				<updated>2016-03-04T14:04:46Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout généraux et ajout des liens des codes sources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 20 à 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contre-plaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc dû les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Fort heureusement, nous avons eu la chance d'être aidés par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yohann Dhondt, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. Perraux et M. Parent à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
Cependant, nous avons été contraints de mettre en place de nouveaux pylônes qui, pour des questions d’organisation, n’ont pas pu être rectifiés par le service menuiserie. Nous avons donc essayé de les découper au mieux en prenant en compte leur torsion.&lt;br /&gt;
&lt;br /&gt;
===La partie impression 3D===&lt;br /&gt;
====Pièces &amp;quot;guide axe&amp;quot; mobiles====&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
Nous avons commencé par créer les premières versions des pièces mobiles se fixant sur les barres métalliques, qui permettent le déplacement selon l'axe X, et permettent d'embarquer le moteur pour le déplacement selon Y. Nous les avons créées à l'aide du logiciel Catia. Les cotes imposées sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pied à coulisse.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes aperçu après l'impression que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profité de la deuxième impression pour réduire la surface de contact entre l'axe X de la pièce et l'axe métallique X. &lt;br /&gt;
&lt;br /&gt;
Après tests sur la maquette, nous avons, malgré tout constaté les problèmes de frottements et de résistance à l’avancement que ces pièces engendrent sur certaines parties de nos axes métalliques. En effet, nos deux axes X ayant un parallélisme imparfait, le choix de notre liaison pivot glissant en bloquant la rotation autour de l’axe n’est pas adapté.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc modifié ces pièces en transformant la liaison “tube - cyllindre” par une liaison “roue incurvée - cylindre”, à la manière par exemple d’un rail de roller coaster (montagnes russes). Nous avons également doublé les moteurs sur l’axe X, un entraînement est donc créé sur les deux chariots, permettant une translation selon l’axe X plus fluide et plus homogène.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ASSP_guide_axe_final.jpg|180px|thumb|right|Version finale des guides axes pour l'axe X]]&lt;br /&gt;
[[Fichier:ASSP_chariot.jpg|180px|thumb|left|Photo du chariot réalisé]]&lt;br /&gt;
&lt;br /&gt;
====Conception du chariot comportant l'outil====&lt;br /&gt;
&lt;br /&gt;
Le chariot est la partie la plus complexe de la maquette. Il doit assurer un grand nombre de fonctions. Il embarque un moteur pour la translation en Z, un moteur pour la rotation en Z, un système permettant d’adapter un préhenseur (dans notre cas: une seringue) au système à pression pneumatique et un système permettant de détecter la force appliquée pendant la pose du CMS.&lt;br /&gt;
&lt;br /&gt;
Tout d’abord, son mouvement de translation avec l’axe Y est assuré par le même système de poulie que les guides axes. La translation en Z est assurée par un moteur engrènant une vis sans fin. Cette vis lie un solide qui assure alors une liaison glissière. Une pièce imprimée encastrée à ce solide nous permet de lier notre arrivée de pression négative à notre seringue.&lt;br /&gt;
&lt;br /&gt;
Pour permettre une rotation selon l’axe Z, nous avons intégré un logement pour placer un moteur lié à un engrenage. Cet engrenage est destiné à venir faire tourner la pièce centrale (la pièce en rouge sur la photo suivante) à l’aide d’un engrenage interne.&lt;br /&gt;
&lt;br /&gt;
Le chariot créé comporte également la solution choisie pour détecter un contact entre l’aiguille et un objet. En effet, nous n’avons pas assez de place pour intégrer des capteurs fin de course sur notre système moteur-glissière assurant la translation en Z. Cependant, ce dont nous avons besoin pour cette fonctionnalité “Détecter le contact entre le composant et la carte afin de ne pas les endommager” est réalisé par un capteur de position linéaire type potentiomètre linéaire. En effet, par un système de ressort intégré dans le chariot, nous pouvons obtenir la petite distance dont la pièce maintenant le moteur-glissière Z s’est déplacée et ainsi, la force exercée sur la carte/composant par l’aiguille.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ASSP_photo_maquette_finale.JPG|450px|thumb|center|Photo de l'infrastructure mécanique finale et des éléments assemblés]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orientés vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entraîner est suffisamment faible et le déplacement se fera a une vitesse suffisamment lente afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon primitif de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Ceci nous assure donc en théorie, de disposer d’une résolution en déplacement d’une précision de l’ordre de ΔXmin_théorique = 0,028 mm en commandant nos moteurs en 8ème de pas. Ceci est conforme au cahier des charges en terme de précision pour poser du CMS Classe 5, nécessitant une précision de 0,2mm, pour les déplacements en X et en Y.&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaître la position absolue, il s'agit de connaître la position initiale du chariot. Ceci est réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles. En effet, nous effectuons avant le déplacement une “mise à zéro” en terme de position, en commandant le déplacement du chariot jusqu’à atteindre les contacteurs en X = 0 et en Y = 0.&lt;br /&gt;
Les capteurs de positions qui sont disposés de part et d’autre de chaque axe (début et fin de course), sont également utilisés en tant que sécurité : si un contact est détecté, les moteurs s’arrêtent, afin de ne pas endommager ces derniers ou la maquette.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans leur commande. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique créé, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique créé à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, son contrôle  s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation de ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutations des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, car elle n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout car elle n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tournés vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens de rotation défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Et en effet, au gré des différents tests, le pilotage en 8ème de pas a montré un fonctionnement correct et stable.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ASSP_schema_pneumatique.png|220px|thumb|right|Schéma du fonctionnement du circuit pneumatique]]&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
Après réception, nous avons constaté l’inconvénient de ce genre de pompe : son arrivée d’air (coté aspiration donc) n’est pas accessible et connectable. Il s’agit en effet d’une large membrane souple et perméable, en matière type “feutre”. Nous nous sommes donc procuré un tube à effet Venturi, qui “transforme” une pression entrante positive (“souffle”) en une pression sortante négative (“aspiration”).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
De par sa conception et par le principe physique mis en oeuvre, le tube à effet Venturi nécessite une pression et un débit suffisamment élevés, que notre pompe d’aquariophilie ne nous offre pas. Cependant, après discussion avec Thierry Flamen, la salle du service EEI possèdera dans un futur proche un raccordement en air comprimé. Ainsi, pour une utilisation au service EEI, il suffira de connecter notre câble d’arrivée d’air à ce raccordement. Dans l’attente des travaux, un compresseur à air peut tout à fait être utilisé.&lt;br /&gt;
&lt;br /&gt;
Afin de commander ou non l’aspiration dans l’aiguille, nous utilisons un distributeur électro-pneumatique. Le distributeur devant être alimenté avec une tension de 24V, nous utilisons un optocoupleur en guise d’interrupteur commandé, piloté au moyen d’une sortie d’un Arduino.&lt;br /&gt;
&lt;br /&gt;
==Commande et lecture des éléments du système via Arduino==&lt;br /&gt;
===Description des fonctions réalisées par l'Arduino Mega===&lt;br /&gt;
Afin de relier les divers éléments du système à l’application pour l’utilisateur, nous utilisons un Arduino Mega. En effet, ce dernier est utilisé pour jouer le rôle d’interface entre les ordres donnés par l’application PC et le contrôle des actionneurs / lecture des capteurs.&lt;br /&gt;
    &lt;br /&gt;
Voici les tâches dont se charge l’Arduino en terme de sorties :&lt;br /&gt;
&lt;br /&gt;
*Contrôler la commande d’aspiration des composants&lt;br /&gt;
*Permettre d’envoyer les ordres aux drivers qui commandent les 5 moteurs, à savoir : &lt;br /&gt;
**2 moteurs pour la translation selon l’axe X&lt;br /&gt;
**1 moteur pour la translation selon l’axe Y&lt;br /&gt;
**1 moteur-glissière pour la translation selon l’axe Z&lt;br /&gt;
**1 moteur pour la rotation autour de Z&lt;br /&gt;
&lt;br /&gt;
Pour chacun des drivers, 6 sorties logiques sont à commander :&lt;br /&gt;
1 bit pour l’activation du moteur (Enable), &lt;br /&gt;
1 bit pour le choix du sens de rotation (Dir), &lt;br /&gt;
1 bit pour exécuter les pas (Step) et &lt;br /&gt;
3 bits de sélection du micro-pas (MS1, MS2, MS3)&lt;br /&gt;
&lt;br /&gt;
Voici les tâches dont se charge l’Arduino en terme d’entrées :&lt;br /&gt;
&lt;br /&gt;
*Lecture de l’état des 6 capteurs fin de courses (contacteurs à lamelles, appuyés ou bien non appuyés) disposés pour X1_Min, X2_Min, Y_Min, X1_Max, X2_Max et Y_Max.&lt;br /&gt;
*Conversion et lecture de la tension analogique, image de la position du potentiomètre linéaire, représentant la force appliquée sur l’aiguille selon l’axe Z&lt;br /&gt;
&lt;br /&gt;
L’Arduino permet ainsi à l’application d’effectuer les fonctions d’écriture (surnommées ‘set’) qui se chargent de :&lt;br /&gt;
&lt;br /&gt;
*donner une consigne de nombre de pas  au moteur sélectionné, par rapport à une position d’origine&lt;br /&gt;
*choisir le facteur de micro-pas sur le moteur sélectionné (pas complet, ½ pas, ¼ de pas, ⅛ de pas ou 1/16 de pas)&lt;br /&gt;
*commander l’optocoupleur relié au distributeur pneumatique pour l’allumage ou l’extinction de l’aspiration dans l’aiguille&lt;br /&gt;
*choisir la limite maximale de force que l’aiguille peut appliquer sur l’axe Z. Ceci est réalisé en définissant une limite de position du potentiomètre au delà de laquelle nous arrêtons de commander le moteur Z&lt;br /&gt;
*choisir la vitesse du moteur sélectionné, en définissant le temps en ms que nous attendons entre deux pas&lt;br /&gt;
*verrouiller ou déverrouiller en position le moteur sélectionné, en envoyant ou pas le courant dans les bobines des moteurs, provoquant un couple de maintien ou non&lt;br /&gt;
&lt;br /&gt;
Pour que l’application PC puisse connaître les paramètres programmés sur l’Arduino et l’état des capteurs, l’Arduino permet aussi d’effectuer les fonctions de lecture (que nous avons surnommées ‘get’) et qui communique :&lt;br /&gt;
&lt;br /&gt;
*l’état de de verrouillage en position des moteurs&lt;br /&gt;
*la position d’un moteur sélectionné par rapport à l’origine&lt;br /&gt;
*le facteur de micro-pas du moteur sélectionné&lt;br /&gt;
*l’état de la consigne d’allumage de l’aspiration&lt;br /&gt;
*la limite maximale de force que l’aiguille peut appliquer sur l’axe Z choisie&lt;br /&gt;
*l’état des capteurs fin de course&lt;br /&gt;
*la valeur convertie par l’ADC de la tension sur le potentiomètre&lt;br /&gt;
*la vitesse des moteurs&lt;br /&gt;
*la version du logiciel utilisé sur l’Arduino Mega&lt;br /&gt;
&lt;br /&gt;
Dans le fonctionnement interne de l’Arduino, il s’assure pour chaque requête de déplacement que l’action demandée est réalisable. Le programme vérifie en effet que les contacteurs ne sont pas enclenchés tout au long du déplacement pour X et Y, ou que le potentiomètre n’a pas dépassé la valeur maximale qui a été fixée. Dans le cas contraire, l’action sur les moteurs est stoppée et l’Arduino communique un code d’erreur. Un code d’erreur est aussi communiqué en cas de jeu de paramètres demandés incorrect lors d’un appel à chaque fonction.&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, les codes du programme C implémenté sur l’Arduino sont disponibles sur GitHub à [https://github.com/henyxia/ASSP_Mega cette adresse] et sur [https://github.com/henyxia/ASSP_Mega le GitLab de Polytech Lille]&lt;br /&gt;
&lt;br /&gt;
===Protocole de communication entre le logiciel et l'Arduino===&lt;br /&gt;
Nous avons été amenés à concevoir un protocole de communication pour assurer l’exécution des ordres et la coopération entre l’application et l’Arduino. Ils communiquent via le port série et nous avons optimisé le protocole pour le rendre le plus compact possible afin de limiter le nombre de communications.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right|Principe de fonctionnement du programme sur l'Arduino]]&lt;br /&gt;
&lt;br /&gt;
Nous disposons de 2 types de fonctions : les fonctions d’écriture (‘set’) et les fonctions de lecture (‘get’). Les fonctions “d’actions” (‘set’) retournent un code de retour à la fin de chaque action, disant si elle s’est terminée correctement ou si une erreur est survenue, comme le déclenchement d’un contact ou la saisie d’un paramètre incorrect. Les fonctions de lecture (‘get’) retournent quant à elles l’information demandée.&lt;br /&gt;
&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | WAIT_FOR_NEXT_FRAME&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | La fonction appelée a été comprise, l'Arduino est en attente de la trame suivante.&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | WAIT_FOR_IT_1&lt;br /&gt;
 | Aucun&lt;br /&gt;
 | La réponse est partielle, il manque encore une trame.&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | WAIT_FOR_IT_2&lt;br /&gt;
 | Aucun&lt;br /&gt;
 | La réponse est partielle, il manque encore deux trames.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | setMotLocked&lt;br /&gt;
 | lockedOnOff[1bit], selectedMotor[2bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Verrouille ou déverrouille en position le moteur sélectionné (&amp;lt;=&amp;gt; couple de maintien ou non)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setMotLocked&lt;br /&gt;
 | colspan=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | getMotLocked&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état du verrouillage en position de tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getContact&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état des contacteurs à lamelles (appuyés ou non)&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | selectedPin[2bits]&lt;br /&gt;
 | Retourne la valeur convertie par l'ADC de la pin analogique sélectionnée&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0E&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne le délai entre 2 pas choisis pour le moteur sélectionné&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0F&lt;br /&gt;
 | getVersion&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la version du logiciel utilisée sur l'Arduino Mega (Actuelle: 0.1)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getMotorLocked&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockedRotZ&lt;br /&gt;
 | lockedZ&lt;br /&gt;
 | lockedY&lt;br /&gt;
 | lockedX&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getContact&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | isMinX1&lt;br /&gt;
 | isMaxX1&lt;br /&gt;
 | isMinX2&lt;br /&gt;
 | isMaxX2&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | isMinY&lt;br /&gt;
 | isMaxY&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedPin[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getVersion&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | minorVersion[3:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | majorVersion[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel d'interfaçage utilisateur==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
&lt;br /&gt;
Comme l’intégralité de notre travail est placé sous le drapeau de l’open source, nous avons souhaité permettre à n’importe qui de pouvoir compiler notre application sur son ordinateur, et cela quelque soit son système d’exploitation. Pour permettre la réalisation de cet objectif, nous avons choisi un framework parmis ceux permettant cette inter-opérabilité. Son code source est d’ailleurs disponible sur GitHug à [http://github.com/henyxia/ASSP l’adresse suivante] &lt;br /&gt;
&lt;br /&gt;
Les collections d’objets et de librairies (aussi appelés framework) multi-OS se comptent sur les doigts de la main et ont tous leurs avantages et leurs inconvénients. Parmis les plus connus (wxWidgets, GTK+, FLTK, FOX, …), nous avons choisi de prendre Qt. Ce framework a l’avantage d’intégrer des interfaces multiplateformes pour le port série et la Webcam.&lt;br /&gt;
&lt;br /&gt;
Nous noterons quand même le coté négatif de ce choix: le développement de la partie du port série a pris plus de temps que prévu. En effet, la gestion du buffer pour le port série est assez mal expliquée et semble être peu indépendante du système d’exploitation. Pour palier à ce problème, nous avons choisi d’utiliser un protocole de communication octet à octet avec accusé d’émission et de réception.&lt;br /&gt;
&lt;br /&gt;
===Création d'une interface intuitive===&lt;br /&gt;
Pour permettre à un utilisateur lambda de pouvoir utiliser notre interface, nous avons essayé de la rendre la plus intuitive possible. Pour cela, nous avons décomposé en trois zones distinctes les différentes informations. La première partie comporte une fenêtre OpenGL permettant la génération du rendu des fichiers GERBERs ouverts. Le deuxième volet est une fenêtre permettant le retour d’erreur et l’affichage d’informations sur l’état de l’application ou de la communication. Enfin, la troisième permet de visualiser en temps réel les variables de l’Arduino MEGA et d’ordonner des consignes.&lt;br /&gt;
&lt;br /&gt;
==Fin du projet==&lt;br /&gt;
Au terme d’un semestre consacré majoritairement au développement de ce projet de fin d’étude, nous sommes réellement heureux et fiers des avancées qui ont été accomplies. Les difficultés rencontrées étaient souvent de natures différentes du fait de la multidisciplinarité de ce projet. Cependant, une quantité importante de travail, ainsi qu’un suivi de la part de nos encadrants nous ont permis d’atteindre la majorité de nos objectifs.&lt;br /&gt;
&lt;br /&gt;
Bien que ce projet avait pour vocation d’être intégré au terme du semestre, il reste quand même utile pour le pôle EEI. Il pourra en effet être repris comme futur projet en IMA et ainsi achever l'automatisation des tâches, l'ajout d'une vision caméra et l’interface utilisateur.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_interface.JPG&amp;diff=28246</id>
		<title>Fichier:ASSP interface.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_interface.JPG&amp;diff=28246"/>
				<updated>2016-03-04T10:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_photo_maquette_finale.JPG&amp;diff=28245</id>
		<title>Fichier:ASSP photo maquette finale.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_photo_maquette_finale.JPG&amp;diff=28245"/>
				<updated>2016-03-04T10:45:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_schema_detection_contact.JPG&amp;diff=28244</id>
		<title>Fichier:ASSP schema detection contact.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_schema_detection_contact.JPG&amp;diff=28244"/>
				<updated>2016-03-04T10:44:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_chariot.jpg&amp;diff=28243</id>
		<title>Fichier:ASSP chariot.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_chariot.jpg&amp;diff=28243"/>
				<updated>2016-03-04T10:40:30Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_guide_axe_final.jpg&amp;diff=28242</id>
		<title>Fichier:ASSP guide axe final.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_guide_axe_final.jpg&amp;diff=28242"/>
				<updated>2016-03-04T10:39:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_schema_pneumatique.png&amp;diff=28241</id>
		<title>Fichier:ASSP schema pneumatique.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:ASSP_schema_pneumatique.png&amp;diff=28241"/>
				<updated>2016-03-04T10:30:45Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27274</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27274"/>
				<updated>2016-02-17T03:38:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Création d'un système sûr pour Arduino Mega */ Ajout setMotLocked et getMotLocked&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | WAIT_FOR_NEXT_FRAME&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | La fonction appelée a été comprise, l'Arduino est en attente de la trame suivante.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | setMotLocked&lt;br /&gt;
 | lockedOnOff[1bit], selectedMotor[2bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Verrouille ou déverrouille en position le moteur sélectionné (&amp;lt;=&amp;gt; couple de maintien ou non)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setMotLocked&lt;br /&gt;
 | colspan=&amp;quot;1&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | getMotLocked&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état du verrouillage en position de tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | selectedPin[2bits]&lt;br /&gt;
 | Retourne la valeur convertie par l'ADC de la pin analogique sélectionnée&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0E&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne le délai entre 2 pas choisis pour le moteur sélectionné&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0F&lt;br /&gt;
 | getVersion&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la version du logiciel utilisée sur l'Arduino Mega (Actuelle: 0.1)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getMotorLocked&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockedRotZ&lt;br /&gt;
 | lockedZ&lt;br /&gt;
 | lockedY&lt;br /&gt;
 | lockedX&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedPin[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getVersion&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | minorVersion[3:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | majorVersion[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27136</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27136"/>
				<updated>2016-02-15T03:21:57Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Liste des fonctions de lecture */ Ajout de getSpeed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | WAIT_FOR_NEXT_FRAME&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | La fonction appelée a été comprise, l'Arduino est en attente de la trame suivante.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | selectedPin[2bits]&lt;br /&gt;
 | Retourne la valeur convertie par l'ADC de la pin analogique sélectionnée&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0E&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne le délai entre 2 pas choisis pour le moteur sélectionné&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedPin[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27011</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=27011"/>
				<updated>2016-02-11T13:22:48Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Le protocole de communication */ Protocole des trames simplifié&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | WAIT_FOR_NEXT_FRAME&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | La fonction appelée a été comprise, l'Arduino est en attente de la trame suivante.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | selectedPin[2bits]&lt;br /&gt;
 | Retourne la valeur convertie par l'ADC de la pin analogique selectionnée &lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedPin[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26965</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26965"/>
				<updated>2016-02-11T07:30:04Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Le protocole de communication */ Ajout codes retour et fonctions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | WAIT_FOR_NEXT_FRAME&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | La fonction appelée a été comprise, l'Arduino est en attente de la trame suivante.&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | selectedPin[2bits]&lt;br /&gt;
 | Retourne la valeur convertie par l'ADC de la pin analogique selectionnée &lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADCvalue&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedPin[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcValue[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26830</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26830"/>
				<updated>2016-02-09T23:56:02Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Le protocole de communication */ Ajout code erreur aiguille&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | CMD_LOCK_Z&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | L'aiguille a touché un objet et a dépassé la force maximum à appliquer dessus&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26829</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26829"/>
				<updated>2016-02-09T23:32:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Liste des fonctions d'écriture */ Corrigé code appelé setSpeed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26825</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=26825"/>
				<updated>2016-02-09T18:07:44Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Liste des fonctions d'écriture */ Ajout de setSpeed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;br /&gt;
==Création d'un système sûr pour Arduino Mega==&lt;br /&gt;
L'application de bureau que nous avons créé va, comme expliqué précédemment, communiqué avec un Arduino Mega. Cet Arduino s'occupera de la commande de la partie du puissance du reste du système. Ces fonctions sont:&lt;br /&gt;
* Commander des moteurs sur les axes X, Y et Z&lt;br /&gt;
* Commander de la rotation selon Z&lt;br /&gt;
* Contrôler de la pompe&lt;br /&gt;
* Définir les paramètres avancés des moteurs (vitesse, précision des micropas)&lt;br /&gt;
* S'assurer de ne pas commander un ordre endommageant la machine&lt;br /&gt;
===Le protocole de communication===&lt;br /&gt;
[[Fichier:ASSP_mega_task_flowchart.png|200px|thumb|right]]Pour permettre de réaliser ces fonctions, l'application communique à travers le port série avec l'Arduino Mega. Le protocole utilisé est rendant le plus compact possible pour limiter le nombre de communications.&lt;br /&gt;
L'Arduino Mega ne fonctionne que par tâches (comme décris sur le schéma à droite). La seule possibilité pour l'Arduino de ne pas être dans cette exécution de tâches est d'être interrompu par un contact à lamelle souple (que nous considérons comme prioritaire). Dans ce cas, l'Arduino reste bloqué dans la fonction appelé par l'interruption jusqu'à temps que l'utilisateur valide manuellement la déverrouillage (ce qui permet d'éviter que le système ne puisse s’abîmer).&lt;br /&gt;
====Les trames de base====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande d'initialisation d'une tâche (PC-&amp;gt;Mega)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Paramètre&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; |Fonction appelée&lt;br /&gt;
 |}&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Commande de réponse d'une tâche (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Bits&lt;br /&gt;
 |7&lt;br /&gt;
 |6&lt;br /&gt;
 |5&lt;br /&gt;
 |4&lt;br /&gt;
 |3&lt;br /&gt;
 |2&lt;br /&gt;
 |1&lt;br /&gt;
 |0&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Data&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Donnée dépendant de la fonction&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; | Code de retour&lt;br /&gt;
 |}&lt;br /&gt;
&amp;lt;strong&amp;gt;Si le code de retour est différent de 0, les trames de retour 2 et 3 ne sont pas envoyées&amp;lt;/strong&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des codes de retour&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Code retourné&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom dans le header&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Action à prendre&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description du code&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | CMD_OK&lt;br /&gt;
 | Aucune&lt;br /&gt;
 | La commande s'est exécutée correctement&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | CMD_NOT_KNOWN&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | La commande demandée n'est pas connue&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | CMD_DEST_UNREACHABLE&lt;br /&gt;
 | Report immédiat&lt;br /&gt;
 | L'appel à la commande setDest a le paramètre &amp;lt;i&amp;gt;dest&amp;lt;/i&amp;gt; trop grand sur le moteur choisi&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | CMD_LOCK_MIN_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | CMD_LOCK_MAX_X1&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 1 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x05&lt;br /&gt;
 | CMD_LOCK_MIN_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x06&lt;br /&gt;
 | CMD_LOCK_MAX_X2&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe X 2 à son maximum&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x07&lt;br /&gt;
 | CMD_LOCK_MIN_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son minimum&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | CMD_LOCK_MAX_Y&lt;br /&gt;
 | Report immédiat ou aucun&lt;br /&gt;
 | Le chariot a déclenché le contact à lamelle souple sur l'axe Y à son maximum&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions d'écriture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x00&lt;br /&gt;
 | setDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | destination[16bits]&lt;br /&gt;
 | Donne la consigne de position en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x01&lt;br /&gt;
 | setMS&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | microStep[3bits]&lt;br /&gt;
 | Donne la consigne du nombre de micropas par tour pour un moteur&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x02&lt;br /&gt;
 | setPump&lt;br /&gt;
 | onOff[1bit]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage ou d'extinction de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x03&lt;br /&gt;
 | setADC&lt;br /&gt;
 | adcLevel[10bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x04&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | lockToRelease[3bits]&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Donne la consigne de déverrouillage d'un nœud précédemment verrouillé&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0D&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | delayStep[8bits]&lt;br /&gt;
 | Donne le temps en ms à attendre entre 2 pas (&amp;lt;=&amp;gt; la vitesse du moteur)&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails sur la construction des fonctions d'écriture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | setDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | destination[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | setMS&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | microStep[2:0]&lt;br /&gt;
 | colspan=&amp;quot;5&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setPump&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setADC&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setRelease&lt;br /&gt;
 | align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | lockToRelease[2:0]&lt;br /&gt;
 | colspan=&amp;quot;16&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | setSpeed&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | delayStep[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
====Liste des fonctions de lecture====&lt;br /&gt;
 {| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Liste des fonctions &lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;5&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Nom de la fonction&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Paramètre 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;2&amp;quot; | Description fonction&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Hex&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x08&lt;br /&gt;
 | getDest&lt;br /&gt;
 | selectedMotor[2bits]&lt;br /&gt;
 | Retourne la position d'un moteur donné en seizième de pas par rapport à l'origine&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x09&lt;br /&gt;
 | getMS&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne du nombre de micropas par tour pour tous les moteurs&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0A&lt;br /&gt;
 | getPump&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage actuelle de la pompe à vide&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0x0B&lt;br /&gt;
 | getADC&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne la consigne d'allumage de la valeur maximale lisible par l'ADC&lt;br /&gt;
 |-&lt;br /&gt;
 | 1&lt;br /&gt;
 | 1&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0&lt;br /&gt;
 | 0x0C&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | &amp;amp;empty;&lt;br /&gt;
 | Retourne l'état de verrouillage des nœuds&lt;br /&gt;
 |}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
 |+ Détails de la construction des trames de lecture&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; rowspan=&amp;quot;3&amp;quot; | Fonction appelée&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Appel (PC-&amp;gt;Mega)&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;24&amp;quot; | Retour (Mega-&amp;gt;PC)&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;4&amp;quot; | Trame 1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; colspan=&amp;quot;8&amp;quot; | Trame 3&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b7&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b6&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b5&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b4&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b3&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b2&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b1&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | b0&lt;br /&gt;
 |-&lt;br /&gt;
 | getDest&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | selectedMotor[1:0]&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[15:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | dest[7:0]&lt;br /&gt;
 |-&lt;br /&gt;
 | getMS&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | msY[0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msX[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msR[2:0]&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | msZ[2:0]&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | msY[2:1]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getPump&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | onOff&lt;br /&gt;
 | colspan=&amp;quot;3&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getADC&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[9:8]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | adcLevel[7:0]&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |-&lt;br /&gt;
 | getRelease&lt;br /&gt;
 | colspan=&amp;quot;4&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | lockMinX1&lt;br /&gt;
 | lockMaxX1&lt;br /&gt;
 | lockMinX2&lt;br /&gt;
 | lockMaxX2&lt;br /&gt;
 | lockMinY&lt;br /&gt;
 | lockMaxY&lt;br /&gt;
 | colspan=&amp;quot;6&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 | colspan=&amp;quot;8&amp;quot; align=&amp;quot;center&amp;quot; | &amp;amp;empty;&lt;br /&gt;
 |}&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25165</id>
		<title>T Shirt d'ambiance connecté</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25165"/>
				<updated>2016-01-21T02:24:06Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout du sommaire + Présentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;T-Shirt d'ambiance musicale augmentée&lt;br /&gt;
&lt;br /&gt;
=Présentation du projet=&lt;br /&gt;
Ce projet de création d'objet connecté part d'une idée toute simple : rendre de la musique visuelle. L'objectif est de créer, pour un utilisateur, un avatar musical reflétant son ambiance sonore du moment.&lt;br /&gt;
&lt;br /&gt;
Visible directement sur son T-shirt par exemple, le projet consiste à animer un visage (smiley) constitué de leds multicolores en fonction du son (à la manière d'un spectroscope). Le son peut être diffusé via un media quelconque (lecteur mp3, téléphone...) possédant une prise jack ou bien par WiFi, puis ressortable vers un casque ou éventuellement une enceinte connectée par exemple.&lt;br /&gt;
&lt;br /&gt;
=Objectifs=&lt;br /&gt;
* Acquérir et échantillonner un signal audio (analogique)&lt;br /&gt;
* Le traiter en le décomposant selon les fréquences qui le constituent (FFT)&lt;br /&gt;
* Commander les matrices de leds NeoPixels en fonction des composantes fréquentielles du son échantillonné&lt;br /&gt;
&lt;br /&gt;
=Solution technique retenue et étude de faisabilité=&lt;br /&gt;
==Étude de faisabilité via un Intel Edison==&lt;br /&gt;
==Etude de l'utilisation d'un FPGA pour le traitement du son==&lt;br /&gt;
==Solution retenue : Arduino !==&lt;br /&gt;
&lt;br /&gt;
Partie Edison&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;mraa/aio.h&amp;quot;&lt;br /&gt;
#define GPIO_NUMBER             12&lt;br /&gt;
#define GPIO_BASE_OFFSET        2&lt;br /&gt;
int init_gpio(mraa_gpio_context* gpios){&lt;br /&gt;
        int     i;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++) gpios[i] = NULL;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++){&lt;br /&gt;
                gpios[i] = mraa_gpio_init(GPIO_BASE_OFFSET+i);&lt;br /&gt;
                if(gpios[i] == NULL){&lt;br /&gt;
                        printf(&amp;quot;Unable to get context for pin %d\n&amp;quot;, i);&lt;br /&gt;
                        return 1;&lt;br /&gt;
                }&lt;br /&gt;
                mraa_gpio_dir(gpios[i], MRAA_GPIO_OUT);&lt;br /&gt;
        }&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
    uint8_t             ret;&lt;br /&gt;
    uint16_t            adc_value = 0;&lt;br /&gt;
    mraa_aio_context    adc_a0 = NULL;&lt;br /&gt;
    mraa_gpio_context   gpio[GPIO_NUMBER];&lt;br /&gt;
    mraa_init();&lt;br /&gt;
    adc_a0 = mraa_aio_init(0);&lt;br /&gt;
    mraa_aio_set_bit(adc_a0, 12);   // 12 bits resolution&lt;br /&gt;
    ret = init_gpio(gpio);&lt;br /&gt;
    if (adc_a0 == NULL){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize ADC\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    if(ret != 0){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize GPIOs\n&amp;quot;);&lt;br /&gt;
        return 2;&lt;br /&gt;
    }&lt;br /&gt;
    for (;;){&lt;br /&gt;
        adc_value = mraa_aio_read(adc_a0);&lt;br /&gt;
        fprintf(stdout, &amp;quot;ADC A0 read %X - %d\n&amp;quot;, adc_value, adc_value);&lt;br /&gt;
        mraa_gpio_write(gpio[0x0], ((adc_value &amp;amp; 0x001) == 0x001));&lt;br /&gt;
        mraa_gpio_write(gpio[0x1], ((adc_value &amp;amp; 0x002) == 0x002));&lt;br /&gt;
        mraa_gpio_write(gpio[0x2], ((adc_value &amp;amp; 0x004) == 0x004));&lt;br /&gt;
        mraa_gpio_write(gpio[0x3], ((adc_value &amp;amp; 0x008) == 0x008));&lt;br /&gt;
        mraa_gpio_write(gpio[0x4], ((adc_value &amp;amp; 0x010) == 0x010));&lt;br /&gt;
        mraa_gpio_write(gpio[0x5], ((adc_value &amp;amp; 0x020) == 0x020));&lt;br /&gt;
        mraa_gpio_write(gpio[0x6], ((adc_value &amp;amp; 0x040) == 0x040));&lt;br /&gt;
        mraa_gpio_write(gpio[0x7], ((adc_value &amp;amp; 0x080) == 0x080));&lt;br /&gt;
        mraa_gpio_write(gpio[0x8], ((adc_value &amp;amp; 0x100) == 0x100));&lt;br /&gt;
        mraa_gpio_write(gpio[0x9], ((adc_value &amp;amp; 0x200) == 0x200));&lt;br /&gt;
        mraa_gpio_write(gpio[0xA], ((adc_value &amp;amp; 0x400) == 0x400));&lt;br /&gt;
        mraa_gpio_write(gpio[0xB], ((adc_value &amp;amp; 0x800) == 0x800));&lt;br /&gt;
    }&lt;br /&gt;
    mraa_aio_close(adc_a0);&lt;br /&gt;
    return MRAA_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and NOPE&lt;br /&gt;
&lt;br /&gt;
Partie Artix 7&lt;br /&gt;
NOPE&lt;br /&gt;
&lt;br /&gt;
Partie Arduino&lt;br /&gt;
Ultimate tuto, a preview of the simplicity : [http://www.pobot.org/Traitement-du-son-par-FFT-fast.html?lang=fr Free efficient project here]&lt;br /&gt;
&lt;br /&gt;
([http://wiki.openmusiclabs.com/wiki/ArduinoFFT Démo des mathématiques ici :])&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25072</id>
		<title>T Shirt d'ambiance connecté</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25072"/>
				<updated>2016-01-19T16:38:46Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Partie Edison ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;mraa/aio.h&amp;quot;&lt;br /&gt;
#define GPIO_NUMBER             12&lt;br /&gt;
#define GPIO_BASE_OFFSET        2&lt;br /&gt;
int init_gpio(mraa_gpio_context* gpios){&lt;br /&gt;
        int     i;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++) gpios[i] = NULL;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++){&lt;br /&gt;
                gpios[i] = mraa_gpio_init(GPIO_BASE_OFFSET+i);&lt;br /&gt;
                if(gpios[i] == NULL){&lt;br /&gt;
                        printf(&amp;quot;Unable to get context for pin %d\n&amp;quot;, i);&lt;br /&gt;
                        return 1;&lt;br /&gt;
                }&lt;br /&gt;
                mraa_gpio_dir(gpios[i], MRAA_GPIO_OUT);&lt;br /&gt;
        }&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
    uint8_t             ret;&lt;br /&gt;
    uint16_t            adc_value = 0;&lt;br /&gt;
    mraa_aio_context    adc_a0 = NULL;&lt;br /&gt;
    mraa_gpio_context   gpio[GPIO_NUMBER];&lt;br /&gt;
    mraa_init();&lt;br /&gt;
    adc_a0 = mraa_aio_init(0);&lt;br /&gt;
    mraa_aio_set_bit(adc_a0, 12);   // 12 bits resolution&lt;br /&gt;
    ret = init_gpio(gpio);&lt;br /&gt;
    if (adc_a0 == NULL){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize ADC\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    if(ret != 0){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize GPIOs\n&amp;quot;);&lt;br /&gt;
        return 2;&lt;br /&gt;
    }&lt;br /&gt;
    for (;;){&lt;br /&gt;
        adc_value = mraa_aio_read(adc_a0);&lt;br /&gt;
        fprintf(stdout, &amp;quot;ADC A0 read %X - %d\n&amp;quot;, adc_value, adc_value);&lt;br /&gt;
        mraa_gpio_write(gpio[0x0], ((adc_value &amp;amp; 0x001) == 0x001));&lt;br /&gt;
        mraa_gpio_write(gpio[0x1], ((adc_value &amp;amp; 0x002) == 0x002));&lt;br /&gt;
        mraa_gpio_write(gpio[0x2], ((adc_value &amp;amp; 0x004) == 0x004));&lt;br /&gt;
        mraa_gpio_write(gpio[0x3], ((adc_value &amp;amp; 0x008) == 0x008));&lt;br /&gt;
        mraa_gpio_write(gpio[0x4], ((adc_value &amp;amp; 0x010) == 0x010));&lt;br /&gt;
        mraa_gpio_write(gpio[0x5], ((adc_value &amp;amp; 0x020) == 0x020));&lt;br /&gt;
        mraa_gpio_write(gpio[0x6], ((adc_value &amp;amp; 0x040) == 0x040));&lt;br /&gt;
        mraa_gpio_write(gpio[0x7], ((adc_value &amp;amp; 0x080) == 0x080));&lt;br /&gt;
        mraa_gpio_write(gpio[0x8], ((adc_value &amp;amp; 0x100) == 0x100));&lt;br /&gt;
        mraa_gpio_write(gpio[0x9], ((adc_value &amp;amp; 0x200) == 0x200));&lt;br /&gt;
        mraa_gpio_write(gpio[0xA], ((adc_value &amp;amp; 0x400) == 0x400));&lt;br /&gt;
        mraa_gpio_write(gpio[0xB], ((adc_value &amp;amp; 0x800) == 0x800));&lt;br /&gt;
    }&lt;br /&gt;
    mraa_aio_close(adc_a0);&lt;br /&gt;
    return MRAA_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and NOPE&lt;br /&gt;
&lt;br /&gt;
== Partie Artix 7 ==&lt;br /&gt;
NOPE&lt;br /&gt;
&lt;br /&gt;
== Partie Arduino ==&lt;br /&gt;
Ultimate tuto, a preview of the simplicity : [http://www.pobot.org/Traitement-du-son-par-FFT-fast.html?lang=fr Free efficient project here]&lt;br /&gt;
&lt;br /&gt;
([http://wiki.openmusiclabs.com/wiki/ArduinoFFT Démo des mathématiques ici :])&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25071</id>
		<title>T Shirt d'ambiance connecté</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=T_Shirt_d%27ambiance_connect%C3%A9&amp;diff=25071"/>
				<updated>2016-01-19T16:35:45Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Abandon de l'Intel Edison, utilisation d'une solution Arduino&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Partie Edison ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;quot;mraa/aio.h&amp;quot;&lt;br /&gt;
#define GPIO_NUMBER             12&lt;br /&gt;
#define GPIO_BASE_OFFSET        2&lt;br /&gt;
int init_gpio(mraa_gpio_context* gpios){&lt;br /&gt;
        int     i;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++) gpios[i] = NULL;&lt;br /&gt;
        for(i=0; i&amp;lt;GPIO_NUMBER; i++){&lt;br /&gt;
                gpios[i] = mraa_gpio_init(GPIO_BASE_OFFSET+i);&lt;br /&gt;
                if(gpios[i] == NULL){&lt;br /&gt;
                        printf(&amp;quot;Unable to get context for pin %d\n&amp;quot;, i);&lt;br /&gt;
                        return 1;&lt;br /&gt;
                }&lt;br /&gt;
                mraa_gpio_dir(gpios[i], MRAA_GPIO_OUT);&lt;br /&gt;
        }&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
int main(){&lt;br /&gt;
    uint8_t             ret;&lt;br /&gt;
    uint16_t            adc_value = 0;&lt;br /&gt;
    mraa_aio_context    adc_a0 = NULL;&lt;br /&gt;
    mraa_gpio_context   gpio[GPIO_NUMBER];&lt;br /&gt;
    mraa_init();&lt;br /&gt;
    adc_a0 = mraa_aio_init(0);&lt;br /&gt;
    mraa_aio_set_bit(adc_a0, 12);   // 12 bits resolution&lt;br /&gt;
    ret = init_gpio(gpio);&lt;br /&gt;
    if (adc_a0 == NULL){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize ADC\n&amp;quot;);&lt;br /&gt;
        return 1;&lt;br /&gt;
    }&lt;br /&gt;
    if(ret != 0){&lt;br /&gt;
        printf(&amp;quot;Unable to initialize GPIOs\n&amp;quot;);&lt;br /&gt;
        return 2;&lt;br /&gt;
    }&lt;br /&gt;
    for (;;){&lt;br /&gt;
        adc_value = mraa_aio_read(adc_a0);&lt;br /&gt;
        fprintf(stdout, &amp;quot;ADC A0 read %X - %d\n&amp;quot;, adc_value, adc_value);&lt;br /&gt;
        mraa_gpio_write(gpio[0x0], ((adc_value &amp;amp; 0x001) == 0x001));&lt;br /&gt;
        mraa_gpio_write(gpio[0x1], ((adc_value &amp;amp; 0x002) == 0x002));&lt;br /&gt;
        mraa_gpio_write(gpio[0x2], ((adc_value &amp;amp; 0x004) == 0x004));&lt;br /&gt;
        mraa_gpio_write(gpio[0x3], ((adc_value &amp;amp; 0x008) == 0x008));&lt;br /&gt;
        mraa_gpio_write(gpio[0x4], ((adc_value &amp;amp; 0x010) == 0x010));&lt;br /&gt;
        mraa_gpio_write(gpio[0x5], ((adc_value &amp;amp; 0x020) == 0x020));&lt;br /&gt;
        mraa_gpio_write(gpio[0x6], ((adc_value &amp;amp; 0x040) == 0x040));&lt;br /&gt;
        mraa_gpio_write(gpio[0x7], ((adc_value &amp;amp; 0x080) == 0x080));&lt;br /&gt;
        mraa_gpio_write(gpio[0x8], ((adc_value &amp;amp; 0x100) == 0x100));&lt;br /&gt;
        mraa_gpio_write(gpio[0x9], ((adc_value &amp;amp; 0x200) == 0x200));&lt;br /&gt;
        mraa_gpio_write(gpio[0xA], ((adc_value &amp;amp; 0x400) == 0x400));&lt;br /&gt;
        mraa_gpio_write(gpio[0xB], ((adc_value &amp;amp; 0x800) == 0x800));&lt;br /&gt;
    }&lt;br /&gt;
    mraa_aio_close(adc_a0);&lt;br /&gt;
    return MRAA_SUCCESS;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and NOPE&lt;br /&gt;
&lt;br /&gt;
== Partie Artix 7 ==&lt;br /&gt;
NOPE&lt;br /&gt;
&lt;br /&gt;
== Partie Arduino ==&lt;br /&gt;
Ultimate tuto, a preview of the simplicity : [http://www.pobot.org/Traitement-du-son-par-FFT-fast.html?lang=fr Free efficient project here]&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24430</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24430"/>
				<updated>2015-12-14T22:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Création de l'outil de manipulation par aspiration */ Rédaction de la description&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
&lt;br /&gt;
L'outil qui viendra attraper et déposer les composants sera composé d'une aiguille fine qui les maintiendra par aspiration. Le système sera donc composé d'une pompe à vide, type pompe d'aquariophilie, peu couteuse, car l'aspiration nécessaire pour maintenir un composant est vraiment très faible. Ce genre de pompe se commande en tout ou rien au moyen d'un interrupteur manuel. Afin de ne pas alterner cycles d'allumage de la pompe pour éviter de l'endommager et surtout d'attendre le temps d'établissement du débit à chaque fois, lors des phases aspiration-dépose, nous utiliserons un distributeur pneumatique qui viendra envoyer ou non la dépression dans le tuyau d'air.&lt;br /&gt;
&lt;br /&gt;
Une partie majeure du travail va consister en la conception de la pièce mécanique, le chariot, qui intégrera les moteurs pour effectuer la translation et la rotation autour de Z, un capteur piézoélectrique qui permettra la détection du contact entre le composant et la carte et qui intégrera un espace prévu à cet effet pour maintenir le tuyau et l'aiguille. Ce chariot sera adaptable au reste du châssis et comportera une partie qui le fixe à la courroie.&lt;br /&gt;
&lt;br /&gt;
Niveau matériel pour cette partie, nous avons pour le moment réuni le distributeur, les tuyaux et l'aiguille. Nous devrions recevoir la pompe sous peu de temps.&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24424</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24424"/>
				<updated>2015-12-14T20:17:48Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Placeur de composants sur PCB */ Ajout et corrections mineures&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille. Nous tenons par ailleurs également à remercier chaleureusement Antoine, contributeur actif au Fablab de Polytech Lille, pour son partage d'expérience à propos de la création de son imprimante 3D RepRap, projet similaire au notre.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en surface).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'ils représentent, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il intègre directement cette structure de pont en H et les séquences d'alimentation. Il permet ainsi de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
[A REDIGER]&lt;br /&gt;
-Pompe aquariophilie&lt;br /&gt;
-Distributeur&lt;br /&gt;
-Aiguille (+tube)&lt;br /&gt;
-Insertion d'un capteur extensométrie (piézo) pour détec contac compo-carte&lt;br /&gt;
-Intégration des moteurs (trans Z + rot Z)&lt;br /&gt;
-&amp;gt;intégrer tout ça sur un chariot (#megadesign 3D)&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24395</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=24395"/>
				<updated>2015-12-14T00:45:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Placeur de composants sur PCB */ Ajout Catégorie Motorisation + Ajout Catégorie Outil manip aspiration + Modifications et corrections générales&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Retour sur les directives des encadrants===&lt;br /&gt;
====M. Flamen====&lt;br /&gt;
[[Fichier:Exemple composant cms.jpg|200px|thumb|right|Exemple de composants CMS]]&lt;br /&gt;
Dans un premier temps, pour mieux définir les objectifs de notre  projet, nous avons pris rendez vous avec M. Flamen. M. Flamen est le responsable du service électronique de PolytechLille. Il est le principal intéressé par notre projet car celui-ci (le projet) permettrait de disposer de la chaîne complète de fabrication de cartes électroniques CMS (composants montés en sufrace).&lt;br /&gt;
&lt;br /&gt;
Cette rencontre avec M. Flamen nous a permis de déterminer certaines précisions, comme:&lt;br /&gt;
* La précision maximale demandé n'excédera pas 0,2 mm (précision de classe 5, qui est celle de la graveuse de carte du service EEI).&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
*Support&lt;br /&gt;
** 3 Tiges de 1 mètre [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges) [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
** 1 Planche en bois pour effectuer le support du projet [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-10-12&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/][&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-11-09&amp;lt;/span&amp;gt;]&lt;br /&gt;
*2 Courroies crantées plus grandes [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;Reçu le 2015-12-27&amp;lt;/span&amp;gt;]&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
* Rien pour le moment&lt;br /&gt;
&lt;br /&gt;
==Fabrication de l'infrastructure mécanique==&lt;br /&gt;
[[Fichier:assp_usinage1.jpg|200px|thumb|left|Usinage des pylônes à la perceuse à colonne]]&lt;br /&gt;
[[Fichier:assp_usinage2.jpg|200px|thumb|right|Tour conventionnel utilisé pour le perçage]]&lt;br /&gt;
[[Fichier:assp_usinage3.jpg|200px|thumb|left|Marquages sur le support pour la pose de pylônes]]&lt;br /&gt;
[[Fichier:assp_usinage4.jpg|200px|thumb|right|Etat de la maquette avant la fixation finale]]&lt;br /&gt;
Notre projet comprend une partie extrêmement importante de conception. Sur conseils de M. Astori, nous avons donc décidé d'utiliser une organisation plus particulière. Le principe de cette organisation est de créer des pièces (on parle ici uniquement de leur impression à l'imprimante 3D et de la phase de conception sous Catia) rapidement, avec une faible taux de remplissage (de l'ordre de 30%). Le but de cette méthode est de créer un nombre de pièces plus important, permettant plus facilement rectifications en fonction des remarques que nous tirons du montage.&lt;br /&gt;
&lt;br /&gt;
===La partie usinage===&lt;br /&gt;
Nous avons commencé par acheter une support contreplaqué en bois. Sur ce support, nous avons disposé quatre pylônes reliés deux à deux par un axe métallique. Nous avons donc découpé à la scie à chantourner plusieurs linteaux de bois pour fabriquer les pylônes. Ensuite, nous avons usiné les pylônes à l'aide d'une perceuse à colonne pour leur permettre de recevoir l'axe métallique.&lt;br /&gt;
&lt;br /&gt;
Ensuite, nous avons eu la surprise de recevoir des poulies non percées. Nous avons donc du les percer. Nous avons percé les deux premières à l'aide de la perceuse à colonne. Le désavantage de cet outil est son imprécision sur la largeur de perçage. De plus, il n'était pas possible d'y ajouter un mécanisme permettant son maintien au moteur. Par conséquent, nous avons eu la chance d'être aidé par l'atelier mécanique. Ainsi, nous avons usiné les deux dernières poulies à l'aide d'un tour conventionnel (sous la supervision du responsable de l'atelier mécanique). Nous avons ensuite, toujours avec l'aide de M.Yoan Dhont, percé les deux poulies selon un axe perpendiculaire au précédent et créé un filetage pour permettre l'insertion d'une vis sans tête pour assurer la fixation au moteur.&lt;br /&gt;
&lt;br /&gt;
Pour des raisons pratiques et esthétiques, nous avons demandé à la menuiserie de Polytech Lille de corriger nos pylônes pour assurer leur perpendicularité. Cette correction a été effectuée par M. David [TODO] et M. JP [TODO] à l'aide d'une scie à bande. Par la suite, nous avons marqué le support pour faciliter le perçage et l'ajustement des pylônes. Une fois les marquages, nous avons percé le support et les pylônes pour assurer une bonne fixation.&lt;br /&gt;
&lt;br /&gt;
===La partie impression===&lt;br /&gt;
[[Fichier:assp_impression1.png|200px|thumb|left|Version 1 et 2 du guide axe avec moteur]]&lt;br /&gt;
[[Fichier:assp_impression2.png|180px|thumb|right|Guide axe antagoniste (sans moteur)]]&lt;br /&gt;
[[Fichier:assp_impression3.png|200px|thumb|left|Guide de poulie et garde moteur]]&lt;br /&gt;
Nous avons commencé par créé un chariot permettant le déplacement selon l'axe X, et permettant d'embarquer le moteur pour le déplacement selon Y. Nous l'avons créé à l'aide du logiciel Catia. Les cotes imposés sur le schéma sont celles fournies par la documentation et par mesure des axes métalliques au pieds à coulisse.&lt;br /&gt;
&lt;br /&gt;
Après impression, nous nous sommes aperçu que la documentation comprenait une erreur importante sur la taille des moteurs, nous obligeant à réimprimer une deuxième pièce. Nous avons profiter de la deuxième impression pour réduire la surface de contexte entre l'axe X de la pièce et l'axe métallique X.&lt;br /&gt;
&lt;br /&gt;
La deuxième pièce est très identique à la première à la différence près qu'elle n'embarque pas de moteur. Elle embarque uniquement une poulie permettant le passage de la courroie de transport en Y. Cette version, bien que fonctionnelle, n'a pas eu (pour le moment) l'amélioration apportée par la deuxième version de la pièce 1 (c'est à dire la réduction de surface de contact).&lt;br /&gt;
&lt;br /&gt;
Les deux dernières pièces sont des pièces de support pour permettre au moteur de l'axe X et à la poulie de l'axe X de se maintenir sur leur pylône respectif. Le support de poulie n'a tenu que deux jours avant de rendre l'âme. Nous avons donc remplacé de façon temporaire son axe par une longue vis à bois. Le support de moteur n'a, lui, pas cassé, mais nécessite d'être imprimer une deuxième fois car la documentation du moteur était incorrecte (encore une fois).&lt;br /&gt;
&lt;br /&gt;
Quelques jours avant la pré soutenance, les pièces semblent fonctionnelles. Une amélioration peut être apportée dans un second temps en modifiant les guide d'axe par des poulies (imprimées à l'imprimante 3D) permettant de suivre plus fidèlement l'axe métallique. Ce système sera développé durant les semaines suivants la pré soutenance.&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Motorisation et asservissement en position==&lt;br /&gt;
===Besoins et choix des moteurs===&lt;br /&gt;
Nous avons besoin de déplacer notre chariot comportant l'outil d'aspiration qui manipule les composants selon les 3 axes de l'espace X, Y et Z. Afin d'assurer les translations dans le plan (X,Y), nous nous sommes orienté vers un système moteur-poulie-courroie sur chacun de ces 2 axes. Nous avons besoin d'une précision en position de l'ordre de 0,2mm et n'avons pas un besoin en couple important, ni d'un asservissement en vitesse spécifique.&lt;br /&gt;
&lt;br /&gt;
Nous avons donc choisi d'utiliser des moteurs Pas à Pas, qui offrent les avantages d'être précis en terme de position angulaire, de pouvoir adapter cette précision en les commandant en micro-pas et surtout de pouvoir réaliser l'asservissement en position sans capteurs. En effet, nous nous baserons sur le comptage du nombre de pas que l'on a fait effectuer au moteur, en supposant qu'aucun pas n'est sauté durant le déplacement. En effet, dans notre application la charge a entrainer est suffisamment faible et le déplacement se fera a une vitesse suffisamment basse afin d'assurer cette hypothèse.&lt;br /&gt;
&lt;br /&gt;
Dans une seconde version, pour être sûr du positionnement et pour palier aux imprécisions (type jeux sur la maquette...) sur la position initiale, la position de la poulie et son diamètre, nous mettrons en place un système d'ajustement via une caméra, où l'utilisateur viendra valider le placement du composant avant dépose sur la carte.&lt;br /&gt;
&lt;br /&gt;
Le déplacement de position est alors déduit ainsi : &amp;lt;math&amp;gt;\Delta X = \mu_{micropas} * \theta_{Pas_{nominal}} * R_{poulie} * \Delta {N_{Pas}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec &amp;lt;math&amp;gt;\theta_{Pas_{nominal}}&amp;lt;/math&amp;gt; le pas angulaire de nos moteurs en radian (ici, 1,8°=0,031415 rad) ,&amp;lt;math&amp;gt;\mu_{micropas}&amp;lt;/math&amp;gt; le facteur de micro-pas choisi (typiquement 1/2, 1/4, voire 1/8), &amp;lt;math&amp;gt;R_{poulie}&amp;lt;/math&amp;gt; le rayon du moyen de la poulie crantée en mm (ici 7,15mm) et &amp;lt;math&amp;gt;\Delta {N_{Pas}}&amp;lt;/math&amp;gt; le nombre de pas demandé (dans un sens ou dans un autre).&lt;br /&gt;
&lt;br /&gt;
Pour enfin connaitre la position absolue, il s'agit de connaitre la position initiale du chariot. Ceci sera réalisé avec des capteurs &amp;quot;fin de course&amp;quot;, type contacteurs à lamelles.&lt;br /&gt;
&lt;br /&gt;
===Commande des moteurs Pas à Pas===&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper_4.png|140px|thumb|left|Schéma symbolisant les phases et l'arbre du moteur Pas à Pas bipolaire]]&lt;br /&gt;
[[Fichier:assp_schema_bipolar_stepper.jpg|300px|thumb|right|Schéma de la séquence d'alimentation complète du moteur bipolaire, en pas complet]]&lt;br /&gt;
&lt;br /&gt;
Le principal inconvénient des moteurs Pas à Pas réside dans la commande de ceux-ci. En effet, un moteur Pas à Pas est un moteur particulier sans balai et alimenté par une alimentation continue. Il comporte plusieurs bobines permettant de créer un champ magnétique à l'intérieur et ainsi d'orienter des aimants fixés au rotor dans la direction du champ magnétique crée, ce qui provoque la rotation de l'arbre. On utilise le terme Pas à Pas car le champ magnétique crée à l'intérieur se fait par incréments. Ainsi pour faire tourner l'arbre entièrement, il faut effectuer l'alimentation des bobines pour une position 1, puis position 2, et ainsi de suite, selon la géométrie et la technologie du moteur utilisées.&lt;br /&gt;
&lt;br /&gt;
Ainsi, le contrôle de celui ci s'effectue par une séquence d'alimentation spécifique de ses différentes phases. Dans notre cas, nous avons choisi des moteurs bipolaires (de type Hybride, c'est à dire combinant les avantages des technologies &amp;quot;à aimant permanent&amp;quot; et à &amp;quot;réluctance variable&amp;quot;). Le sens de rotation des ces moteurs dépend de l'ordre d'alimentation des 2 bobines, ainsi que du sens du courant.&lt;br /&gt;
&lt;br /&gt;
Ce pilotage peut s'effectuer au moyen d'une électronique de puissance type pont en H, sur laquelle on pilote les séquences de commutation des différentes cellules de commutation (transistor + diode en sens inverse en parallèle). Cependant une telle structure est compliquée à mettre en place au niveau des séquences, n'intègre pas directement de limitation active du courant délivré dans la bobine et surtout n'intègre pas directement de variation de courant afin de contrôler le moteur en micro-pas.&lt;br /&gt;
&lt;br /&gt;
Présentant des prix très faibles (environ 5€) pour l'économie de temps et la simplicité d'utilisation qu'il représente, nous avons donc cherché des solutions de drivers adaptés à nos moteurs. Basé sur le circuit A4988 d'Allegro, nous nous sommes tourné vers ce driver pour moteur bipolaire (Pololu A4988 Stepper Motor Driver Carrier). Son principe est simple : il permet de faire effectuer au moteur un pas en envoyant une impulsion (front montant) sur sa pin STEP, dans le sens défini par l'état (haut ou bas) de sa pin DIR.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:assp_driver_pololu_pinout.png|380px|thumb|centre|Schéma du fonctionnement et du branchement du driver]]&lt;br /&gt;
&lt;br /&gt;
Ce driver réalise également l'interface commande-puissance, il comporte une alimentation séparée pour le circuit logique (5V) et l'alimentation de puissance des moteurs (ici 12V). Il est très important pour éviter la surchauffe et l'endommagement des moteurs de contrôler le courant envoyé dans ses bobines. Nous limitons ainsi activement ce courant grâce au driver au moyen d'un potentiomètre à régler sur ce dernier. Nous avons réglé cette valeur par rapport aux courants nominaux par phase de nos moteurs.&lt;br /&gt;
&lt;br /&gt;
L'avantage majeur de ce driver est qu'il comporte une solution de fonctionnement en micro-pas directement. Par l'état de ses pins MS1, MS2 et MS3, il nous permet de piloter du pas complet, au 1/16 de pas (maximum). Nous ne piloterons pas jusqu'au 1/16 de pas pour des soucis de stabilité du couple mécanique et pour éviter de sauter des pas, 1/4 voire 1/8 de pas devrait être suffisant. Le choix du micropas maximum sera à déterminer avec les tests sur la machine.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous pilotons toutes ces différentes entrées par le biais d'un Arduino Mega. Plus tard, cet Arduino Mega servira d'interface entre la consigne de position envoyée depuis l'application PC et les moteurs.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:|200px|thumb|right|Photo de la partie commande des moteurs]]&lt;br /&gt;
&lt;br /&gt;
==Création de l'outil de manipulation par aspiration==&lt;br /&gt;
[A REDIGER]&lt;br /&gt;
-Pompe aquariophilie&lt;br /&gt;
-Distributeur&lt;br /&gt;
-Aiguille (+tube)&lt;br /&gt;
-Insertion d'un capteur extensométrie (piézo) pour détec contac compo-carte&lt;br /&gt;
-Intégration des moteurs (trans Z + rot Z)&lt;br /&gt;
-&amp;gt;intégrer tout ça sur un chariot (#megadesign 3D)&lt;br /&gt;
&lt;br /&gt;
==Conception du logiciel==&lt;br /&gt;
===Définition du cadre===&lt;br /&gt;
Un des buts de ce projet est de concevoir une application permettant de contrôler les différents éléments du projet. Pour cela nous, l'application doit être capable de lire des fichiers standards de création de carte électronique (aussi appelés fichiers Gerber). De plus, nous souhaitions que l'application puisse être utilisé sur n'importe quelle plateforme. Pour cela, nous avons choisi de la développer sous [http://www.qt.io/ Qt]. L’environnement de travail Qt nous permet d'utiliser des objets permettant l'accès à n'importe quel type de matériel sans se soucier de la plateforme de destination. Pour la communication avec les éléments de commande (comme les moteurs) nous avons choisi de n'envoyer des ordres qu'à travers l'Arduino Mega.&lt;br /&gt;
===La communication entre le logiciel et l'Arduino Mega===&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper_4.png&amp;diff=24394</id>
		<title>Fichier:Assp schema bipolar stepper 4.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper_4.png&amp;diff=24394"/>
				<updated>2015-12-14T00:39:19Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper_2.jpg&amp;diff=24393</id>
		<title>Fichier:Assp schema bipolar stepper 2.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper_2.jpg&amp;diff=24393"/>
				<updated>2015-12-14T00:31:26Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper.jpg&amp;diff=24392</id>
		<title>Fichier:Assp schema bipolar stepper.jpg</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_schema_bipolar_stepper.jpg&amp;diff=24392"/>
				<updated>2015-12-14T00:12:41Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Projet P20 IMA5 2015/2016
Schema wiring d'un moteur stepper bipolaire&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet P20 IMA5 2015/2016&lt;br /&gt;
Schema wiring d'un moteur stepper bipolaire&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_driver_pololu_pinout.png&amp;diff=24391</id>
		<title>Fichier:Assp driver pololu pinout.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Assp_driver_pololu_pinout.png&amp;diff=24391"/>
				<updated>2015-12-14T00:09:40Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Projet P20 IMA5 2015/2016
Schéma pinout du driver moteur Pas à Pas Pololu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Projet P20 IMA5 2015/2016&lt;br /&gt;
Schéma pinout du driver moteur Pas à Pas Pololu&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=22193</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=22193"/>
				<updated>2015-10-14T15:19:16Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Liste de matériel */ Mise à jour de la liste&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
* 3 Tiges de 1 mètre&lt;br /&gt;
* 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges)&lt;br /&gt;
* 1 Planche en bois pour effectuer le support du projet&lt;br /&gt;
&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm]&lt;br /&gt;
**1 Moteur Pas à Pas (pour rotation autour de Z) [http://www.gotronic.fr/art-moteur-24byj48-19028.htm]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour translation selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm]&lt;br /&gt;
**4 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/]&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=22192</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=22192"/>
				<updated>2015-10-14T14:51:43Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout Ebauche de planning prévisionnel&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Définitions des objectifs===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning prévisionnel de répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 39 (21/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 40 (28/09)&lt;br /&gt;
 | Brainstorming et réunions avec les encadrants de projet afin de définir les objectifs / Étude de faisabilité&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 41 (05/10)&lt;br /&gt;
 | Dimensionnement des éléments du système et recherche du matériel à commander en tenant compte des contraintes de coût&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 42 (12/10)&lt;br /&gt;
 | Achat du matériel pour le châssis de la machine (bois, tiges métalliques...) et pré-assemblage / Conception des pièces mécaniques à imprimer au FabLab&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 43 (19/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 44 (26/10)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 45 (02/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Conception des pièces mécaniques à imprimer au FabLab / Développement de l'application PC / Étude de la commande des moteurs et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 46 (09/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Fabrication du châssis - assemblage des pièces / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 47 (16/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 48 (23/11)&lt;br /&gt;
 | Dans l'attente de la réception du matériel commandé : Impression 3D des pièces mécaniques / Développement de l'application PC / Étude de l'asservissement en position et du repérage caméra &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 49 (30/11)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 50 (07/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 51 (14/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 52 (21/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 53 (28/12)&lt;br /&gt;
 | Réception espérée du matériel : Montage de la maquette / Prise en main et calibrage des éléments / Tests&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 01 (04/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 02 (11/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 03 (18/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 04 (25/01)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 05 (01/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 06 (08/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 07 (15/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 08 (22/02)&lt;br /&gt;
 | &lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
* 3 Tiges de 1 mètre&lt;br /&gt;
* 1 Tasseau de 2m70 (découpé pour fabriquer les supports des tiges)&lt;br /&gt;
* 1 Planche en bois pour effectuer le support du projet&lt;br /&gt;
&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour déplacement selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm]&lt;br /&gt;
**3 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/]&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21956</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21956"/>
				<updated>2015-10-08T14:18:28Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Corrections mineures et mises en forme&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le composant&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le composant&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine et permettant leur calibrage&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning de répartition du travail===&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour déplacement selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm]&lt;br /&gt;
**3 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/]&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21955</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21955"/>
				<updated>2015-10-08T14:15:46Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout Matériel à commander&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le compo&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le compo&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning de répartition du travail===&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
====Matériel manquant====&lt;br /&gt;
*Motorisation&lt;br /&gt;
**2 Moteurs Pas à Pas type NEMA 17 (pour axes X et Y) [http://www.gotronic.fr/art-moteur-17hs15-0404s-18354.htm]&lt;br /&gt;
**1 Moteur Pas à Pas avec glissière intégrée (pour déplacement selon Z) [http://www.gotronic.fr/art-moteur-pas-a-pas-a-glissiere-800180001-21817.htm]&lt;br /&gt;
**3 drivers pour moteur Pas à Pas bipolaire [http://www.gotronic.fr/art-driver-de-moteur-pas-a-pas-a4988-1182-21718.htm]&lt;br /&gt;
*Outil d'aspiration&lt;br /&gt;
**Aiguille manipulant le composant [http://www.gotronic.fr/art-jeu-de-4-aiguilles-eso12-7428.htm]&lt;br /&gt;
**Tube flexible [http://fr.rs-online.com/web/p/tubes-flexibles/7989985/]&lt;br /&gt;
*Châssis mécanique&lt;br /&gt;
**2 Courroies crantées [http://fr.rs-online.com/web/p/courroies-crantees/4749614/]&lt;br /&gt;
**4 Poulies crantées [http://fr.rs-online.com/web/p/poulies-pour-courroies-crantees/0182565/]&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21954</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21954"/>
				<updated>2015-10-08T14:07:18Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout ébauche Cahier des charges + Liste des tâches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
*Prendre un composant&lt;br /&gt;
**Stocker les composants à déposer sur la carte et identifier leur position&lt;br /&gt;
**Maintenir le composant par aspiration&lt;br /&gt;
*Repérer la position et l’orientation de la carte&lt;br /&gt;
*Déplacer le compo&lt;br /&gt;
**Le déplacer en translation selon les axes X, Y et Z&lt;br /&gt;
**L’orienter correctement sur les pastilles (rotation autour de Z)&lt;br /&gt;
*Déposer le compo&lt;br /&gt;
**S’assurer que l’outil d’aspiration n’endommage ni la carte, ni le composant lors de la dépose -&amp;gt; détecter le contact entre le composant et la carte&lt;br /&gt;
*Connaître la position désirée pour la dépose du composant&lt;br /&gt;
**Récupérer les fichiers provenant du logiciel de CAO et les transformer en déplacement de la machine&lt;br /&gt;
**Permettre à l’utilisateur d’avoir une interface visuelle (sur ordinateur) indiquant l’état des éléments de la machine&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Créer l’infrastructure mécanique de la machine (châssis)&lt;br /&gt;
**Fabrication du châssis &lt;br /&gt;
**Design des pièces mobiles et impression 3D de ces pièces au FabLab (chariot comportant l’outil d’aspiration et “guides tubes” assurant la transformation de la rotation des moteurs en mouvement de translation (glissières) sur des barres métalliques)&lt;br /&gt;
**Assembler l’outil d’aspiration au chariot&lt;br /&gt;
*Concevoir la commande d’aspiration par pompe&lt;br /&gt;
*Organiser la commande des moteurs du système pour l’asservissement en position de la machine&lt;br /&gt;
**Étude et prise en main des drivers pour les moteurs Pas à Pas&lt;br /&gt;
*Réalisation de l’interface commande-puissance&lt;br /&gt;
*Réaliser la conversion des données de position (relatives) de l’emplacement souhaités des composants en mouvements pour la machine&lt;br /&gt;
**Concevoir l’interface de récupération des données du fichier Gerber de l’utilisateur&lt;br /&gt;
**Caractérisation des différents repères (repère de la machine, repère de l’outil et repère de la carte) et établir le lien entres eux&lt;br /&gt;
**Détecter l’origine du repère de la carte au moyen d’une caméra fixe&lt;br /&gt;
===Planning de répartition du travail===&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
====Matériel manquant====&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21844</id>
		<title>Automatic Soldering System Project</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Automatic_Soldering_System_Project&amp;diff=21844"/>
				<updated>2015-10-06T13:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : Ajout plan wiki - Présentation du projet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
&amp;lt;br style=&amp;quot;clear: both;&amp;quot;/&amp;gt;&lt;br /&gt;
=Placeur de composants sur PCB=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
Durant le début de l'été, nous avons eu l'idée de proposer un projet de soudure automatique. Ce projet avait pour but de concevoir un système permettant l'automatisation des soudures sur une carte électronique à composants traversants. Après des échanges avec le responsable des projet de 5éme année, M. Vantroys, nous avons finalement abandonné notre projet au profit d'un autre projet assez proche.&lt;br /&gt;
L'idée du nouveau projet est de proposer un système de Pick &amp;amp; Place de composants CMS sur une carte électronique sur laquelle de la crème à braser est préalablement déposée sur les pastilles. Pour mener à bien ce projet, nous avons été épaulé par M. Redon, M. Vantroys et M. Boé. En plus de nos encadrants école, nous avons travaillé en étroite collaboration avec M. Flamen, responsable du service électronique de Polytech Lille ainsi qu'avec M. Astori, enseignant en Conception Mécanique et responsable du FabLab de Polytech Lille.&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
===Planning de répartition du travail===&lt;br /&gt;
===Liste de matériel===&lt;br /&gt;
====Matériel disponible====&lt;br /&gt;
====Matériel manquant====&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=21001</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=21001"/>
				<updated>2015-05-10T21:33:32Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Machine à café */ Corrections générales, compétion des éléments restants et ajout du lien de la vidéo de présentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
Le chauffe eau que nous avons récupéré est de type thermoblock. Il s'agit en fait d'une résistance chauffante autour de laquelle se situe un serpentin dans lequel l'eau circule, le tout étant isolé dans un châssis en métal.&lt;br /&gt;
Les principaux avantages de ce système thermoblock est qu'il conserve très bien la chaleur et qu'il permet de ne chauffer que la quantité d'eau nécessaire, la petite quantité qui passe à l'intérieur. On peut alors considérer l'échange thermique entre le chauffage et l'eau quasi instantané et uniforme. L'inconvénient majeur est en revanche, comme pour tout système thermique, l'inertie thermique importante qu'il possède, notamment due à son corps en métal.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de données constructeur sur ce chauffe eau. La seule information inscrite est la puissance électrique qu'il absorbe : 1200 W.&lt;br /&gt;
Il sera alimenté, comme pour la pompe, en 230V alternatif 50Hz, en tout ou rien. Il s'agit maintenant d'estimer ses caractéristiques (inertie, temps caractéristiques, gains en température en fonction de l'entrée) afin de mettre en place un plan de régulation adapté. Ne possédant aucune information sur ce système, nous ne procéderons pas à une étude théorique thermique qui serait trop approximative compte tenu de la géométrie du système et trop fastidieuse à mettre en place. Nous avons choisi de procéder par identification, en relevant les courbes d'évolution de la température, pour différents temps de commande.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Résultats :'''&lt;br /&gt;
&lt;br /&gt;
A chaque fois, la réponse peut s'exprimer de la façon suivante : on constate un temps de retard pur au démarrage dû à l'inertie, puis une évolution s’apparentant à celle d'une réponse à système du 1er ordre. On peut écrire la fonction de transfert du système sous cette forme : &amp;lt;math&amp;gt;H(P) = \frac{K}{1+\tau P}   e^{- T_{r}  P}&amp;lt;/math&amp;gt; (modèle de Broïda)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_2s.png|350px|vignette|right|upright=1.25|Réponse en température pour 2s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_5s.png|350px|vignette|left|upright=1.25|Réponse en température pour 5s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_10s+pompe.png|350px|vignette|centre|upright=1.25|Réponse en température pour 10s d'alimentation, puis arrivée d'eau à t=75s]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : On peut observer sur le 2ème graph l'influence du passage de l'eau dans le thermoblock sur la température. Celui ci se traduit comme une perturbation avec un comportement type 1er ordre sur le thermoblock. Avec ces paramètres (temps, gain), on pourra par la suite estimer la compensation à ajouter afin de maintenir la température du thermoblock constante malgré la chauffe de l'eau.&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut récapituler ceci dans le tableau suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Temps de commande&lt;br /&gt;
! Gain en température K&lt;br /&gt;
! Temps de retard Tr&lt;br /&gt;
! Temps de réponse à 5%&lt;br /&gt;
|-&lt;br /&gt;
| 2 s&lt;br /&gt;
| 4,3 °C&lt;br /&gt;
| 5,2 s&lt;br /&gt;
| 14 s&lt;br /&gt;
|-&lt;br /&gt;
| 5 s&lt;br /&gt;
| 12 °C&lt;br /&gt;
| 5,2 s&lt;br /&gt;
| 25 s&lt;br /&gt;
|-&lt;br /&gt;
| 10 s&lt;br /&gt;
| 24 °C&lt;br /&gt;
| 5,2 s&lt;br /&gt;
| 37 s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
On remarque un gain en température en fonction du temps d'allumage quasi constant dans ces intervalles d'environ 2,4°C par seconde, ainsi que le temps de retard est bien constant.&lt;br /&gt;
&lt;br /&gt;
===Détermination du plan de régulation===&lt;br /&gt;
Rappelons le cahier des charges de la régulation :&lt;br /&gt;
&lt;br /&gt;
* chauffer l'eau à 90°C, avec comme erreur acceptable +/- 2°C (conformément aux informations recueillies)&lt;br /&gt;
* pas de dépassement de la consigne : en effet, le système conservant très bien la chaleur, attendre qu'il se refroidisse serait trop long et surtout, si il y a dépassement après 100°C, on crée un générateur de vapeur... ce qui est bien sûr très dangereux pour le système et pour la sécurité de l'utilisateur&lt;br /&gt;
* avoir un temps de réponse acceptable pour l'utilisateur (actuellement, à titre d'exemple, pour la cafetière Nespresso, l'étape de chauffe n'excède en général pas 60s)&lt;br /&gt;
* mode économie d'énergie : la machine est destinée à être utilisée publiquement, par des utilisations ponctuelles et pas uniformément réparties dans le temps, il est donc important que la machine ne gaspille pas de l'énergie lorsqu'elle n'est pas utilisée. Ainsi, le bon compromis serait que la température soit maintenue à environ 50°C après 10min d'inutilisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Choix de la régulation :'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Grafcet_AutoHeat.JPG‎|400px|thumb|right|Grafcet illustrant le principe de l'algorithme de régulation de la température]]&lt;br /&gt;
Ici ne possèdant pas de commande réglable, nous ne pouvons pas choisir une régulation continue de type PID ou prédicteur de Smith, car on commande le thermoblock via un relais. Une commande MLI n'est pas envisageable dans notre cas, à cause du faible &amp;quot;pouvoir de commutation&amp;quot; des contacteurs de puissance que nous avons récupéré. Une simple régulation Tout ou Rien type thermostat ne serait pas suffisante, car ceci engendrerait des dépassements et des oscillations fortes autour de la température de consigne compte tenu du rapport Temps caractéristique sur Temps de retard du système &amp;lt;math&amp;gt;\frac{\tau}{T_{r}} \approx 1,66&amp;lt;/math&amp;gt;. Nous nous situons donc dans le cas &amp;quot;Régulation par Boucles multiples&amp;quot; d'après la méthode de Broïda.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas d'utilisation, un algorithme par boucles multiples, basé sur des commandes Tout ou Rien, est possible et peut satisfaire au cahier des charges. En effet, la consigne ne change pas d'ordre de grandeur : il faudra toujours chauffer l'eau dans un intervalle compris entre 88°C et 92°C. On propose alors l'algorithme suivant :&lt;br /&gt;
&lt;br /&gt;
Principe : &lt;br /&gt;
* 1) Chauffe Initiale : Au début de la phase de chauffe, on réalise une chauffe importante (15 s), l'objectif étant d'approcher grossièrement la température auprès de la température de consigne et qu'elle se soit stabilisée (attente de 12s) avant de passer à l'étape de chauffe par palier.&lt;br /&gt;
* 2) Chauffe par palier : Il s'agit ici d'effectuer ensuite une succession de &amp;quot;petites&amp;quot; chauffes jusqu'à être dans la plage de température acceptable, tout en tenant compte de l'inertie thermique. Ces successions de chauffe sont définies ici par 2s de chauffe, puis 6s d'attente de l'établissement de la température avant de déterminer si on reste dans la phase Chauffe par palier ou si on entre dans la phase Maintien au chaud. La température de seuil a été déterminée à 82°C, pour prendre en compte le phénomène d'inertie.&lt;br /&gt;
* 3) Maintien au chaud : On se situe alors proche ou dans la plage de température. Il s'agit alors d'effectuer des petites chauffes ponctuelles permettant de maintenir la température dans l'intervalle (refroidissement par le milieu ambiant). Cette étape prend également en compte le maintien au chaud lorsque de l'eau passe à travers le chauffe eau et fait donc chuter sa température (compensation plus forte : cycle de 3s de chauffe puis 3s d'attente). On peut, à partir de cette étape, commander la pompe pour élaborer un café si un café a été demandé.&lt;br /&gt;
&lt;br /&gt;
Un avantage de la chauffe palier par palier permet d'attendre que la chaleur s'établisse uniformément dans le thermoblock. Ceci permet de limiter les problèmes d'inerties thermiques, y compris celui de notre capteur (sans mettre ces paliers d'attente, ce que l'on observerait en température ne serait pas nécessairement la température au coeur du thermoblock).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mode_Auto.png|400px|vignette|right|upright=1|Evolution de la température du chauffe eau avec la régulation]]&lt;br /&gt;
&lt;br /&gt;
'''Résultats de la régulation'''&lt;br /&gt;
&lt;br /&gt;
On constate sur le graphique à droite les 3 étapes de chauffe : les étapes 1 et 2 s'effectuant ici entre 0s et environ 80s puis l'étape de maintien après cette date. La température évolue ainsi de façon presque linéaire pendant les étapes 1 et 2, puis reste dans la plage 88°C-92°C.&lt;br /&gt;
A t=140s, la pompe est commandée dans cette exemple afin de pouvoir visualiser le maintien en température lorsque l'eau circule.&lt;br /&gt;
&lt;br /&gt;
On remarque donc que cette régulation valide les 2 premiers critères du cahier des charges (chauffer l'eau dans la plage et pas de dépassement de cette plage). Cependant, le temps de réponse avant de pouvoir élaborer un café est un peu plus long (environ 80s).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant caractérisé. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki.&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Fini&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki, et les tests semblent confirmer le bon fonctionnement. Les derniers tests complémentaires ont prouvés que la régulation s'effectue correctement même lors d'un pompage.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Fini&lt;br /&gt;
| Le comportement de la pompe a été caractérisé et l'utilisation des nouvelles pièces créées au Fabricarium n'engendre pas de perturbations trop importantes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteurs et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage. L'écran fonctionne parfaitement et permet de sélectionner la quantité de café désirée.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes. Par manque de temps, il ne sera pas possible de montrer le fonctionnement automatique des pièces.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système ne sera pas créé par manque de temps.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posé est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
Durant les phases de test, nous avons créé une interface en ligne de commande. Celle-ci permettait d'envoyer directement des commandes au HVC, comme l'allumage du chauffe-eau pendant un certain nombre de secondes; ou encore le pompage. Cette interface est restée en utilisation jusqu'à deux semaines avant la fin du projet, car elle nous permettait d'effectuer un suivi très simple de l'état des capteurs. Par la suite, à partir du commit [https://github.com/henyxia/tweekd/commit/ac55328a023270dc55e5e5a99c2bc9a3a1873885 ac55328], nous nous sommes orienté vers l'utilisation de l'écran fournis.&lt;br /&gt;
&lt;br /&gt;
Durant la période où nous utilisions l'interface en ligne de commande, nous nous servions de celle-ci car elle nous fournissait des informations comme le PID. Cette information nous permettait de tuer le programme principal ainsi que tous ces fils lorsque celui ci plantait. Il affichait aussi le volume pompé, la dernière température relevée, l'identifiant lu par le lecteur NFC et la date à laquelle cette lecture s'était produite. Elle affichait aussi les dernières entrées du journal, avec des couleurs indiquant leur niveau d'importance (Debug, Info, Warning ou Error).&lt;br /&gt;
&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliqué car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compressé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RGB565.gif|320px|thumb|left|Représentation des données en RGB565]] Le [https://github.com/henyxia/tweekd_gui/blob/master/main.c lien suivant] est une démonstration de la première commande que nous avons réussi à envoyer à travers la librairie USB. Nous avons ensuite essayé d'afficher une image sur l'écran. Pour cela, il a été nécessaire de créer un type de fichier intermédiaire car l'écran n'est pas capable de lire la plupart des formats d'images classiques. Pour rendre la conversion plus simple, nous avons choisi le type BMP comme fichier image source. Le type BMP organise la description des images de façon simple. Le fichier commence par un en-tête qui comporte des informations comme l'adresse de début de l'image, le nombre de bits par pixel et d'autres informations qui ne nous servent pas. Une fois ces deux informations récupérés (nous n'utilisons que des images à 24 bits par pixel, soit 8 bits pour le rouge, 8 bits pour le vert et 8 bits pour le bleu) nous convertissons notre image dans le format lisible par l'écran, qui est le RGB565. Ce format compresse (avec pertes) la précision des couleurs pour que celle-ci soit ordonnée avec 5 bits pour le rouge, 6 bits pour le vert et 5 bits pour le bleu. Nous rendre plus pratique cette conversion, nous avons créé un [https://github.com/henyxia/bmp2rgb565 programme] permettant l'automatisation de ce processus. Une fois ce programme utilisé (à travers le Makefile du projet principal), l'image est envoyé à l'écran. Après chronométrage, nous arrivons à un temps moyen de 1,2 secondes pour afficher une image intégralement. Ce temps est bien inférieur aux 17 secondes de la librairie X11, mais est aussi légèrement éloigné des 25 images par secondes promises par le vendeur (Ce taux de rafraîchissement n'étant atteignable que si nous ne générons des carrés de couleurs). Cependant ce temps de réponse est largement suffisant pour l'utilisation que nous souhaitons en faire.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes donc penché sur l'utilisation de l'interface tactile de l'écran. C'est une lecture USB par interruption qui nous donne si l'écran est actuellement pressé, et si oui où la pression est effectuée. Donc, pour permettre au programme de comprendre quelle fonction appeler lors d'un appui sur l'écran, nous avons créé un autre format de fichier. Celui ci, aussi issu du BMP, est une liste de pixel en nuance de gris. Donc, chaque pixel est représenté par une valeur comprise entre 0 et 255. En fonction de la valeur, le programme principal appelle la fonction en conséquence. De façon analogue à la conversion de BMP et RGB565, nous avons créé un programme permettant de convertir les BMP en suite de bytes correspondant aux pixels. Ce programme ce trouve à [https://github.com/henyxia/bmp2map l'adresse suivante].&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;br /&gt;
&lt;br /&gt;
La vidéo du projet est disponible à [https://www.youtube.com/watch?v=GXPjxfLEy3o cette adresse].&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20989</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20989"/>
				<updated>2015-05-10T20:34:37Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Détermination du plan de régulation */ Recadrage de l'image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
Le chauffe eau que nous avons récupéré est de type thermoblock. Il s'agit en fait d'une résistance chauffante autour de laquelle se situe un serpentin dans lequel l'eau circule, le tout étant isolé dans un châssis en métal.&lt;br /&gt;
Les principaux avantages de ce système thermoblock est qu'il conserve très bien la chaleur et qu'il permet de ne chauffer que la quantité d'eau nécessaire, la petite quantité qui passe à l'intérieur. On peut alors considérer l'échange thermique entre le chauffage et l'eau quasi instantané et uniforme. L'inconvénient majeur est en revanche, comme pour tout système thermique, l'inertie thermique importante qu'il possède, notamment due à son corps en métal.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de données constructeur sur ce chauffe eau. La seule information inscrite est la puissance électrique qu'il absorbe : 1200 W.&lt;br /&gt;
Il sera alimenté, comme pour la pompe, en 230V alternatif 50Hz, en tout ou rien. Il s'agit maintenant d'estimer ses caractéristiques (inertie, temps caractéristiques, gains en température en fonction de l'entrée) afin de mettre en place un plan de régulation adapté. Ne possédant aucune information sur ce système, nous ne procéderons pas à une étude théorique thermique qui serait trop approximative compte tenu de la géométrie du système et trop fastidieuse à mettre en place. Nous avons choisi de procéder par identification, en relevant les courbes d'évolution de la température, pour différents temps de commande.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Résultats :'''&lt;br /&gt;
&lt;br /&gt;
A chaque fois, la réponse peut s'exprimer de la façon suivante : on constate un temps de retard pur au démarrage dû à l'inertie, puis une évolution s’apparentant à celle d'une réponse à système du 1er ordre. On peut écrire la fonction de transfert du système sous cette forme : &amp;lt;math&amp;gt;H(P) = \frac{K}{1+\tau P}   e^{- T_{r}  P}&amp;lt;/math&amp;gt; (modèle de Broïda)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_2s.png|350px|vignette|right|upright=1.25|Réponse en température pour 2s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_5s.png|350px|vignette|left|upright=1.25|Réponse en température pour 5s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_10s+pompe.png|350px|vignette|centre|upright=1.25|Réponse en température pour 10s d'alimentation, puis arrivée d'eau à t=75s]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : On peut observer sur le 2ème graph l'influence du passage de l'eau dans le thermoblock sur la température. Celui ci se traduit comme une perturbation avec un comportement type 1er ordre sur le thermoblock. Avec ces paramètres (temps, gain), on pourra par la suite estimer la compensation à ajouter afin de maintenir la température du thermoblock constante malgré la chauffe de l'eau.&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut récapituler ceci dans le tableau suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Temps de commande&lt;br /&gt;
! Gain en température K&lt;br /&gt;
! Temps de retard Tr&lt;br /&gt;
! Temps caractéristique &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Détermination du plan de régulation===&lt;br /&gt;
Rappelons le cahier des charges de la régulation :&lt;br /&gt;
&lt;br /&gt;
* chauffer l'eau à 90°C, avec comme erreur acceptable +/- 2°C (conformément aux informations recueillies)&lt;br /&gt;
* pas de dépassement de la consigne : en effet, le système conservant très bien la chaleur, attendre qu'il se refroidisse serait trop long et surtout, si il y a dépassement après 100°C, on crée un générateur de vapeur... ce qui est bien sûr très dangereux pour le système et pour la sécurité de l'utilisateur&lt;br /&gt;
* avoir un temps de réponse acceptable pour l'utilisateur (actuellement, à titre d'exemple, pour la cafetière Nespresso, l'étape de chauffe n'excède en général pas 60s)&lt;br /&gt;
* mode économie d'énergie : la machine est destinée à être utilisée publiquement, par des utilisations ponctuelles et pas uniformément réparties dans le temps, il est donc important que la machine ne gaspille pas de l'énergie lorsqu'elle n'est pas utilisée. Ainsi, le bon compromis serait que la température soit maintenue à environ 50°C après 10min d'inutilisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Choix de la régulation :'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Grafcet_AutoHeat.JPG‎|400px|thumb|right|Grafcet illustrant le principe de l'algorithme de régulation de la température]]&lt;br /&gt;
Ici ne possèdant pas de commande réglable, nous ne pouvons pas choisir une régulation continue de type PID ou prédicteur de Smith, car on commande le thermoblock via un relais. Une commande MLI n'est pas envisageable dans notre cas, à cause du faible &amp;quot;pouvoir de commutation&amp;quot; des contacteurs de puissance que nous avons récupéré. Une simple régulation Tout ou Rien type thermostat ne serait pas suffisante, car ceci engendrerait des dépassements et des oscillations fortes autour de la température de consigne compte tenu du rapport Temps caractéristique sur Temps de retard du système &amp;lt;math&amp;gt;\frac{\tau}{T_{r}} \approx 1,66&amp;lt;/math&amp;gt;. Nous nous situons donc dans le cas &amp;quot;Régulation par Boucles multiples&amp;quot; d'après la méthode de Broïda.&lt;br /&gt;
&lt;br /&gt;
Dans notre cas d'utilisation, un algorithme par boucles multiples, basé sur des commandes Tout ou Rien, est possible et peut satisfaire au cahier des charges. En effet, la consigne ne change pas d'ordre de grandeur : il faudra toujours chauffer l'eau dans un intervalle compris entre 88°C et 92°C. On propose alors l'algorithme suivant :&lt;br /&gt;
&lt;br /&gt;
Principe : &lt;br /&gt;
* 1) Chauffe Initiale : Au début de la phase de chauffe, on réalise une chauffe importante (15 s), l'objectif étant d'approcher grossièrement la température auprès de la température de consigne et qu'elle se soit stabilisée (attente de 12s) avant de passer à l'étape de chauffe par palier.&lt;br /&gt;
* 2) Chauffe par palier : Il s'agit ici d'effectuer ensuite une succession de &amp;quot;petites&amp;quot; chauffes jusqu'à être dans la plage de température acceptable, tout en tenant compte de l'inertie thermique. Ces successions de chauffe sont définies ici par 2s de chauffe, puis 6s d'attente de l'établissement de la température avant de déterminer si on reste dans la phase Chauffe par palier ou si on entre dans la phase Maintien au chaud. La température de seuil a été déterminée à 82°C, pour prendre en compte le phénomène d'inertie.&lt;br /&gt;
* 3) Maintien au chaud : On se situe alors proche ou dans la plage de température. Il s'agit alors d'effectuer des petites chauffes ponctuelles permettant de maintenir la température dans l'intervalle (refroidissement par le milieu ambiant). Cette étape prend également en compte le maintien au chaud lorsque de l'eau passe à travers le chauffe eau et fait donc chuter sa température (compensation plus forte : cycle de 3s de chauffe puis 3s d'attente). On peut, à partir de cette étape, commander la pompe pour élaborer un café si un café a été demandé.&lt;br /&gt;
&lt;br /&gt;
Un avantage de la chauffe palier par palier permet d'attendre que la chaleur s'établisse uniformément dans le thermoblock. Ceci permet de limiter les problèmes d'inerties thermiques, y compris celui de notre capteur (sans mettre ces paliers d'attente, ce que l'on observerait en température ne serait pas nécessairement la température au coeur du thermoblock).&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mode_Auto.png|400px|vignette|right|upright=1|Evolution de la température du chauffe eau avec la régulation]]&lt;br /&gt;
&lt;br /&gt;
'''Résultats de la régulation'''&lt;br /&gt;
&lt;br /&gt;
On constate sur le graphique à droite les 3 étapes de chauffe : les étapes 1 et 2 s'effectuant ici entre 0s et environ 80s puis l'étape de maintien après cette date. La température évolue ainsi de façon presque linéaire pendant les étapes 1 et 2, puis reste dans la plage 88°C-92°C.&lt;br /&gt;
A t=140s, la pompe est commandée dans cette exemple afin de pouvoir visualiser le maintien en température lorsque l'eau circule.&lt;br /&gt;
&lt;br /&gt;
On remarque donc que cette régulation valide les 2 premiers critères du cahier des charges (chauffer l'eau dans la plage et pas de dépassement de cette plage). Cependant, le temps de réponse avant de pouvoir élaborer un café est un peu plus long (environ 80s).&lt;br /&gt;
&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant complètement caractérisé et suit une loi linéaire sur l'intervalle que nous utilisons. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki (à rédiger)&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Fini&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki, et les tests semblent confirmer le bon fonctionnement. Les derniers tests complémentaires ont prouvés que la régulation s'effectue correctement même lors d'un pompage.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Fini&lt;br /&gt;
| Le comportement de la pompe a été complètement caractérisé et l'utilisation des nouvelles pièces créées au Fabricarium n'engendre pas de perturbations trop importantes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteur et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage. L'écran fonctionne parfaitement et permet de sélectionner la quantité de café désirée.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes. Par manque de temps, il ne sera pas possible de montrer le fonctionnement automatique des pièces.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système ne sera pas créé par manque de temps.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé de d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posée est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
Durant les phases de test, nous avons créé une interface en ligne de commande. Celle-ci permettait d'envoyer directement des commandes au HVC, comme l'allumage du chauffe-eau pendant un certain nombre de secondes; ou encore le pompage. Cette interface est restée en utilisation jusqu'à deux semaines avant la fin du projet, car elle nous permettait d'effectuer un suivit très simple de l'état des capteurs. Par la suite, à partir du commit [https://github.com/henyxia/tweekd/commit/ac55328a023270dc55e5e5a99c2bc9a3a1873885 ac55328], nous nous sommes orienté vers l'utilisation de l'écran fournis.&lt;br /&gt;
&lt;br /&gt;
Durant la période où nous utilisions l'interface en ligne de commande, nous nous servions de celle-ci car elle nous fournissait des informations comme le PID. Cette information nous permettait de tuer le programme principal ainsi que tous ces fils lorsque celui ci plantait. Il affichait aussi le volume pompé, la dernière température relevée, l'identifiant lu par le lecteur NFC et la date à laquelle cette lecture s'était produite. Elle affichait aussi les dernières entrées du journal, avec des couleurs indiquant leur niveau d'importance (Debug, Info, Warning ou Error).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERER UNE IMAGE DE L'INTERFACE ICI&lt;br /&gt;
&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliquée car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compressé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RGB565.gif|320px|thumb|left|Représentation des données en RGB565]] Le [https://github.com/henyxia/tweekd_gui/blob/master/main.c lien suivant] est une démonstration de la première commande que nous avons réussi à envoyer à travers la librairie USB. Nous avons ensuite essayé d'afficher une image sur l'écran. Pour cela, il a été nécessaire de créer un type de fichier intermédiaire car l'écran n'est pas capable de lire la plupart des formats d'images classiques. Pour rendre la conversion plus simple, nous avons choisi le type BMP comme fichier image source. Le type BMP organise la description des images de façon simple. Le fichier commence par une en-tête qui comporte des informations comme l'adresse de début de l'image, le nombre de bits par pixel et d'autres informations qui ne nous servent pas. Une fois ces deux informations récupérés (nous n'utilisons que des images à 24 bits par pixel, soit 8 b bits pour le rouge, 8 bits pour le vert et 8 bits pour le bleu) nous convertissons notre image dans le format lisible par l'écran, qui est le RGB565. Ce format compresse (avec pertes) la précision des couleurs pour que celle-ci soit ordonnée avec 5 bits pour le rouge, 6 bits pour le vert et 5 bits pour le bleu. Nous rendre plus pratique cette conversion, nous avons créé un [https://github.com/henyxia/bmp2rgb565 programme] permettant l'automatisation de ce processus. Une fois ce programme utilisé (à travers le Makefile du projet principal), l'image est envoyé à l'écran. Après chronométrage, nous arrivons à un temps moyen de 1,2 secondes pour afficher une image intégralement. Ce temps est bien supérieur aux 17 secondes de la librairie X11, mais est aussi légèrement éloigné des 25 images par secondes promises par le vendeur (Ce taux de rafraîchissement n'étant atteignable que si nous ne générons des carrés de couleurs). Cependant ce temps de réponse est largement suffisant pour l'utilisation que nous souhaitons en faire.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes donc penché sur l'utilisation de l'interface tactile de l'écran. C'est une lecture USB par interruption qui nous donne si l'écran est actuellement pressé, et si oui où la pression est effectuée. Donc, pour permettre au programme de comprendre quelle fonction appeler lors d'un appuie sur l'écran, nous créé un autre format de fichier. Celui ci, aussi issu du BMP, est une liste de pixel en nuance de gris. Donc, chaque pixel est représenté par une valeur comprise entre 0 et 255. En fonction de la valeur, le programme principal appelle la fonction en conséquence. De façon analogue à la conversion de BMP et RGB565, nous avons créé un programme permettant de convertir les BMP en suite de bytes correspondant aux pixels. Ce programme ce trouve à [https://github.com/henyxia/bmp2map l'adresse suivante].&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20987</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20987"/>
				<updated>2015-05-10T20:29:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Détermination du plan de régulation */ Ajout explications régulation + résultats&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
Le chauffe eau que nous avons récupéré est de type thermoblock. Il s'agit en fait d'une résistance chauffante autour de laquelle se situe un serpentin dans lequel l'eau circule, le tout étant isolé dans un châssis en métal.&lt;br /&gt;
Les principaux avantages de ce système thermoblock est qu'il conserve très bien la chaleur et qu'il permet de ne chauffer que la quantité d'eau nécessaire, la petite quantité qui passe à l'intérieur. On peut alors considérer l'échange thermique entre le chauffage et l'eau quasi instantané et uniforme. L'inconvénient majeur est en revanche, comme pour tout système thermique, l'inertie thermique importante qu'il possède, notamment due à son corps en métal.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de données constructeur sur ce chauffe eau. La seule information inscrite est la puissance électrique qu'il absorbe : 1200 W.&lt;br /&gt;
Il sera alimenté, comme pour la pompe, en 230V alternatif 50Hz, en tout ou rien. Il s'agit maintenant d'estimer ses caractéristiques (inertie, temps caractéristiques, gains en température en fonction de l'entrée) afin de mettre en place un plan de régulation adapté. Ne possédant aucune information sur ce système, nous ne procéderons pas à une étude théorique thermique qui serait trop approximative compte tenu de la géométrie du système et trop fastidieuse à mettre en place. Nous avons choisi de procéder par identification, en relevant les courbes d'évolution de la température, pour différents temps de commande.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Résultats :'''&lt;br /&gt;
&lt;br /&gt;
A chaque fois, la réponse peut s'exprimer de la façon suivante : on constate un temps de retard pur au démarrage dû à l'inertie, puis une évolution s’apparentant à celle d'une réponse à système du 1er ordre. On peut écrire la fonction de transfert du système sous cette forme : &amp;lt;math&amp;gt;H(P) = \frac{K}{1+\tau P}   e^{- T_{r}  P}&amp;lt;/math&amp;gt; (modèle de Broïda)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_2s.png|350px|vignette|right|upright=1.25|Réponse en température pour 2s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_5s.png|350px|vignette|left|upright=1.25|Réponse en température pour 5s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_10s+pompe.png|350px|vignette|centre|upright=1.25|Réponse en température pour 10s d'alimentation, puis arrivée d'eau à t=75s]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : On peut observer sur le 2ème graph l'influence du passage de l'eau dans le thermoblock sur la température. Celui ci se traduit comme une perturbation avec un comportement type 1er ordre sur le thermoblock. Avec ces paramètres (temps, gain), on pourra par la suite estimer la compensation à ajouter afin de maintenir la température du thermoblock constante malgré la chauffe de l'eau.&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut récapituler ceci dans le tableau suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Temps de commande&lt;br /&gt;
! Gain en température K&lt;br /&gt;
! Temps de retard Tr&lt;br /&gt;
! Temps caractéristique &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Détermination du plan de régulation===&lt;br /&gt;
Rappelons le cahier des charges de la régulation :&lt;br /&gt;
&lt;br /&gt;
* chauffer l'eau à 90°C, avec comme erreur acceptable +/- 2°C (conformément aux informations recueillies)&lt;br /&gt;
* pas de dépassement de la consigne : en effet, le système conservant très bien la chaleur, attendre qu'il se refroidisse serait trop long et surtout, si il y a dépassement après 100°C, on crée un générateur de vapeur... ce qui est bien sûr très dangereux pour le système et pour la sécurité de l'utilisateur&lt;br /&gt;
* avoir un temps de réponse acceptable pour l'utilisateur (actuellement, à titre d'exemple, pour la cafetière Nespresso, l'étape de chauffe n'excède en général pas 60s)&lt;br /&gt;
* mode économie d'énergie : la machine est destinée à être utilisée publiquement, par des utilisations ponctuelles et pas uniformément réparties dans le temps, il est donc important que la machine ne gaspille pas de l'énergie lorsqu'elle n'est pas utilisée. Ainsi, le bon compromis serait que la température soit maintenue à environ 50°C après 10min d'inutilisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Choix de la régulation :'''&lt;br /&gt;
&lt;br /&gt;
Ici ne possèdant pas de commande réglable, nous ne pouvons pas choisir une régulation continue de type PID ou prédicteur de Smith, car on commande le thermoblock via un relais. Une commande MLI n'est pas envisageable dans notre cas, à cause du faible &amp;quot;pouvoir de commutation&amp;quot; des contacteurs de puissance que nous avons récupéré. Une simple régulation Tout ou Rien type thermostat ne serait pas suffisante, car ceci engendrerait des dépassements et des oscillations fortes autour de la température de consigne compte tenu du rapport Temps caractéristique sur Temps de retard du système &amp;lt;math&amp;gt;\frac{\tau}{T_{r}} \approx 1,66&amp;lt;/math&amp;gt;. Nous nous situons donc dans le cas &amp;quot;Régulation par Boucles multiples&amp;quot; d'après la méthode de Broïda.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Grafcet_AutoHeat.JPG‎|400px|thumb|right|Grafcet illustrant le principe de l'algorithme de régulation de la température]]&lt;br /&gt;
Dans notre cas d'utilisation, un algorithme par boucles multiples, basé sur des commandes Tout ou Rien, est possible et peut satisfaire au cahier des charges. En effet, la consigne ne change pas d'ordre de grandeur : il faudra toujours chauffer l'eau dans un intervalle compris entre 88°C et 92°C. On propose alors l'algorithme suivant :&lt;br /&gt;
&lt;br /&gt;
Principe : &lt;br /&gt;
* 1) Chauffe Initiale : Au début de la phase de chauffe, on réalise une chauffe importante (15 s), l'objectif étant d'approcher grossièrement la température auprès de la température de consigne et qu'elle se soit stabilisée (attente de 12s) avant de passer à l'étape de chauffe par palier.&lt;br /&gt;
* 2) Chauffe par palier : Il s'agit ici d'effectuer ensuite une succession de &amp;quot;petites&amp;quot; chauffes jusqu'à être dans la plage de température acceptable, tout en tenant compte de l'inertie thermique. Ces successions de chauffe sont définies ici par 2s de chauffe, puis 6s d'attente de l'établissement de la température avant de déterminer si on reste dans la phase Chauffe par palier ou si on entre dans la phase Maintien au chaud. La température de seuil a été déterminée à 82°C, pour prendre en compte le phénomène d'inertie.&lt;br /&gt;
* 3) Maintien au chaud : On se situe alors proche ou dans la plage de température. Il s'agit alors d'effectuer des petites chauffes ponctuelles permettant de maintenir la température dans l'intervalle (refroidissement par le milieu ambiant). Cette étape prend également en compte le maintien au chaud lorsque de l'eau passe à travers le chauffe eau et fait donc chuter sa température (compensation plus forte : cycle de 3s de chauffe puis 3s d'attente). On peut, à partir de cette étape, commander la pompe pour élaborer un café si un café a été demandé.&lt;br /&gt;
&lt;br /&gt;
Un avantage de la chauffe palier par palier permet d'attendre que la chaleur s'établisse uniformément dans le thermoblock. Ceci permet de limiter les problèmes d'inerties thermiques, y compris celui de notre capteur (sans mettre ces paliers d'attente, ce que l'on observerait en température ne serait pas nécessairement la température au coeur du thermoblock).&lt;br /&gt;
&lt;br /&gt;
'''Résultats de la régulation'''&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Mode_Auto.png|400px|thumb|right|Evolution de la température du chauffe eau avec la régulation]]&lt;br /&gt;
&lt;br /&gt;
On constate sur le graphique à droite que les 3 étapes de chauffe : les étapes 1 et 2 s'effectuant ici entre 0s et environ 80s puis l'étape de maintien après cette date. La température évolue ainsi de façon presque linéaire pendant les étapes 1 et 2, puis reste dans la plage 88°C-92°C. A t=140s, la pompe est commandée dans cette exemple afin de pouvoir visualiser le maintien en température lorsque l'eau circule. On remarque donc que cette régulation valide les 2 premiers critères du cahier des charges (chauffer l'eau dans la plage et pas de dépassement de cette plage). Cependant, le temps de réponse avant de pouvoir élaborer un café est un peu plus long (environ 80s).&lt;br /&gt;
&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant complètement caractérisé et suit une loi linéaire sur l'intervalle que nous utilisons. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki (à rédiger)&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Fini&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki, et les tests semblent confirmer le bon fonctionnement. Les derniers tests complémentaires ont prouvés que la régulation s'effectue correctement même lors d'un pompage.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Fini&lt;br /&gt;
| Le comportement de la pompe a été complètement caractérisé et l'utilisation des nouvelles pièces créées au Fabricarium n'engendre pas de perturbations trop importantes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteur et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage. L'écran fonctionne parfaitement et permet de sélectionner la quantité de café désirée.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes. Par manque de temps, il ne sera pas possible de montrer le fonctionnement automatique des pièces.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système ne sera pas créé par manque de temps.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé de d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posée est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
Durant les phases de test, nous avons créé une interface en ligne de commande. Celle-ci permettait d'envoyer directement des commandes au HVC, comme l'allumage du chauffe-eau pendant un certain nombre de secondes; ou encore le pompage. Cette interface est restée en utilisation jusqu'à deux semaines avant la fin du projet, car elle nous permettait d'effectuer un suivit très simple de l'état des capteurs. Par la suite, à partir du commit [https://github.com/henyxia/tweekd/commit/ac55328a023270dc55e5e5a99c2bc9a3a1873885 ac55328], nous nous sommes orienté vers l'utilisation de l'écran fournis.&lt;br /&gt;
&lt;br /&gt;
Durant la période où nous utilisions l'interface en ligne de commande, nous nous servions de celle-ci car elle nous fournissait des informations comme le PID. Cette information nous permettait de tuer le programme principal ainsi que tous ces fils lorsque celui ci plantait. Il affichait aussi le volume pompé, la dernière température relevée, l'identifiant lu par le lecteur NFC et la date à laquelle cette lecture s'était produite. Elle affichait aussi les dernières entrées du journal, avec des couleurs indiquant leur niveau d'importance (Debug, Info, Warning ou Error).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
INSERER UNE IMAGE DE L'INTERFACE ICI&lt;br /&gt;
&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliquée car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compressé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RGB565.gif|320px|thumb|left|Représentation des données en RGB565]] Le [https://github.com/henyxia/tweekd_gui/blob/master/main.c lien suivant] est une démonstration de la première commande que nous avons réussi à envoyer à travers la librairie USB. Nous avons ensuite essayé d'afficher une image sur l'écran. Pour cela, il a été nécessaire de créer un type de fichier intermédiaire car l'écran n'est pas capable de lire la plupart des formats d'images classiques. Pour rendre la conversion plus simple, nous avons choisi le type BMP comme fichier image source. Le type BMP organise la description des images de façon simple. Le fichier commence par une en-tête qui comporte des informations comme l'adresse de début de l'image, le nombre de bits par pixel et d'autres informations qui ne nous servent pas. Une fois ces deux informations récupérés (nous n'utilisons que des images à 24 bits par pixel, soit 8 b bits pour le rouge, 8 bits pour le vert et 8 bits pour le bleu) nous convertissons notre image dans le format lisible par l'écran, qui est le RGB565. Ce format compresse (avec pertes) la précision des couleurs pour que celle-ci soit ordonnée avec 5 bits pour le rouge, 6 bits pour le vert et 5 bits pour le bleu. Nous rendre plus pratique cette conversion, nous avons créé un [https://github.com/henyxia/bmp2rgb565 programme] permettant l'automatisation de ce processus. Une fois ce programme utilisé (à travers le Makefile du projet principal), l'image est envoyé à l'écran. Après chronométrage, nous arrivons à un temps moyen de 1,2 secondes pour afficher une image intégralement. Ce temps est bien supérieur aux 17 secondes de la librairie X11, mais est aussi légèrement éloigné des 25 images par secondes promises par le vendeur (Ce taux de rafraîchissement n'étant atteignable que si nous ne générons des carrés de couleurs). Cependant ce temps de réponse est largement suffisant pour l'utilisation que nous souhaitons en faire.&lt;br /&gt;
&lt;br /&gt;
Nous nous sommes donc penché sur l'utilisation de l'interface tactile de l'écran. C'est une lecture USB par interruption qui nous donne si l'écran est actuellement pressé, et si oui où la pression est effectuée. Donc, pour permettre au programme de comprendre quelle fonction appeler lors d'un appuie sur l'écran, nous créé un autre format de fichier. Celui ci, aussi issu du BMP, est une liste de pixel en nuance de gris. Donc, chaque pixel est représenté par une valeur comprise entre 0 et 255. En fonction de la valeur, le programme principal appelle la fonction en conséquence. De façon analogue à la conversion de BMP et RGB565, nous avons créé un programme permettant de convertir les BMP en suite de bytes correspondant aux pixels. Ce programme ce trouve à [https://github.com/henyxia/bmp2map l'adresse suivante].&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Mode_Auto.png&amp;diff=20983</id>
		<title>Fichier:Mode Auto.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Mode_Auto.png&amp;diff=20983"/>
				<updated>2015-05-10T20:12:51Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Grafcet_AutoHeat.JPG&amp;diff=20908</id>
		<title>Fichier:Grafcet AutoHeat.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Grafcet_AutoHeat.JPG&amp;diff=20908"/>
				<updated>2015-05-10T16:27:39Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20727</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20727"/>
				<updated>2015-05-06T19:28:50Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Détermination du schéma de fonctionnement et du plan de régulation */ Rappel cahier des charges + Ajout choix de régulation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
Le chauffe eau que nous avons récupéré est de type thermoblock. Il s'agit en fait d'une résistance chauffante autour de laquelle se situe un serpentin dans lequel l'eau circule, le tout étant isolé dans un châssis en métal.&lt;br /&gt;
Les principaux avantages de ce système thermoblock est qu'il conserve très bien la chaleur et qu'il permet de ne chauffer que la quantité d'eau nécessaire, la petite quantité qui passe à l'intérieur. On peut alors considérer l'échange thermique entre le chauffage et l'eau quasi instantané et uniforme. L'inconvénient majeur est en revanche, comme pour tout système thermique, l'inertie thermique importante qu'il possède, notamment due à son corps en métal.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de données constructeur sur ce chauffe eau. La seule information inscrite est la puissance électrique qu'il absorbe : 1200 W.&lt;br /&gt;
Il sera alimenté, comme pour la pompe, en 230V alternatif 50Hz, en tout ou rien. Il s'agit maintenant d'estimer ses caractéristiques (inertie, temps caractéristiques, gains en température en fonction de l'entrée) afin de mettre en place un plan de régulation adapté. Ne possédant aucune information sur ce système, nous ne procéderons pas à une étude théorique thermique qui serait trop approximative compte tenu de la géométrie du système et trop fastidieuse à mettre en place. Nous avons choisi de procéder par identification, en relevant les courbes d'évolution de la température, pour différents temps de commande.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Résultats :'''&lt;br /&gt;
&lt;br /&gt;
A chaque fois, la réponse peut s'exprimer de la façon suivante : on constate un temps de retard pur au démarrage dû à l'inertie, puis une évolution s’apparentant à celle d'une réponse à système du 1er ordre. On peut écrire la fonction de transfert du système sous cette forme : &amp;lt;math&amp;gt;H(P) = \frac{K}{1+\tau P}   e^{- T_{r}  P}&amp;lt;/math&amp;gt; (modèle de Broïda)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_2s.png|350px|vignette|right|upright=1.25|Réponse en température pour 2s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_5s.png|350px|vignette|left|upright=1.25|Réponse en température pour 5s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_10s+pompe.png|350px|vignette|centre|upright=1.25|Réponse en température pour 10s d'alimentation, puis arrivée d'eau à t=75s]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : On peut observer sur le 2ème graph l'influence du passage de l'eau dans le thermoblock sur la température. Celui ci se traduit comme une perturbation avec un comportement type 1er ordre sur le thermoblock. Avec ces paramètres (temps, gain), on pourra par la suite estimer la compensation à ajouter afin de maintenir la température du thermoblock constante malgré la chauffe de l'eau.&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut récapituler ceci dans le tableau suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Temps de commande&lt;br /&gt;
! Gain en température K&lt;br /&gt;
! Temps de retard Tr&lt;br /&gt;
! Temps caractéristique &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Détermination du plan de régulation===&lt;br /&gt;
Rappelons le cahier des charges de la régulation :&lt;br /&gt;
&lt;br /&gt;
* chauffer l'eau à 90°C, avec comme erreur acceptable +/- 2°C (conformément aux informations recueillies)&lt;br /&gt;
* pas de dépassement de la consigne : en effet, le système conservant très bien la chaleur, attendre qu'il se refroidisse serait trop long et surtout, si il y a dépassement après 100°C, on crée un générateur de vapeur... ce qui est bien sûr très dangereux pour le système et pour la sécurité de l'utilisateur&lt;br /&gt;
* avoir un temps de réponse acceptable pour l'utilisateur (actuellement, à titre d'exemple, pour la cafetière Nespresso, l'étape de chauffe n'excède en général pas 60s)&lt;br /&gt;
* mode économie d'énergie : la machine est destinée à être utilisée publiquement, par des utilisations ponctuelles et pas uniformément réparties dans le temps, il est donc important que la machine ne gaspille pas de l'énergie lorsqu'elle n'est pas utilisée. Ainsi, le bon compromis serait que la température soit maintenue à environ 50°C après 10min d'inutilisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Choix de la régulation :'''&lt;br /&gt;
&lt;br /&gt;
Ici ne possèdant pas de commande réglable, nous ne pouvons pas choisir une régulation continue de type PID ou prédicteur de Smith, car on commande le thermoblock via un relais. Une commande MLI n'est pas envisageable dans notre cas, à cause du faible &amp;quot;pouvoir de commutation&amp;quot; des contacteurs de puissance que nous avons récupéré. Une simple régulation Tout ou Rien type thermostat ne serait pas suffisante, car ceci engendrerait des dépassements et des oscillations fortes autour de la température de consigne compte tenu du rapport Temps caractéristique sur Temps de retard du système &amp;lt;math&amp;gt;\frac{\tau}{T_{r}} \approx 1,66&amp;lt;/math&amp;gt;. Nous nous situons donc dans le cas &amp;quot;Régulation par Boucles multiples&amp;quot; d'après la méthode de Broïda.&lt;br /&gt;
&lt;br /&gt;
Un algorithme basé sur des alimentations Tout ou Rien est suffisant ici. En effet, la consigne ne change pas d'ordre de grandeur : il faudra toujours chauffer l'eau dans un intervalle compris entre 88°C et 92°C. On propose alors l'algorithme suivant :&lt;br /&gt;
''insérer image grafcet''&lt;br /&gt;
&lt;br /&gt;
Principe :&lt;br /&gt;
&lt;br /&gt;
Avantage : chauffer palier par palier permet d'attendre que la chaleur s'établisse uniformément dans le thermoblock. Ceci permet de limiter très fortement le problème d'inertie thermique de notre capteur (sans mettre ces paliers d'attente, ce que l'on observerait en température ne serait pas nécessairement la température au coeur du thermoblock)&lt;br /&gt;
&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant complètement caractérisé et suit une loi linéaire sur l'intervalle que nous utilisons. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki (à rédiger)&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Terminé à 90 %&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki (à rédiger), et les tests semblent confirmer le bon fonctionnement. Il manque encore quelques tests pour que la régulation soit totalement validée.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Terminé à 50 %&lt;br /&gt;
| Le comportement de la pompe a été complétement caractérisé mais l'utilisation des nouvelles pièces créées au Fabricarium risque d'engendrer une augmentation de la pression et donc un modèle à redéfinir.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteur et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini à 60 %&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système n'est pas encore créé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| [https://github.com/henyxia/tweekd_gui]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé de d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posée est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliquée car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compréssé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20726</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20726"/>
				<updated>2015-05-06T18:11:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Caractérisation du chauffe eau */  Ajout explications + courbes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
Le chauffe eau que nous avons récupéré est de type thermoblock. Il s'agit en fait d'une résistance chauffante autour de laquelle se situe un serpentin dans lequel l'eau circule, le tout étant isolé dans un châssis en métal.&lt;br /&gt;
Les principaux avantages de ce système thermoblock est qu'il conserve très bien la chaleur et qu'il permet de ne chauffer que la quantité d'eau nécessaire, la petite quantité qui passe à l'intérieur. On peut alors considérer l'échange thermique entre le chauffage et l'eau quasi instantané et uniforme. L'inconvénient majeur est en revanche, comme pour tout système thermique, l'inertie thermique importante qu'il possède, notamment due à son corps en métal.&lt;br /&gt;
&lt;br /&gt;
Nous n'avons pas trouvé de données constructeur sur ce chauffe eau. La seule information inscrite est la puissance électrique qu'il absorbe : 1200 W.&lt;br /&gt;
Il sera alimenté, comme pour la pompe, en 230V alternatif 50Hz, en tout ou rien. Il s'agit maintenant d'estimer ses caractéristiques (inertie, temps caractéristiques, gains en température en fonction de l'entrée) afin de mettre en place un plan de régulation adapté. Ne possédant aucune information sur ce système, nous ne procéderons pas à une étude théorique thermique qui serait trop approximative compte tenu de la géométrie du système et trop fastidieuse à mettre en place. Nous avons choisi de procéder par identification, en relevant les courbes d'évolution de la température, pour différents temps de commande.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Résultats :'''&lt;br /&gt;
&lt;br /&gt;
A chaque fois, la réponse peut s'exprimer de la façon suivante : on constate un temps de retard pur au démarrage dû à l'inertie, puis une évolution s’apparentant à celle d'une réponse à système du 1er ordre. On peut écrire la fonction de transfert du système sous cette forme : &amp;lt;math&amp;gt;H(P) = \frac{K}{1+\tau P}   e^{- T_{r}  P}&amp;lt;/math&amp;gt; (modèle de Broïda)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_2s.png|350px|vignette|right|upright=1.25|Réponse en température pour 2s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_5s.png|350px|vignette|left|upright=1.25|Réponse en température pour 5s d'alimentation]]&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Commande_10s+pompe.png|350px|vignette|centre|upright=1.25|Réponse en température pour 10s d'alimentation, puis arrivée d'eau à t=75s]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remarque : On peut observer sur le 2ème graph l'influence du passage de l'eau dans le thermoblock sur la température. Celui ci se traduit comme une perturbation avec un comportement type 1er ordre sur le thermoblock. Avec ces paramètres (temps, gain), on pourra par la suite estimer la compensation à ajouter afin de maintenir la température du thermoblock constante malgré la chauffe de l'eau.&lt;br /&gt;
&lt;br /&gt;
Ainsi, on peut récapituler ceci dans le tableau suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Temps de commande&lt;br /&gt;
! Gain en température K&lt;br /&gt;
! Temps de retard Tr&lt;br /&gt;
! Temps caractéristique &amp;lt;math&amp;gt;\tau&amp;lt;/math&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 2 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 5 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 10 s&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant complètement caractérisé et suit une loi linéaire sur l'intervalle que nous utilisons. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki (à rédiger)&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Terminé à 90 %&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki (à rédiger), et les tests semblent confirmer le bon fonctionnement. Il manque encore quelques tests pour que la régulation soit totalement validée.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Terminé à 50 %&lt;br /&gt;
| Le comportement de la pompe a été complétement caractérisé mais l'utilisation des nouvelles pièces créées au Fabricarium risque d'engendrer une augmentation de la pression et donc un modèle à redéfinir.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteur et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini à 60 %&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système n'est pas encore créé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| [https://github.com/henyxia/tweekd_gui]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé de d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posée est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliquée car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compréssé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_10s%2Bpompe.png&amp;diff=20725</id>
		<title>Fichier:Commande 10s+pompe.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_10s%2Bpompe.png&amp;diff=20725"/>
				<updated>2015-05-06T17:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_5s.png&amp;diff=20724</id>
		<title>Fichier:Commande 5s.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_5s.png&amp;diff=20724"/>
				<updated>2015-05-06T17:18:24Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_2s.png&amp;diff=20723</id>
		<title>Fichier:Commande 2s.png</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Commande_2s.png&amp;diff=20723"/>
				<updated>2015-05-06T17:17:31Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20718</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=20718"/>
				<updated>2015-05-06T15:06:47Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Etude préalable */ Ajouts données manquantes et correctifs généraux&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence/Commande manuelle&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés de section S = 3 mm². En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur, nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===Avancement des différents objectifs===&lt;br /&gt;
Les différents objectifs et leur avancement sont résumés dans le tableau suivant&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Objectif&lt;br /&gt;
! Etat&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
! Étalonnage du débitmètre&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est fournie dans le Wiki, et le shield Arduino permet son utilisation&lt;br /&gt;
|-&lt;br /&gt;
! Analyse du chauffe-eau&lt;br /&gt;
| Fini&lt;br /&gt;
| Le chauffe-eau est maintenant complètement caractérisé et suit une loi linéaire sur l'intervalle que nous utilisons. Le retard dans la commande ainsi que la commande tout ou rien complexifie grandement son utilisation mais une solution a été trouvée et fonctionne parfaitement, comme indiqué dans le wiki (à rédiger)&lt;br /&gt;
|-&lt;br /&gt;
! Calibration de la pompe à eau&lt;br /&gt;
| Fini&lt;br /&gt;
| La documentation est aussi fournie dans le wiki, et le shield Arduino permet son utilisation en temps réel.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation du chauffe-eau en température&lt;br /&gt;
| Terminé à 90 %&lt;br /&gt;
| Le modèle équivalent a été déterminé, comme indiqué dans le wiki (à rédiger), et les tests semblent confirmer le bon fonctionnement. Il manque encore quelques tests pour que la régulation soit totalement validée.&lt;br /&gt;
|-&lt;br /&gt;
! Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
| Terminé à 50 %&lt;br /&gt;
| Le comportement de la pompe a été complétement caractérisé mais l'utilisation des nouvelles pièces créées au Fabricarium risque d'engendrer une augmentation de la pression et donc un modèle à redéfinir.&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
| Fini&lt;br /&gt;
| L'utilisation d'une carte de puissance couplée avec deux contacteur et un shield arduino réalisé par nos soins rempli parfaitement cet objectif&lt;br /&gt;
|-&lt;br /&gt;
! Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
| Fini&lt;br /&gt;
| Le shield Arduino que nous avons réalisé permet aussi de lire les différents capteurs&lt;br /&gt;
|-&lt;br /&gt;
! Programmation de l'Arduino pour commander la carte&lt;br /&gt;
| Fini&lt;br /&gt;
| Pour finir il est nécessaire d'utiliser deux Arduinos mais tout les deux sont programmés&lt;br /&gt;
|-&lt;br /&gt;
! Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
| Fini à 60 %&lt;br /&gt;
| La partie NFC est réalisée par un des deux Arduinos, l'interface tactile est encore en cours de réalisation. Bonne nouvelle ! Les tests ont montrés que le temps de réponse entre les Arduinos et le RaspberryPi sont négligeables devant le temps d’échantillonnage.&lt;br /&gt;
|-&lt;br /&gt;
! Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
| Fini à 80 %&lt;br /&gt;
| Les capsules et la chambre de la capsule ont été complètement étudiés. Un système complet à été créé pour ne plus être contraint à l'utilisation du système propriétaire. Trois pièces ont été créé à l'aide du logiciel de CAO Catia. La création de ces pièces en métal est pour le moment impossible (Notre contact aux Arts&amp;amp;Métiers est indisponible, peut-être le responsable des machines-outils de la section mécanique peut nous aider à réaliser certaines pièces). Nous nous sommes rabattus sur la création des pièces en PLA à l'aide de l'imprimante 3D WitBox du fabricarium. Les trois pièces principales sont terminées, ce qui pourrait permettre d'en faire un démonstration. La pièce de liaison est fonctionnelle, ce qui nous permet d'adapter notre tuyau de pompe aux trois pièces précédentes.&lt;br /&gt;
|-&lt;br /&gt;
! Création d'un système dispenseur de gobelets&lt;br /&gt;
| Fini à 0%&lt;br /&gt;
| Le système n'est pas encore créé&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| [https://github.com/henyxia/tweekd_gui]&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
L'objectif de l'utilisation du Shield NFC est de permettre à un utilisateur de payer un café, et donc de s'identifier sur la machine, à l'aide de carte Lille 1. Pour cela, nous nous sommes premièrement orientés sur l'utilisation de l'IDE Arduino et de la librairie dédiée au [https://github.com/Seeed-Studio/PN532 PN532]. Puis, nous avons décidé de passer à un langage C pour avoir une meilleure visibilité sur les registres. Par conséquent, nous avons utilisé le compilateur avr-g++ pour compiler le projet. Il nous a donc était nécessaire de transposer une partie des fichiers C et C++ pour les rendre utilisables avec notre programme C.&lt;br /&gt;
&lt;br /&gt;
La communication se fait par système de questions-réponses. Le serveur sur la Raspberry envoie une demande de données, et l'Arduino répond en conséquence. La seule difficulté a résidé dans la problématique des données à envoyer pour l'identification. Les cartes de Lille 1 sont des cartes NFC Mifare Classic 1K. Elles sont composées de 16 secteurs de 4 fois 16 bytes. Le secteur qui nous intéresse est le douzième secteur, qui est encodé en utilisant les clés NFC publiques (donc accessible par tout le monde). Les clés publiques en question sont :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Clé&lt;br /&gt;
|-&lt;br /&gt;
! A&lt;br /&gt;
| A0A1A2A3A4A5&lt;br /&gt;
|-&lt;br /&gt;
! B&lt;br /&gt;
| B0B1B2B3B4B5&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Ce douzième secteur contient, pour les carte étudiantes, l'INE, suivi du numéro étudiant (sur 8 chiffres), suivi du prénom, suivi d'un point puis du nom. Nous avons d'abord envisagé d'utiliser le nom et le prénom, cependant cela posait le problème des personnes avec le même patronymes. De plus, il arrivait que le nom de l'étudiant soit tronqué pour rester dans l'espace alloué au secteur 12. Par conséquent, nous utilisons le numéro d'étudiant, qui est toujours au même endroit sur le secteur. Le logiciel compare alors ce numéro à une liste d'étudiant.&lt;br /&gt;
&lt;br /&gt;
Par soucis de sécurité, nous n'avons pas de liste donnant une correspondance directe entre un numéro d'étudiant et son nom. En effet, la liste utilisée est un enchaînement de nom et de numéro étudiant encodé avec l'algorithme MD5. Pour récupérer le nom, il nous suffit alors de comparer le numéro étudiant que nous récupérons (que nous encodons en MD5) avec la liste. Ceci nous assure une confidentialité relative, dépendante directement de la robustesse de la non réversibilité du MD5.&lt;br /&gt;
&lt;br /&gt;
Une fois la reconnaissance des cartes étudiantes terminées, nous avons essayé de d'inclure les cartes Lille 1 dédiées au personnel. La première question que nous nous sommes posée est comment pouvons nous faire la différence, au niveau du lecteur, entre une carte étudiante et une carte du personnel. Nous avons remarqué que les cartes du personnel comporte, sur leur douzième secteur, deux fois le numéro de personnel (sur 6 chiffres). La répétition du numéro de personnel se situe à l'endroit où se situe le nom de l'étudiant sur la carte de l'étudiant. Le test est donc assez facile à réaliser. L'autre problème est : comment lié un numéro de personnel à un nom ? Nous n'avons pas encore résolu ce problème car cette table de liaison n'est pas accessible à PolytechLille. Éventuellement, si nous arrivons à accomplir tous les objectifs du projet, nous envisagerons de contacter les responsables de Lille 1 pour obtenir cette table de correspondance.&lt;br /&gt;
&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
Pour l'interface utilisateur finale, nous nous reposons sur un module d'affichage [http://www.robopeak.com/docs/doku.php?id=product-rpusbdisp RPUSBDisp] de la société RoboPeak. Avant de se lancer dans la phase de programmation de l'interface, il nous a d'abord fallut rendre utilisable l'écran par le RaspberryPi. Pour cela, il a fallut créer un module chargeable par le noyau Linux. Une fois ce module créé, nous nous sommes rendu compte le noyau Linux que nous utilisions (celui fournis avec Raspbian) ne contenait pas les symboles nécessaires au chargement du module. Nous avons alors recompilé le noyau Linux avec les symboles manquants. La compilation s'est avérée assez compliquée car pour éviter de faire de la cross compilation (ce qui aurait surement augmenter le taux d'échec de compilation) nous avons compilé le noyau directement à partir de la RaspberryPi ce qui, malgré son overclooking, était très long (une compilation prenait approximativement une nuit complète). Après quatre tentatives, nous avons réussi à obtenir un noyau fonctionnel.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:RPUSBDisp1.jpg|200px|thumb|right|Premier BMP affiché avec succès sur l'écran]] Une fois l'écran utilisable, nous nous sommes lancés dans le développement de l'interface. Nous avons choisi, dans une optique de performance, de n'utiliser que la librairie X11. Le premier objectif était de réussir à afficher une image sur l'écran. Le format d'image utilisé était le BMP car il n'est pas compréssé et peut être lu sans autres calculs. Après de petits cafouillages (liés au fait que le BMP représente une couleur de 0 à 255 et X11 de 0 à 65535) nous avons réussi à faire afficher notre première image. Cependant, le point négatif est que l'image est affichée en une trentaine de secondes. Nous sommes donc en train de travailler sur un moyen de faire afficher des images plus rapidement.&lt;br /&gt;
&lt;br /&gt;
Après de longues recherches, nous nous sommes rendus compte qu'il n'était pas possible de réaliser une interface temps réel avec cet écran si l'on utilisait la librairie X11. En effet, celle ne communique pas assez rapidement avec l'écran (les recordes d'écriture étant de ~17 secondes par images avec X11). Le constructeur préconise en fait une utilisation à travers une interface USB. Cette interface, décrite dans ce [http://www.robopeak.com/data/doc/rpusbdisp/RPUD03-rpusbdisp_interface_protocol-enUS.1.0.pdf manuel] nous oblige à réécrire notre interface homme machine.&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
===Vidéo de présentation===&lt;br /&gt;
Nous pensons enregistrer la vidéo pendant les vacances à l'aide d'une caméra professionnelle.&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18990</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18990"/>
				<updated>2015-03-18T22:27:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Matériel */ Ajout &amp;quot;Ecran tactile fourni le 18/03/2015&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm] [fourni le 18/03/2015]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur ''(insérer image)'', nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| En attente du matériel&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18800</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18800"/>
				<updated>2015-03-15T18:23:10Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Étalonnage du capteur de température du chauffe-eau */ Lien de la feuille de calcul corrigé&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur ''(insérer image)'', nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://docs.google.com/spreadsheets/d/185WP8sv1Ryd4hWDlqnpToG-fiC0yVxaIgjR2ey1FG68/edit?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| En attente du matériel&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18799</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18799"/>
				<updated>2015-03-15T18:16:44Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Déoulement du projet */ Il manquait le &amp;quot;r&amp;quot; de &amp;quot;Déroulement&amp;quot;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur ''(insérer image)'', nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://drive.google.com/file/d/0B_BaZaiuzwIATjB6RTNTUXJneUE/view?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déroulement du projet==&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| En attente du matériel&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18798</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=18798"/>
				<updated>2015-03-15T18:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Étalonnage du capteur de température du chauffe-eau */ Ajout explications pour récupération de l'information &amp;quot;température&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage électrique. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_{Th}) + C (\ln(R_{Th}))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
Après relevé de l'évolution de la résistance en fonction de la température au moyen du bain marie, nous avons constaté et vérifié que notre sonde de température se comporte comme une sonde standardisée PT100. Nous avons trouvé une fiche constructeur de ces sondes standardisées qui vérifie les caractéristiques de notre capteur ([http://search.murata.co.jp/Ceramy/CatalogAction.do?sHinnm=?&amp;amp;nbsp&amp;amp;sNHinnm=NCP15WF104D03RC&amp;amp;sNhin_key=NCP15WF104D03RC&amp;amp;sLang=en&amp;amp;sParam=series+U0120L0770S0416A1161 lien]). Sur la plage de température que nous avons besoin d'utiliser (25°C - 105°C), nous pouvons négliger le terme en ln^3, ainsi l'équation régissant la résistance en fonction de la température peut s'exprimer ainsi :&lt;br /&gt;
&amp;lt;math&amp;gt;{R_{Th}}={R_0} \times\exp\left(\beta\times\left({1 \over {T}} - {1 \over {T_0}}\right)\right) \,&amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;{R_0}&amp;lt;/math&amp;gt; = 100 kOhm la résistance de référence à &amp;lt;math&amp;gt;T_0&amp;lt;/math&amp;gt;= 25°C, &amp;lt;math&amp;gt;\beta&amp;lt;/math&amp;gt; = 4334 Kelvin le coefficient fourni par le constructeur pour l'approximation sur la plage 25°C-100°C.&lt;br /&gt;
&lt;br /&gt;
Ainsi, la représentation des données pour récupérer la température est la suivante : au moyen d'un pont diviseur ''(insérer image)'', nous récupérons une tension sur l'Arduino image de la résistance et donc de la température avec la relation ci-dessus.&lt;br /&gt;
Nous ne pouvons pas inclure dans le code directement un calcul avec la fonction exponentielle, cela prendrait , entre autres, trop de temps de calcul et ne serait pas optimisé étant donné que l'on connait la résolution du CAN de l'Arduino. Pour cela, nous passons par un tableau de conversion sur 256 valeurs calculé au moyen de cette [https://drive.google.com/file/d/0B_BaZaiuzwIATjB6RTNTUXJneUE/view?usp=sharing feuille de calcul]. Voici un schéma de principe :&lt;br /&gt;
&lt;br /&gt;
 Coté Arduino : Tension aux bornes de Rth(V) ---CAN---&amp;gt; Valeur sur 10 bits ---TableauDeConversion---&amp;gt; Valeur sur 8 bits&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La Raspberry (ou le PC) récupère ensuite cette valeur sur 8 bits et en déduit la température avec la connaissance du &amp;quot;pas&amp;quot; entre 2 températures : &amp;lt;math&amp;gt;Pas = {(105-25)\over 255}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Coté Raspberry : Valeur sur 8 bits ---&amp;gt;  25 + (Valeur * Pas)  ---&amp;gt; Température en °C&lt;br /&gt;
&lt;br /&gt;
Cette méthode permet d'alléger le temps de traitement sur l'Arduino et surtout de ne pas perdre en précision et résolution à cause de la transmission de l'information &amp;quot;température&amp;quot;, qui s'effectue sur 8 bits.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déoulement du projet==&lt;br /&gt;
===La programmation des différents éléments===&lt;br /&gt;
Pour la partie programmation, le défi résidait dans le fait de faire communiquer tout les éléments à l'aide d'un seul programme. Pour cela, nous avons subdivisé les fonctions principales dans différents modules. Ceci nous permettait entre autre de minimiser le nombre d'éléments reliés à la partie &amp;quot;puissance&amp;quot; du projet (détaillé plus loin)&lt;br /&gt;
&lt;br /&gt;
Le code source du projet est disponible sur [http://www.github.com GitHub], et les liens vers les différents programmes sont les suivants&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! Lien&lt;br /&gt;
|-&lt;br /&gt;
! Shiled Arduino NFC&lt;br /&gt;
| [https://github.com/henyxia/tweekd_nfc]&lt;br /&gt;
|-&lt;br /&gt;
! Shield Arduino de puissance&lt;br /&gt;
| [https://github.com/henyxia/tweekd_hvc]&lt;br /&gt;
|-&lt;br /&gt;
! Interface en ligne de commande&lt;br /&gt;
| [https://github.com/henyxia/tweekd]&lt;br /&gt;
|-&lt;br /&gt;
! Interface graphique finale&lt;br /&gt;
| En attente du matériel&lt;br /&gt;
|}&lt;br /&gt;
====Le Shield Arduino NFC====&lt;br /&gt;
====Le Shield Arduino de puissance====&lt;br /&gt;
====L'interface en ligne de commande utilisateur====&lt;br /&gt;
====L'interface utilisateur finale====&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17541</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17541"/>
				<updated>2015-02-23T22:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Etude préalable */  Ajout Catégorie Etalonnage du capteur de température&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé au moyen de l'Arduino pendant plusieurs durées pré-établies (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Étalonnage du capteur de température du chauffe-eau===&lt;br /&gt;
Afin de réguler le chauffe eau en température, nous avons besoin de connaître le fonctionnement du capteur de température intégré sur celui ci.&lt;br /&gt;
Il s'agit en fait d'une thermistance (résistance variable dont la valeur de la résistance dépend de la température), ici à coefficient de température négatif (CTN). &lt;br /&gt;
&lt;br /&gt;
Il n'y a visiblement pas de référence constructeur dessus. Nous avons donc décidé d'effectuer un étalonnage de celle ci. Il existe un dispositif en salle électronique B??? comportant des capteurs de températures déjà étalonnés disposés sur une plaque qui peut être chauffée par un chauffage. Nous avons &amp;quot;collé&amp;quot; avec de la pâte thermique notre thermistance sur cette plaque et effectué un relevé de la résistance en fonction de la température indiquée par les capteurs déjà présents. Le problème est que le chauffage ne pouvait pas être régulé, il continue de chauffer tant qu'on l'alimente. N'ayant donc pas de valeur de température stabilisée, à cause de l'inertie thermique, les valeurs de résistances relevées sont complètement non significatives.&lt;br /&gt;
Cette manipulation aura tout de même soulevé un point à prendre en compte : le capteur de température étant en métal, il faudra déterminer l'inertie qu'il induit dans la mesure et si celle ci est négligeable, sinon, comment faire avec.&lt;br /&gt;
&lt;br /&gt;
A partir des &lt;br /&gt;
Le soucis pour une approximation linéaire est que la plage de température est trop importante. En effet, la température de l'eau pour le café doit être entre 88°C et 90°C, mais on doit aussi pouvoir utiliser le capteur à une température de 65°C pour prévoir un mode &amp;quot;économie d'énergie&amp;quot;, lorsque la machine n'est pas utilisée pendant 10min par exemple.&lt;br /&gt;
Après recherches, la loi d'évolution de la résistance en fonction de la température est de la forme : &amp;lt;math&amp;gt;{1 \over {T}} = A + B \ln(R_T) + C (\ln(R_T))^3 \,&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Autre idée : simplement l'étalonner la thermistance au moyen d'un bain d'eau que l'on peut chauffer et d'une sonde de température précise.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déoulement du projet==&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17538</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17538"/>
				<updated>2015-02-23T21:47:21Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Caractérisation de la pompe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé pendant plusieurs durées pré-établies au moyen de l'Arduino (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume réel relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déoulement du projet==&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17537</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17537"/>
				<updated>2015-02-23T21:46:49Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Caractérisation de la pompe */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé pendant plusieurs durées pré-établies au moyen de l'Arduino (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume réel déduit par celui ci et le volume relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déoulement du projet==&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17536</id>
		<title>Thetweekproject</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Thetweekproject&amp;diff=17536"/>
				<updated>2015-02-23T21:44:16Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : /* Caractérisation de la pompe */  Ajout Infos collectées sur la pompe + résumé XP&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Machine à café=&lt;br /&gt;
==Présentation du projet==&lt;br /&gt;
===Cahier des charges===&lt;br /&gt;
SA&lt;br /&gt;
* Broyage des grains déjà torréfiés&lt;br /&gt;
** Régulation d’un moteur en vitesse avec charge variable&lt;br /&gt;
** Réutilisation des éléments d’une cafetière existante (carte électronique hors d’usage)&lt;br /&gt;
*** Étalonnage du débitmètre&lt;br /&gt;
*** Analyse du chauffe-eau&lt;br /&gt;
*** Calibration de la pompe à eau&lt;br /&gt;
** Propulsion de l’eau chauffée&lt;br /&gt;
*** Régulation d’une pompe à eau en pression et en débit&lt;br /&gt;
*** Régulation du chauffe-eau en température&lt;br /&gt;
** Modélisation des éléments du système&lt;br /&gt;
SC&lt;br /&gt;
* Création d’une interface homme-machine&lt;br /&gt;
** Installation d’un RaspberryPi avec un écran tactile&lt;br /&gt;
*** Gestion des stocks de café, d’eau et de gobelets&lt;br /&gt;
*** Gestion des différents éléments (pompe, compresseur, chauffe eau, …)&lt;br /&gt;
** Réalisation d’une interface graphique permettant de :&lt;br /&gt;
* Moudre le café&lt;br /&gt;
* Sélectionner la quantité d’eau à distribuer (café court ou long)&lt;br /&gt;
* Sélectionner un café parmi une présélection de café&lt;br /&gt;
** Création d’une application Web et Smartphone&lt;br /&gt;
*** Possibilité de noter son café&lt;br /&gt;
*** Possibilité de retenir un choix de café particulier&lt;br /&gt;
* Création de profils créés à partir de la carte étudiante&lt;br /&gt;
** Lecture d’information en NFC sur la carte étudiante&lt;br /&gt;
** Création d’une base de données basée sur ces profils&lt;br /&gt;
*** Proposition des cafés à partir de ceux les plus commandés et/ou mieux notés&lt;br /&gt;
*** Possibilité de retenir certains choix et de les recommander&lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
Commun&lt;br /&gt;
* Création d’une carte permettant la commande des différents éléments de la machine à café (pompe, chauffe-eau, et d’autres sorties)&lt;br /&gt;
* Création d’une carte permettant de faire l’acquisition des différents capteurs (comme le débitmètre)&lt;br /&gt;
&lt;br /&gt;
===Liste des tâches===&lt;br /&gt;
*Caractériser le débitmètre&lt;br /&gt;
*Caractériser le chauffe-eau&lt;br /&gt;
*Caractériser la pompe&lt;br /&gt;
*Détermination du schéma de fonctionnement et éventuels correctifs de régulation&lt;br /&gt;
*Réalisation de la carte électronique de commande&lt;br /&gt;
*Programmation de l'Arduino pour commander la carte&lt;br /&gt;
*Programmation du RaspberryPi pour l'interface tactile et la lecture NFC&lt;br /&gt;
**Estimation temps de réponse (temps de transfert à l'Arduino négligeable ?)&lt;br /&gt;
*Gestion automatique du café&lt;br /&gt;
**Dimensionnement capsule et du dispositif de broyage&lt;br /&gt;
**Création d'un système dispenseur de gobelets&lt;br /&gt;
***Design d'engrenages pour les gobelets&lt;br /&gt;
*Plus de fonctionnalités si temps restant&lt;br /&gt;
**Recharge par le Net&lt;br /&gt;
**Poison pour diabétique&lt;br /&gt;
**Interface beaucoup travaillée&lt;br /&gt;
**Packaging pratique&lt;br /&gt;
&lt;br /&gt;
===Matériel disponible===&lt;br /&gt;
&lt;br /&gt;
*Machine à café Nespresso défectueuse en morceaux [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie en 2014&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Un débitmètre&lt;br /&gt;
**Une pompe à eau&lt;br /&gt;
**Un chauffe-eau&lt;br /&gt;
**Tubes&lt;br /&gt;
**Carte électronique (très sûrement défectueuse)&lt;br /&gt;
**Mécanisme d'infusion de capsules de café&lt;br /&gt;
**Réservoir d'eau avec valve anti-retour&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Arduino Uno [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 26/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Arduino Léonardo [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 5/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**RaspberryPi [http://www.adafruit.com/products/998] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 28/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Carte SD 16G [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fournie le 29/1/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Capteur de température [http://fr.rs-online.com/web/p/capteurs-de-temperature-et-humidite/0264147/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Thermocouple [http://fr.rs-online.com/web/p/thermocouples/6212287/] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
**Lecteur NFC [http://www.adafruit.com/product/364] [&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;fourni le 4/2/2015&amp;lt;/span&amp;gt;]&lt;br /&gt;
&lt;br /&gt;
*Matériel électronique de puissance&lt;br /&gt;
**Contacteurs de puissance (max 32A, 400V) (x2)&lt;br /&gt;
**Coffrets d'isolation électrique (x2) (achetés le 09/02/2015)&lt;br /&gt;
**Cables électriques (section 2,5 mm2) (achetés le 09/02/2015)&lt;br /&gt;
**Boitier interrupteur (achetés le 09/02/2015)&lt;br /&gt;
&lt;br /&gt;
===Matériel manquant===&lt;br /&gt;
&lt;br /&gt;
*Matériel électro-informatique&lt;br /&gt;
**Ecran tactile [http://www.gotronic.fr/art-afficheur-tactile-usb-2-8-dfr0275-21547.htm]&lt;br /&gt;
&lt;br /&gt;
*Broyeur de café [http://www.maxicoffee.com/moulin-cafe-inoxnoir-gvx2-krups-p-9323-3_68.html?osCsid=e4t6v05n7lctvtod3ehggr0g05]&lt;br /&gt;
&lt;br /&gt;
===Répartition du travail===&lt;br /&gt;
 {| class=&amp;quot;wikitable alternance centre&amp;quot;&lt;br /&gt;
 |+ Titre&lt;br /&gt;
 |-&lt;br /&gt;
 |&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Lundi 14-16h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Mercredi 14-18h&lt;br /&gt;
 ! scope=&amp;quot;col&amp;quot; | Jeudi 10-12h&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 5&lt;br /&gt;
 | 26/01 - Organisation et répartition du projet&lt;br /&gt;
 | 28/01 - Caractériser le débitmètre et gérer les pièces manquantes&lt;br /&gt;
 | 29/01 - Caractériser le chauffe eau et la pompe&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 6&lt;br /&gt;
 | 02/02 - Détermination du schéma de fonctionnement et du plan de régulation&lt;br /&gt;
 | 04/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 05/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 7&lt;br /&gt;
 | 09/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 11/02 - Réalisation de la carte électronique&lt;br /&gt;
 | 12/02 - Réalisation de la carte électronique&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 8&lt;br /&gt;
 | 16/02 - Gestion automatique du café&lt;br /&gt;
 | 18/02 - Gestion automatique du café&lt;br /&gt;
 | 19/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 9&lt;br /&gt;
 | 23/02 - Gestion automatique du café&lt;br /&gt;
 | 25/02 - Gestion automatique du café&lt;br /&gt;
 | 26/02 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 11&lt;br /&gt;
 | 09/03 - Gestion automatique du café&lt;br /&gt;
 | 11/03 - Gestion automatique du café&lt;br /&gt;
 | 12/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 12&lt;br /&gt;
 | 16/03 - Gestion automatique du café&lt;br /&gt;
 | 18/03 - Gestion automatique du café&lt;br /&gt;
 | 19/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 13&lt;br /&gt;
 | 23/03 - Gestion automatique du café&lt;br /&gt;
 | 25/03 - Gestion automatique du café&lt;br /&gt;
 | 26/03 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 14&lt;br /&gt;
 | 30/03 - Gestion automatique du café&lt;br /&gt;
 | 01/04 - Gestion automatique du café&lt;br /&gt;
 | 02/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 15&lt;br /&gt;
 | Férié&lt;br /&gt;
 | 08/04 - Gestion automatique du café&lt;br /&gt;
 | 09/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 16&lt;br /&gt;
 | 13/04 - Gestion automatique du café&lt;br /&gt;
 | 15/04 - Gestion automatique du café&lt;br /&gt;
 | 16/04 - Gestion automatique du café&lt;br /&gt;
 |-&lt;br /&gt;
 ! scope=&amp;quot;row&amp;quot; | Semaine 17&lt;br /&gt;
 | 20/04 - Gestion automatique du café&lt;br /&gt;
 | 22/04 - Gestion automatique du café&lt;br /&gt;
 | 23/04 - Gestion automatique du café&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
En somme, les prévisions pour les différentes parties sont de:&lt;br /&gt;
*8 H pour la prise en main du matériel actuel&lt;br /&gt;
*14 H pour la réalisation de la carte électronique de commande&lt;br /&gt;
*70 H pour la gestion automatique du café&lt;br /&gt;
&lt;br /&gt;
==Etude préalable==&lt;br /&gt;
===Caractérisation du débitmètre===&lt;br /&gt;
Lors de la première séance &amp;quot;pratique&amp;quot;, nous avons étudié le comportement du débitmètre.&lt;br /&gt;
&lt;br /&gt;
Après recherches, nous avons appris qu'il en existe deux types. Le premier type est assimilable à une résistance variable dont la valeur dépend du débit. Le deuxième type se comporte comme un type tout ou rien qui effectue un contact entre deux des pins lorsque l'ailette interne fait un tour. Le débit est donc déduit par la fréquence des impulsions que délivre le débitmètre.&lt;br /&gt;
&lt;br /&gt;
Notre débitmètre est un composant crée par Digmesa, dont la fiche constructeur est disponible [http://www.pollin.de/shop/downloads/D180051D.PDF ici]. Il s'agit d'un débitmètre à turbine, du deuxième type.&lt;br /&gt;
&lt;br /&gt;
Le montage à droite permet de récupérer les impulsions du débitmètre sous forme TTL.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:Schéma_Montage_Débitmètre.JPG|250px|thumb|right|Schéma du montage permettant de récupérer les impulsions du débitmètre]]&lt;br /&gt;
&lt;br /&gt;
Le volume d'eau mesuré s'exprime alors sous cette forme : &amp;lt;math&amp;gt;V = n * \frac{1}{Kdeb}&amp;lt;/math&amp;gt; avec n le nombre d'impulsions, V le volume en L et Kdeb la constante fournie dans la doc constructeur Kdeb = 1925 impulsions/L.&lt;br /&gt;
&lt;br /&gt;
Le débit n'est pas une grandeur mesurée directement avec notre débitmètre, mais elle est déduite en choisissant un temps &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt; suffisamment court pour considérer le débit &amp;quot;instantané&amp;quot;.&lt;br /&gt;
L'expression du débit &amp;quot;pseudo-instantané&amp;quot; est alors la suivante :  &amp;lt;math&amp;gt;\frac{\Delta V}{\Delta t} = \frac{1}{Kdeb} * \frac{\Delta n}{\Delta t} &amp;lt;/math&amp;gt; avec &amp;lt;math&amp;gt;\Delta n&amp;lt;/math&amp;gt; la variation du nombre d'impulsion pendant le &amp;lt;math&amp;gt;\Delta t&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Obtenir le débit est ici utile car, d'après les informations collectées, le temps d'extraction du café doit être contrôlé (entre 20s à 25s) et le café doit être de 5cl pour un ristretto et de 12cl pour un lungo.&lt;br /&gt;
&lt;br /&gt;
Il est important de noter aussi que ce capteur a une influence sur la pression : en effet, il peut induire une perte de pression (au maximum) de 0,43 bar.&lt;br /&gt;
&lt;br /&gt;
===Réalisation interface commande - puissance===&lt;br /&gt;
Afin de pouvoir séparer circuit de commande et alimentation de puissance, nous utiliserons un optocoupleur et des contacteurs pour l'alimentation de la pompe et du chauffe-eau (tout deux alimentés en 230V alternatif 50 Hz). L'optocoupleur est utilisé afin de bénéficier d'une isolation galvanique entre les deux parties, pour plus de sécurité.&lt;br /&gt;
&lt;br /&gt;
La commande d'alimentation est envoyée par l'Arduino à l'optocoupleur. L'optocoupleur commande alors le contacteur (relais de puissance), ce qui alimente l'élément choisi.&lt;br /&gt;
&lt;br /&gt;
L'optocoupleur utilisé est sous forme de circuit &amp;quot;prêt à utiliser&amp;quot; (ET-OPTO AC-OUT 4 dont la fiche constructeur est disponible [http://www.tellab.it/open2b/var/catalog/product/files/57.pdf ici]) qui dispose de quatre optocoupleurs isolés. Nous en utiliserons un pour commander la pompe (OCT0) et un deuxième pour commander le chauffe-eau (OCT1). L'objectif d'une des séances a été d'établir ce dispositif d'alimentation, de comprendre le fonctionnement de l'optocoupleur dont nous disposons et de mapper les optocoupleurs aux sorties de l'Arduino.&lt;br /&gt;
&lt;br /&gt;
Par la suite, nous avons été contraint de changer de type de commande. En effet, la carte d'octocoupleurs permettait la commande mais n'était pas capable de couper le contacteur. Cela est du au principe même du fonctionnement du contacteur. En effet,le contacteur est composé d'une bobine (entre A1 et A2) qui vient attirer un bloc aimanté de façon à créer un contact entre les six broches de puissance (connecteurs 1 à 6). Le problème était que cette bobine demandait un courant trop important que l'octocoupleur gérait mal en rendant impossible la coupure de la bobine.&lt;br /&gt;
&lt;br /&gt;
Pour palier à ce problème, nous avons choisi d'utiliser une carte de commande d'octocoupleurs commandant des relais (ET-OPTO RELAY4, dont la fiche constructeur est disponible [http://www.micro4you.com/files/ETT/ET-OPTO-RELAY4.pdf ici]). Après vérification à l'aide de la documentation technique des relais, nous avons constaté que ceux-ci sont bien capable de couper la commande des contacteurs.&lt;br /&gt;
&lt;br /&gt;
===Fabrication d'un Shield Arduino===&lt;br /&gt;
Nous avons donc été amené à créer un shield Arduino avec une carte de prototypage rapide qui réalise les fonctions suivantes :&lt;br /&gt;
&lt;br /&gt;
* intégrer un connecteur 10 broches compatible pour :&lt;br /&gt;
** relier la sortie digitale IO 2 à l'optocoupleur OCT0 qui commandera l'alimentation de la Pompe&lt;br /&gt;
** relier la sortie digitale IO 3 à l'optocoupleur OCT1 qui commandera l'alimentation du Chauffe eau&lt;br /&gt;
* intégrer le circuit de récupération des impulsions du débitmètre TTL et échantillonner ce signal sur l'entrée digitale IO8&lt;br /&gt;
* disposer d'une fonction &amp;quot;Boutons Arrêt d'urgence&amp;quot; pour la pompe et le chauffe eau.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement des &amp;quot;Arrets d'urgence&amp;quot; est le suivant :&lt;br /&gt;
&lt;br /&gt;
===Caractérisation de la pompe===&lt;br /&gt;
La pompe récupérée est un composant fabriqué par Invensys, dont la fiche constructeur est disponible à [http://www.toolbox.robertshaw.com/appliance/linkedElements/WaterPumps.pdf cette adresse].&lt;br /&gt;
Il s'agit d'une pompe à piston qui permet de délivrer une pression allant jusqu'à 19 bar au maximum. Cette pression est fonction du débit en sortie de la pompe, selon la caractéristique à droite.&lt;br /&gt;
[[Fichier:Caractéristique_Pompe_Invensys_CP4.JPG‎|250px|thumb|right|Caractéristique Pression/Débit de la pompe]]&lt;br /&gt;
&lt;br /&gt;
Elle se commande en &amp;quot;tout ou rien&amp;quot; et est alimentée en 230 V alternatif 50Hz.&lt;br /&gt;
Le paramètre permettant de fixer le point de fonctionnement sur le graphique précédent est la section du tuyau en sortie. Nous n'avons pas la main sur ce paramètre étant donné que nous possédons déjà le système de tuyaux avec les embouts adaptés (section à mesurer : S = ? mm²). En revanche, nous la commanderons en décidant du temps d'allumage.&lt;br /&gt;
Il s'agit maintenant de déterminer à quels moments et combien de temps il faut alimenter la pompe, sachant qu'il faut que l'extraction dure entre 20s et 25s et que le chauffe eau induit un retard à déterminer.&lt;br /&gt;
&lt;br /&gt;
'''Séance pratique :'''&lt;br /&gt;
&lt;br /&gt;
Lors d'une séance de manipulation de la pompe, nous l'avons commandé pendant plusieurs durées pré-établies au moyen de l'Arduino (2s, 5s et 10s) afin de déterminer si elle possède un régime transitoire négligeable. Nous avons ensuite relevé le volume d'eau qu'elle avait délivré grâce à une éprouvette graduée. Plusieurs séries de mesures ont été effectuées à chaque fois.&lt;br /&gt;
Lors de cette manip, le tuyau de sortie n'était pas connecté au chauffe-eau afin que la mesure ne soit pas influencée, il donnait directement dans l'éprouvette. Cette manipulation nous a également permis de tester notre débitmètre et notre manière d'échantillonner le signal qu'il nous fournit, en comparant le volume déduit par celui ci et le volume relevé avec l'éprouvette.&lt;br /&gt;
''(insérer photos et résultats sous forme tabloïdale ici)''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ainsi, nous avons déterminé que quelque soit le temps d'allumage (pour une durée supérieure à 2s), la pompe fournit un débit constant de 5,2 mL/s = 0,312 cc/min.&lt;br /&gt;
&lt;br /&gt;
===Caractérisation du chauffe eau===&lt;br /&gt;
===Détermination du schéma de fonctionnement et du plan de régulation===&lt;br /&gt;
===Réalisation de la carte électronique===&lt;br /&gt;
===Construction de la gestion automatique du café===&lt;br /&gt;
&lt;br /&gt;
==Déoulement du projet==&lt;br /&gt;
==Conclusion==&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	<entry>
		<id>https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Caract%C3%A9ristique_Pompe_Invensys_CP4.JPG&amp;diff=17535</id>
		<title>Fichier:Caractéristique Pompe Invensys CP4.JPG</title>
		<link rel="alternate" type="text/html" href="https://projets-ima.plil.fr/mediawiki/index.php?title=Fichier:Caract%C3%A9ristique_Pompe_Invensys_CP4.JPG&amp;diff=17535"/>
				<updated>2015-02-23T20:55:33Z</updated>
		
		<summary type="html">&lt;p&gt;Pletouse : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Pletouse</name></author>	</entry>

	</feed>