<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Réalisations &#8211; Electronique et Informatique</title>
	<atom:link href="https://amaury-laurent.fr/category/realisation/feed/" rel="self" type="application/rss+xml" />
	<link>https://amaury-laurent.fr</link>
	<description>Site web d&#039;Amaury LAURENT</description>
	<lastBuildDate>Sat, 17 Oct 2026 20:07:31 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://ml9zfxsqktal.i.optimole.com/w:32/h:32/q:mauto/f:best/dpr:2/https://amaury-laurent.fr/wp-content/uploads/2026/10/site-icon-al-2026.png</url>
	<title>Réalisations &#8211; Electronique et Informatique</title>
	<link>https://amaury-laurent.fr</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Écran multifonction pour simulateur de vol (MFD)</title>
		<link>https://amaury-laurent.fr/ecran-multifonction-pour-simulateur-de-vol-mfd/</link>
					<comments>https://amaury-laurent.fr/ecran-multifonction-pour-simulateur-de-vol-mfd/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 02 Oct 2021 19:46:51 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Électronique]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<guid isPermaLink="false">https://amaury-laurent.fr/?p=1271</guid>

					<description><![CDATA[Introduction L&#8217;accès à certaines fonctionnalités embarqués sur un avion de combat (navigation, systèmes d&#8217;armes, désignateur, &#8230;) passe par un écran multifonctions (MultiFunction Display). Bien que certains simulateurs proposent un cockpit cliquable, il est toujours embêtant de devoir orienter le champ de vision à chaque fois que l&#8217;on souhaite effectuer une action. Du coup, l&#8217;utilisation d&#8217;un [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>L&rsquo;accès à certaines fonctionnalités embarqués sur un avion de combat (navigation, systèmes d&rsquo;armes, désignateur, &#8230;) passe par un écran multifonctions (<em><strong>M</strong>ulti<strong>F</strong>unction <strong>D</strong>isplay</em>). Bien que certains simulateurs proposent un cockpit cliquable, il est toujours embêtant de devoir orienter le champ de vision à chaque fois que l&rsquo;on souhaite effectuer une action. Du coup, l&rsquo;utilisation d&rsquo;un périphérique matériel augmente l&rsquo;immersion et améliore l&rsquo;expérience de jeu.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-1275 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/Screen_200617_160247-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Les solutions commerciales existantes (<a href="https://www.thrustmaster.com/fr_FR/produits/mfd-cougar-pack" target="_blank" rel="noopener">ThrustMaster Cougar Pack</a>) ne m&rsquo;ayant pas impressionné, j&rsquo;ai décidé de concevoir un écran multifonction fonctionnant sur USB.</p>
<p>Le projet que je présente est conçu pour fonctionner avec DCS. Cependant, comme il utilise un écran HDMI et des contrôles type joystick, il n&rsquo;y a pas de raisons pour que ça ne marche pas avec d&rsquo;autres simulateurs.</p>
<h2>Principes de fonctionnement</h2>
<p>L&rsquo;idée consiste à configurer DCS pour envoyer l&rsquo;image des MFD gauche et droite sur deux écrans supplémentaires. Pour ce faire, il faut créer un fichier de configuration dans le dossier MonitorSetup du jeu et ajouter ces deux paramètres (il faut bien évidemment ajuster les offsets pour tomber dans les bons écrans) :</p>
<div class="snippetcpt-wrap" id="snippet-1272" data-id="1272" data-edit="" data-copy="/category/realisation/feed/?snippet=817fcbc24b&#038;id=1272" data-fullscreen="https://amaury-laurent.fr/code-snippets/mfd_display-lua/?full-screen=1">
				<pre class="prettyprint linenums lang-lua" title="MFD_Display.lua">_  = function(p) return p; end;
name = _('MFD_Display');
Description = 'Config maison'
Viewports =
{
     Center =
     {
          x = 1920;
          y = 0;
          width  = 1920;
          height = 1080;
          viewDx = 0;
          viewDy = 0;
          aspect = 1.6;
     }
}

LEFT_MFCD =
{
    x = 1920*2+(1024/2-768/2);
    y = 0;
    width  = 768;
    height = 768;
}

RIGHT_MFCD =
{
    x = 1920*2+1024+(1024/2-768/2);
    y = 0;
    width  = 768;
    height = 768;
}

UIMainView = Viewports.Center
GU_MAIN_VIEWPORT = Viewports.Center</pre>
			</div>
<p>L&rsquo;assignation des touches se fait simplement dans DCS, comme n&rsquo;importe quel autre périphérique d&rsquo;entrée.</p>
<p>Pour l&rsquo;affichage, j&rsquo;ai choisi un écran LCD 4:3 de 8 pouces. Il a une résolution de 1024&#215;768 :</p>
<p>​​<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/H7722be4a6fc64bfd84d52e6e3e1e65505.png"><img decoding="async" class="aligncenter wp-image-1299 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/H7722be4a6fc64bfd84d52e6e3e1e65505.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1000" height="1333" srcset="https://ml9zfxsqktal.i.optimole.com/w:810/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/H7722be4a6fc64bfd84d52e6e3e1e65505.png 1000w, https://ml9zfxsqktal.i.optimole.com/w:225/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/H7722be4a6fc64bfd84d52e6e3e1e65505.png 225w, https://ml9zfxsqktal.i.optimole.com/w:768/h:1024/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/H7722be4a6fc64bfd84d52e6e3e1e65505.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Son prix et sa taille en font une solution intéressante : <a href="https://fr.aliexpress.com/item/32325920866.html?spm=a2g0s.9042311.0.0.d0dd6c37EdzyS4​" target="_blank" rel="noopener">https://fr.aliexpress.com/item/32325920866.html?spm=a2g0s.9042311.0.0.d0dd6c37EdzyS4​</a></p>
<h2>L&rsquo;électronique</h2>
<h3>Conception</h3>
<p>Pour simplifier l&rsquo;intégration matérielle, j&rsquo;ai choisi d&rsquo;utiliser un petit microcontrôleur de chez Microchip capable de faire de l&rsquo;USB et de l&rsquo;I2C : le PIC18F25K50. Il communique avec 4 cartes filles qui s&rsquo;occupent chacune de 7 boutons.</p>
<p>La séparation en plusieurs cartes répond à deux impératifs :</p>
<ol>
<li>Rentrer dans une conception Autodesk EAGLE version gratuite</li>
<li>Diminuer les coûts de fabrication en réduisant la surface de circuit imprimé</li>
</ol>
<p>La carte mère sera montée au dos du MFD :<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_mere.png"><img decoding="async" class="aligncenter wp-image-1292 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_mere.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="766" height="468" srcset="https://ml9zfxsqktal.i.optimole.com/w:766/h:468/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_mere.png 766w, https://ml9zfxsqktal.i.optimole.com/w:300/h:183/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_mere.png 300w" sizes="(max-width: 766px) 100vw, 766px" /></a></p>
<p>Deux cartes en angle et deux cartes droites permettent de former un cadre autour de l&rsquo;écran LCD :</p>
<p>​<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png"><img decoding="async" class="aligncenter size-large wp-image-1291" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:652/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="652" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:652/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:191/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:489/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1053/h:670/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_l.png 1053w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_i.png"><img decoding="async" class="aligncenter size-full wp-image-1290" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_i.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="989" height="569" srcset="https://ml9zfxsqktal.i.optimole.com/w:989/h:569/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_i.png 989w, https://ml9zfxsqktal.i.optimole.com/w:300/h:173/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_i.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:442/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/carte_i.png 768w" sizes="(max-width: 989px) 100vw, 989px" /></a>​</p>
<p>&nbsp;</p>
<h3>La carte mère</h3>
<p>La carte mère du MFD se contente de faire le lien entre les différentes cartes filles (I2C) et le PC (USB). Le schéma est donc des plus simples, il reprend celui de la <a href="https://amaury-laurent.fr/boite-a-boutons-pour-simulateurs/" target="_blank" rel="noopener">boite à boutons</a> ou de <a href="https://amaury-laurent.fr/interface-usb-hid/" target="_blank" rel="noopener">l&rsquo;interface HID</a>, mais avec un composant différent :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png"><img decoding="async" class="aligncenter wp-image-1289 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:437/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="437" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:437/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:128/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:328/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:655/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:819/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_mere.png 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>​On retrouve une horloge, un circuit de reset, le connecteur USB, un connecteur pour l&rsquo;I2C et un connecteur de programmation. Pour changer mes habitudes, j&rsquo;ai réalisé mes cartes avec des composants à montage en surface (CMS) :<br />
<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_mere.png"><img decoding="async" class="aligncenter wp-image-1296 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_mere.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="755" height="465" srcset="https://ml9zfxsqktal.i.optimole.com/w:755/h:465/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_mere.png 755w, https://ml9zfxsqktal.i.optimole.com/w:300/h:185/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_mere.png 300w" sizes="(max-width: 755px) 100vw, 755px" /></a></p>
<h3>Les cartes filles</h3>
<p>Bien que 2 formes différentes soient nécessaires, elles ont toutes le même schéma (à la différence de l&rsquo;adresse). Il s&rsquo;agit d&rsquo;un multiplexeur 8 entrées tout ou rien vers I2C MCP23008. Les résistances de tirages sont intégrées dans la puce. Les cartes sont adressées par un pont à souder pour le bit de poids faible et câblé en dur à 1 pour les cartes en L (0 pour les cartes en I).</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png"><img decoding="async" class="aligncenter wp-image-1297 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:280/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="280" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:280/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:82/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:210/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:419/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:524/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/schema_carte_boutons.png 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Deux connecteurs I2C permettent de former une chaine avec les 4 cartes. Un troisième permet de relier la carte mère sur l&rsquo;une des cartes filles.</p>
<p>La configuration des boutons à bascules présents aux 4 coins du MFD oblige à avoir deux formes de cartes:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png"><img decoding="async" class="aligncenter size-large wp-image-1295" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:299/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="299" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:299/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:88/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:224/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:448/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1872/h:546/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_l.png 1872w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>​</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png"><img decoding="async" class="aligncenter size-large wp-image-1294" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:324/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="324" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:324/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:95/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:243/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:487/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1638/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/pcb_carte_i.png 1638w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>​</p>
<p>Les dimensions sont adaptées à la taille de l&rsquo;écran de 8 pouces et au boitier imprimé en 3D dessiné tout spécialement.</p>
<h3>Réalisation</h3>
<p>J&rsquo;ai sous-traité la fabrication des PCB (double couches) à <a href="https://www.nextpcb.com/" target="_blank" rel="noopener">NextPCB</a>.</p>
<p>Les soudures des composants CMS sont réalisées au fer à souder, avec une panne fine. Pour rendre cela possible, j&rsquo;ai choisi des boitiers SOIC (gros composants CMS, pas de 1.27mm) et des formats 0805 pour les résistances et condensateurs. Finalement, le composant le plus petit et le plus difficile à souder est la LED indiquant la mise sous tension.</p>
<p>NB : une bonne pince brucelles est nécessaire !</p>
<h2><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1276 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105009-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1277 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_105102-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1287 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185658-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1288 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_185704-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>Intégration mécanique</h2>
<p>J&rsquo;ai fait découper au LASER des tôles d&rsquo;inox pour réaliser les faces avant (<a href="https://www.metal-laser.com/" target="_blank" rel="noopener">https://www.metal-laser.com/</a>). Le boitier plastique qui accueille ​les cartes filles ainsi que les différentes touches sont imprimés en 3D. La conception mécanique et l&rsquo;intégration des cartes électroniques a été réalisée à l&rsquo;aide <a href="https://www.autodesk.fr/products/fusion-360/personal" target="_blank" rel="noopener">Fusion 360</a>. Cet outil permet de facilement faire converger les CAO électroniques et mécaniques.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/montage.png"><img decoding="async" class="aligncenter wp-image-1293 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/montage.png" alt="Écran multifonction pour simulateur de vol (MFD)" width="949" height="627" srcset="https://ml9zfxsqktal.i.optimole.com/w:949/h:627/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/montage.png 949w, https://ml9zfxsqktal.i.optimole.com/w:300/h:198/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/montage.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:507/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/montage.png 768w" sizes="(max-width: 949px) 100vw, 949px" /></a></p>
<p>Il est important de pouvoir vérifier la profondeur du boitier plastique, notamment pour que les boutons poussoirs tombent en dessous des touches plastiques.<br />
<a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1279 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181757-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1280 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20210802_181811-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a>​</p>
<p>L&rsquo;écran LCD est fixé (scotché ou collé) à l&rsquo;arrière du cadre. La face avant est également collée au boitier plastique.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1282 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_183955-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h2>Le logiciel</h2>
<p>Une fois n&rsquo;est pas coutume, le code du microcontrôleur a été écrit en C à l&rsquo;aide de MikroC. Outre l&rsquo;initialisation de la puce et le driver des multiplexeurs, la boucle principale se contente de lire les 4 ports d&rsquo;entré sur l&rsquo;I2C et d&rsquo;envoyer le rapport USB HID.</p>
<div class="snippetcpt-wrap" id="snippet-1310" data-id="1310" data-edit="" data-copy="/category/realisation/feed/?snippet=817fcbc24b&#038;id=1310" data-fullscreen="https://amaury-laurent.fr/code-snippets/mfd-main/?full-screen=1">
				<pre class="prettyprint linenums lang-c_cpp" title="MFD Main">/**
* Version IO Expander MCP23018
**/

#include &quot;MCP23008.h&quot;

#define USB_BUFFER_LEN       4
#define NB_MCP               4

unsigned char readbuff[USB_BUFFER_LEN] absolute 0x500;
unsigned char writebuff[USB_BUFFER_LEN] absolute 0x540;

int reset_mcp23017 = 1;

void interrupt() {
    USB_Interrupt_Proc();        // USB servicing is done inside the interrupt
    USBIF_bit = 0;
}

// define callback function
void I2C1_TimeoutCallback(char errorCode) {
   if (errorCode == _I2C_TIMEOUT_RD) {
     //LED0 = 1;
     // do something if timeout is caused during read
   }

   if (errorCode == _I2C_TIMEOUT_WR) {
     //LED1 = 1;
     // do something if timeout is caused during write
   }

   if (errorCode == _I2C_TIMEOUT_START) {
     //LED0 = 1;
     // do something if timeout is caused during start
   }

   if (errorCode == _I2C_TIMEOUT_REPEATED_START) {
     //LED1 = 1;
     // do something if timeout is caused during repeated start
   }
   
   reset_mcp23017 = 1;
}
          
void main() {
    int i = 0;
    int cpt = 0;
    
    uint16_t temp;

    ANSELA = 0;
    ANSELB = 0;
    ANSELC = 0;
    SLRCON = 0;

    ADCON1 |= 0x0F;                         // Configure all ports with analog function as digital
    CM1CON0 |= 7;                           // Disable comparators

    TRISB = 0xff;
    TRISB.f2 = 0;
    LATB.f2 = 1;

    I2C1_Init(400000);         // initialize I2C communication
    
    // set timeout period and callback function
    I2C1_SetTimeoutCallback(40000, I2C1_TimeoutCallback);

    reset_mcp23017 = 1;

    FSEN_bit = 1;
    UPUEN_bit = 1;
    HID_Enable(&amp;readbuff,&amp;writebuff);
    
    // Enable USB device interrupt
    IPEN_bit = 1;
    USBIP_bit = 1;
    USBIE_bit = 1;
    GIEH_bit = 1;

    while (1) {
        if (reset_mcp23017) {
           LATB.f2 = 0;       //RESET MCP23017
           Delay_ms(250);
           LATB.f2 = 1;
           Delay_ms(250);

           for (i=0; i&lt;NB_MCP; i++) {
            MCPreset(i);
            Delay_ms(5);
           }
          reset_mcp23017 = 0;
        }

        memset(writebuff, 0x00, USB_BUFFER_LEN);
    
        for (i=0; i&lt;NB_MCP; i++) {
          temp = MCPread(i, GPIO);
          writebuff[i] = ~temp;
          Delay_ms(5);
          if(reset_mcp23017) break;
        }
        
        HID_Write(writebuff, USB_BUFFER_LEN);
        Delay_ms(5);
    }
}</pre>
			</div>
<p>&nbsp;</p>
<h2>Le premier test</h2>
<p>Un dock USB 3.1 peut servir pour gérer le HDMI et l&rsquo;USB simultanément, ce qui permet d&rsquo;avoir une unique prise USB occupée sur le PC. Si la configuration de DCS est correcte et que l&rsquo;écran est bien détecté, voici le résultat que l&rsquo;on peut obtenir :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1283 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184607-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1284 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184704-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a> <a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg"><img decoding="async" class="aligncenter wp-image-1286 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954.jpg" alt="Écran multifonction pour simulateur de vol (MFD)" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/10/20211002_184954-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>La même chose en vidéo :</p>
<p>&nbsp;</p>
<p><iframe title="Écran multifonction pour DCS World" width="500" height="281" src="https://www.youtube.com/embed/rAcCKd2z3Fs?feature=oembed&#038;enablejsapi=1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<p>&nbsp;</p>
<h2>Conclusion</h2>
<p>Il me reste encore à imprimer des touches propres et à finir l&rsquo;état de surface de la face avant. Pour le reste, le rendu est vraiment sympa. Reste à tester réellement sur une session de pilotage plus longue.</p>
<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/assistant-descripteur-usb-hid/">Générateur de descripteur USB HID</a> : construire et vérifier un descripteur de rapport (joystick, boutons, composite) et ses structures C</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/ecran-multifonction-pour-simulateur-de-vol-mfd/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Boite à boutons pour simulateurs</title>
		<link>https://amaury-laurent.fr/boite-a-boutons-pour-simulateurs/</link>
					<comments>https://amaury-laurent.fr/boite-a-boutons-pour-simulateurs/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Wed, 16 Jun 2021 16:48:31 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[buttonbox]]></category>
		<category><![CDATA[DCS Wolrd]]></category>
		<category><![CDATA[hid]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<category><![CDATA[usb]]></category>
		<guid isPermaLink="false">https://amaury-laurent.fr/?p=1243</guid>

					<description><![CDATA[Le retour de l&#8217;interface USB HID ! Introduction Quand les potes disent vouloir jouer à DCS World en multijoueurs, l&#8217;électronicien qui sommeil en moi se dit « Il me faut plus de boutons ! ». En effet, les périphériques de jeux habituels sont relativement peu pourvus en boutons, et démarrer un avion de chasse est un peu [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2></h2>
<h2>Le retour de l&rsquo;interface USB HID !</h2>
<h3>Introduction</h3>
<p>Quand les potes disent vouloir jouer à <a href="https://www.digitalcombatsimulator.com/fr/products/world/" target="_blank" rel="noopener">DCS World</a> en multijoueurs, l&rsquo;électronicien qui sommeil en moi se dit « Il me faut plus de boutons ! ». En effet, les périphériques de jeux habituels sont relativement peu pourvus en boutons, et démarrer un avion de chasse est un peu plus complexe que démarrer une Twingo. L&rsquo;idée a donc germée de concevoir une électronique vue comme un joystick et proposant des entrées tout ou rien et/ou analogiques. Il est ainsi possible de réaliser son tableau de bord, avec de vrais boutons, des étiquettes&#8230; Bref, on s&rsquo;y croirait.</p>
<h3>Conception de la carte</h3>
<h4>Spécifications</h4>
<p>Comme on ne change pas une équipe qui gagne, je suis reparti de ma première version de <a href="https://amaury-laurent.fr/interface-usb-hid/" target="_blank" rel="noopener">l&rsquo;interface USB HID</a>. Voici quelques éléments en vrac:</p>
<ul>
<li>Alimentation par le bus USB</li>
<li>MCU : PIC18F4550 cadencé à 48MHz par un quartz 24MHz</li>
<li>Carte compacte</li>
<li>pas de composants additionnels à prévoir pour les entrées tout ou rien</li>
<li>16 entrées ToR</li>
<li>8 entrées analogiques 10 bits</li>
</ul>
<p>Il me fallait écouler un vieux stock de PIC18F4550 en format DIP40, donc le CMS sera pour une prochaine réalisation. Les entrées se font sur des borniers à vis au pas de 2.54mm. Les résistances de pull-up internes au PIC permettent d&rsquo;exploiter directement les ports B et D en tout ou rien. Le port A est utilisé en entrées analogiques.</p>
<h4>Schéma et PCB</h4>
<p>Le schéma de la carte ne constitue en rien une révolution. On retrouve presque à l&rsquo;identique celui de ma première interface.</p>
<figure id="attachment_1245" aria-describedby="caption-attachment-1245" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png"><img decoding="async" class="size-large wp-image-1245" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:435/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png" alt="Boite à boutons pour simulateurs" width="1024" height="435" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:435/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:127/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:326/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:652/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:815/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_schematic.png 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1245" class="wp-caption-text">Le schéma de la button box</figcaption></figure>
<p>L&rsquo;implantation est par contre beaucoup plus compacte.</p>
<figure id="attachment_1255" aria-describedby="caption-attachment-1255" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png"><img decoding="async" class="wp-image-1255 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:455/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png" alt="Boite à boutons pour simulateurs" width="1024" height="455" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:455/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:133/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:341/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1218/h:541/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_board.png 1218w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1255" class="wp-caption-text">Le PCB de la button box</figcaption></figure>
<h3>Réalisation</h3>
<p>Pour une fois, j&rsquo;ai décidé de sous traiter la fabrication des circuits (au-delà d&rsquo;un exemplaire, la gravure à la fraiseuse n&rsquo;est pas franchement efficace). J&rsquo;ai donc envoyé tout ça chez les chinois (<a href="https://www.nextpcb.com/" target="_blank" rel="noopener">NextPCB</a> pour ne pas les citer). Le résultat est impeccable, pour un prix de revient d&rsquo;1.60€/pièce, port compris :</p>
<figure id="attachment_1246" aria-describedby="caption-attachment-1246" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg"><img decoding="async" class="size-large wp-image-1246" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610.jpg" alt="Boite à boutons pour simulateurs" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210524_190610-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1246" class="wp-caption-text">Les PCB fabriqués par les chinois de NextPCB</figcaption></figure>
<p>Seul petit bémol : la durée de livraison pour l&rsquo;expédition économique : compter plusieurs semaines. Place à la soudure !</p>
<figure id="attachment_1250" aria-describedby="caption-attachment-1250" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg"><img decoding="async" class="size-large wp-image-1250" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906.jpg" alt="Boite à boutons pour simulateurs" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210526_191906-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1250" class="wp-caption-text">La fabrication en série, c&rsquo;est un métier &#8230;</figcaption></figure>
<h3>Programmation</h3>
<p>Là encore, rien de révolutionnaire : le code est écrit en C avec <a href="https://www.mikroe.com/mikroc-pic" target="_blank" rel="noopener">MikroC for PIC</a>. Les PIC sont ensuite flashés en série grâce à un PicKit et <a href="https://www.microchip.com/en-us/development-tools-tools-and-software/embedded-software-center/mplab-integrated-programming-environment" target="_blank" rel="noopener">MPLAB IPE</a>.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg"><img decoding="async" class="aligncenter size-large wp-image-1252" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615.jpg" alt="Boite à boutons pour simulateurs" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_20210527_214615-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Le descripteur HID déclare donc 16 entrées switch et 8 axes analogiques:</p>
<div class="snippetcpt-wrap" id="snippet-1256" data-id="1256" data-edit="" data-copy="/category/realisation/feed/?snippet=817fcbc24b&#038;id=1256" data-fullscreen="https://amaury-laurent.fr/code-snippets/descripteur-uhi-pour-button-box/?full-screen=1">
				<pre class="prettyprint linenums lang-c_cpp" title="Descripteur HID pour Button Box">hid_rpt_desc =
  {
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x15, 0x00,                    // LOGICAL_MINIMUM (0)
    0x09, 0x04,                    // USAGE (Joystick)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x05, 0x02,                    //   USAGE_PAGE (Simulation Controls)
    0x09, 0xbb,                    //   USAGE (Throttle)
    0x09, 0xc5,                    //   USAGE (Brake)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x95, 0x02,                    //   REPORT_COUNT (2)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x05, 0x01,                    //   USAGE_PAGE (Generic Desktop)
    0x09, 0x01,                    //   USAGE (Pointer)
    0xa1, 0x00,                    //   COLLECTION (Physical)
    0x09, 0x30,                    //     USAGE (X)
    0x09, 0x31,                    //     USAGE (Y)
    0x09, 0x32,                    //     USAGE (Z)
    0x09, 0x33,                    //     USAGE (Rx)
    0x09, 0x34,                    //     USAGE (Ry)
    0x09, 0x35,                    //     USAGE (Rz)
    0x95, 0x06,                    //     REPORT_COUNT (6)
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)
    0xc0,                          //   END_COLLECTION
    0x05, 0x09,                    //   USAGE_PAGE (Button)
    0x19, 0x01,                    //   USAGE_MINIMUM (Button 1)
    0x29, 0x10,                    //   USAGE_MAXIMUM (Button 16)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x25, 0x01,                    //   LOGICAL_MAXIMUM (1)
    0x75, 0x01,                    //   REPORT_SIZE (1)
    0x95, 0x10,                    //   REPORT_COUNT (16)
    0x55, 0x00,                    //   UNIT_EXPONENT (0)
    0x65, 0x00,                    //   UNIT (None)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0xc0                           // END_COLLECTION
  };</pre>
			</div>
<p>Le rapport USB associé est le suivant:</p>
<table class="customTable">
<tbody>
<tr>
<th colspan="9">USB Report</th>
</tr>
<tr>
<th>octet 0</th>
<td colspan="8">Throttle</td>
</tr>
<tr>
<th>octet 1</th>
<td colspan="8">Brake</td>
</tr>
<tr>
<th>octet 2</th>
<td colspan="8">Axe X</td>
</tr>
<tr>
<th>octet 3</th>
<td colspan="8">Axe Y</td>
</tr>
<tr>
<th>octet 4</th>
<td colspan="8">Axe Z</td>
</tr>
<tr>
<th>octet 5</th>
<td colspan="8">Axe RX</td>
</tr>
<tr>
<th>octet 6</th>
<td colspan="8">Axe RY</td>
</tr>
<tr>
<th>octet 7</th>
<td colspan="8">Axe RZ</td>
</tr>
<tr>
<th>octet 8</th>
<td>DI 00</td>
<td>DI 01</td>
<td>DI 02</td>
<td>DI 03</td>
<td>DI 04</td>
<td>DI 05</td>
<td>DI 06</td>
<td>DI 07</td>
</tr>
<tr>
<th>octet 9</th>
<td>DI 08</td>
<td>DI 09</td>
<td>DI 10</td>
<td>DI 11</td>
<td>DI 12</td>
<td>DI 13</td>
<td>DI 14</td>
<td>DI 15</td>
</tr>
</tbody>
</table>
<h3>Utilisation</h3>
<p>Le câblage des entrées analogiques peut exploiter l&rsquo;alimentation de la carte (5V sur USB) pour utiliser des potentiomètres:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png"><img decoding="async" class="aligncenter size-large wp-image-1264" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:773/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png" alt="Boite à boutons pour simulateurs" width="1024" height="773" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:773/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:227/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:580/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1303/h:984/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Analogic.png 1303w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Le câblage des boutons se fait entre la broche d&rsquo;entrée et la masse. La résistance de pull-up interne s&rsquo;occupe de polariser l&rsquo;entrée quand le bouton est ouvert.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png"><img decoding="async" class="aligncenter size-large wp-image-1265" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:936/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png" alt="Boite à boutons pour simulateurs" width="1024" height="936" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:936/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:274/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:702/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1076/h:984/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Digital.png 1076w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Une fois le tout branché et l&rsquo;USB relié au PC, Windows devrait voir un nouveau périphérique de jeu:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Windows.png"><img decoding="async" class="aligncenter size-full wp-image-1267" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Windows.png" alt="Boite à boutons pour simulateurs" width="416" height="470" srcset="https://ml9zfxsqktal.i.optimole.com/w:416/h:470/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Windows.png 416w, https://ml9zfxsqktal.i.optimole.com/w:266/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/06/BUTTON_Windows.png 266w" sizes="(max-width: 416px) 100vw, 416px" /></a></p>
<h3>Conclusion</h3>
<p>Il ne reste qu&rsquo;à faire la mécanique !</p>
<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/assistant-descripteur-usb-hid/">Générateur de descripteur USB HID</a> : construire et vérifier un descripteur de rapport (joystick, boutons, composite) et ses structures C</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/boite-a-boutons-pour-simulateurs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Nomad ND1 &#8211; Sous le capot</title>
		<link>https://amaury-laurent.fr/nomad-nd1-sous-le-capot/</link>
					<comments>https://amaury-laurent.fr/nomad-nd1-sous-le-capot/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Fri, 26 Feb 2021 18:06:39 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[mass effect]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<category><![CDATA[nomad]]></category>
		<category><![CDATA[udp]]></category>
		<category><![CDATA[wireshark]]></category>
		<guid isPermaLink="false">https://amaury-laurent.fr/?p=1222</guid>

					<description><![CDATA[Introduction Si vous aussi êtes fan de Mass Effect et avez investi dans l&#8217;édition collector de Mass Effect Andromeda, vous vous retrouvez sans doute avec un Nomad ND1 télécommandé par smartphone. Comme l&#8217;application Android est toute nulle perfectible et peu stable, il parait intéressant de piloter ce petit drone roulant à partir d&#8217;un PC ou, [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Si vous aussi êtes fan de Mass Effect et avez investi dans l&rsquo;édition collector de Mass Effect Andromeda, vous vous retrouvez sans doute avec un Nomad ND1 télécommandé par smartphone. Comme l&rsquo;application Android est <del>toute nulle</del> perfectible et peu stable, il parait intéressant de piloter ce petit drone roulant à partir d&rsquo;un PC ou, pourquoi pas, d&rsquo;une radio commande conventionnelle.</p>
<p>Pour ce faire, je vais décortiquer la communication mise en place entre le Nomad et le smart phone.</p>
<h2>Deux types de communication</h2>
<p>Le Nomad est télécommandé (vitesse, direction, allumage des feux) mais dispose également d&rsquo;une caméra afin de fournir un retour vidéo temps réel. Du coup, deux communications différentes sont utilisées.</p>
<h3>Connexion WiFi</h3>
<p>Tout d&rsquo;abord, il est bon de préciser que la communication radio entre le smartphone et le Nomad est basée sur une liaison WiFi 2.4GHz. Le Nomad est un point d&rsquo;accès avec serveur DHCP. Quand on connecte un périphérique réseau sur le Nomad, on obtient automatiquement une adresse IP.</p>
<p>Le Nomad sera toujours accessible à l&rsquo;adresse 192.168.0.1.</p>
<h3>Retour Vidéo</h3>
<p>Je commence par exposer le fonctionnement du retour vidéo puisqu&rsquo;il s&rsquo;agit du moins complexe et qu&rsquo;il peut être solutionné avec des logiciels comme VLC.</p>
<p>Le Nomad se comporte comme une caméra IP. Il héberge un serveur de <a href="https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol" target="_blank" rel="noopener">streaming RTSP</a>. Le point d&rsquo;accès vidéo est vs1. Il est donc possible d&rsquo;ouvrir le flux vidéo en accédant à l&rsquo;adresse:</p>
<p><a href="rtsp://192.168.0.1/vs1" target="_blank" rel="noopener">rtsp://192.168.0.1/vs1</a></p>
<figure id="attachment_1233" aria-describedby="caption-attachment-1233" style="width: 642px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/video_nomad.png"><img decoding="async" class="size-full wp-image-1233" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/video_nomad.png" alt="VLC affichant le retour vidéo du Nomad" width="642" height="582" srcset="https://ml9zfxsqktal.i.optimole.com/w:642/h:582/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/video_nomad.png 642w, https://ml9zfxsqktal.i.optimole.com/w:300/h:272/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/video_nomad.png 300w" sizes="(max-width: 642px) 100vw, 642px" /></a><figcaption id="caption-attachment-1233" class="wp-caption-text">VLC affichant le retour vidéo du Nomad</figcaption></figure>
<h3>Télécommande</h3>
<p>L&rsquo;envoie des commandes au Nomad est un peu plus artisanal. En effet, la messagerie entre le smartphone et le Nomad exploite une communication UDP sans protocole standard particulier. Les informations qui vont suivre sont issues de mes observations et d&rsquo;analyses réseaux faites avec <a href="https://fr.wikipedia.org/wiki/Wireshark" target="_blank" rel="noopener">WireShark</a>. N&rsquo;ayant qu&rsquo;un seul Nomad sous la main, il est possible que le comportement décrit ne soit pas identique pour tous les modèles.</p>
<h4>Première connexion</h4>
<p>La communication UDP bidirectionnelle s’établit sur le port 8234. Comme l&rsquo;UDP n&rsquo;est pas un protocole en mode connecté, il est nécessaire de pouvoir vérifier la présence d&rsquo;un interlocuteur de l&rsquo;autre côté de la liaison. Pour ce faire, le Nomad propose une commande de ping.</p>
<p>Il est possible d&rsquo;envoyer la chaine <span style="font-family: terminal, monaco, monospace;">MAKO_CONNECT</span> et le Nomad répond <span style="font-family: terminal, monaco, monospace;">CONNECT_OK</span>.</p>
<p>On notera au passage l&rsquo;amalgame entre le mako et le nomade qui laisse supposé l’existence d&rsquo;un <a href="https://en.wikipedia.org/wiki/Mako_(Mass_Effect)" target="_blank" rel="noopener">mako</a> radiocommandé?</p>
<h4>Récupération du statut</h4>
<p>Il est possible de récupérer l&rsquo;état général du Nomad (niveau de batterie et allumage des feux). Pour ce faire, il faut envoyer la chaine <span style="font-family: terminal, monaco, monospace;">MAKO_READ_BATT</span>. Le Nomad va alors répondre trois lignes:</p>
<p><span style="font-family: terminal, monaco, monospace;">BATT=%d</span><br />
<span style="font-family: terminal, monaco, monospace;">LED1=%b</span><br />
<span style="font-family: terminal, monaco, monospace;">LED2=%b</span></p>
<p>On obtient le niveau de batterie entre 0 et 100%, ainsi que l&rsquo;état des deux groupes de feux avant (0=éteint, 1=allumé)</p>
<h4>Allumage des feux</h4>
<p>Pour gérer les feux avant du Nomad, il y a les commande <span style="font-family: terminal, monaco, monospace;">MAKO_LED%d_ON</span> et <span style="font-family: terminal, monaco, monospace;">MAKO_LED%d_OFF<span style="font-family: georgia, palatino, serif;">. Il est nécessaire de préciser dans la commande le numéro des feux à allumer ou éteindre (par exemple <span style="font-family: terminal, monaco, monospace;">MAKO_LED1_ON</span> ou <span style="font-family: terminal, monaco, monospace;">MAKO_LED2_OFF</span>). Le Nomad ne répond pas à ces commandes. Le statut des LED peut être récupérer par la commande précédente <span style="font-family: terminal, monaco, monospace;">MAKO_READ_BATT</span>.</span></span></p>
<h4>Envoie des consignes</h4>
<p>L&rsquo;envoie des consignes est un peu plus problématique. En effet, une seule commande binaire est utilisée pour envoyer les consignes de vitesse avant, de vitesse arrière et de direction. En outre, la commande semble contenir un numéro unique qui, s&rsquo;il est mal renseigné, bloque l&rsquo;interprétation de la commande complète.</p>
<p>Voici la structure de la trame binaire envoyée. Les valeurs sont données en hexadécimal:</p>
<table class="customTable" style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<th style="width: 73%; text-align: center;" colspan="8">? Identifiant de trame ?</th>
<th style="width: 9%;">F-Throttle</th>
<th style="width: 9%;">R-Throttle</th>
<th style="width: 9%;">Stearing</th>
</tr>
<tr>
<td style="width: 9%;">C0</td>
<td style="width: 9%;">A8</td>
<td style="width: 9%;">01</td>
<td style="width: 9%;">01</td>
<td style="width: 9%;">00</td>
<td style="width: 9%;">00</td>
<td style="width: 9%;">04</td>
<td style="width: 9%;">21</td>
<td style="width: 9%;">Uint8</td>
<td style="width: 9%;">Uint8</td>
<td style="width: 9%;">Uint8</td>
</tr>
</tbody>
</table>
<p>Les consignes de vitesse  sont données en 0-255, soit en marche avant, soit en marche arrière.</p>
<p>La consignes de direction est également en 0-255, avec la valeur 128 pour aller tout droit. 0 tourne à gauche, 255 tourne à droite.</p>
<p>La réponse du Nomad à cette commande est assez impénétrable:</p>
<table class="customTable" style="border-collapse: collapse; width: 100%;">
<tbody>
<tr>
<th style="width: 64%; text-align: center;" colspan="10">? Identifiant de trame ?</th>
<th style="width: 6%;">?</th>
<th style="width: 6%;">?</th>
<th style="width: 6%;">F-Throttle</th>
<th style="width: 6%;">R-Throttle</th>
<th style="width: 6%;"></th>
<th style="width: 6%;"></th>
</tr>
<tr>
<td style="width: 6%;">C0</td>
<td style="width: 6%;">A8</td>
<td style="width: 6%;">01</td>
<td style="width: 6%;">01</td>
<td style="width: 6%;">00</td>
<td style="width: 6%;">00</td>
<td style="width: 6%;">09</td>
<td style="width: 6%;">F8</td>
<td style="width: 6%;">00</td>
<td style="width: 6%;">00</td>
<td style="width: 6%;">Uint8</td>
<td style="width: 6%;">Uint8</td>
<td style="width: 6%;">Uint8</td>
<td style="width: 6%;">Uint8</td>
<td style="width: 6%;">00</td>
<td style="width: 6%;">00</td>
</tr>
</tbody>
</table>
<p>On y retrouve le même code qu&rsquo;à la commande. Ensuite, il y a deux octets à 0, deux octets qui sembles avoir une valeur proche de 0x66, les recopies des deux consignes de vitesse et encore deux octets à 0.</p>
<h2>Conclusion</h2>
<p>Même s&rsquo;il reste quelques octets inexpliqués dans les trames d&rsquo;envoie de consigne et de réponse, il est tout à fait possible de piloter le Nomad depuis n&rsquo;importe quel périphérique WiFi. Voici d’ailleurs un driver LabVIEW permettant le pilotage du Nomad:</p>
<p><a href="https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV2019.zip">NomadND1_LV2019.zip</a></p>
<figure id="attachment_1236" aria-describedby="caption-attachment-1236" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png"><img decoding="async" class="size-large wp-image-1236" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:282/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png" alt="Utilisation du driver LabVIEW pour le Nomad" width="1024" height="282" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:282/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:83/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:211/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1058/h:291/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2021/02/NomadND1_LV.png 1058w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1236" class="wp-caption-text">Utilisation du driver LabVIEW pour le Nomad</figcaption></figure>
<p>En outre, j&rsquo;envisage le développement d&rsquo;une interface Radio &lt;-&gt; WiFi à base d&rsquo;ESP32. L&rsquo;idée est de récupérer les signaux d&rsquo;écolage radio, voir les PWM de pilotage servo issues d&rsquo;un récepteurs modélisme et de générer les trames UDP « qui vont bien » afin de piloter le Nomad comme il se doit!</p>
<p>Si une âme charitable et possédant un Nomad peut tester le pilotage par UDP afin de s&rsquo;assurer que la trame C0A8 0101 0000 0421 XXXX XX fonctionne sans modifications, le retour d&rsquo;expérience sera intéressant pour compléter cette petite introduction au pilotage du Nomad 🙂</p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/nomad-nd1-sous-le-capot/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Bruiteur pour avion de modélisme</title>
		<link>https://amaury-laurent.fr/bruiteur-pour-avion-de-modelisme/</link>
					<comments>https://amaury-laurent.fr/bruiteur-pour-avion-de-modelisme/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sat, 28 Mar 2020 13:22:58 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[bruit]]></category>
		<category><![CDATA[bruiteur]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<category><![CDATA[mp3-tf-16p]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1164</guid>

					<description><![CDATA[Introduction Les bruiteurs pour avion de modélisme disponibles dans le commerce sont relativement chers (150€ pour ce modèle de MotionRC). Aujourd&#8217;hui, avec les modules disponibles pour la bricole autour des arduinos, il doit être possible de fabriquer un bruiteur à moindre frais. C&#8217;est ce que je vais essayer de faire dans cette article. Le matériel [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Introduction</h2>
<p>Les bruiteurs pour avion de modélisme disponibles dans le commerce sont relativement chers (<a href="https://www.motionrc.eu/products/mrrcsound-sound-system-v4-1-with-tt-25-for-rc-planes?currency=EUR&amp;gclid=Cj0KCQjw6_vzBRCIARIsAOs54z7eDnc8qQJ7Ps1kv2FbbPpJojIT23MwZ6qzaoDOGTuFIo5TambI-ZUaAqD5EALw_wcB" target="_blank" rel="noopener noreferrer">150€ pour ce modèle de MotionRC</a>). Aujourd&rsquo;hui, avec les modules disponibles pour la bricole autour des arduinos, il doit être possible de fabriquer un bruiteur à moindre frais. C&rsquo;est ce que je vais essayer de faire dans cette article.</p>
<h2>Le matériel</h2>
<p>Pour construire mon bruiteur, j&rsquo;ai choisi de partir sur un <a href="https://store.arduino.cc/arduino-nano" target="_blank" rel="noopener noreferrer">arduino nano</a> (<a href="https://fr.aliexpress.com/item/32341832857.html?spm=a2g0o.productlist.0.0.4710572feqWZKX&amp;algo_pvid=964beaf9-c200-43de-a4ff-fbb9f3ba8527&amp;algo_expid=964beaf9-c200-43de-a4ff-fbb9f3ba8527-0&amp;btsid=0b0a050b15853880297704945ed2fb&amp;ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_" target="_blank" rel="noopener noreferrer">ou sa copie chinoise</a>) et un module lecteur <a href="https://fr.aliexpress.com/item/32919672331.html?spm=a2g0o.productlist.0.0.292476fboFzC03&amp;algo_pvid=0cc2b0d0-9c24-437a-b1f9-f4cb3fb0c134&amp;algo_expid=0cc2b0d0-9c24-437a-b1f9-f4cb3fb0c134-0&amp;btsid=0b0a050b15853880860396376ed2fb&amp;ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_" target="_blank" rel="noopener noreferrer">MP3-TF-16P.</a></p>
<p>Le matériel le plus chers sera donc la carte SD pour stocker les fichiers sons.</p>
<figure id="attachment_1167" aria-describedby="caption-attachment-1167" style="width: 470px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/nano.jpg"><img decoding="async" class="wp-image-1167 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/nano.jpg" alt="Arduino nano" width="470" height="470" srcset="https://ml9zfxsqktal.i.optimole.com/w:470/h:470/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/nano.jpg 470w, https://ml9zfxsqktal.i.optimole.com/w:300/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/nano.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:150/h:150/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/nano.jpg 150w" sizes="(max-width: 470px) 100vw, 470px" /></a><figcaption id="caption-attachment-1167" class="wp-caption-text">Arduino nano</figcaption></figure>
<p>L&rsquo;arduino nano sera utilisé pour acquérir le signal PPM de pilotage moteur et envoyer les informations de lecture fichiers au module MP3 <em>via</em> l&rsquo;UART.</p>
<p>Le module MP3-TF-16P est un codec audio associé à un amplificateur capable de décoder des fichiers MP3 et WAV et de les jouer sur un haut parleur de 3W.</p>
<figure id="attachment_1168" aria-describedby="caption-attachment-1168" style="width: 725px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/mp3-tf-16p.jpg"><img decoding="async" class="wp-image-1168 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/mp3-tf-16p.jpg" alt="MP3-TF-16P - Pas plus gros qu'une carte SD plein format" width="725" height="674" srcset="https://ml9zfxsqktal.i.optimole.com/w:725/h:674/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/mp3-tf-16p.jpg 725w, https://ml9zfxsqktal.i.optimole.com/w:300/h:279/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/mp3-tf-16p.jpg 300w" sizes="(max-width: 725px) 100vw, 725px" /></a><figcaption id="caption-attachment-1168" class="wp-caption-text">MP3-TF-16P &#8211; Pas plus gros qu&rsquo;une carte SD plein format</figcaption></figure>
<h2>Principe de fonctionnement</h2>
<p>Le signal PPM issu du récepteur radio de l&rsquo;avion est un pulse de 1 à 2ms émis toutes les 22ms ou 11ms (DSMX). Pour plus de détail, rendez-vous sur la page <a href="https://amaury-laurent.fr/recepteur-radio-modelisme-sur-usb/" target="_blank" rel="noopener noreferrer">Récepteur radio-modélisme sur USB.</a> L&rsquo;arduino doit donc mesurer la durée de l&rsquo;état haut du pulse. Cela tombe bien, une fonction native s&rsquo;en occupe: <a href="https://docs.arduino.cc/language-reference/en/functions/advanced-io/pulseIn/" target="_blank" rel="noopener noreferrer">pulseIn()</a>. Elle renvoie la durée des pulses reçus sur une broche d&rsquo;entrée en µs.</p>
<p>La plage de 1000µs à 2000µs est découpée en 6 plages réparties comme suis:</p>
<p><strong>1000</strong> &#8212; <em>OFF</em>&#8212; <strong>1100</strong> &#8212; <em>RPM1</em> &#8212; <strong>1280</strong> &#8212; <em>RPM2</em> &#8212; <strong>1460</strong> &#8212; <em>RPM3</em> &#8212;<strong>1640</strong> &#8212; <em>RPM4</em> &#8212; <strong>1820</strong> &#8212; <em>RPM5</em> &#8212; <strong>2000</strong></p>
<p>Chaque plage est associée à un fichier son sur la carte SD. Exception faite de la plage MotorOff qui donne lieu à la lecteur d&rsquo;un fichier de démarrage moteur et d&rsquo;une fichier d&rsquo;arrêt moteur quand la consigne sort ou entre dans la plage.</p>
<p>Les fichiers sons sont téléchargeables sur le site <a href="https://simviation.com/1/browse-Flight+Simulator+Sounds-112-0" target="_blank" rel="noopener noreferrer">Simviation</a> par exemple.</p>
<h2>Câblage</h2>
<p>Le câblage du système est très simple:</p>
<ol>
<li>Récupérer une prise servo 3 points</li>
<li>Alimenter l&rsquo;arduino entre noir et rouge (5V issu du BEC du récepteur)</li>
<li>Alimenter le module MP3-TF-16P avec le même 5V (pin 1 : Vcc, pin 7 et pin 10 : Gnd)</li>
<li>Connecter le signal (fil orange) sur une entrée de l&rsquo;arduino (j&rsquo;utilise D2)</li>
<li>Connecter l&rsquo;UART du module MP3-TF-16P (pin 2 : Rx, pin 3 : Tx) sur les broches Rx et Tx de l&rsquo;arduino (pensez bien à croiser Rx-&gt;Tx et Tx-&gt;Rx)</li>
<li>Connecter le haut parleur sur le module MP3-TF-16P (pin 8 : Spk- et pin 6 : Spk+)</li>
</ol>
<p>C&rsquo;est tout!</p>
<p>[EDIT] Voici un schéma de la version amplifiée:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png"><img decoding="async" class="aligncenter size-large wp-image-1217" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:683/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png" alt="Bruiteur pour avion de modélisme" width="1024" height="683" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:683/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:200/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:512/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:1024/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png 1536w, https://ml9zfxsqktal.i.optimole.com/w:1619/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/schema.png 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>La spécification du module MP3-TF-16P est <a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/Module-Datasheet.pdf" target="_blank" rel="noopener noreferrer">disponible ici</a>.</p>
<h2>Programmation de l&rsquo;arduino</h2>
<p>Le programme de l&rsquo;arduino est assez simple. Il est basé sur une machine à états qui gère les différents régimes moteurs et les transitions de l&rsquo;un à l&rsquo;autre.</p>
<figure id="attachment_1171" aria-describedby="caption-attachment-1171" style="width: 854px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png"><img decoding="async" class="wp-image-1171 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:854/h:1024/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png" alt="La machine à état de l'arduino" width="854" height="1024" srcset="https://ml9zfxsqktal.i.optimole.com/w:854/h:1024/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png 854w, https://ml9zfxsqktal.i.optimole.com/w:250/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png 250w, https://ml9zfxsqktal.i.optimole.com/w:768/h:921/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png 768w, https://ml9zfxsqktal.i.optimole.com/w:900/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png 1281w, https://ml9zfxsqktal.i.optimole.com/w:901/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/03/state_machine.png 1709w" sizes="(max-width: 854px) 100vw, 854px" /></a><figcaption id="caption-attachment-1171" class="wp-caption-text">La machine à état de l&rsquo;arduino</figcaption></figure>
<p>Le code source de l&rsquo;arduino est <a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/bruiteur_rc.zip">disponible ici</a>. La version que je propose utilise 7 fichiers son au total. Pour des raisons de simplicité d&rsquo;intégration je n&rsquo;ai pas utilisé la bibliothèque <a href="https://github.com/DFRobot/DFPlayer-Mini-mp3" target="_blank" rel="noopener noreferrer">DFPlayer-Mini</a>, préférant écrire ma propre implémentation. En effet, le protocole de communication mise en place sur le MP3-TF-16P est relativement simple. Il est très bien décrit dans la spécification du module:</p>
<table class="customTable">
<tbody>
<tr>
<th>Byte</th>
<th>Description</th>
</tr>
<tr>
<td style="width: 786.983px;">0x7E</td>
<td style="width: 786.967px;">Start byte</td>
</tr>
<tr>
<td style="width: 786.983px;">0xFF</td>
<td style="width: 786.967px;">Version</td>
</tr>
<tr>
<td style="width: 786.983px;">0x06</td>
<td style="width: 786.967px;">Byte number in frame</td>
</tr>
<tr>
<td style="width: 786.983px;">CMD</td>
<td style="width: 786.967px;">Command to execute</td>
</tr>
<tr>
<td style="width: 786.983px;">0x00</td>
<td style="width: 786.967px;">Feedback not required</td>
</tr>
<tr>
<td style="width: 786.983px;">Param_MSB</td>
<td style="width: 786.967px;">Most Significant Byte of the 2 bytes of data</td>
</tr>
<tr>
<td style="width: 786.983px;">Param_LSB</td>
<td style="width: 786.967px;">Least Significant Byte of the 2 bytes of data</td>
</tr>
<tr>
<td style="width: 786.983px;">Chksum_MSB</td>
<td style="width: 786.967px;">Most Significant Byte of the 2 bytes of check sum</td>
</tr>
<tr>
<td style="width: 786.983px;">Chksum_LSB</td>
<td style="width: 786.967px;">Least Significant Byte of the 2 bytes of check sum</td>
</tr>
<tr>
<td style="width: 786.983px;">0xEF</td>
<td style="width: 786.967px;">End byte</td>
</tr>
</tbody>
</table>
<p>Le même format de trame est utilisée en réception et en émission.</p>
<h2>La carte SD</h2>
<p>Les fichier sons doivent être rangés et nommés d&rsquo;une certaine manière pour que le module puisse les lire. Voici l’arborescence que j&rsquo;utilise:</p>
<ul>
<li>01
<ul>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/001.wav">001.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/002.wav">002.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/003.wav">003.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/004.wav">004.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/005.wav">005.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/006.wav">006.wav</a></li>
<li><a href="https://amaury-laurent.fr/wp-content/uploads/2020/03/007.wav">007.wav</a></li>
</ul>
</li>
</ul>
<p>Les fichier 001 et 007 sont les fichier startup et shutdown. Les fichiers 002 à 006 sont les régimes moteurs établis.</p>
<h2>[EDIT] Ajout d&rsquo;un amplificateur et utilisation d&rsquo;un haut parleur vibrant (exciter)</h2>
<p>Comme prévu, les haut parleurs de 3W ne donne pas satisfaction dans un avion RC: il faudrait percer le fuselage pour sortir le son. Un solution proposée entre autre par MotionRC est d&rsquo;utiliser des excitateur vibrants. Ils fonctionnent comme un haut-parleur électroacoustique, mais sans membrane. Au lieux de la membrane, il y a juste un adhésif double faces collé sur la bobine. En montant ce type de matériel sur un avion, tout le fuselage devient haut-parleur!</p>
<p>Le modèle que j&rsquo;ai retenu est un <a href="https://www.audiophonics.fr/fr/vibreur-exciter/dayton-audio-daex25fhe-4-haut-parleur-vibreur-exciter-24w-4-ohm-o27cm-p-8713.html" target="_blank" rel="noopener noreferrer">Dayton Audio DAEX25FHE-4</a> de 24W. Je l&rsquo;ai couplé à un amplificateur <span id="productTitle" class="a-size-large"><a href="https://www.amazon.fr/gp/product/B083QHWSYD/ref=ppx_yo_dt_b_asin_title_o07_s00?ie=UTF8&amp;psc=1" target="_blank" rel="noopener noreferrer">TPA3110 sur carte de développement</a> :</span></p>
<figure id="attachment_1209" aria-describedby="caption-attachment-1209" style="width: 700px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/8713_daytonaudio_DAEX25FHE-4-exciter_1.jpg"><img decoding="async" class="size-full wp-image-1209" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/8713_daytonaudio_DAEX25FHE-4-exciter_1.jpg" alt="Bruiteur pour avion de modélisme" width="700" height="561" srcset="https://ml9zfxsqktal.i.optimole.com/w:700/h:561/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/8713_daytonaudio_DAEX25FHE-4-exciter_1.jpg 700w, https://ml9zfxsqktal.i.optimole.com/w:300/h:240/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/8713_daytonaudio_DAEX25FHE-4-exciter_1.jpg 300w" sizes="(max-width: 700px) 100vw, 700px" /></a><figcaption id="caption-attachment-1209" class="wp-caption-text">Le haut parleur vibrant</figcaption></figure>
<figure id="attachment_1210" aria-describedby="caption-attachment-1210" style="width: 924px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/61pmHZNUjPL._AC_SL1001_.jpg"><img decoding="async" class="size-full wp-image-1210" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/61pmHZNUjPL._AC_SL1001_.jpg" alt="Bruiteur pour avion de modélisme" width="924" height="651" srcset="https://ml9zfxsqktal.i.optimole.com/w:924/h:651/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/61pmHZNUjPL._AC_SL1001_.jpg 924w, https://ml9zfxsqktal.i.optimole.com/w:300/h:211/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/61pmHZNUjPL._AC_SL1001_.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:541/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/61pmHZNUjPL._AC_SL1001_.jpg 768w" sizes="(max-width: 924px) 100vw, 924px" /></a><figcaption id="caption-attachment-1210" class="wp-caption-text">L&rsquo;ampli mono voie</figcaption></figure>
<p>J&rsquo;ai récupéré l&rsquo;une des deux sorties DAC_L ou DAC_R du module MP3-TF-16P pour attaquer l&rsquo;ampli. J&rsquo;alimente ce dernier avec une batterie 2S auxiliaire afin de ne pas endommager le circuit électrique principal de mon avion en cas de défaillance.</p>
<figure id="attachment_1211" aria-describedby="caption-attachment-1211" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg"><img decoding="async" class="size-large wp-image-1211" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632.jpg" alt="Bruiteur pour avion de modélisme" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200507_123632-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1211" class="wp-caption-text">Le haut parleur et son ampli</figcaption></figure>
<figure id="attachment_1212" aria-describedby="caption-attachment-1212" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg"><img decoding="async" class="size-large wp-image-1212" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352.jpg" alt="Bruiteur pour avion de modélisme" width="1024" height="576" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1536/h:864/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg 1536w, https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2020/05/20200508_112352-scaled.jpg 2048w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-1212" class="wp-caption-text">L&rsquo;installation dans le fuselage</figcaption></figure>
<p>Voici le résultat en images (et surtout en musique&#8230;):</p>
<p style="text-align: center;"><iframe src="//www.youtube.com/embed/8IVSXylbTVU" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p>
<h2>Conclusion</h2>
<p>Voici donc un petit bruiteur sans prétentions qui semble donner des résultats satisfaisants pour un budget contenu. Je n&rsquo;ai pas encore pu essayer avec un haut parleur de 3W, mais une chose est sûre: avec mon petit haut parleur de 0.1W, on n&rsquo;entend pas le bruiteur à cause du bruit de l&rsquo;hélice de l&rsquo;avion. Dans le pire des cas, j&rsquo;ajouterais un amplificateur de 3W additionnel sur la sortie non amplifiée du module pour mettre deux HP en stéréo sur l&rsquo;avion.</p>
<p>J’envisage d&rsquo;équiper un <a href="https://www.horizonhobby.com/sukhoi-su-29mm-%28gen-2%29-bnf-basic-efl8850" target="_blank" rel="noopener noreferrer">su29mm</a> de chez ParkZone.</p>
<p style="text-align: center;"><iframe src="//www.youtube.com/embed/bsAWjExBL6I" width="560" height="314" allowfullscreen="allowfullscreen"></iframe></p>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/bruiteur-pour-avion-de-modelisme/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/001.wav" length="510188" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/002.wav" length="1938796" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/003.wav" length="633504" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/004.wav" length="981536" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/005.wav" length="485636" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/007.wav" length="910416" type="audio/wav" />
<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2020/03/006.wav" length="932280" type="audio/wav" />

			</item>
		<item>
		<title>Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</title>
		<link>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/</link>
					<comments>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/#comments</comments>
		
		<dc:creator><![CDATA[adrienBS]]></dc:creator>
		<pubDate>Wed, 06 Mar 2019 14:36:49 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Capteurs]]></category>
		<category><![CDATA[LabVIEW]]></category>
		<category><![CDATA[LattePanda]]></category>
		<category><![CDATA[Lidar]]></category>
		<category><![CDATA[LINX]]></category>
		<category><![CDATA[Logiciel & LabVIEW]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=1012</guid>

					<description><![CDATA[Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Le sujet abordé dans cet article présente la réalisation d’une mesure de distance à l’aide d’un capteur Lidar monté sur un moteur pas à pas et commandé par LabVIEW à travers la bibliothèque LINX. Nous verrons comment rendre ce système embarqué sur un LattePanda. L’objectif est de pouvoir mesurer une distance entre 0,1 à 20 mètres sur 360° et de contrôler l’ensemble à partir d’une IHM (Interface Homme Machine) tactile.</p>
<p><em>Avant de commercer cet article, je tiens à remercier Amaury qui m&rsquo;a permis de publier cet article sur son site. 🙂</em></p>
<div style="width: 1920px;" class="wp-video"><video class="wp-video-shortcode" id="video-1012-1" width="1920" height="1080" preload="metadata" controls="controls"><source type="video/mp4" src="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4?_=1" /><a href="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4">https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4</a></video></div>
<p>Je découvre actuellement l’électronique et la programmation entre  LabVIEW et Arduino et je tiens à partager certains résultats avec vous. Certaines notions abordées ne seront pas forcément poussées ou assez détaillées pour des lectures ou lectrices plus expérimenté(e)s.</p>
<h2><a name="_Toc2727674"></a>Théorie de mesure de distance Lidar</h2>
<p>Lidar est l’acronyme anglais de <em>light detection and ranging </em>qui est une technique qui permet de mesurer des distances allant de quelques centimètres à la distance Terre-Lune. Le lidar Garmin utilisé ici, génère un train d’onde électromagnétique cohérente (un faisceau laser InfraRouge) de longueur d’onde λ de 905 nm. Les trains d’onde sont envoyés à une fréquence comprise entre 10 à 20 kHz (à ne pas confondre avec la fréquence propre de l’onde du laser IR) d’après les datasheet. Les trains d’ondes se réfléchissent sur la cible visée par le capteur. Une partie de la lumière du laser revient sur le capteur. Une photodiode placée dans le Lidar et sensible dans la plage de longueur d’onde des IR reçoit l’onde réfléchie. L’écart de temps entre le départ d’un train d’onde et son retour est mesuré par le capteur. Cet écart de temps est proportionnel à la distance parcourue par l’onde. Cette technologie de mesure est communément appelée <em>Time of Flight</em>.</p>
<h2><a name="_Toc2727675"></a>Le matériel utilisé pour la réalisation</h2>
<table style="height: 778px" width="621">
<tbody>
<tr style="height: 24px">
<td style="width: 224px;text-align: center;height: 24px"><strong>Matériel</strong></td>
<td style="width: 172px;text-align: center;height: 24px"><strong>Prix (neufs)</strong></td>
<td style="width: 203px;text-align: center;height: 24px"><strong>Site achat</strong></td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Carte LattePanda 4 GB/64 GB DFR0419 (sans écran et capteur tactile)</td>
<td style="width: 172px;height: 72px;text-align: center">~ 187 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">Ecran 7’ + capteur tactile + Ventilateur et refroidisseur métalliques</td>
<td style="width: 172px;height: 72px;text-align: center">~ 80 €</td>
<td style="width: 203px;height: 72px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 72px">
<td style="width: 224px;height: 72px;text-align: center">LabVIEW pour l&rsquo;enseignement 2014 (version d’essai gratuite 7 jours)</td>
<td style="width: 172px;height: 72px;text-align: center">A partir de 196 €</td>
<td style="width: 203px;height: 72px;text-align: center">NI</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">LIDAR GARMIN lite V3</td>
<td style="width: 172px;height: 48px;text-align: center">143 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon (Expédié et vendu par <a href="https://www.amazon.fr/gp/help/seller/at-a-glance.html/ref=dp_merchant_link?ie=UTF8&amp;seller=A2PIW95AGLR8G3">RobotShop inc</a>.)</td>
</tr>
<tr style="height: 120px">
<td style="width: 224px;height: 120px;text-align: center">Driver de moteur Pas à Pas Bipolaire</p>
<p>(A4988 1182)</td>
<td style="width: 172px;height: 120px;text-align: center">7€</td>
<td style="width: 203px;height: 120px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Moteur pas à Pas Bipolaire (14HM11-0404S)</td>
<td style="width: 172px;height: 48px;text-align: center">18 €</td>
<td style="width: 203px;height: 48px;text-align: center">Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Laser Rouge de niveau recyclé</td>
<td style="width: 172px;height: 24px;text-align: center">0 €</td>
<td style="width: 203px;height: 24px;text-align: center">Sans objet</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">2 Piles de 9 Volts + 2 connecteurs</td>
<td style="width: 172px;height: 48px;text-align: center">~ 10 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">Une breadboard (400 points minimum)</td>
<td style="width: 172px;height: 48px;text-align: center">3 €</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Batterie Li 20000mAh</td>
<td style="width: 172px;height: 24px;text-align: center">30 €</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Condensateur 100µF 16V</td>
<td style="width: 172px;height: 24px;text-align: center">Qlq centimes</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">2 Condensateurs 0.1µF</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">1 Résistance de 1KΩ</td>
<td style="width: 172px;height: 24px;text-align: center">Idem</td>
<td style="width: 203px;height: 24px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 48px">
<td style="width: 224px;height: 48px;text-align: center">1 Résistance de 500Ω de 1W (ou 4 de 2KΩ mis en parallèles)</td>
<td style="width: 172px;height: 48px;text-align: center">Idem</td>
<td style="width: 203px;height: 48px;text-align: center">Amazon/ Go Tronic</td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center">Régulateur de tension LM7815</td>
<td style="width: 172px;height: 24px;text-align: center">1,5€</td>
<td style="width: 203px;height: 24px;text-align: center">RS Components</td>
</tr>
<tr style="height: 10px">
<td style="width: 224px;height: 10px;text-align: center">Des fils</td>
<td style="width: 172px;height: 10px;text-align: center">recyclés</td>
<td style="width: 203px;height: 10px;text-align: center"></td>
</tr>
<tr style="height: 24px">
<td style="width: 224px;height: 24px;text-align: center"><strong>Coût total</strong></td>
<td style="width: 172px;height: 24px;text-align: center"><strong>667 €</strong></td>
<td style="width: 203px;height: 24px;text-align: center"></td>
</tr>
</tbody>
</table>
<p>Nota : un clavier et une souris seront très certainement nécessaires pour naviguer sur LattePanda.</p>
<h2><a name="_Toc2727676"></a>Le Montage global</h2>
<p>Le schéma suivant a été réalisé sur le logiciel libre Fritzing. N’ayant pas trouvé de modèle de LattePanda dans la librairie Fritzing, il a donc été représenté par sa carte Arduino qu’il intègre. Un schéma du LattePanda est donné après.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png"><img decoding="async" class="alignnone wp-image-1016 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="962" height="908" srcset="https://ml9zfxsqktal.i.optimole.com/w:1144/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png 3237w, https://ml9zfxsqktal.i.optimole.com/w:300/h:283/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:725/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:966/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Fritzing-Stepper-et-Lidar_regulationtension.png 1024w" sizes="(max-width: 962px) 100vw, 962px" /></a></p>
<p style="text-align: center">Figure 1 Schéma Global de la mesure Lidar (à l’aide du logiciel gratuit Fritzing)</p>
<p>L’intégration des différents éléments a été faite à l’aide d’un vieux jeu mécanos.</p>
<h3><a name="_Toc2727677"></a>LattePanda</h3>
<p>Le modèle de  LattePanda utilisé est le 4 GB/64 GB sous Windows 10. Ce modèle suffit pour faire tourner un LabVIEW 2014 (<a href="https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm">https://www.gotronic.fr/art-carte-lattepanda-4-gb-64-gb-dfr0419-24792.htm</a> ). LattePanda sera très utile car il intègre une carte Arduino Leonardo et ses E/S associées. A l’aide des entrées et sorties numériques (0-5V), il sera possible de piloter le moteur pas à pas, le laser et d’acquérir le signal du Lidar. Le LattePanda est enfaîte un petit ordinateur d’instrumentation très compacte et assez puissant. Le projet n’utilise ici qu’une petite partie de sa capacité. Pour plus de détails sur LattePanda, le lecteur pourra se référer à l&rsquo;article : <a href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda – Première mise en route</a></p>
<p>Le schéma ci-dessous reprend les principales E/S :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg"><img decoding="async" class="alignnone size-full wp-image-1017 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="649" height="637" srcset="https://ml9zfxsqktal.i.optimole.com/w:649/h:637/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg 649w, https://ml9zfxsqktal.i.optimole.com/w:300/h:294/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/lattepanda.jpg 300w" sizes="(max-width: 649px) 100vw, 649px" /></a></p>
<p style="text-align: center">Figure 2 E/S LattePanda 4GB/64GB (https://www.lattepanda.com)</p>
<h3><a name="_Toc2727678"></a>Le moteur Pas à Pas</h3>
<p>Le moteur Pas à Pas bipolaire est contrôlé par un Driver Pololu (A4988). Le schéma ci-après (d’après le site Pololu qui commercialise le Driver) permet de connecter le moteur et le Driver. La puce du Driver est alimentée en 5 V par la carte Arduino du LattePanda. Ce driver a été choisi car il est facilement pilotable à partir des E/S digitales du Arduino, qui seront contrôlées par le logiciel ; lequel qui sera abordé après.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png"><img decoding="async" class="alignnone size-full wp-image-1018 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="605" height="377" srcset="https://ml9zfxsqktal.i.optimole.com/w:605/h:377/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png 605w, https://ml9zfxsqktal.i.optimole.com/w:300/h:187/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/SchémaDriver.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></a></p>
<p style="text-align: center">Figure 3 Schéma de fonctionnement du Drive couplé au moteur Pas à Pas (bipolaire)</p>
<p>Pour connecter correctement le moteur pas à pas au driver on pourra suivre le tableau suivant :</p>
<table>
<tbody>
<tr>
<td width="136"><strong>Fils côté moteur</strong></td>
<td width="140"><strong>Pin entrée Driver</strong></td>
</tr>
<tr>
<td width="136">A (noir)</td>
<td width="140">1A</td>
</tr>
<tr>
<td width="136">C (vert)</td>
<td width="140">1B</td>
</tr>
<tr>
<td width="136">B (rouge)</td>
<td width="140">2A</td>
</tr>
<tr>
<td width="136">D (bleu)</td>
<td width="140">2B</td>
</tr>
</tbody>
</table>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Moteur.png"><img decoding="async" class="alignnone size-full wp-image-1019 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Schema-Moteur.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="209" height="212" /></a></p>
<p style="text-align: center">Figure 4 Schéma du moteur Pas à Pas (14HM11-0404S) d&rsquo;après datasheet Go Tronic</p>
<p>Il est conseillé de relier la masse de l’alimentation du moteur à la masse du circuit afin d’éviter de le moteur ne grésille. Un petit régulateur LM7815 (15 V) permet de limiter la tension en entrée. Pour ma part j’ai utilisé deux piles de 9 V. En sortie du régulateur il vaut mieux ne pas oublier de limiter le courant à l’aide d’une résistance de charge. Le moteur consomme 400 mA par phase. Pour limiter le courant j’ai choisi de mettre en parallèle 4 résistances de 2 kΩ de 1/4 W qui forment une résistance 500 Ω supportant 1 W. Avec ce montage, le moteur ne chauffe et a assez de puissance pour réaliser ses pas. Un potentiomètre présent sur le driver permet de réguler la tension. Le réglage du courant limite est disponible dans la vidéo disponible en suivant de <a href="https://www.youtube.com/watch?v=89BHS9hfSUk">lien</a> (https://www.youtube.com/watch?v=89BHS9hfSUk). Pololu préconise de régler le courant limite à l’aide du réglage du VREF et non en entrée comme cela a été fait ici.</p>
<ul>
<li>Une fois le montage du moteur réalisé, un test du moteur peut être réalise. Pour cela, la Pin STEP du driver peut être connecté au 5V délivré par l’Arduino. Le moteur est censé faire un pas. Sinon, revérifier le schéma de montage.</li>
</ul>
<p>Les entrées MS1, MS2 et MS3 permettent de réduire le Pas, c’est-à-dire de gagner en précision angulaire. Le tableau ci-dessous affiche les niveaux à utiliser sur les pins en fonctions de la résolution du pas.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png"><img decoding="async" class="alignnone size-full wp-image-1021 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="369" height="193" srcset="https://ml9zfxsqktal.i.optimole.com/w:369/h:193/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png 369w, https://ml9zfxsqktal.i.optimole.com/w:300/h:157/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Tableau-resolution-pas.png 300w" sizes="(max-width: 369px) 100vw, 369px" /></a></p>
<p style="text-align: center">Figure 5 Tableau de résolution des pas d&rsquo;après le site Pololu</p>
<p>Dans le cas présent, un pas complet est de 0,9°, un demi-pas en vaudra la moitié et ainsi de suite. Dans le présent projet, il n’est pas possible de descendre en dessous du demi-pas.</p>
<p><strong>Nota important:</strong> il est fortement<strong> déconseillé de déconnecter le moteur du driver quand le moteur est en fonctionnement</strong> car le Driver peut-être endommagé. Il faudra couper l’alimentation du moteur pour effectuer des changements de postions (si besoin) sur les 4 fils du moteur pas à pas.</p>
<h3><a name="_Toc2727679"></a>Le Lidar</h3>
<p>Pour fonctionner le Lidar doit être alimenté en 5 V. L’alimentation 5 V de l’Arduino du LattePanda convient parfaitement. L’acquisition de la mesure de distance est lue en largeur d’impulsion (PWM) sur le fil jaune. Les datasheet préconisent l’utilisation d’une résistance de 1KΩ qui est reliée entre le fil de sortie de la mesure et la masse comme ci-dessous :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png"><img decoding="async" class="size-full wp-image-1020 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="604" height="457" srcset="https://ml9zfxsqktal.i.optimole.com/w:604/h:457/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png 604w, https://ml9zfxsqktal.i.optimole.com/w:300/h:227/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/schema-cablage-lidar.png 300w" sizes="(max-width: 604px) 100vw, 604px" /></a></p>
<p style="text-align: center">Figure 6 Schéma de câblage du lidar en acquisition de mesure en PWM (d&rsquo;après datasheet Gramin)</p>
<p>Concernant les aspects métrologiques du capteur, la portée maximale du Lidar est de 40 mètres. Sa résolution est de 1 cm.</p>
<p>L&rsquo;incertitude de mesure du Lidar Lite V3,  entre 0 et 5m est de ± 2.5cm et ± 10 cm au delà.</p>
<p>En sortie de mesure en largeur d&rsquo;impulsion, la sensibilité est de 10 µs/cm. Cette valeur est à retenir pour comprendre la partie acquisition du signal du logiciel.</p>
<h3><a name="_Toc2727680"></a>Le Laser de visée</h3>
<p>Le laser est utile ici afin d&rsquo;avoir un repère visuel sur l&rsquo;orientation du Lidar. Le laser est du même type qu’utilisé pour les pointeurs laser de présentation (diode laser). Dans le cas présent, un laser d’alignement de 1 mW (λ = 650 nm) de couleur rouge a été utilisé. Il est alimenté en 5V par une entrée digitale de carte Arduino activable à partir du logiciel.</p>
<p><strong><span style="color: #ff0000">Attention aux yeux !</span></strong> Le laser concentre l&rsquo;énergie sur une surface très petite et a pour conséquence d&rsquo;être nocif pour l’œil.</p>
<p>L&rsquo;utilisateur est responsable de sa sécurité mais également celle des personnes autour !</p>
<h2><a name="_Toc2727681"></a>Le logiciel/programme</h2>
<p>Pour piloter les instruments (Lidar, moteur, laser) le logiciel LabVIEW 2014 est utilisé. Le but n’est pas de faire la présentation ni la promotion de ce logiciel mais de tenter d’expliquer comment utiliser certaines briques LINX. Si LabVIEW n’est pas utilisé, il sera quand même possible de piloter les instruments via un programme développé sur l’IDE Arduino. La suite de l’article pourra paraître obscure pour les personnes non initiées à LabVIEW; je m’en excuse par avance. Cependant, un petit effort a été fait pour que le code soit compris des personnes non initiées à LabVIEW.</p>
<p>Des briques (ou VI) de code LabVIEW ont été développées afin de faciliter grandement la compatibilité entre des cartes Arduino et LabVIEW. Pour utiliser les briques de codes LINX, la bibliothèque LINX côté LabVIEW doit avoir été installée préalablement dans VI Pack Manager (logiciel qui permet de charger des ToolKit ou librairies de programme).</p>
<h3><a name="_Toc2727682"></a>Chargement des librairies</h3>
<p>Avant de compiler le code, il faut charger les bibliothèques. Pour charger les bibliothèques, aller sur l’onglet <em>Tool\MakerHub\LINX\Generate Firmware Librairies :</em></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png"><img decoding="async" class="size-full wp-image-1022 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="612" height="399" srcset="https://ml9zfxsqktal.i.optimole.com/w:612/h:399/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png 612w, https://ml9zfxsqktal.i.optimole.com/w:300/h:196/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies.png 300w" sizes="(max-width: 612px) 100vw, 612px" /></a></p>
<p>Et mettre en cible : <strong>C:\Program Files\Arduino\Libraries</strong></p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png"><img decoding="async" class="wp-image-1023 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="579" height="486" srcset="https://ml9zfxsqktal.i.optimole.com/w:542/h:455/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png 542w, https://ml9zfxsqktal.i.optimole.com/w:300/h:252/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-chargement-librairies_2.png 300w" sizes="(max-width: 579px) 100vw, 579px" /></a></p>
<p>Les librairies sont donc maintenant chargées et opérationnelles.</p>
<h3><a name="_Toc2727683"></a>Configuration du type de carte</h3>
<p>Avant de compiler le code, il faudra configurer le type de carte (Mega, Leonardo) et le type de liaison. Dans ce projet avec LattePanda, la carte Arduino Leonardo est utilisée sur le port COM 4. Dans LabVIEW cliquez dans l&rsquo;onglet <em>Tool </em>puis <em>\MakerHub\LINX\LINX Firmware Wizard… </em>il faut configurer les champs à l’aide des informations mentionnées plus haut.</p>
<h3><a name="_Toc2727683"></a>TEST simple avec une LED</h3>
<p>Pour vérifier que la carte fonctionne correctement, l’exemple du pilotage d’une LED pourra être réalisé (onglet <em>HELP/Find Example…</em>). L&rsquo;exemple est prêt à être utilisé et ne nécessite que la mise en place d&rsquo;une LED en série avec une résistance de 220 Ω reliées au LattePanda.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png"><img decoding="async" class="size-full wp-image-1024 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="605" height="421" srcset="https://ml9zfxsqktal.i.optimole.com/w:605/h:421/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png 605w, https://ml9zfxsqktal.i.optimole.com/w:300/h:209/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-test-example-LED-LINX.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></a><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png"><img decoding="async" class="size-full wp-image-1025 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="766" height="616" srcset="https://ml9zfxsqktal.i.optimole.com/w:766/h:616/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png 766w, https://ml9zfxsqktal.i.optimole.com/w:300/h:241/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/Screen-Exemple-LED-LINX.png 300w" sizes="(max-width: 766px) 100vw, 766px" /></a></p>
<p>Mettre le port COM 4 (normalement) et configurer la pin du Arduino sur laquelle est reliée l&rsquo;anode de la LED (la patte la plus longue) et ne pas oublier la résistance de 220 Ω en série 😉 . Puis relier la résistance à la masse et lancer le programme (flèche blanche).</p>
<p>Si la LED clignote quand le bouton est pressé, c’est gagné. Passer aux étapes suivantes. Sinon, il faut trouver la raison de cette malchance.</p>
<p>Ne pas hésiter à reconfigurer la carte car il arrive (trop) souvent que cela saute au bout de 3 à 4 compilations. Par exemple, il vaut mieux arrêter proprement la boucle avec un bouton « stop » placé dans la boucle While plutôt que de stopper le programme avec le bouton rouge de LabVIEW.</p>
<h2>L&rsquo;IHM (côté « Face Avant » de LabVIEW)</h2>
<p>L&rsquo;IHM qui permet à l&rsquo;utilisateur de contrôler les instruments pourra ressembler fortement à celle présentée ci-dessous.</p>
<p>Les configurations des Pins et du port sont situées à gauche.</p>
<p>Le bouton « Motor ON » permet d&rsquo;activer le driver sur la Pin ENABLE (Driver).</p>
<p>Le bouton « Left » permet d&rsquo;activer la Pin STEP (Driver)  et faire faire un pas au moteur.</p>
<p>Le bouton « Right »agit comme le bouton « Left » mais active la pin DIR (Driver) à l&rsquo;état haut et permet de changer de sens de rotation.</p>
<p>Un bouton « Laser » permet d&rsquo;activer le laser de visée.</p>
<p>Un bouton STOP permet d&rsquo;arrêter l’exécution proprement et d&rsquo;arrêter le moteur (ENABLE) et le Laser.</p>
<p>Trois types d’indicateurs sont présents : numérique (format chaîne de caractère), une barre de remplissage, et un graphe déroulant.</p>
<p>Un contrôleur barre graphe permet de passer au pilotage Pas par Pas (un clique sur LEFT ou RGTH = 0,9°) ou active la vitesse constante (comme sur la vidéo du début de l&rsquo;article).</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png"><img decoding="async" class=" wp-image-1036 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="700" height="376" srcset="https://ml9zfxsqktal.i.optimole.com/w:564/h:303/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png 564w, https://ml9zfxsqktal.i.optimole.com/w:300/h:161/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/IHM.png 300w" sizes="(max-width: 700px) 100vw, 700px" /></a></p>
<p>Pour le lecteur non initié à LabVIEW, la « face avant » est la partie visible finale du programme disponible pour l&rsquo;utilisateur.</p>
<p>Le code est développé dans une seconde fenêtre appelée « Diagramme ». Et c&rsquo;est la partie de développement du Diagramme que nous allons maintenant aborder.</p>
<p><em>Nota : un Crtl+E permet de permuter rapidement rentre la face avant et le diagramme.</em></p>
<h3><a name="_Toc2727684"></a>La structure (côté diagramme)</h3>
<p>La structure générale du programme est la suivante :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png"><img decoding="async" class="size-full wp-image-1026 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="605" height="230" srcset="https://ml9zfxsqktal.i.optimole.com/w:605/h:230/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png 605w, https://ml9zfxsqktal.i.optimole.com/w:300/h:114/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/screen-LINX-boucle-while.png 300w" sizes="(max-width: 605px) 100vw, 605px" /></a></p>
<p style="text-align: center">Figure 7 Structure générale du programme dans un boucle While</p>
<p>Le code source ne sera pas disponible dans cet article mais les principales briques seront détaillées pour arriver facilement au résultat. 🙂</p>
<h3><a name="_Toc2727685"></a>Lecture de la valeur de la distance du Lidar</h3>
<p>Le Lidar Garmin Lite V3 admet deux sorties de données pour la lecture des mesures : I2C ou PWM. La lecture en modulation de largeur d’impulsion est apparue comme le plus simple du point de vue du soft. Un VI LINX permet de réaliser cette mesure rapidement contre plusieurs VI pour la communication en I2C.</p>
<p>Dans la boucle While cadencée à 50 ms, la mesure du Lidar est effectuée à l’aide du VI « <strong>Lecture de la largueur d’impulsion</strong> » :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png"><img decoding="async" class="size-full wp-image-1027 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="385" height="150" srcset="https://ml9zfxsqktal.i.optimole.com/w:385/h:150/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png 385w, https://ml9zfxsqktal.i.optimole.com/w:300/h:117/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-lecture-largeur-impulsion.png 300w" sizes="(max-width: 385px) 100vw, 385px" /></a></p>
<p>L’entrée <strong>DO Channel</strong> est connectée et la valeur de la Pin 0 de la carte Arduino est rentrée (cf Figure 8 ci-dessous).</p>
<p>Un tableau général de configuration des Pins d’E/S pourra être créé en amont de la boucle While comme ceci :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png"><img decoding="async" class="size-full wp-image-1028" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="733" height="645" srcset="https://ml9zfxsqktal.i.optimole.com/w:733/h:645/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png 733w, https://ml9zfxsqktal.i.optimole.com/w:300/h:264/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-tableau-E_S-ecrire.png 300w" sizes="(max-width: 733px) 100vw, 733px" /></a></p>
<p>La valeur en sortie du VI n’est pas en cm mais en largeur d’une impulsion (µs), qui est proportionnelle à la distance mesurée en cm par le lidar. Afin de lire et d’afficher une valeur en cm, il faut diviser les valeurs en sortie du VI par une constante valant 10 pour obtenir une mesure de longueur (en cm). Cette constante est la sensibilité (en µs/cm) du capteur abordé précédemment que l&rsquo;on peut retrouver dans la documentation du Lidar Lite V3 (page 4, §Mode Pin Control).</p>
<p>Une moyenne glissante pourra être développée afin d’obtenir une mesure plus stable et plus juste à l’aide des registres à décalage (flèches oranges sur les bords de la boucle While). L’inconvénient de cette technique est qu’il faudra attendre n fois le nombre de points moyennés, pour obtenir le résultat. Si l’on choisit de moyenner sur 10 points et que le temps du cadencement est de 500 ms, alors le résultat sera juste au bout de 5 secondes. Ne pas oublier d’initialiser les registres à décalage à zéro. Différents types d’indicateurs pourront être placés en face avant comme ci-dessous :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png"><img decoding="async" class="alignnone size-full wp-image-1029 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="1069" height="627" srcset="https://ml9zfxsqktal.i.optimole.com/w:1069/h:627/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png 1069w, https://ml9zfxsqktal.i.optimole.com/w:300/h:176/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:450/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:601/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-moyenne-glissante.png 1024w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p style="text-align: center">Figure 9 Moyenne glissante (côté diagramme/code) et exemples d&rsquo;indicateurs en face avant</p>
<p>Comme le Lidar affiche une incertitude de ± 2.5 cm et une résolution de 1 cm, il a été choisi de n’afficher que des valeurs entières arrondies au centimètre.</p>
<h3><a name="_Toc2727686"></a>VI de contrôle du Driver et du moteur</h3>
<p>Un VI « écrire sur des E/S digitales » permet d’activer les sorties de l’Arduino du LattePanda afin de piloter le Driver.</p>
<p>La fonction suivante a été construite comme ci-après :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-E-S-digitales.png"><img decoding="async" class="size-full wp-image-1030 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-E-S-digitales.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="186" height="156" /></a></p>
<p>Cette fonctionnalité permet de prendre, en entrée, un tableau de booléens (ordres des boutons pressés en face avant) et d’activer les E/S correspondantes.</p>
<ul>
<li><strong>La première entrée</strong> (en partant du haut) de la fonction « <strong>Construire un tableau</strong>» est reliée au bouton « MOTOR ON » et agit sur la Pin « ENABLE » du Driver. Ce bouton permet vraisemblablement d’activer l’alimentation du driver et du moteur.</li>
<li><strong>La seconde entrée </strong>permet de gérer la direction du moteur. Le fil (vert) est relié au bouton « RIGHT » de mon interface afin d’active la Pin « DIR » du driver. Le moteur tourne ainsi dans le sens horaire.</li>
<li><strong>La troisième entrée</strong> active la pin « STEP » du driver et permet d’effectuer un Pas de 0,9° (avec les entrées du driver MS1=MS2=MS3=0=GND). Le moteur effectue un pas par changement de niveau de l’état bas à l’état haut. Cette entrée est active si le bouton « LEFT » OU le bouton « RIGHT » est activé. Nous verrons ensuite comment faire tourner le moteur à vitesse constante.</li>
<li><strong>La quatrième entrée</strong> active le laser. Un laser de visée peut fonctionner qu’avec une tension de 5V et ne consomme que quelques milliampères. Il est souhaitable pour la sécurité des personnes, que le bouton « STOP » qui arrête le programme, puisse stopper l’émission du laser à la fin de la manip en même temps. Pour cela on pourra mettre une boucle conditions comme ci-dessous :</li>
</ul>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png"><img decoding="async" class="size-full wp-image-1031 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="746" height="166" srcset="https://ml9zfxsqktal.i.optimole.com/w:746/h:166/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png 746w, https://ml9zfxsqktal.i.optimole.com/w:300/h:67/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-Secu-Laser.png 300w" sizes="(max-width: 746px) 100vw, 746px" /></a></p>
<p>Il pourra être fait de même avec l’arrêt du moteur (« MOTOR ON ») à la fin de l’exécution du programme.</p>
<ul>
<li><strong>Les cinquième, sixième et septième</strong> entrées activent les Pins MS1, MS2 et MS3 du driver et permettent de gagner en précision d’angle (jusqu’au demi pas ici).</li>
</ul>
<p>Afin de faire fonctionner le moteur à vitesse constante, la fonctionnalité suivante a été développée :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-signal-carre.png"><img decoding="async" class="size-full wp-image-1032 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-ecrire-signal-carre.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="294" height="155" /></a></p>
<p>Lorsqu’un booléen (bouton) active la structure « Cas », le VI « écrire un signal carré » est activé avec une fréquence nulle et d&rsquo;une durée nulle sur la pin STEP. Cette fonctionnalité m&rsquo;a permis de faire fonctionner le moteur à vitesse constante. Dans ce cas, la vitesse est fonction du temps de cadencement de la boucle (réglée à 50 ms). A l’heure où est écrit cet article, il existe surement de meilleures solutions, notamment avec le VI « PWM Set Duty Cycle »:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-PWM.png"><img decoding="async" class="size-full wp-image-1033 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LINX-PWM.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="126" height="74" /></a></p>
<p>Mais cela n’a pas fonctionné comme il était souhaité lors du test.</p>
<p>A la suite de ces nombreux réglages et bidouillages, le programme doit pouvoir se lancer (flèche blanche non brisée). Si cela n&rsquo;est pas le cas, résoudre les erreurs unes à unes.</p>
<p>Il fortement probable que rien ne fonctionne du premier coup, ou qu’à moitié, il est alors conseillé, dans un premier temps, de vérifier les branchements (alimentation) des organes dysfonctionnant.</p>
<p>L&rsquo;utilisateur pourra jouer avec les différents types d&rsquo;actions mécaniques pour contrôler le moteur (clique droit sur un bouton) :</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png"><img decoding="async" class=" wp-image-1040 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="379" height="411" srcset="https://ml9zfxsqktal.i.optimole.com/w:379/h:411/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png 379w, https://ml9zfxsqktal.i.optimole.com/w:277/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/LabVIEW_acrion-boutons.png 277w" sizes="(max-width: 379px) 100vw, 379px" /></a></p>
<p>&nbsp;</p>
<h2><a name="_Toc2727687"></a>Résultats en images :</h2>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg"><img decoding="async" class="size-full wp-image-1015 aligncenter" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg" alt="Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)" width="4608" height="3456" srcset="https://ml9zfxsqktal.i.optimole.com/w:1440/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg 4608w, https://ml9zfxsqktal.i.optimole.com/w:300/h:225/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:768/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222601.jpg 1024w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Figure 10 Interface de la mesure de distance (Windows n&rsquo;est pas à l&rsquo;heure ^_^ )</p>
<p>J’espère que ce projet a pu continuer d’éveiller votre curiosité et a pu vous aider dans vos futurs développements !</p>
<h2><a name="_Toc2727688"></a>Sources :</h2>
<ul>
<li>Site Pololu (<a href="https://www.pololu.com/product/1182">https://www.pololu.com/product/1182</a> )</li>
<li>Site GO Tronic</li>
<li><a href="https://www.lattepanda.com">https://www.lattepanda.com</a></li>
<li>Ressources LINX : <a href="https://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478">https://sine.ni.com/nips/cds/view/p/lang/fr/nid/212478</a></li>
<li>Forum LINX : <a href="https://github.com/MakerHub/LINX">https://www.labviewmakerhub.com/doku.php?id=libraries:linx:start</a></li>
<li>Datasheet Lidar Garmin lite V3 : <a href="https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf">https://static.garmin.com/pumac/LIDAR_Lite_v3_Operation_Manual_and_Technical_Specifications.pdf</a></li>
<li><em>LabVIEW &#8211; 4e édition &#8211; Programmation et applications &#8211; Introduction à LabVIEW NXG, </em>Collection : Technique et ingénierie, Dunod, Parution : août 2018,Francis Cottet, Luc Desruelle, Michel Pinard</li>
</ul>
<ul>
<li><em>The Art of electronic</em>, Third edition, Paul Horowitz et Winfield Hill</li>
</ul>
<aside class="ael-tools ael-series">
<p class="ael-tools-t">Série : LattePanda et LabVIEW</p>
<ol>
<li><a href="https://amaury-laurent.fr/lattapanda-premiere-mise-route/">LattePanda &#8211; Première mise en route</a></li>
<li><a href="https://amaury-laurent.fr/labview-rt-lattepanda/">LabVIEW RT &#038; LattePanda</a></li>
<li><strong>Mesure Lidar rotatif embarqué sur LattePanda et piloté par LabVIEW (LINX)</strong> (cet article)</li>
</ol>
</aside>
<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/outil-resistance-led/">Résistance de LED</a> : valeur normalisée, courant réel et puissance dissipée</li>
<li><a href="https://amaury-laurent.fr/outil-regulateur-reglable/">Régulateur réglable</a> : calculer le pont de contre-réaction d’un LM317 ou équivalent</li>
<li><a href="https://amaury-laurent.fr/outil-resistances-serie-parallele/">Résistances en série et en parallèle</a> : obtenir une valeur hors série avec deux résistances</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/mesure-lidar-rotatif-embarque-sur-lattepanda-et-pilote-par-labview-linx/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		<enclosure url="https://amaury-laurent.fr/wp-content/uploads/2019/03/20190225_222725.mp4" length="98513038" type="video/mp4" />

			</item>
		<item>
		<title>Récepteur radio-modélisme sur USB</title>
		<link>https://amaury-laurent.fr/recepteur-radio-modelisme-sur-usb/</link>
					<comments>https://amaury-laurent.fr/recepteur-radio-modelisme-sur-usb/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Tue, 09 May 2017 21:24:57 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<guid isPermaLink="false">http://amaury-laurent.fr/?p=721</guid>

					<description><![CDATA[Ou comment récupérer sur un PC les consignes émises par une radiocommande Introduction Quoi de plus normal pour un hacker que d&#8217;essayer de hacker tout ce qui bouge? C&#8217;est probablement l&#8217;idée qui m&#8217;a traversé l&#8217;esprit quand j&#8217;ai mis en route ma première radiocommande: comment l&#8217;utiliser pour piloter tout et n&#8217;importe quoi? Une solution serait de [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Ou comment récupérer sur un PC les consignes émises par une radiocommande</h2>
<h3>Introduction</h3>
<p>Quoi de plus normal pour un hacker que d&rsquo;essayer de hacker tout ce qui bouge?</p>
<p>C&rsquo;est probablement l&rsquo;idée qui m&rsquo;a traversé l&rsquo;esprit quand j&rsquo;ai mis en route ma première radiocommande: comment l&rsquo;utiliser pour piloter tout et n&rsquo;importe quoi? Une solution serait de concevoir intégralement un récepteur radio 2.4GHz et décoder le signal de la radiocommande. Cette solution permettrait de récupérer l&rsquo;intégralité des voies de la radio. Elle est par contre particulièrement complexe.</p>
<p>C&rsquo;est pourquoi, je vais vous proposer une solution détournée: récupérer les signaux de pilotage servomoteurs derrière un récepteur radio du commerce. Il suffit alors de lire les signaux modulés en largeur d&rsquo;impulsion pour avoir la valeur émise par la radio.</p>
<p>Le montage que je vous propose permet de numériser les signaux destinés aux servomoteurs de modélisme. Les valeurs acquises sont ensuite envoyées à un PC <em>via</em> une prise USB.</p>
<p>Grâce au protocole HID, le montage est vu par le système d&rsquo;exploitation (Windows, Linux, Mac) comme un joystick sans installer de pilotes particuliers.</p>
<p>Il ne reste plus qu&rsquo;à exploiter les valeurs pour l&rsquo;usage que vous aurez imaginé :</p>
<ul>
<li>Piloter un simulateur de vol sans fil</li>
<li>Piloter un système déporté (robot, caméra IP, &#8230;)</li>
<li>&#8230;</li>
</ul>
<h3>Un peu de théorie</h3>
<p>Un récepteur de modélisme sert à recevoir et décoder les ordres émis par la radiocommande et les envoyer aux actionneurs (servomoteurs, variateurs, &#8230;). Le pilotage des actionneurs de modélisme est standard:</p>
<ul>
<li>Ils reçoivent des signaux carrés d&rsquo;une période de 22 millisecondes</li>
<li>La largeur de l&rsquo;état haut varie entre 1ms et 2ms</li>
<li>1ms correspond à 0% (ou -100%)</li>
<li>2ms correspond à 100 %</li>
<li>L&rsquo;amplitude du signal est déterminée par la tension d&rsquo;alimentation du récepteur</li>
</ul>
<figure id="attachment_727" aria-describedby="caption-attachment-727" style="width: 400px" class="wp-caption aligncenter"><a class="fancybox" href="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG004.bmp"><img decoding="async" class="wp-image-727 size-full" src="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG004.bmp" alt="Récepteur radio-modélisme sur USB" width="400" height="240" /></a><figcaption id="caption-attachment-727" class="wp-caption-text">Signal à la sortie d&rsquo;un récepteur AR400 alimenté en 3.3V. Notez bien la période de 22ms entre chaque impulsion</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_724" aria-describedby="caption-attachment-724" style="width: 400px" class="wp-caption aligncenter"><a class="fancybox" href="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG001.bmp"><img decoding="async" class="size-full wp-image-724" src="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG001.bmp" alt="Récepteur radio-modélisme sur USB" width="400" height="240" /></a><figcaption id="caption-attachment-724" class="wp-caption-text">Impulsion 0% =&gt; environ 1ms</figcaption></figure>
<p>&nbsp;</p>
<figure id="attachment_726" aria-describedby="caption-attachment-726" style="width: 400px" class="wp-caption aligncenter"><a class="fancybox" href="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG003.bmp"><img decoding="async" class="size-full wp-image-726" src="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG003.bmp" alt="Récepteur radio-modélisme sur USB" width="400" height="240" /></a><figcaption id="caption-attachment-726" class="wp-caption-text">Impulsion 100% =&gt; environ 2ms</figcaption></figure>
<p>Il s&rsquo;agit donc de signaux modulés en largeur d&rsquo;impulsion ou PWM (<em>Pulse Width Modulation</em>).</p>
<p>Pour information, la largeur d&rsquo;impulsion n&rsquo;est que de 10% de la période totale pour permettre au récepteur de générer jusqu&rsquo;à 10 voies séquentiellement:</p>
<p><a class="fancybox" href="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG004-1.bmp"><img decoding="async" class="aligncenter size-full wp-image-804" src="https://amaury-laurent.fr/wp-content/uploads/2017/05/IMAG004-1.bmp" alt="Récepteur radio-modélisme sur USB" width="400" height="240" /></a></p>
<p>Le fonctionnement du récepteur en est donc simplifié: il n&rsquo;a qu&rsquo;une impulsion à générer à la fois.</p>
<h3>Mise en application</h3>
<h4>Choix du matériel</h4>
<p>Le récepteur radio que j&rsquo;ai choisi pour ce montage est un <a class="fancybox-iframe" href="https://www.spektrumrc.com/Products/Default.aspx?ProdID=SPMAR400" target="_blank" rel="noopener noreferrer">Spektrum AR400</a>. Il s&rsquo;agit d&rsquo;un récepteur <a href="https://www.spektrumrc.com/Technology/DSM2.aspx" target="_blank" rel="noopener noreferrer">DSM2</a>/<a href="https://www.spektrumrc.com/Technology/DSMX.aspx" target="_blank" rel="noopener noreferrer">DSMX </a>4 voies dédié à l&rsquo;aéromodélisme. Il est en outre capable de gérer la télémétrie (future évolution du projet?).</p>
<p>Pour numériser les signaux PWM, je compte utiliser un microcontrôleur doté d&rsquo;une connexion USB. Mon affinité me pousse naturellement chez Microchip. J&rsquo;ai donc commencé le développement sur un <a class="fancybox-iframe" href="https://www.microchip.com/en-us/product/PIC32MX795F512H" target="_blank" rel="noopener noreferrer">PIC32MX795F512H </a>que j&rsquo;avais sous la main. Malheureusement, il se trouve que l&rsquo;utilisation que je vais décrire dans cet article n&rsquo;est pas bien supportée par mon compilateur, spécifiquement sur cette famille de PIC32. En effet, le contrôleur d&rsquo;interruption ne semble pas bien configuré. Je suis donc passé sur un <a class="fancybox-iframe" href="https://www.microchip.com/en-us/product/PIC32MX440F256H" target="_blank" rel="noopener noreferrer">PIC32MX440F256H</a>.</p>
<p>La carte de développement utilisée est une <a class="fancybox-iframe" href="https://www.olimex.com/Products/Duino/PIC32/PIC32-PINGUINO-MICRO/open-source-hardware" target="_blank" rel="noopener noreferrer">Pinguino Micro </a>de chez Olimex, reprogrammée avec le <a href="https://amaury-laurent.fr/wp-content/uploads/2017/05/mikrobootloader-start-usb-manual-v100.pdf">bootloader USB</a> de Mikroelektronika.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/PIC32-PINGUINO-MICRO-01.jpg"><img decoding="async" class="aligncenter size-full wp-image-737" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/PIC32-PINGUINO-MICRO-01.jpg" alt="Récepteur radio-modélisme sur USB" width="540" height="411" srcset="https://ml9zfxsqktal.i.optimole.com/w:540/h:411/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/PIC32-PINGUINO-MICRO-01.jpg 540w, https://ml9zfxsqktal.i.optimole.com/w:300/h:228/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/PIC32-PINGUINO-MICRO-01.jpg 300w" sizes="(max-width: 540px) 100vw, 540px" /></a>L&rsquo;idée est d&rsquo;utiliser les 4 modules <a href="https://ww1.microchip.com/downloads/en/DeviceDoc/60001122G.pdf" target="_blank" rel="noopener noreferrer">Input Capture</a> disponibles dans le PIC32. Ces modules permettent de faire des mesures temporelles sur des signaux digitaux. J&rsquo;utilise donc un module par voie du récepteur.</p>
<h4>Câblage</h4>
<p>Le câblage électrique est des plus simple. La carte Pinguino est autonome. L&rsquo;alimentation électrique provient directement de la prise USB. Un régulateur 3.3V présent sur la carte permet d&rsquo;alimenter l&rsquo;AR400 avec une tension compatible PIC32 (ces derniers peuvent être chatouilleux sur certaines broches avec le 5V par exemple).</p>
<p>Sur l&rsquo;AR400, on note 5 rangées de 3 pins. De gauche à droite, on trouve:</p>
<ul>
<li>Association/Télémétrie</li>
<li>Gaz</li>
<li>Ailerons</li>
<li>Gouverne de profondeur</li>
<li>Gouverne de direction</li>
</ul>
<p>Ensuite, de haut en bas, on trouve:</p>
<ul>
<li>Signal</li>
<li>+Vcc</li>
<li>Gnd</li>
</ul>
<p>Voici donc le schéma de câblage (si l&rsquo;on peut appeler ça comme ça&#8230;)</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png"><img decoding="async" class="aligncenter size-large wp-image-743" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:630/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png" alt="Récepteur radio-modélisme sur USB" width="1024" height="630" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:630/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:185/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:472/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1307/h:804/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/schéma.png 1307w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h4>Le module Input Capture</h4>
<p>Ce module est présent dans la plupart des microcontrôleurs Microchip. Il permet de récupérer la valeur d&rsquo;un Timer sur un front de signal. Comme tous les modules d&rsquo;un microcontrôleur, il est possible de le configurer:</p>
<ul>
<li>Choix du premier front de déclenchement (montant ou descendant)</li>
<li>Mode de déclenchement (armement pour un front, sur les fronts montants, sur les fronts descendants, sur tous les fronts&#8230;)</li>
<li>Périodicité des interruptions (tous les fronts, tous les 2 fronts, &#8230;)</li>
<li>Pour les PIC32, choix de la taille du compteur (16 ou 32 bits)</li>
</ul>
<p>J&rsquo;ai choisi d&rsquo;utiliser un Timer sur 32 bits, de déclencher sur tous les fronts, de commencer par un front montant et d&rsquo;avoir une interruption à chaque déclenchement. Ce qui donne la configuration suivante (cf: <a href="https://ww1.microchip.com/downloads/en/DeviceDoc/60001122G.pdf" target="_blank" rel="noopener noreferrer">datasheet du module Input Capture, page 6</a>):</p>
<pre class="wp-block-code"><code>IC1CONbits.ICM = 0b110; //Simple Capture Event mode – every edge, specified edge first and every edge thereafter
IC1CONbits.FEDGE = 1; //Capture rising edge first
IC1CONbits.C32 = 1; //32-bit timer resource capture
IC1CONbits.ICI = 0; //Interrupt on every capture event
IC1CONbits.ICSIDL = 0; Continue to operate in CPU Idle mode
 
//Dupplication de la configuration sur tous les modules Input Capture    
IC2CON = IC1CON;
IC3CON = IC1CON;
IC4CON = IC1CON;

</code></pre>
<p>Cependant, le module Input Capture ne fonctionne pas seul: il travail conjointement avec le Timer 2. Il convient donc de le configurer également:</p>
<ul>
<li>Source d&rsquo;horloge: interne</li>
<li>Pas de prescaler (avec une horloge à 80MHz, la valeur de comptage devrait être comprise entre 80000 (1ms) et 160000 (2ms), ce qui donne une résolution plus qu&rsquo;acceptable)</li>
<li>Timer sur 32 bits</li>
<li>Pas de GATE</li>
<li>Période de comptage 0xFFFFFFFF</li>
</ul>
<p>Ce qui donne la configuration suivante (cf: <a href="https://ww1.microchip.com/downloads/en/DeviceDoc/61105F.pdf" target="_blank" rel="noopener noreferrer">datasheet du module timer, page 9</a>):</p>
<pre class="wp-block-code"><code>T2CONSET.f1 = 0; //Internal peripheral clock
T2CONSETbits.T32 = 1; //TMRx and TMRy form a 32-bit timer
T2CONSETbits.TGATE = 0; //Gated time accumulation is disabled
T2CONSETbits.TCKPS0 = 0; //1:1 prescale value
T2CONSETbits.TCKPS1 = 0;
T2CONSETbits.TCKPS2 = 0;
TMR2 = 0;
PR2 = 0xFFFFFFFF;
T2CONSETbits.ON = 1; //Module is enabled

</code></pre>
<p>&nbsp;</p>
<p>NB : tous les modules Input Capture du PIC32MX440 accèdent au Timer2.</p>
<h4>La routine d&rsquo;interruption</h4>
<p>La majorité du code contenu dans le microcontrôleur s&rsquo;exécute sur interruptions. Sur front montant, je lis et mémorise la valeur du Timer2. Sur front descendant, je calcul la durée de l&rsquo;impulsion en faisant la différence des valeurs courante et précédente du Timer2.</p>
<p>NB : Dès qu&rsquo;un évènement est capturé par un module Input Capture, il copie la valeur du registre TMR2 dans le registre ICxBUF, qui est en réalité une FIFO. Elle stocke les valeurs de comptage des derniers évènements acquis.</p>
<pre class="wp-block-code"><code>void IC1_ISR() iv IVT_INPUT_CAPTURE_1 ilevel 6 ics ICS_SOFT {
     unsigned long temp = 0;
     LATG.f6 = 1;
     sync = 1;
     TMR1 = 0; //reset timeout comm.
     temp = IC1BUF;
     IC1BUF = 0;
     if (toogle1 == 0) {
         ic1_start = temp;
         toogle1 = 1;
     }
     else {
         // value1 = CalculDelta(temp, ic1_start);
         
         // Calcul T2-T1, même si le timer déborde et repart à 0
         if (temp&lt;ic1_start) {
            // théoriquement impossible sauf en cas de débordement
            value1 = 4294967295-(ic1_start-temp)+1;
         }
         else value1 = temp-ic1_start;
         toogle1 = 0;
     }
     debug_toogle++;
     if (debug_toogle &gt;= 50) {
        debug_toogle = 0;
        LATD.f1 = !PORTD.f1;
     }
     IC1IF_bit = 0;
}

</code></pre>
<p>Je profite de la disposition du Timer 1 pour gérer un timeout: en cas de perte de la liaison radio, le signal PWM disparait et le Timer 1 n&rsquo;est plus remis à zéro. Le débordement du timer (environ en 200ms) indique une perte du signal. A noter également la gestion du débordement du Timer 2: à 80MHz sur 32 bits, il survient assez rapidement (53 secondes).</p>
<p>NB : La voie de pilotage des gaz génère tout le temps un signal. En cas de perte de la radiocommande, une impulsion de 1ms est envoyée pour remettre les gaz à 0.</p>
<p>Cette routine est dupliquée pour tous les modules Input Capture.</p>
<p><span style="color: #ff0000;">ATTENTION!</span> il ne faut pas utiliser de sous fonction commune aux 4 interruptions: elle créent un couplage nuisible au fonctionnement du programme.</p>
<p>NB : Il est impossible de remettre à 0 le flag ICxIF_bit tant que le registre ICxBUF n&rsquo;a pas été lu intégralement.</p>
<h4>La communication USB</h4>
<p>Dans un premier temps, j&rsquo;ai choisi de remonter les valeurs des voies sur un PC <em>via</em> un bus USB. Le plus simple à gérer pour Windows est un périphérique HID compatible joystick. J&rsquo;ai donc récupéré et nettoyé le descripteur USB de mon <a href="https://amaury-laurent.fr/joystick-usb-sur-pic32/">simulateur de Joystick</a>. Le nouveau descripteur gère 4 axes (X, Y, Rx et Ry) sur 16 bits.</p>
<p>Voici le descripteur :</p>
<pre class="wp-block-code"><code>{
    0x05, 0x01,                        // USAGE_PAGE (Generic Desktop)
    0x09, 0x04,                        // USAGE (Joystick)
    0xa1, 0x01,                        // COLLECTION (Application)
    0x09, 0x01,                        //   USAGE (Pointer)
    0xa1, 0x00,                        //   COLLECTION (Physical)
    0x09, 0x30,                        //     USAGE (X)
    0x09, 0x31,                        //     USAGE (Y)
    0x09, 0x34,                        //     USAGE (Ry)
    0x09, 0x33,                        //     USAGE (Rx)
    0x15, 0x00,                        //     LOGICAL_MINIMUM (0)
    0x27, 0xff, 0xff, 0x00, 0x00,    //     LOGICAL_MAXIMUM (65535)
    0x75, 0x10,                        //     REPORT_SIZE (16)
    0x95, 0x04,                        //     REPORT_COUNT (4)
    0x81, 0x02,                        //     INPUT (Data,Var,Abs)
    0xc0,                            //     END_COLLECTION
    0xc0                            // END_COLLECTION
}

</code></pre>
<p>&nbsp;</p>
<p>Le rapport USB envoyé au PC est décrit de la manière suivante:</p>
<pre class="wp-block-code"><code>typedef union {
    char bytes[8];
    struct {
        unsigned int x_value;
        unsigned int y_value;
        unsigned int rx_value;
        unsigned int ry_value;
    };
} T_USB_Report;

</code></pre>
<p>La boucle principale de programme est donc très simple: elle récupère les 4 valeurs, leur soustrait 80000 et les divise par 1.22. On obtient ainsi une valeur comprise entre 0 et 65573. Il convient de borner les valeurs finales obtenues en cas de dépassement de la gamme (&lt;0 ou &gt;65535). Les valeurs sont ensuite stockées dans le rapport USB et envoyées au PC.</p>
<pre class="wp-block-code"><code>while (1) {
    MyReport.x_value = (value1-MIN_PERIOD)/1.22;
    MyReport.y_value = (value2-MIN_PERIOD)/1.22;
    MyReport.rx_value = (value3-MIN_PERIOD)/1.22;
    MyReport.ry_value = (value4-MIN_PERIOD)/1.22;
    HID_Write(MyReport.bytes, sizeof(MyReport));
    delay_ms(10);
}

</code></pre>
<p>Ainsi, il devient possible de récupérer sous Windows les 4 voies de la radiocommande, en USB et sans driver spécifique:</p>
<figure id="attachment_728" aria-describedby="caption-attachment-728" style="width: 417px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/parametres.png"><img decoding="async" class="size-full wp-image-728" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/parametres.png" alt="Récepteur radio-modélisme sur USB" width="417" height="473" srcset="https://ml9zfxsqktal.i.optimole.com/w:417/h:473/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/parametres.png 417w, https://ml9zfxsqktal.i.optimole.com/w:264/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/parametres.png 264w" sizes="(max-width: 417px) 100vw, 417px" /></a><figcaption id="caption-attachment-728" class="wp-caption-text">Assistant de configuration pour manette de jeux</figcaption></figure>
<h3>Le programme complet</h3>
<p>Voici le programme complet fonctionnel:</p>
<div class="source">
<pre class="wp-block-code"><code>
#include "USBdsc.c"
#define MIN_PERIOD        80000.0
 
typedef union {
    char bytes[8];
    struct {
        unsigned int x_value;
        unsigned int y_value;
        unsigned int rx_value;
        unsigned int ry_value;
    };
} T_USB_Report;
 
T_USB_Report MyReport;
 
int debug_toogle = 0;
 
unsigned long int ic1_start = 0;
unsigned long int value1 = 0;
int toogle1 = 0;
 
unsigned long int ic2_start = 0;
unsigned long int value2 = 0;
int toogle2 = 0;
 
unsigned long int ic3_start = 0;
unsigned long int value3 = 0;
int toogle3 = 0;
 
unsigned long int ic4_start = 0;
unsigned long int value4 = 0;
int toogle4 = 0;
 
int sync = 0;
 
char ReadBuffer[64], WriteBuffer[64];
 
unsigned long int CalculDelta (unsigned long int T2, unsigned long int T1) {
    // Calcul T2-T1, même si le timer déborde et repart à 0
    if (T2&lt;T1) {
       // théoriquement impossible sauf en cas de débordement
       return 4294967295-(T1-T2)+1;
    }
    else return T2-T1;
}
 
void IC1_ISR() iv IVT_INPUT_CAPTURE_1 ilevel 6 ics ICS_SOFT {
     unsigned long temp = 0;
     LATG.f6 = 1;
     sync = 1;
     TMR1 = 0; //reset timeout comm.
     temp = IC1BUF;
     IC1BUF = 0;
     if (toogle1 == 0) {
         ic1_start = temp;
         toogle1 = 1;
     }
     else {
         // value1 = CalculDelta(temp, ic1_start);
         
         // Calcul T2-T1, même si le timer déborde et repart à 0
         if (temp&lt;ic1_start) {
            // théoriquement impossible sauf en cas de débordement
            value1 = 4294967295-(ic1_start-temp)+1;
         }
         else value1 = temp-ic1_start;
         toogle1 = 0;
     }
     debug_toogle++;
     if (debug_toogle &gt;= 50) {
        debug_toogle = 0;
        LATD.f1 = !PORTD.f1;
     }
     IC1IF_bit = 0;
}
 
void IC2_ISR() iv IVT_INPUT_CAPTURE_2 ilevel 5 ics ICS_SOFT {
     unsigned long temp = 0;
     temp = IC2BUF;
     IC2BUF = 0;
     if (toogle2 == 0) {
         ic2_start = temp;
         toogle2 = 1;
     }
     else {
         // value2 = CalculDelta(temp, ic2_start);
         
         // Calcul T2-T1, même si le timer déborde et repart à 0
         if (temp&lt;ic2_start) {
            // théoriquement impossible sauf en cas de débordement
            value2 = 4294967295-(ic2_start-temp)+1;
         }
         else value2 = temp-ic2_start;
         toogle2 = 0;
     }
     IC2IF_bit = 0;
}
 
void IC3_ISR() iv IVT_INPUT_CAPTURE_3 ilevel 4 ics ICS_SOFT {
     unsigned long temp = 0;
     temp = IC3BUF;
     IC3BUF = 0;
     if (toogle3 == 0) {
         ic3_start = temp;
         toogle3 = 1;
     }
     else {
         // value3 = CalculDelta(temp, ic3_start);
         
         // Calcul T2-T1, même si le timer déborde et repart à 0
         if (temp&lt;ic3_start) {
            // théoriquement impossible sauf en cas de débordement
            value3 = 4294967295-(ic3_start-temp)+1;
         }
         else value3 = temp-ic3_start;
         toogle3 = 0;
     }
     IC3IF_bit = 0;
}
 
void IC4_ISR() iv IVT_INPUT_CAPTURE_4 ilevel 3 ics ICS_SOFT {
     unsigned long temp = 0;
     temp = IC4BUF;
     IC4BUF = 0;
     if (toogle4 == 0) {
         ic4_start = temp;
         toogle4 = 1;
     }
     else {
         // value4 = CalculDelta(temp, ic4_start);
         // Calcul T2-T1, même si le timer déborde et repart à 0
         if (temp&lt;ic4_start) {
            // théoriquement impossible sauf en cas de débordement
            value4 = 4294967295-(ic4_start-temp)+1;
         }
         else value4 = temp-ic4_start;
         toogle4 = 0;
     }
     IC4IF_bit = 0;
}
 
void USB_ISR() iv IVT_USB_1 ilevel 7 ics ICS_SRS {
     USB_Interrupt_Proc();
     USBIF_bit = 0;
}
 
void TMR1_ISR() iv IVT_TIMER_1 ilevel 1 ics ICS_SOFT {
     LATG.f6 = 0;
     /*
     value1 = 120000;
     value2 = value1;
     value3 = value1;
     value4 = value1;
     */
     sync = 0;
     TMR1 = 0;
     T1IF_bit = 0;
}
 
void ClearBuffer (char * buffer, int buffer_len) {
     int i = 0;
     for (i=0; i&lt;buffer_len; i++) *(buffer+i) = 0;
}
 
void main() {
 
    toogle1 = 0;
    toogle2 = 0;
    toogle3 = 0;
    toogle4 = 0;
    ic1_start = 0;
    ic2_start = 0;
    ic3_start = 0;
    ic4_start = 0;
    value1 = 0;
    value2 = 0;
    value3 = 0;
    value4 = 0;
    debug_toogle = 0;
 
    AD1PCFG = 0xFFFF;
    JTAGEN_bit = 0;
    CHECON = 0x32;
    ODCB = 0;
    TRISD = 0xffff;
    TRISD.f1 = 0;
    TRISG.f6 = 0;
    LATG.f6 = 0;
    LATD.f1 = 0;
 
    IC1CONbits.ICM = 0b110;
    IC1CONbits.FEDGE = 1;
    IC1CONbits.C32 = 1;
    IC1CONbits.ICI = 0;
    IC1CONbits.ICSIDL = 0;
    
    IC2CON = IC1CON;
    IC3CON = IC1CON;
    IC4CON = IC1CON;
 
    T2CONSET.f1 = 0;
    T2CONSETbits.T32 = 1;
    T2CONSETbits.TGATE = 0;
    T2CONSETbits.TCKPS0 = 0;
    T2CONSETbits.TCKPS1 = 0;
    T2CONSETbits.TCKPS2 = 0;
    TMR2 = 0;
    PR2 = 0xFFFFFFFF;
    T2CONSETbits.ON = 1;
    
    PR1 = 65535;
    TMR1 = 0;
    T1CONSETbits.TCKPS0 = 1;
    T1CONSETbits.TCKPS1 = 1;
    T1CONSETbits.TGATE = 0;
    T1CONSETbits.SIDL = 0;
    T1CONSETbits.TCS = 0;
    T1CONSETbits.ON = 1;
 
    IC1IP0_bit = 0;
    IC1IP1_bit = 1;
    IC1IP2_bit = 1;
 
    IC2IP0_bit = 1;
    IC2IP1_bit = 0;
    IC2IP2_bit = 1;
 
    IC3IP0_bit = 0;
    IC3IP1_bit = 0;
    IC3IP2_bit = 1;
 
    IC4IP0_bit = 1;
    IC4IP1_bit = 1;
    IC4IP2_bit = 0;
    
    USBIP0_bit = 1;
    USBIP1_bit = 1;
    USBIP2_bit = 1;
    
    T1IP0_bit = 1;
    T1IP1_bit = 0;
    T1IP2_bit = 0;
 
    
    USBIE_bit = 1;
    IC1IE_bit = 1;
    IC2IE_bit = 1;
    IC3IE_bit = 1;
    IC4IE_bit = 1;
    T1IE_bit = 1;
    
    EnableInterrupts();
 
    HID_Enable(ReadBuffer, WriteBuffer);
    
    IC1CONbits.ON = 1;
    IC2CONbits.ON = 1;
    IC3CONbits.ON = 1;
    IC4CONbits.ON = 1;
 
    T4CONSETbits.ON = 1;
    
    while (1) {
          MyReport.x_value = (value1-MIN_PERIOD)/1.22;
          MyReport.y_value = (value2-MIN_PERIOD)/1.22;
          MyReport.rx_value = (value3-MIN_PERIOD)/1.22;
          MyReport.ry_value = (value4-MIN_PERIOD)/1.22;
          HID_Write(MyReport.bytes, sizeof(MyReport));
          delay_ms(10);
    }
}

</code></pre>
</div>
<h3> Conclusion</h3>
<p>Ce montage assez simple à réaliser permet de récupérer dans un microcontrôleur, puis sur un PC, les valeurs de 4 voies radiocommandées.</p>
<p>L&rsquo;utilisation du protocole HID permet de connecter le système sur n&rsquo;importe quel PC ou autre RaspberryPi/LattePanda/BeagleBoard/&#8230;</p>
<p>Il devient donc possible de commander à longue distance un dispositif autonome. Les idées ne vous manqueront pas, j&rsquo;en suis sûr 😉</p>

<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg 1920w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:700/h:394/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102927.jpg 700w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg 1920w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:700/h:394/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_102935.jpg 700w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg 1920w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:700/h:394/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103018.jpg 700w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg 1920w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:700/h:394/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103027.jpg 700w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1920/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg 1920w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:432/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:700/h:394/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2017/05/20170508_103040.jpg 700w" sizes="(max-width: 300px) 100vw, 300px" /></a>

<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/assistant-descripteur-usb-hid/">Générateur de descripteur USB HID</a> : construire et vérifier un descripteur de rapport (joystick, boutons, composite) et ses structures C</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/recepteur-radio-modelisme-sur-usb/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Fraiseuse CNC StepCraft 420 – Le Logiciel</title>
		<link>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-logiciel/</link>
					<comments>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-logiciel/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Mon, 11 Apr 2016 18:12:55 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[CNC & FAO]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=492</guid>

					<description><![CDATA[Phase 2: L&#8217;installation du logiciel Cet article fait suite à un précédent. Introduction Pour piloter ma fraiseuse, j&#8217;ai choisi la suite logiciel GALAAD. C&#8217;est un ensemble de logiciels dédiés CFAO. Plusieurs arguments ont justifié ce choix: IronWood vend un pack qui comprend la machine, la carte d&#8217;interpolation Pulsebox NxTG La dite carte d&#8217;interpolation est compatible [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Phase 2: L&rsquo;installation du logiciel</h2>
<p>Cet article fait suite à un <a href="https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-lassemblage/">précédent</a>.<strong><br />
</strong></p>
<h3>Introduction</h3>
<p>Pour piloter ma fraiseuse, j&rsquo;ai choisi la suite logiciel GALAAD. C&rsquo;est un ensemble de logiciels dédiés CFAO. Plusieurs arguments ont justifié ce choix:</p>
<ol>
<li>IronWood vend un pack qui comprend la machine, la carte d&rsquo;interpolation Pulsebox NxTG</li>
<li>La dite carte d&rsquo;interpolation est compatible plug&rsquo;n&rsquo;play avec GALAAD</li>
<li>J&rsquo;ai eu l&rsquo;occasion de voir réaliser des circuits imprimés avec cette suite logiciel à l&rsquo;<a href="https://www.univ-smb.fr/iut-annecy/" target="_blank">IUT d&rsquo;Annecy</a></li>
<li>GALAAD est développé par des français</li>
<li>La licence d&rsquo;utilisation adaptée à mes besoins n&rsquo;est pas très onéreuse</li>
<li>GALAAD est compatible Windows 7, 8, 10</li>
<li>Je suis fan de Kamelott (et alors ?)</li>
</ol>
<p>GALAAD est livré sur CD. Pensez-y, de nos jours les PC sont de moins en moins équipés de lecteurs optiques.</p>
<p>Une version d&rsquo;évaluation est disponible ici: <a href="http://www.galaad.net/download-eng.html" target="_blank">galaad.net</a></p>
<p>La licence de base n&rsquo;a besoin de rien d&rsquo;autre que le CD d&rsquo;installation. En revanche, la version intégrale a besoin d&rsquo;un <a href="https://fr.wikipedia.org/wiki/Dongle" target="_blank">dongle USB</a> pour obtenir la licence d&rsquo;utilisation.</p>
<p>Dans mon cas, je l&rsquo;utilise sur un PC portable MSI GT683 tournant sous Windows 10 sans aucun problème de compatibilité ou d&rsquo;instabilité.</p>
<p>D&rsquo;autres solutions logicielles existent. En voici quelques unes avec les raisons qui m&rsquo;ont fait y renoncer:</p>
<h4>Mach3 CNC</h4>
<p><a href="http://www.machsupport.com/software/mach3/" target="_blank">http://www.machsupport.com/software/mach3/</a></p>
<p><img decoding="async" class="aligncenter" src="https://www.machsupport.com/wp-content/uploads/2013/04/mach_program.jpg" alt="Fraiseuse CNC StepCraft 420 – Le Logiciel" width="300" height="218" /></p>
<p>Il s&rsquo;agit d&rsquo;un logiciel d&rsquo;ancienne génération conçu pour piloter une machine à commande numérique directement via le port parallèle d&rsquo;un PC. Pour les plus jeunes d&rsquo;entre vous, le port parallèle était largement présent sur les PC et utilisé entre autre pour communiquer avec des imprimantes. Le port parallèle est accessible via une prise SubD-25. Bien connu des électroniciens (les niveaux électriques sont compatibles TTL 5V), ils tendent à disparaitre et ne sont même plus pris en charge par les versions de Windows supérieures à Vista.</p>
<p>Du coup Mach3 ne fonctionne que sous Windows Xp 32 bits sur un PC suffisamment vieux pour être équipé d&rsquo;un port parallèle. Pas très pérenne comme solution&#8230; En outrer, le noyau de Mach3 (utilisé pour interpoler les déplacements de la machine et piloter les moteurs pas à pas) fonctionne également sous Windows. Le maitre mot du pilotage de fraiseuse est la bonne maitrise des signaux de pilotage. Or la régularité d&rsquo;exécution d&rsquo;un programme sous Windows est exécrable. Il suffit de brancher un périphérique USB, de lancer la calculatrice Windows, ou simplement d&rsquo;avoir l&rsquo;écran de veille du PC pour introduire un <a href="https://fr.wikipedia.org/wiki/Gigue_%28%C3%A9lectronique%29" target="_blank">jitter</a> immonde dans n&rsquo;importe quel programme s&rsquo;exécutant sur la machine. Croyez-moi, j&rsquo;ai suffisamment pratiqué les systèmes temps réel pour vous déconseiller vivement cette solution.</p>
<p>Elle a cependant un avantage: pas besoin de carte électronique supplémentaire: on connecte directement la fraiseuse au PC via un prolongateur Sub-D 25.</p>
<p>PS: Une nouvelle version, curieusement appelée <a href="http://www.machsupport.com/software/mach4/" target="_blank">Mach4</a> (&#8230;) est sortie récemment. Je n&rsquo;ai pas eu l&rsquo;occasion de la prendre en main. Je n&rsquo;émettrai donc aucun avis dessus.</p>
<h4>Linux CNC</h4>
<p><a href="https://linuxcnc.org/" target="_blank">https://linuxcnc.org/</a></p>
<p><img decoding="async" class="aligncenter" src="https://linuxcnc.org/images/screen_thumb.png" alt="Fraiseuse CNC StepCraft 420 – Le Logiciel" width="350" height="250" /></p>
<p>Il s&rsquo;agit du cousin gratuit et Open Source de Mach3. Il se distingue principalement par le fait qu&rsquo;il ne s&rsquo;exécute que sous Linux.</p>
<p>Je ne suis pas linuxophobe, mais la majorité des logiciels que je compte utiliser pour fabriquer des pièces avec ma fraiseuse ne sont disponibles que sous Windows.</p>
<p>Je ne l&rsquo;ai pas utilisé donc je ne suis pas le mieux placé pour en parler. Cependant, il existe des patch au noyau Linux pour exécuter des programmes temps réel et Linux CNC semble compatible. Il est donc fortement probable que les résultats soient meilleurs qu&rsquo;avec Mach 3.</p>
<h3>Description de la suite GALAAD</h3>
<p>A l&rsquo;inverse, des applications comme celles présentées ci-dessus qui s&rsquo;occupent exclusivement du pilotage de la machine, GALAAD offre une solution intégrée allant du dessin à l&rsquo;usinage. Voici les différents composants de GALAAD:</p>
<ul>
<li>GALAAD: module de CAO pour fraisage</li>
<li>GAWAIN: module de CAO pour tournage</li>
<li><span style="color: #339966;">KAY</span>: module d&rsquo;usinage/impression 3D</li>
<li>KYNON: module de programmation script</li>
<li><span style="color: #339966;">LANCELOT</span>: module d&rsquo;usinage 2.5D</li>
<li>OWEIN: éditeur de fichiers <a href="https://fr.wikipedia.org/wiki/Programmation_de_commande_num%C3%A9rique" target="_blank">GCode</a> avec prévisualisation</li>
<li><span style="color: #339966;">PERCIVAL</span>: module de préparation à l&rsquo;usinage de circuits imprimés</li>
</ul>
<p>Vous aurez certainement identifié les différents chevaliers de la table ronde.</p>
<p>Les modules en <span style="color: #339966;">vert </span>sont inclus dans la licence de base. Le reste des modules est uniquement disponible en évaluation 30 jours. La licence de base peut paraitre restreinte, cependant elle offre les fonctions les plus intéressantes: pilotage de la machine et usinage de circuit imprimé. Il faudra par contre utiliser des logiciels tiers pour la conception et le dessin des pièces à réaliser.</p>
<p>ATTENTION: Percival n&rsquo;est en aucun cas un logiciel de CAO électronique. Il sert uniquement à mettre en forme le PCB avant fabrication ; en tenant compte des outils disponibles sur la machine, des en simplifiant la gravure double face, &#8230; La CAO est toujours à réaliser par un logiciel conventionnel type EAGLE ou Proteus.</p>
<h3>Installation et Mises à Jour</h3>
<p>La suite GALAAD s&rsquo;installe « à l&rsquo;ancienne »: tout le contenu est copié dans le dossier C:\Galaad. Il n&rsquo;y a pas de dépendances critiques avec la base de registre ou des DLL du système enfouies dans le System32. Une fois l&rsquo;installation terminée, un dossier Galaad apparait également sur le bureau: il contient les raccourcis vers les différents modules.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture.png"><img decoding="async" class="aligncenter wp-image-496 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture.png" alt="Capture" width="635" height="168" srcset="https://ml9zfxsqktal.i.optimole.com/w:635/h:168/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture.png 635w, https://ml9zfxsqktal.i.optimole.com/w:300/h:79/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture.png 300w" sizes="(max-width: 635px) 100vw, 635px" /></a></p>
<p>Pour mettre à jour Galaad, rien de plus simple: il suffit de télécharger le patch au format compressé ZIP sur le site officiel et de l&rsquo;extraire dans C:\Galaad en acceptant de remplacer les fichiers existants. On a beau dire, la simplicité à du bon !</p>
<h3>Première utilisation</h3>
<p>Connecter la Pulsebox NxTG sur le PC via le cordon USB fourni. Côté fraiseuse, j&rsquo;ai dû utiliser un prolongateur Sub-D 25 (inclus) car le boitier de la Pulsebox est trop épais pour se loger dans la fente prévue pour la connectique de la StepCraft.</p>
<p>Les drivers devraient s&rsquo;installer automatiquement:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture2.png"><img decoding="async" class="aligncenter wp-image-499 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture2.png" alt="Installation des pilotes" width="633" height="344" srcset="https://ml9zfxsqktal.i.optimole.com/w:633/h:344/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture2.png 633w, https://ml9zfxsqktal.i.optimole.com/w:300/h:163/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture2.png 300w" sizes="(max-width: 633px) 100vw, 633px" /></a></p>
<p>Aucun driver particulier ne devrait être requis pour l&rsquo;installation sur les versions de Windows récentes.</p>
<p>Démarrer ensuite le logiciel GALAAD (ignorer l&rsquo;avertissement de sécurité de Windows&#8230;). Acquitter le popup informant des 30 jours de démo et ouvrir le menu Paramètres &gt; Machine &gt; Complets.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture3.png"><img decoding="async" class="aligncenter wp-image-500 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture3.png" alt="Menu de paramétrage de la machine" width="390" height="209" srcset="https://ml9zfxsqktal.i.optimole.com/w:390/h:209/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture3.png 390w, https://ml9zfxsqktal.i.optimole.com/w:300/h:161/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture3.png 300w" sizes="(max-width: 390px) 100vw, 390px" /></a></p>
<p>La fenêtre de configuration apparait.</p>
<h4>Paramètres mécaniques</h4>
<p>La première page permet de configurer les paramètres mécaniques de la machine.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture4.png"><img decoding="async" class="aligncenter wp-image-501 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture4.png" alt="Config: Onglet 1 - Mécanique" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture4.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture4.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a>Pour la StepCraft 420, voici la configuration à appliquer:</p>
<ul>
<li>Modèle: StepCraft ; 420 LPT (PulseBox)</li>
<li>Type: 3 axes (ou 4 axes si équipée d&rsquo;une tête d&rsquo;impression 3D)</li>
<li>Courses utiles:
<ul>
<li>X: 300 mm</li>
<li>Y: 420 mm</li>
<li>Z: 150 mm</li>
</ul>
</li>
<li>Pas des vis à billes:
<ul>
<li>X: 3 mm</li>
<li>Y: 3 mm</li>
<li>Z: 3 mm</li>
</ul>
</li>
<li> Résolution des moteurs:</li>
<li>
<ul>
<li>X: 400 pas/tour</li>
<li>Y: 400 pas/tour</li>
<li>Z: 400 pas/tour</li>
</ul>
</li>
<li>Axe supplémentaire (si équipée d&rsquo;une tête d&rsquo;impression 3D):
<ul>
<li>4ème Axe: Axe E d&rsquo;extrusion</li>
<li>Résolution: 200 pas/mm</li>
</ul>
</li>
</ul>
<h4>Paramètres de commande numérique</h4>
<p>La deuxième page concerne la commande numérique. A savoir la Pulsebox.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture5.png"><img decoding="async" class="aligncenter wp-image-502 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture5.png" alt="Config: Onglet - Commande Numérique" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture5.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture5.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a></p>
<p>Pour utiliser la Pulsebox NxTG, voici ma configuration:</p>
<ul>
<li>Type: AxeMotion ; PulseBox NxtG</li>
<li>Buffer mémoire locale cochée</li>
<li>Interpol. 3D cochée</li>
<li>Port: USB</li>
<li>Baudrate: 115200</li>
<li>Parité: Aucune</li>
<li>Bits de donnée: 8</li>
<li>Bits de stop: 1</li>
<li>Contrôle de flux: Aucun</li>
<li>Course de référence:
<ul>
<li>Position: Nord-Ouest</li>
<li>Séquence: ZYXAB</li>
<li>Avertir avant d&rsquo;effectuer cochée</li>
</ul>
</li>
</ul>
<h4>Paramètres avancés de la PulseBox NxtG</h4>
<p>En cliquant sur le bouton Plus de la page de configuration de la commande numérique, après sélection du module de pilotage, une boite de configuration avancée apparait:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture10.png"><img decoding="async" class="aligncenter wp-image-507 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture10.png" alt="Config: Pulsebox NxtG" width="953" height="541" srcset="https://ml9zfxsqktal.i.optimole.com/w:953/h:541/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture10.png 953w, https://ml9zfxsqktal.i.optimole.com/w:300/h:170/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture10.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:436/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture10.png 768w" sizes="(max-width: 953px) 100vw, 953px" /></a></p>
<p>Il s&rsquo;agit d&rsquo;adapter la configuration de la PulseBox à la machine StepCraft.</p>
<p>Voici ma configuration:</p>
<ul>
<li>Fréquence Start/Stop: 200 Hz</li>
<li>Accélération: 50 kHz/s</li>
<li>Signal d&rsquo;erreur ou arrêt sur l&rsquo;entrée 2</li>
<li>Pilotage manuel au JogPad cochée</li>
<li>Utiliser les vecteurs à pente cochée</li>
<li>Vitesse d&rsquo;approche: 50 mm/s</li>
<li>Dégagement hors contacts: 1 mm</li>
<li>Affectation des signaux SUB-D25:
<ul>
<li>Ligne 1: Sortie N°1</li>
<li>Ligne 2: Direction X</li>
<li>Ligne 3: Impulsions X</li>
<li>Ligne 4: Direction Y</li>
<li>Ligne 5: Impulsions Y</li>
<li>Ligne 6: Direction Z</li>
<li>Ligne 7: Impulsions Z</li>
<li>Ligne 8: Direction A</li>
<li>Ligne 9: Impulsions A</li>
<li>Ligne 10: Entrée N°1</li>
<li>Ligne 11: Entrée N°2</li>
<li>Ligne 12: Entrée N°3</li>
<li>Ligne 13: Entrée N°4</li>
<li>Ligne 14: Sortie N°2</li>
<li>Ligne 15: Entée N°5</li>
<li>Ligne 16: Sortie N°3</li>
<li>Ligne 17: Sortie PWM</li>
</ul>
</li>
<li>Affectation des signaux broches 1 à 9:
<ul>
<li>Broche 2: Sortie N°4</li>
<li>Broche 3: Sortie N°5</li>
<li>Broche 4: Sortie N°6</li>
<li>Broche 5: Entrée N°6</li>
<li>Broche 6: Entrée N°7</li>
<li>Broche 7: Entrée N°8</li>
<li>Broche 8: Entrée N°9</li>
<li>Broche 9: Entée N°10</li>
</ul>
</li>
</ul>
<h4>Paramètres de la broche</h4>
<p>La troisième page concerne la broche d&rsquo;usinage.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture6.png"><img decoding="async" class="aligncenter wp-image-503 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture6.png" alt="Config: Onglet - Broche" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture6.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture6.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a></p>
<p>Il est possible de laisser les paramètres par défaut, à savoir Aucune Broche. En effet, la StepCraft n&rsquo;est pas équipée pour piloter une broche. Dans mon cas, la broche Kress est munie d&rsquo;un variateur réglable à la main et d&rsquo;un interrupteur Marche/Arrêt manuel. J&rsquo;envisage cependant de la piloter avec un contacteur en utilisant l&rsquo;une des sorties DO de la Pulsebox. Dans ce cas, il faut configurer GALAAD pour utiliser une broche standard en lui donnant les sorties à activer pour la mise en route. Je donnerais plus de détails quand le relais sera installé et testé.</p>
<h4>Paramètres de vitesse</h4>
<p>La quatrième page concerne les vitesses atteignables par la fraiseuse. Si elles sont trop élevées, la machine ne fonctionnera pas correctement. Voici une configuration satisfaisante:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture7.png"><img decoding="async" class="aligncenter wp-image-504 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture7.png" alt="Config: Onglet - Vitesses" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture7.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture7.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a></p>
<ul>
<li>Vitesse mini: 6mm/min</li>
<li>Vitesse maxi: 3000 mm/min</li>
<li>Multiplicateur: 1</li>
<li>Course de référence: 600 mm/min</li>
<li>Mouvement inactifs XY: 3000 mm/min</li>
<li>Descentes inactives Z: 3000 mm/min</li>
<li>Remontées Z: 3000 mm/min</li>
<li>Descente sur capteur: 600 mm/min</li>
<li>Descente du palpeur: 600 mm/min</li>
<li>Pilotage manuel:
<ul>
<li>Valeurs par défaut:
<ul>
<li>XY: 600 mm/min</li>
<li>Z: 600 mm/min</li>
</ul>
</li>
<li>Accélération progressive cochée</li>
<li>Répétition cochée</li>
</ul>
</li>
</ul>
<h4>Paramètres avancés</h4>
<p>Viennent ensuite les paramètres avancés:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture8.png"><img decoding="async" class="aligncenter wp-image-505 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture8.png" alt="Config: Onglet - Avancés" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture8.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture8.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a></p>
<p>Les facteurs d&rsquo;échelle sont à 1.</p>
<p>Les axes de déplacement X, Y, Z et E sont respectivement associés aux Canaux 1, 2, 3, et 4. Petit bémol tout de même: la commande de l&rsquo;axe 1 est inversée.</p>
<p>Les corrections de perpendicularité et de rattrapage des jeux sont à évaluer et renseigner par vos soins. Je n&rsquo;ai pas encore pris le temps de les mesurer: les valeurs sont donc à 0.</p>
<h4>Paramètres des Entrées/Sorties</h4>
<p>Voici enfin le moment de configurer les E/S de la machine.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture9.png"><img decoding="async" class="aligncenter wp-image-506 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture9.png" alt="Config: Onglet - E/S" width="505" height="519" srcset="https://ml9zfxsqktal.i.optimole.com/w:505/h:519/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture9.png 505w, https://ml9zfxsqktal.i.optimole.com/w:292/h:300/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture9.png 292w" sizes="(max-width: 505px) 100vw, 505px" /></a></p>
<p>Pour une StepCraft de base, il suffit éventuellement de lui dire d&rsquo;arrêter l&rsquo;usinage si l&rsquo;entrée correspondant à l’arrêt d&rsquo;urgence est active. Dans mon cas, j&rsquo;ai simplement configuré mon calibrateur de hauteur d&rsquo;outil.</p>
<h3>Premiers mouvements</h3>
<p>Les premiers mouvements à réaliser sont une prise d&rsquo;origine machine.</p>
<p>Pour ce faire, quitter GALAAD et lancer LANCELOT.</p>
<p>Annuler l&rsquo;ouverture de fichier. Un popup apparait pour prévenir que la machine fait effectuer une course de référence. A ce moment, il convient de garder la main posée et prête à l&rsquo;action sur le bouton d&rsquo;arrêt d&rsquo;urgence. Au cas où un contact de prise d&rsquo;origine soit mal câblé ou défectueux, il serait dommage d&#8217;emmener un axe en butée. Peu de dommages sont à prévoir dans ce cas: les moteurs pas à pas vont « gripper » et sauter des pas. Le couple exercé n&rsquo;est pas suffisant pour véritablement endommager la machine, mais le bruit n&rsquo;a rien de plaisant&#8230;</p>
<p>Cliquer sur OK et observez votre fraiseuse qui se positionne au fond à gauche avec l&rsquo;axe Z tout en haut.</p>
<p>Félicitation: votre StepCraft semble fonctionner et fonctionnelle !!!</p>
<p>Pour aller plus loin dans les tests, il est possible d&rsquo;utiliser la palette de pilotage manuel:</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png"><img decoding="async" class="aligncenter wp-image-509 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:417/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png" alt="Pilotage manuel" width="1024" height="417" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:417/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:122/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:313/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png 768w, https://ml9zfxsqktal.i.optimole.com/w:1089/h:444/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture11.png 1089w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<p>Une croix directionnelle et deux sélecteurs haut/bas permettent de déplacer la broche. Les commandes sont également accessibles au clavier: flèches directionnelles pour XY et +/- du pavé numérique pour Z.</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture12.png"><img decoding="async" class="aligncenter wp-image-510 size-full" src="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture12.png" alt="Formes de base en mode manuel" width="590" height="88" srcset="https://ml9zfxsqktal.i.optimole.com/w:590/h:88/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture12.png 590w, https://ml9zfxsqktal.i.optimole.com/w:300/h:45/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/04/Capture12.png 300w" sizes="(max-width: 590px) 100vw, 590px" /></a></p>
<p>Il est également possible de tracer 4 formes de base en mode manuel, de gauche à droite sur l&rsquo;IHM:</p>
<ul>
<li>Un perçage à une position X,Y et une profondeur Z</li>
<li>Une ligne entre la position courante et une position cible X, Y à la profondeur et vitesse voulue</li>
<li>Un rectangle entre la position courante et une position X, Y à la profondeur et vitesse voulue</li>
<li>Un cercle autour de la position courante avec le rayon et la vitesse voulue.</li>
</ul>
<p>Ces formes de base, associées à l&rsquo;installation d&rsquo;un bon stylo à bille sur la fraiseuse et l&rsquo;utilisation d&rsquo;une feuille de papier vont permettre en première approche de vérifier les paramètres de la machine.</p>
<p>Normalement, tous les modules de GALAAD interdisent les mouvements impossibles à la machine. Concrètement, il est impossible de taper les fins de courses en pilotage manuel (contrairement au mode Déblocage manuel accessible depuis le module GALAAD). Attention cependant pour les déplacements à proximité des extrémités: des parties de ma tête d&rsquo;impression 3D sont entrées en collision avec les montants de la fraiseuse. Préférez du coup travailler au centre de la zone de travail: la rigidité de la StepCraft et la précision des moteurs l&rsquo;autorisent sans aucun problème.</p>
<p>Je reviendrai plus longuement sur l&rsquo;utilisation des différents modules de GALAAD au fil d&rsquo;autres articles sur la CFAO.</p>
<h3>A Bientôt pour de nouvelles aventures !</h3>
<div>
<p><!--

--></p>
</div>
<aside class="ael-tools ael-series">
<p class="ael-tools-t">Série : Fraiseuse CNC StepCraft 420</p>
<ol>
<li><a href="https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420/">Fraiseuse CNC StepCraft 420</a></li>
<li><a href="https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-lassemblage/">Fraiseuse CNC StepCraft 420 &#8211; L&rsquo;Assemblage</a></li>
<li><strong>Fraiseuse CNC StepCraft 420 – Le Logiciel</strong> (cet article)</li>
</ol>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-logiciel/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Mini Bobine de Tesla</title>
		<link>https://amaury-laurent.fr/mini-bobine-de-tesla/</link>
					<comments>https://amaury-laurent.fr/mini-bobine-de-tesla/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Thu, 18 Feb 2016 19:28:29 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Électronique]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=474</guid>

					<description><![CDATA[Ou comment passer quatre heures de temps libre, quelques mètres de fil de cuivre et du bon temps ! Avertissements: Cette réalisation a pour but de générer de hautes tensions. Il vous revient de prendre toutes les précautions nécessaires pour ne pas vous mettre en danger ou endommager vos appareils électroniques! Historique Comme son nom [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Ou comment passer quatre heures de temps libre, quelques mètres de fil de cuivre et du bon temps !</h2>
<h3 style="text-align: left;"><strong><span style="color: #ff0000;">Avertissements:</span></strong></h3>
<p style="text-align: left;">Cette réalisation a pour but de générer de hautes tensions. Il vous revient de prendre toutes les précautions nécessaires pour ne pas vous mettre en danger ou endommager vos appareils électroniques!</p>
<h3 style="text-align: left;">Historique</h3>
<p style="text-align: left;">Comme son nom l&rsquo;indique, le résonateur Tesla est l&rsquo;une des inventions du savant Serbe Nikola Tesla. Né le 10 juillet 1856 à Smiljan, Nikola Tesla entre à l&rsquo;école Polytechnique de Graz en 1875. Il y assimilera deux années d&rsquo;études en un an seulement avant de quitter l&rsquo;université faute d&rsquo;argent. Il commence son travail d&rsquo;ingénieur en 1881 pour l&rsquo;Office du télégraphe à Budapest. À l&rsquo;avènement du téléphone, il est promu chef électricien puis ingénieur-chef de la compagnie. On lui devrait le premier haut-parleur. En 1882, il vient travailler à Paris pour la société Continental Edison où il finit de mettre au point le premier moteur à induction. Il expérimente les résonateurs hautes fréquences entre 1899 et 1900 dans le but de créer une tour de télécommunications. Ce sont les fameuses bobines de Tesla.</p>
<p>Source: <a href="https://fr.wikipedia.org/wiki/Nikola_Tesla" target="_blank">Wikipedia</a></p>
<h3 style="text-align: left;">Principe de fonctionnement du résonateur Tesla</h3>
<p style="text-align: left;">L&rsquo;objectif du résonateur Tesla est de produire des champs électriques intenses à haute fréquence. L&rsquo;idée de Tesla repose sur deux principes fondamentaux:</p>
<ul>
<li style="text-align: left;">L&rsquo;utilisation d&rsquo;un transformateur</li>
<li style="text-align: left;">L&rsquo;utilisation de la résonance</li>
</ul>
<p>Un transformateur électrique est chargé d&rsquo;augmenter ou d&rsquo;abaisser une tension électrique sinusoïdale en utilisant le couplage magnétique de deux bobines aux nombres de spires différents. Le rapport de transformation est alors donné par le rapport du nombre de spires de la bobine secondaire sur le nombre de spires de la bobine primaire. Le résonateur Tesla est un transformateur élévateur de tension comportant très peu de spires au primaire (une dizaine) et beaucoup plus au secondaire (plusieurs milliers).<br />
L’idée de génie de Tesla fut d&rsquo;utiliser ce transformateur à sa fréquence de résonance. Pour ce faire, il place un condensateur en série avec le primaire et un autre en série avec le secondaire. Les valeurs des condensateurs sont choisies pour que les deux circuits LC résonnent à la même fréquence.<br />
La haute tension est alors produite par la décharge répétitive du condensateur dans la bobine primaire. Le transformateur entre en résonance (autour de 500kHz) et un très haut potentiel électrique apparait sur le condensateur secondaire.</p>
<h3>Schéma d&rsquo;un résonateur Tesla</h3>
<figure id="attachment_475" aria-describedby="caption-attachment-475" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg"><img decoding="async" class="wp-image-475 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:522/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg" alt="Schéma de principe d'un résonateur Tesla" width="1024" height="522" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:522/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:153/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:392/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1740/h:887/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.jpg 1740w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-475" class="wp-caption-text">Schéma de principe d&rsquo;un résonateur Tesla</figcaption></figure>
<p>On retrouve le condensateur primaire, les bobines primaire et secondaire, ainsi que le condensateur secondaire qui est en réalité soit un tore soit une sphère métallique. Un interrupteur est chargé de connecter périodiquement le condensateur primaire à la bobine primaire. Quand l&rsquo;interrupteur conduit, le condensateur se décharge dans la bobine et le circuit primaire entre en résonance. Quand l&rsquo;interrupteur est ouvert, le condensateur se charge à la tension d&rsquo;alimentation du résonateur.</p>
<h3>Particularité d&rsquo;un résonateur à éclateur solide</h3>
<p>Les bobines de Tesla conventionnelles sont alimentées en haute tension alternative (de l&rsquo;ordre de 10kV). L&rsquo;interrupteur du primaire doit donc être capable de commuter de très forts courants sous une tension de 10kV à la fréquence d&rsquo;alimentation de la Tesla (50 Hz en France). Pour réaliser ma mini Tesla, j&rsquo;ai choisi d&rsquo;utiliser une alimentation 12V continue et de mettre un transistor MOS comme interrupteur primaire. Ceci présente plusieurs avantages, comme notamment la possibilité de régler la fréquence de commutation du MOS en jouant sur la fréquence du signal de grille.</p>
<h3>Réalisation</h3>
<p>La première chose à faire est de bobiner le secondaire. Assurez-vous au préalable d&rsquo;avoir tout ce qu&rsquo;il faut&#8230; Pour ma bobine secondaire, j&rsquo;ai bobiné du fil de cuivre de 0.125mm de diamètre sur un tube de PVC de 32mm sur une longueur d&rsquo;environ 10cm (le fil a cassé avant que j&rsquo;atteigne mon objectif de 15cm&#8230;). Qu&rsquo;à cela ne tienne, je poursuis ma réalisation!!!<br />
Pensez bien à laisser suffisamment de mous au fil de cuivre de chaque côté de la bobine pour permettre les connexions électriques. Ensuite: la bobine primaire. Pour celle-là, rien de plus simple: quelques tours de fils de cuivre (celui que vous avez, pour moi du 0.75 mm²) sur un tronçon de PVC de plus grand diamètre que celui du secondaire et voilà! Ensuite, le condensateur secondaire. Le mien est une balle de ping-pong soigneusement recouverte de scotch aluminium.<br />
Enfin: le circuit électronique de commande. Pour simplifier la réalisation, je génère la commande du MOS avec mon GBF, mais rien n&#8217;empêche de construire un petit oscillateur avec un <a href="https://fr.wikipedia.org/wiki/NE555" target="_blank">555 </a>pour rendre votre réalisation parfaitement mobile. L&rsquo;alimentation 12Vdc est tirée d&rsquo;un vieille alimentation de PC (et alors 😉 ). Attention toutefois à ce que votre alimentation soit assez tolérante aux retours de hautes fréquences et aux courts-circuits! Le schéma n&rsquo;a en sois rien de compliqué:</p>
<p>On retrouve le condensateur primaire connecté directement à la source, le PMOS intercalé entre le condensateur et la bobine du secondaire. Attention: le PMOS conduit quand la grille à un potentiel inférieur à Vcc &#8211; 5V et il est bloqué quand le potentiel de grille est égal à Vcc. Si vous avez un NMOS sous la main, n&rsquo;hésitez surtout pas à modifier le schéma!</p>
<p><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg"><img decoding="async" class="aligncenter wp-image-476 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:640/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg" alt="tesla" width="1024" height="640" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:640/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:188/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:480/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:542/h:340/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla.jpg 542w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></p>
<h3>Les premiers essais</h3>
<p>Après avoir relié l&rsquo;alimentation, le signal de commande du MOS et relié le bas de la bobine secondaire à la masse, il ne reste plus qu&rsquo;à mettre en route! Selon la fréquence du signal de commande, on peut isoler deux modes de fonctionnement:</p>
<p>Fréquences basses (de l&rsquo;ordre du kHz): le résonateur fonctionne comme Tesla l&rsquo;avait prévu: la capacité du primaire entre en résonance avec la bobine. J&rsquo;ai réussi à produire des étincelles d&rsquo;un petit millimètre. Assez décevant me direz-vous, mais ces fréquences sont audibles et l&rsquo;on peut faire chanter la Tesla!</p>
<p>Fréquences élevées (environ 750 kHz): la capacité n&rsquo;a plus le temps de se charger ou de se décharger et la bobine primaire entre directement en résonance avec la tension hachée fournie par le MOS. Cette fois, les étincelles atteignent facilement le centimètre.</p>
<p>Pour trouver la fréquence de résonances, il y a deux écoles: à l&rsquo;oscilloscope (méthode « propre ») ou au tube fluo (méthode « amusante »). A l&rsquo;oscilloscope, il suffit laisser la sonde posée négligemment sur le plan de travail à proximité de la Tesla pour observer les signaux HF rayonnés par la Tesla. Avec un tube fluo, c&rsquo;est le même principe: il faut saisir le tube par une électrode et approcher l&rsquo;autre de la Tesla. Le fluo devrait s&rsquo;allumer. Ensuite, que vous utilisiez le fluo ou l&rsquo;oscilloscope, il faut régler la fréquence de commande du MOS pour obtenir la plus grande amplitude de signal (à l&rsquo;oscilloscope) ou la plus forte luminosité (au fluo).</p>
<p>NB: si vous n&rsquo;avez pas de fluo, une ampoule à économie d&rsquo;énergie (fluocompacte) ou même une simple LED feront l&rsquo;affaire.</p>

<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg'><img decoding="async" width="300" height="188" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:188/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1728/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg 2560w, https://ml9zfxsqktal.i.optimole.com/w:300/h:188/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:480/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:640/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:542/h:340/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/tesla2.jpg 542w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg 4288w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3331.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg 4288w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3332.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg 4288w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3333.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a>
<a href='https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg'><img decoding="async" width="300" height="169" src="https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg" class="attachment-medium size-medium" alt="" srcset="https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg 4288w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3334.jpg 1024w" sizes="(max-width: 300px) 100vw, 300px" /></a>

<p>On peut remarquer la taille impressionnante du dissipateur thermique du MOS. Tous d&rsquo;abord, je n&rsquo;en avais pas d&rsquo;autre (eh oui, ça joue&#8230;), ensuite, à basse fréquence, le courant circulant dans le MOS peut provoquer un échauffement très intense (mon premier MOS mourut ainsi dans d’atroces souffrances). Donc, ne négligez pas le refroidissement du MOS: un accident est vite arrivé!</p>
<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/outil-filtre-rc-lc/">Filtres RC, RL et RLC</a> : fréquence de coupure, résonance et diagramme de Bode</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/mini-bobine-de-tesla/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Fraiseuse CNC StepCraft 420 &#8211; L&#8217;Assemblage</title>
		<link>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-lassemblage/</link>
					<comments>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-lassemblage/#comments</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Sun, 14 Feb 2016 10:03:25 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[CNC & FAO]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=385</guid>

					<description><![CDATA[Phase 1 &#8211; Assemblage Le kit Stepcraft contient l&#8217;intégralité des pièces mécaniques, de la visserie et de l&#8217;accastillage en tout genre. Pour le montage, il vous faudra vous munir des outils suivants: Un jeu de clés allen (de 1.5mm à 5mm coudées) Un jeu de clés plates (de 5.5mm à 10mm) Une pince à bec [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Phase 1 &#8211; Assemblage</h2>
<p>Le kit Stepcraft contient l&rsquo;intégralité des pièces mécaniques, de la visserie et de l&rsquo;accastillage en tout genre.</p>
<p>Pour le montage, il vous faudra vous munir des outils suivants:</p>
<ul>
<li>Un jeu de clés allen (de 1.5mm à 5mm coudées)</li>
<li>Un jeu de clés plates (de 5.5mm à 10mm)</li>
<li>Une pince à bec</li>
<li>Un canif</li>
<li>Une paire de petits tournevis plats d&rsquo;électricien</li>
<li>Un rouleau de scotch d&rsquo;électricien</li>
<li>un tube de colle cyanoacrylate (Super Glu)</li>
<li>Un peu d&rsquo;huile</li>
<li>Du temps libre</li>
</ul>
<p>Le kit est fourni avec une notice de montage aussi détaillé que les notices de LEGO ! Ainsi équipé, le montage est réellement une partie de plaisir.</p>
<p>Pour plus de détails et d&rsquo;informations, des clips vidéos explicatifs sont disponibles sur <a href="https://www.youtube.com/results?search_query=stepcraft+assembly" target="_blank">youtube</a>.</p>
<p>Pour ne pas plagier la notice de montage, je vais plutôt mettre en valeur les points d&rsquo;achoppement possible et toutes les erreurs que j&rsquo;ai commises pour vous éviter de les imiter.</p>
<p>Tout d&rsquo;abord, le montage ne pose pas de difficultés techniques majeures. Il suffit juste d&rsquo;être attentionné et de suivre les étapes dans l&rsquo;ordre:</p>
<h3>1 &#8211; Le montage de la plaque de couplage des axes X et Z</h3>
<figure id="attachment_358" aria-describedby="caption-attachment-358" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/01/20151130_212417-e1452026695503.jpg"><img decoding="async" class="wp-image-358 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:576/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/01/20151130_212417.jpg" alt="Plaque de couplage des axes X et Z: côté face" width="1024" height="576" /></a><figcaption id="caption-attachment-358" class="wp-caption-text">Plaque de couplage des axes X et Z: côté face</figcaption></figure>
<p>Cette partie du montage commence par l&rsquo;installation des deux capteurs de prise d&rsquo;origine machine (la POM dans le jargon). Ils sont montés sur des entretoises, bien protégés au milieu de la plaque. La détection d&rsquo;origine à lieu lorsqu&rsquo;une glissière en aluminium entre en contact avec le bâtis de l&rsquo;axe. La glissière transmet alors le mouvement vers le capteur. Penser juste à ne pas trop bloquer les vis qui maintiennent la glissière, bien que des rondelles soit présentes pour la laisser libre de ses mouvements.</p>
<p>Les capteurs sont câblés en série; il n&rsquo;y a donc que deux fils à tirer. Ils sont logés dans des lumières taillées dans la masse de la plaque de couplage et maintenus en place par des plaques de plastique rigide autocollantes (visibles en blanc sur la photo). Une rotule en plastique permet de recevoir les deux gaines annelées qui guideront les câbles des capteurs et des moteurs.</p>
<p>La plaque de couplage reçoit les dispositifs de guidage pour les axes X et Z. Ils sont constitués de quatre galets en laiton montés chacun sur deux roulements à bille graissés à vie. Deux galets par axe son fixe, les deux autres sont montés dans des trous oblongs et munis d&rsquo;une vis transversale de réglage. Cette vis permettra d&rsquo;éliminer les jeux de guidage. Enfin, un écrou trapézoïdal par axe est monté au milieu de la plaque. Ils sont prévus pour recevoir les vis de 10mm chargées de transmettre les mouvements de rotation.</p>
<p>Cette phase de montage ne présente aucune difficultés. Il faudra simplement veiller à ne pas trop serrer les vis en prise dans les pièces en laiton. Ce dernier étant très tendre, un serrage trop intense détruira irrémédiablement le filet du filetage. Il faudra également essayer de « centrer » les écrous trapézoïdaux. Concrètement, il faut engager la vis à la main et vérifier à la louche que l&rsquo;amplitude du jeux de cette dernière dans l&rsquo;écrou soit réparti équitablement par rapport à l&rsquo;axe de la plaque.</p>
<h3>2 &#8211; Le montage de l&rsquo;axe Z</h3>
<figure id="attachment_359" aria-describedby="caption-attachment-359" style="width: 576px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/01/20151201_210946-e1452026687126.jpg"><img decoding="async" class="wp-image-359 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:576/h:1024/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/01/20151201_210946-e1452025612361.jpg" alt="L'axe Z au complet" width="576" height="1024" /></a><figcaption id="caption-attachment-359" class="wp-caption-text">L&rsquo;axe Z au complet</figcaption></figure>
<p>La deuxième étape consiste à assembler l&rsquo;axe Z de la machine. Elle commence par l&rsquo;accouplement de la vis au moteur pas à pas. Une butée métallique doit être collée à la Super Glu sur le moteur. On veillera à ne se coller ni les doigts, ni l&rsquo;axe du moteur. Un accouplement en laiton est bridé sur l&rsquo;axe du moteur et sur la vis. Une goute d&rsquo;huile ou de graisse sur la butée est nécessaire pour limiter les frottements: la butée va supporter tout le poids de l&rsquo;axe Z&#8230; Les 4 fils du moteur pas à pas sont en vrac. Il sont à glisser dans une gaine annelée pour les protéger. Un morceau de scotch d&rsquo;électricien fait parfaitement l&rsquo;affaire pour aiguiller les fils dans la gaine. Le moteur est fixé par quatre vis sur une plaque elle-même vissée à l&rsquo;une des extrémité du profilé de guidage. L&rsquo;autre extrémité de l&rsquo;axe est constitué de la plaque porte outil. La vis de transmission est montée sur roulement à bille au niveau de cette plaque. L&rsquo;outil est prévu pour se monter dans un trou de 43mm fendu et serré par une vis.</p>
<p>Dans l&rsquo;ordre, on glisse la plaque de couplage dans le profilé, on introduit la vis dans l&rsquo;écrou et on approche au maximum la plaque de couplage du moteur. Ensuite, on serre les trois vis qui fixe le support moteur sur le profilé. On approche la plaque de couplage au plus près du porte outil, à l&rsquo;autre extrémité de la vis, et on serre les trois vis de fixation dans le profilé. On s&rsquo;assure ainsi du bon centrage du moteur et du porte outil. Sans cette précaution, la vis ne serait pas concentrique avec le profilé et l&rsquo;axe pourrait méchamment gripper. Cette manipulation sera à mener pour chacune des vis de la fraiseuse.</p>
<p>Les deux vis montés sur deux des galets de la plaque de centrage permettent de supprimer les jeux.</p>
<h3>3 &#8211; Le montage de l&rsquo;axe X (la potence)</h3>
<p>La potence supportant l&rsquo;axe X est constituée de deux plaques d&rsquo;aluminium massif et d&rsquo;un profilé de guidage. La première étape est d&rsquo;accoupler la vis au moteur. Le même principe que pour l&rsquo;axe Z est employé.</p>
<p>Chaque montant de la potence est équipé de quatre galets de guidage et d&rsquo;un écrou. En effet, l&rsquo;axe Y sera muni de deux vis de transmission. Le réglage des galets de la potence et du centrage des écrou est à effectuer de manière préliminaire avant l&rsquo;assemblage de l&rsquo;axe Y. Une fois les réglage terminé, on peut insérer la plaque de couplage de l&rsquo;axe Z dans le profilé et mettre la vis en place. Avant de serrer les montants de la potence sur le profiler, veiller à bien amener l&rsquo;axe Z au plus proche du côté concerné, encore une fois afin de garantir un bon centrage de la vis de transmission. Enfin, il faut passer les câbles de l&rsquo;axe Z dans une lumière le long d&rsquo;un des montant. Ils sont maintenus en place par des plaques de plastique autocollant. Prenez garde en manipulant la potence, l’ensemble commence à peser un certain poids.</p>
<h3>4 &#8211; Préparation de l&rsquo;axe Y</h3>
<p>L&rsquo;axe Y représente le plus gros morceau de la machine: il en constitue la base. Avant de commencer son assemblage, il est nécessaire de réaliser quelques sous assemblages.</p>
<p>Le premier d&rsquo;entre eux est le moteur de l&rsquo;axe Y. Ce dernier est motorisé par un moteur pas à pas plus gros que les deux autres axes. Il est couplé sur les deux vis de transmission par une courroie crantée. Il faut donc commencer par monter la poulie crantée sur le moteur. Elle est bridée sur l&rsquo;axes par une petite vis sans tête. Attention de ne pas la perdre !</p>
<p>Le deuxième sous ensemble est le troisième capteur de prise d&rsquo;origine. Le switch est monté sur une équerre en aluminium à l&rsquo;aide de deux vis.</p>
<p>Ensuite, il faut assembler les deux capots latéraux qui vont protéger les transmissions de l&rsquo;axe Y. Ces capots sont constitués d&rsquo;une longueur de profilé d&rsquo;aluminium articulée autour de deux pionts en nylon montés à force dans deux rainures. Ils sont maintenus en position par deux billes montées sur ressort. Elles sont elles aussi montées à force dans deux rainures. Enfin, un joint plat en silicone est glissé dans une fente tout le long du profilé. Il empêchera les copeaux de se coincer dans la transmission.</p>
<h3>5 &#8211; Assemblage de l&rsquo;axe Y et de la base de la machine</h3>
<p>La base de la machine est supportée par deux profilé de guidage. Ils sont maintenus à chaque extrémité par deux plaques d&rsquo;aluminium massif. La plaque de derrière reçoit le capteur fin de course, le moteur pas à pas, le galet tendeur de courroie et la première partie du capot de dessous. Les deux profilés de guidage sont vissés sur cette plaque. On ne serrera pas les vis avant d&rsquo;avoir mis les vis de transmission. Les deux profilés sont munis du même joint plat en silicone que les capots de protection.</p>
<p>Le fond de la machine se glisse dans deux rainures en bas des profilés afin de conférer à l’ensemble un début de rigidité.</p>
<p>La face avant reçoit elle le bouton d&rsquo;arrêt d&rsquo;urgence.</p>
<p>Vient maintenant la phase de l&rsquo;assemblage final. On monte les deux profilés sur la plaque de derrière sans serrer les vis. On glisse la potence à sa place dans les deux rails de guidage de l&rsquo;axe. On serre les quatre galets de guidage pour supprimer les jeux. On introduit les deux vis de transmission dans les écrous, sans les engager dans leur roulements à bille. Il faut contrôler le jeux des vis: en jouant avec cette dernière de haut en bas, l&rsquo;écart par rapport à l&rsquo;axe doit être réparti équitablement. Il est possible d&rsquo;utiliser le roulement à bille comme point de repère. Ensuite, il est possible de monter les vis en position et de serrer le plaque de derrière, après avoir ramener la potence en butée sur la plaque de derrière.</p>
<p>La prochaine étape consiste à installer la transmission: une poulie crantée sur chaque vis, une courroie pour synchroniser le tout et un galet tendeur pour maintenir la courroie en place. Il est capital de s&rsquo;assurer que les deux montant de la potence sont parfaitement alignés avant d&rsquo;engager les crans de la courroie sur les poulies. Pour se faire, il est possible d&rsquo;utiliser en guise de cale les pieds de la machine en plastique dur. Une fois la courroie bien en place, un capot en aluminium recouvre la transmission et la protège des chocs mécaniques.</p>
<p>On installe les deux capots de protection des vis en glissant les deux pions en nylon dans les trous idoines. On ajoute les deux butées à bille au bout des vis de transmission et on ajoute la face avant de la machine. Avant de serrer les vis, bien ramener la potence en butée sur la face avant.</p>
<p>La fraiseuse commence à ressembler à quelque chose. Plus que la dernière ligne droite: le câblage!</p>
<h3>6 &#8211; Câblage des actionneurs et installation de la carte de commande</h3>
<p>Il s&rsquo;agit maintenant de ramener tous les câbles de la machine vers le logement prévus sous le fond du châssis. Ce logement accueil la carte de commande. Une face-arrière en plastique découpée selon les empreintes des différents connecteurs évite l&rsquo;entrée de copeaux dans le logement de la carte. Cette dernière se monte sur six entretoises. Avant de monter la carte dans son emplacement, il faut lui brancher le module d&rsquo;interface PC. Il en existe trois différents: port parallèle, liaison série RS232 ou USB. Il s&rsquo;agit d&rsquo;une petite carte électronique munie d&rsquo;un connecteur à broches d&rsquo;un coté et de la prise PC de l&rsquo;autre. Dans mon cas, il s&rsquo;agit d&rsquo;un module pour port parallèle: le carte ne contient aucune électrique et se contente de router les signaux de commande vers un SUB-D 25. Chaque moteur pas à pas est prévu pour se brancher sur un bornier quatre broches à vis. Un bornier plus grand reçoit les capteurs de POM, l’arrêt d&rsquo;urgence et le calibreur de hauteur d&rsquo;outil (en option, mais indispensable). Un couvercle monté dans une rainure et fixé par deux vis vient refermer le logement de la carte de pilotage.</p>
<h3>7 &#8211; Fignolage</h3>
<p>Avant la première mise en route, il reste quelques détails à régler:</p>
<ol>
<li>Installer les pieds autocollants sous les profilés de guidage</li>
<li>Glisser le plan de travail dans les rainures du châssis</li>
<li>Monter la plaque de fixation du plan de travail (prévu pour être facilement démontée)</li>
<li>Coller les stickers qui vont bien</li>
<li>préparer les deux barres de bridage pour tenir vos pièces</li>
<li>Graisser généreusement les parties en mouvement avec la graisse fournie</li>
</ol>
<p>Vous voilà fin près à usiner !</p>
<p>Reste quand même à installer le logiciel, configurer la machine, dessiner des pièces, &#8230;</p>
<div>
</div>
<aside class="ael-tools ael-series">
<p class="ael-tools-t">Série : Fraiseuse CNC StepCraft 420</p>
<ol>
<li><a href="https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420/">Fraiseuse CNC StepCraft 420</a></li>
<li><strong>Fraiseuse CNC StepCraft 420 &#8211; L&rsquo;Assemblage</strong> (cet article)</li>
<li><a href="https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-logiciel/">Fraiseuse CNC StepCraft 420 – Le Logiciel</a></li>
</ol>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/fraiseuse-cnc-stepcraft-420-lassemblage/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Interface Ethernet PIC18F</title>
		<link>https://amaury-laurent.fr/interface-ethernet-pic18f/</link>
					<comments>https://amaury-laurent.fr/interface-ethernet-pic18f/#respond</comments>
		
		<dc:creator><![CDATA[Amaury LAURENT]]></dc:creator>
		<pubDate>Tue, 09 Feb 2016 21:08:53 +0000</pubDate>
				<category><![CDATA[Réalisations]]></category>
		<category><![CDATA[Microcontrôleurs]]></category>
		<guid isPermaLink="false">http://vps200917.ovh.net/?p=440</guid>

					<description><![CDATA[Connectez vos applications embarquées à Internet Acquisitions sur le terrain, télégestion, domotique&#8230; De nombreuses applications s’accommodent très bien d&#8217;une connexion à l&#8217;Internet. Qu&#8217;il s&#8217;agisse d&#8217;envoyer des mesures dans une base de données ou de piloter un système à distance: les idées ne manquent pas. Je vous propose aujourd&#8217;hui une petite carte comprenant un microcontrôleur et [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>Connectez vos applications embarquées à Internet</h2>
<p>Acquisitions sur le terrain, télégestion, domotique&#8230; De nombreuses applications s’accommodent très bien d&rsquo;une connexion à l&rsquo;Internet. Qu&rsquo;il s&rsquo;agisse d&rsquo;envoyer des mesures dans une base de données ou de piloter un système à distance: les idées ne manquent pas.</p>
<p>Je vous propose aujourd&rsquo;hui une petite carte comprenant un microcontrôleur et l&rsquo;interface réseau qui va lui permettre de dialoguer avec un modem.</p>
<p>Ce projet est rendu possible par Microchip qui propose un contrôleur réseau en boitier DIP28 simplement commandé par un bus SPI. Ce fameux composant se nomme <a href="https://www.microchip.com/en-us/product/ENC28J60" target="_blank" rel="noopener noreferrer">ENC28J60</a>. Il ne requiert que très peu de composants annexes: quelques condensateurs et résistances, un quartz à 25.000 MHz et, bien évidemment, une prise RJ45 et son transformateur de couplage.</p>
<h3>Le schéma</h3>
<p>Assez palabré, jetons un coup d’œil au schéma.</p>
<div><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.png"><img decoding="async" class="aligncenter wp-image-441 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:397/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.png" alt="schema" width="1024" height="397" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:397/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.png 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:116/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.png 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:298/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/schema.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></div>
<h3>L&rsquo;alimentation</h3>
<div>
<figure id="attachment_450" aria-describedby="caption-attachment-450" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg"><img decoding="async" class="wp-image-450 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg" alt="L’alimentation à découpage" width="1024" height="577" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3539.jpg 1920w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-450" class="wp-caption-text">L’alimentation à découpage</figcaption></figure>
</div>
<p>J&rsquo;ai choisi d&rsquo;utiliser un PIC 18F qui fonctionne sous 5V, mais l&rsquo;ENC fonctionne lui en 3.3V. Il y a donc deux régulateurs de tension: le premier fournit le 5V au micro et le second fournit le 3.3V à l&rsquo;ENC. J&rsquo;ai d&rsquo;abord monté ces deux régulateurs en parallèle alimentés par le 12Vdc, mais pour limiter l&rsquo;échauffement du LM317, je l&rsquo;ai ensuite monté en cascade derrière le régulateur 5V (passant du même coup d&rsquo;un classique 7805 à un PT78ST105 à découpage).</p>
<p>Il serait peut-être plus avantageux d&rsquo;utiliser un PIC18LF alimenté directement en 3.3V. Mais vu la consommation de l&rsquo;ENC (250 mA), il ne semble pas utilise de gratter quelques mA sur le PIC.</p>
<h3>L&rsquo;ENC28J60</h3>
<figure id="attachment_449" aria-describedby="caption-attachment-449" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg"><img decoding="async" class="wp-image-449 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg" alt="L'ENC28J60 et son horloge" width="1024" height="577" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3538.jpg 1920w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-449" class="wp-caption-text">L&rsquo;ENC28J60 et son horloge</figcaption></figure>
<p>L&rsquo;ENC28J60 est un microcontrôleur, certes un peu particulier, mais qui a les mêmes besoins: une horloge, une alimentation découplée et un Reset.</p>
<p>Le quartz imposé par Microchip doit résonner à 25 MHz. C&rsquo;est une fréquence courante pour les contrôleurs réseau: on peut donc récupérer de tels quartz dans de vieux routeurs, par exemple. Autrement, ils sont disponibles en neuf chez Conrad.</p>
<p>La connexion à la prise réseau doit obligatoirement passer par un transformateur de couplage. Là encore, il est possible d&rsquo;en récupérer dans de vieux routeurs. Il existe aussi des prises réseaux intégrant le transformateur appelées « magjack ». C&rsquo;est une prise de ce type que j&rsquo;ai utilisé (récupérée dans une vielle Livebox Sagem).</p>
<p>La connexion avec le PIC passe par un bus SPI. Ce dernier transporte les informations sur deux fils (SDI et SDO) accompagnées d&rsquo;un signal d&rsquo;horloge (SCK). Il suffit donc de relier la broche SDO du PIC à la broche SI de l&rsquo;ENC, SDI sur SO et SCK sur SCK. Il faut aussi compléter ce bus des deux lignes /RESET et /CS (chip select), qui permettent d&rsquo;initialiser le composant et de le choisir (si le bus SPI est relié à d&rsquo;autres périphériques).</p>
<p>Enfin, Une self permet d&rsquo;isoler l&rsquo;alimentation de la carte avec la liaison Ethernet (très bruitée).</p>
<p><em>ATTENTION:</em> comme je l&rsquo;ai déjà signalé, l&rsquo;ENC fonctionne en 3.3V et le PIC en 5V. Dans le cas d&rsquo;un PIC, les entrées du bus SPI sont dites à « trigger de Schmitt ». En gros, cela signifie qu&rsquo;elles sont compatibles avec les signaux 3.3V. Pour d&rsquo;autres microcontrôleurs, il peut être nécessaire d&rsquo;ajouter un circuit d&rsquo;adaptation de niveau sur les lignes SDI et /INT. Par contre les entrées de l&rsquo;ENC sont compatibles TTL 5V. Il n&rsquo;est donc pas nécessaire d&rsquo;abaisser le niveau 5V à 3.3V avant d&rsquo;entrer dans l&rsquo;ENC.</p>
<h3>Le Microcontrôleur</h3>
<div class="image">
<figure id="attachment_451" aria-describedby="caption-attachment-451" style="width: 1024px" class="wp-caption aligncenter"><a href="https://ml9zfxsqktal.i.optimole.com/w:auto/h:auto/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg"><img decoding="async" class="wp-image-451 size-large" src="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg" alt="Le PIC18 et son horloge" width="1024" height="577" srcset="https://ml9zfxsqktal.i.optimole.com/w:1024/h:577/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg 1024w, https://ml9zfxsqktal.i.optimole.com/w:300/h:169/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg 300w, https://ml9zfxsqktal.i.optimole.com/w:768/h:433/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg 768w, https://ml9zfxsqktal.i.optimole.com/w:1916/h:1080/q:mauto/f:best/https://amaury-laurent.fr/wp-content/uploads/2016/02/DSCF3540.jpg 1920w" sizes="(max-width: 1000px) 100vw, 1000px" /></a><figcaption id="caption-attachment-451" class="wp-caption-text">Le PIC18 et son horloge</figcaption></figure>
</div>
<p>Je suis d&rsquo;abord parti sur un <a href="https://www.microchip.com/en-us/product/PIC18F4550" target="_blank" rel="noopener noreferrer">PIC18F4550</a>, bien connu, qui offre la possibilité d&rsquo;utiliser le bootloader USB de <a class="menu_link" href="https://amaury-laurent.fr/interface-usb-hid/">l&rsquo;Interface HID Universelle</a>. Malheureusement, bien que milieu de gamme, ce contrôleur n&rsquo;offre presque pas suffisamment de ressources pour utiliser une stack TCP/IP ou UDP/IP. J&rsquo;ai donc migré vers un <a href="https://www.microchip.com/en-us/product/PIC18F46K80" target="_blank" rel="noopener noreferrer">PIC18F46K80</a>. Avec ses deux UART et son bus CAN, ce microcontrôleur est parfaitement adapté à la communication sur réseaux de terrain (je le réservais d&rsquo;ailleurs à la réalisation d&rsquo;un espion RS232 &#8230;). Il offre cependant 64 ko de flash et 3.6 ko de RAM (contre 32ko de flash et 2ko de RAM pour le 4550) et des convertisseurs A/N 12 bits (contre 10 bits pour le 4550).</p>
<p>Le PIC18F46K80 permet de programmer un mini serveur web ou d&rsquo;implanter une petite stack TCP/IP pour envoyer des infos sur une base de données (par exemple).<br />
<em>ATTENTION:</em> le 46K80 n&rsquo;est pas entièrement compatible avec le 4550: les broches d&rsquo;alimentations sont identiques, mais le bus SPI n&rsquo;est pas à la même place. En outre, comme le module USB disparaît, la configuration de l&rsquo;horloge diffère et il faut ajouter un connecteur ICSP (pas de bootloader pour le 46K80, sauf peut-être un en Ethernet &#8230;).</p>
<h3>Overclocking</h3>
<p>Pour les néophytes, l&rsquo;overclocking est l&rsquo;art de faire fonctionner un système informatique plus rapidement que ce que préconise le fabricant. Fort populaire sur PC, l&rsquo;overclocking peut aussi s&rsquo;appliquer à nos chers microcontrôleurs.</p>
<p>Dans le cas du 18F46K80, il s&rsquo;agit surtout de conserver le quartz de 20MHz que j&rsquo;avais mis pour le 4550. Le 46K80 offre une configuration d&rsquo;horloge complètement différente du 4550. Il est notamment possible de configurer l&rsquo;utilisation d&rsquo;une horloge secondaire plus lente pour le mode basse consommation. Par contre, il ne propose qu&rsquo;une seule PLL d&rsquo;un coefficient de 4. On a donc le choix entre une horloge à 20MHZ ou une horloge à 80MHz. Je vous laisse imaginer quelle configuration j&rsquo;utilise ;). Par contre, cette fréquence dépasse de 25% les spécifications constructeur, donc si votre micro a un comportement anormal, désactivez la PLL et contentez-vous d&rsquo;une horloge à 20MHz.</p>
<p>NB: Il est bien connu qu&rsquo;un microprocesseur de PC chauffe plus quand on l&rsquo;overclocke. Un PIC n&rsquo;est pas différent: si le 46K80 est froid à 20MHz, il tiédit légèrement à 80MHz (mais rien de comparable avec l&rsquo;ENC28J60, qui lui tiédit franchement).</p>
<h3>Utilisation</h3>
<p>Une fois n&rsquo;est pas coutume, j&rsquo;utilise l&rsquo;environnement MikroC pour programmer cette carte. En effet, MikroC offre une bibliothèque dédiée à l&rsquo;utilisation de l&rsquo;ENC28J60. Je vous invite à essayer leurs exemples, notamment leur serveur web.</p>
<p>Une version modifiée et améliorée de leur stack TCP/IP est disponible sur leur dépôt <a href="https://libstock.mikroe.com/projects/view/107/network-ethernet-library" target="_blank" rel="noopener noreferrer">Libstock</a>.</p>
<p>Voici un exemple de code :</p>
<div class="source">
<pre class="wp-block-code"><code>#include "__NetEthEnc28j60.h"
#include "recources.h"
 
#define TMR0_PRE                    34286    //une IT toutes les 200ms à 80MHz
 
// mE ehternet NIC pinout
sfr sbit Net_Ethernet_28j60_Rst at LATD3_bit;  // for writing to output pin always use latch
sfr sbit Net_Ethernet_28j60_CS  at LATD2_bit;  // for writing to output pin always use latch
sfr sbit Net_Ethernet_28j60_Rst_Direction at TRISD3_bit;
sfr sbit Net_Ethernet_28j60_CS_Direction  at TRISD2_bit;
// end ethernet NIC definitions
 
const code unsigned char httpHeader[] = "HTTP/1.1 200 OK\nConnection: close";  // HTTP header
const code unsigned char httpMimeTypeHTML[] = "\nContent-type: text/html\n\n";              // HTML MIME type
const code unsigned char httpImage[] = "HTTP/1.1 200 OK\nConnection: keep-alive\nContent-type: image/jpg\n\n";           // TEXT MIME type
unsigned char httpMethod[] = "GET /";
unsigned char httpRequ[] = "GET / HTTP/1.1";
 
 
unsigned char   myMacAddr[6] = "ENC28";   // my MAC address
unsigned char   myIpAddr[4]  = {0, 0, 0, 0};                   // my IP address: 0.0.0.0 =&gt; utilise le DHCP pour obtenir une IP
unsigned char   gwIpAddr[4]  = {192, 168,   1, 254};           // gateway (router) IP address
unsigned char   ipMask[4]    = {255, 255, 255,  0 };           // network mask (for example : 255.255.255.0)
unsigned char   dnsIpAddr[4] = {192, 168,   1, 254};           // DNS server IP address
 
unsigned char   getRequest[15];                                // HTTP request buffer
unsigned char   dyna[31] ;                                     // buffer for dynamic response
char led0status = 0;
 
int nb200ms = 0;
 
////////////////////////////////////////////////////////////////////////////////
// // User must set values of global variables in _Lib_NetEthEnc24j600_Defs.c file: !!!!!
/*
NUM_OF_SOCKET_28j60 = 7;     // Max number of socket We can open.
TCP_TX_SIZE_28j60 = 256;    // Size of Tx buffer in RAM.
MY_MSS_28j60 = 30;          // Our maximum segment size.
SYN_FIN_WAIT_28j60 = 1;      // Wait-time (in second) on remote SYN/FIN segment.
RETRANSMIT_WAIT_28j60 = 1;   // Wait-time (in second) on ACK which we expect.
*/
////////////////////////////////////////////////////////////////////////////////
 
char sendHTML_mark = 0;
SOCKET_28j60_Dsc *socketHTML;
unsigned int pos[10];
// Initialization of Timer1
unsigned int cnt;
 
void Net_Ethernet_28j60_UserTCP(SOCKET_28j60_Dsc *socket) {
  unsigned int    len;
  char content_length[32];
  asm CLRWDT;
  
  // I listen only to web request on port 80 for web server
 
  if(socket-&gt;destPort != 80) return ;
  // get 10 first bytes only of the request, the rest does not matter here
  for(len = 0; len &lt; 10; len++){
    getRequest[len] = Net_Ethernet_28j60_getByte();
    }
  getRequest[len] = 0;
 
  // only GET method is supported here
  if(memcmp(getRequest, httpMethod, 5)&amp;&amp;(socket-&gt;state != 3)){
    return;
    }
 
  if(memcmp(getRequest, httpRequ, 9)==0){
    sendHTML_mark = 1;
    socketHTML = socket;
  }
 
 
  //............................................................................
  // Send html page.
  if((sendHTML_mark == 1)&amp;&amp;(socketHTML == socket)) {
    if(pos[socket-&gt;ID]==0) {
      LATD.F1 = 1;
      // Send HTTP header.
      sprintf(content_length, "Content-Length: %d", strlen(html_code));
      Net_Ethernet_28j60_putConstStringTCP(httpHeader, socket);
      Net_Ethernet_28j60_putStringTCP(content_length, socket);
      Net_Ethernet_28j60_putConstStringTCP(httpMimeTypeHTML, socket);
      Net_Ethernet_28j60_putConstStringTCP("&lt;script&gt;\n", socket);
      sprintf(dyna, "var kimoTemp=%2.1f\n",getTempKimo(KIMO_TEMP));
      Net_Ethernet_28j60_putStringTCP(dyna, socket);
      sprintf(dyna, "var kimoHygro=%2.1f\n",getHygroKimo(KIMO_HYGRO));
      Net_Ethernet_28j60_putStringTCP(dyna, socket);
      Net_Ethernet_28j60_putConstStringTCP("&lt;/script&gt;\n", socket);
    }
    while(pos[socket-&gt;ID] &lt; strlen(html_code)) {
      asm CLRWDT;
      if(Net_Ethernet_28j60_putByteTCP(html_code[pos[socket-&gt;ID]++], socket) == 0) {
        pos[socket-&gt;ID]--;
        break;
      }
    }
    if( Net_Ethernet_28j60_bufferEmptyTCP(socket) &amp;&amp; (pos[socket-&gt;ID] &gt;= strlen(html_code)) ) {
      Net_Ethernet_28j60_disconnectTCP(socket);
      LATD.F1 = 0;
      sendHTML_mark = 0;
      sendDATA_mark = 0;
      pos[socket-&gt;ID] = 0;
    }
  }
}
 
////////////////////////////////////////////////////////////////////////////////
 
int ReadSampleADC (char channel)
{
      /* Fonction de lecture des voies Analogiques */
      /* Les fonctions de MikroC ne semble pas s'accomoder des entrées différentielles */
      ADCON0 = channel * 4;
      ADCON0.f0 = 1;
      ADCON0.f1 = 1;
      while(ADCON0.f1 == 1);
      ADCON0.f0 = 0;
      
      return (ADRESH*256 + ADRESL)%4096;
}
 
unsigned int    Net_Ethernet_28j60_UserUDP(UDP_28j60_Dsc *udpDsc) {
 
  unsigned int    len = 0;                           // my reply length
 
  // reply is made of the remote host IP address in human readable format
  ByteToStr(udpDsc-&gt;remoteIP[0], dyna);                // first IP address byte
  dyna[3] = '.';
  ByteToStr(udpDsc-&gt;remoteIP[1], dyna + 4);            // second
  dyna[7] = '.';
  ByteToStr(udpDsc-&gt;remoteIP[2], dyna + 8);            // third
  dyna[11] = '.';
  ByteToStr(udpDsc-&gt;remoteIP[3], dyna + 12);           // fourth
 
  dyna[15] = ':';                                // add separator
 
  // then remote host port number
  WordToStr(udpDsc-&gt;remotePort, dyna + 16);
  dyna[21] = '[';
  WordToStr(udpDsc-&gt;destPort, dyna + 22);
  dyna[27] = ']';
  dyna[28] = 0;
 
  // the total length of the request is the length of the dynamic string plus the text of the request
  len = 28 + udpDsc-&gt;dataLength;
 
  // puts the dynamic string into the transmit buffer
  Net_Ethernet_28j60_putBytes(dyna, 28);
 
  // then puts the request string converted into upper char into the transmit buffer
 
  while(udpDsc-&gt;dataLength--)
          {
          Net_Ethernet_28j60_putByte(toupper(Net_Ethernet_28j60_getByte()));
          }
  return(len);
}
 
void interrupt (void)
{
     if (INTCON.T0IF == 1)
     {
        TMR0H = TMR0_PRE / 256;
        TMR0L = TMR0_PRE % 256;
 
        nb200ms++;
 
        if (nb200ms%5 == 0)
        {
           nb200ms = 0;
           Net_Ethernet_28j60_UserTimerSec ++;
        }
 
 
        if(led0Status == 0)
        {
            LATD.f0 = 0;
        }
        else if(led0Status == 1)
        {
            LATD.f0 = 1;
        }
        else if(led0Status == 2)
        {
            LATD.f0 = !LATD.f0;
        }
 
        INTCON.T0IF = 0;
     }
 
}
 
void MCUInit() {
        ADCON1 = 0;
        ADCON2 = 0b10101010;
        ANCON0 = 0xff;
 
        CM1CON = 0;
        CM2CON = 0;
 
        CVRCON = 0;
 
        PORTA = 0 ;
        TRISA = 0xff ;          // set PORTA as input for ADC
 
        PORTB = 0 ;
        TRISB = 0xff ;          // set PORTB as input for buttons
 
        LATD  = 0 ;
        TRISD = 0 ;             // set PORTD as output
 
        INTCON.GIE = 1;
        T0CON = 0b10000110;
        TMR0H = TMR0_PRE / 256;
        TMR0L = TMR0_PRE % 256;
        INTCON.T0IE = 1;
}
 
void main() {
        char useDHCP = 0;
        int i = 0;
        
        MCUInit();
 
        for(i = 0; i &lt; NUM_OF_SOCKET_28j60; i++)
          pos[i] = 0;
 
        Net_Ethernet_28j60_stackInitTCP();
 
        SPI1_Init();
        SPI_Rd_Ptr = SPI1_Read;
 
        Net_Ethernet_28j60_Init(myMacAddr, myIpAddr, 1); // init ethernet board
        if(Net_Ethernet_28j60_getIpAddress()[0] == 0) useDHCP = 1;
        LATD.f1 = 0;
        led0Status = 2;
        
        asm CLRWDT;
 
        if(useDHCP == 1)
        {
            while(Net_Ethernet_28j60_initDHCP(10) == 0) // try to get one from DHCP until it works
            {
              Net_Ethernet_28j60_Init(myMacAddr, myIpAddr, 1);
              asm CLRWDT;
            }
 
            memcpy(myIpAddr,  Net_Ethernet_28j60_getIpAddress(),    4) ; // get assigned IP address
            memcpy(ipMask,    Net_Ethernet_28j60_getIpMask(),       4) ; // get assigned IP mask
            memcpy(gwIpAddr,  Net_Ethernet_28j60_getGwIpAddress(),  4) ; // get assigned gateway IP address
            memcpy(dnsIpAddr, Net_Ethernet_28j60_getDnsIpAddress(), 4) ; // get assigned dns IP address
 
        }
        else
        {
            Net_Ethernet_28j60_confNetwork(ipMask, gwIpAddr, dnsIpAddr) ; // use configured IP address
        }
 
        led0Status = 1;
        
        
        while(1) {
          //  Process incoming Ethernet packets
          Net_Ethernet_28j60_doPacket();
          
          asm CLRWDT;
          
          for(i = 0; i &lt; NUM_OF_SOCKET_28j60; i++) {
           if(socket_28j60[i].open == 0)
             pos[i] = 0;
          }
          
          if(Net_Ethernet_28j60_doDHCPLeaseTime()) Net_Ethernet_28j60_renewDHCP(5); // it's time to renew the IP address lease, with 5 secs for a reply
 
        }
}

</code></pre>
</div>
<p>Les actions à effectuer dans l&rsquo;ordre:</p>
<ol>
<li>Définir les paramètres réseau:
<ul>
<li>Adresse IP</li>
<li>Adresse passerelle</li>
<li>Masque de réseau</li>
</ul>
</li>
<li>Initialiser le module SPI</li>
<li>Initialiser le module Ethernet</li>
<li>Configurer le réseau (ou demander une IP par DHCP)</li>
<li>Définir les deux fonctions User_UDP et User_TCP qui sont appelées pour chaque requête reçue ou envoyée</li>
<li>Appeler la fonction doPacket() dans la boucle principale</li>
</ol>
<p>Et voilà, vous êtes prêt à créer un mini serveur web basse consommation.</p>
<aside class="ael-tools">
<p class="ael-tools-t">Outils en ligne associés</p>
<ul>
<li><a href="https://amaury-laurent.fr/outil-regulateur-reglable/">Régulateur réglable</a> : calculer le pont de contre-réaction d’un LM317 ou équivalent</li>
<li><a href="https://amaury-laurent.fr/outil-calculateur-crc/">Calculateur de CRC</a> : vérifier les sommes de contrôle d’une trame</li>
</ul>
</aside>
]]></content:encoded>
					
					<wfw:commentRss>https://amaury-laurent.fr/interface-ethernet-pic18f/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
