{"id":658,"date":"2021-10-30T18:40:00","date_gmt":"2021-10-30T17:40:00","guid":{"rendered":"https:\/\/avionicsduino.com\/?p=658"},"modified":"2025-09-26T21:49:26","modified_gmt":"2025-09-26T20:49:26","slug":"le-compas-digital","status":"publish","type":"page","link":"https:\/\/avionicsduino.com\/index.php\/fr\/le-compas-digital\/","title":{"rendered":"Le compas digital"},"content":{"rendered":"\n<p style=\"font-size:10px\"><em>(Le compas digital : page mise \u00e0 jour par Benjamin le 14 ao\u00fbt 2024)<\/em><\/p>\n\n\n\n<p>Le compas magn\u00e9tique, le chronom\u00e8tre, le sextant et les cartes ont longtemps \u00e9t\u00e9 les seuls instruments de navigation. Avec le loch dans la marine, puis l&rsquo;an\u00e9mom\u00e8tre dans l&rsquo;a\u00e9ronautique, pour conna\u00eetre la vitesse et estimer la distance parcourue en fonction du temps \u00e9coul\u00e9. Certains avions de la Seconde Guerre mondiale \u00e9taient \u00e9quip\u00e9s d&rsquo;un astrod\u00f4me pour permettre au radio-navigateur de faire le point astronomique au sextant. \u00c0 la fin des ann\u00e9es 50, Air France avait \u00e9quip\u00e9 ses Super Starliners d&rsquo;un sextant p\u00e9riscopique !<\/p>\n\n\n\n<p>La radionavigation, puis le GPS, ont eu raison de ces techniques de navigation quasi ancestrales. Mais la navigation a\u00e9rienne \u00e0 l&rsquo;estime, \u00e0 la montre et au compas, reste enseign\u00e9e. Et c&rsquo;est heureux, car au stade d&rsquo;\u00e9l\u00e8ve pilote, cette base est indispensable \u00e0 l&rsquo;acquisition d&rsquo;une bonne repr\u00e9sentation mentale du temps et de l&rsquo;espace dans lesquels \u00e9voluent nos a\u00e9ronefs. Le pilote qui a acquis un peu d&rsquo;exp\u00e9rience conserve sa montre, mais il ne regarde plus beaucoup son compas magn\u00e9tique. Sauf parfois pour se rassurer en pensant qu&rsquo;il pourra compter sur lui en cas de panne de son GPS ou de sa tablette&#8230; \u00e0 la condition d&rsquo;avoir conserv\u00e9 les r\u00e9flexes utiles de la navigation \u00e0 l&rsquo;estime !<\/p>\n\n\n\n<p>Le compas magn\u00e9tique traditionnel, hors obligation r\u00e9glementaire, est donc devenu peu utile, voire obsol\u00e8te pour certains. Mais il conserve un autre int\u00e9r\u00eat, dans sa version digitale, lorsqu&rsquo;il est coupl\u00e9 \u00e0 un calculateur et \u00e0 un GPS. Par exemple pour indiquer pr\u00e9cis\u00e9ment au pilote la direction et la vitesse du vent, gr\u00e2ce \u00e0 un calcul faisant intervenir la vitesse de l&rsquo;avion, la route g\u00e9ographique fournie par le GPS, et le cap fourni par le compas, corrig\u00e9 de la d\u00e9clinaison.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le champ magn\u00e9tique terrestre<\/h3>\n\n\n\n<p>Le champ magn\u00e9tique terrestre est \u00e9tabli entre les p\u00f4les magn\u00e9tiques nord et sud, lesquels ne sont pas confondus avec les p\u00f4les g\u00e9ographiques, d&rsquo;o\u00f9 la d\u00e9clinaison magn\u00e9tique. Entre ces p\u00f4les magn\u00e9tiques s&rsquo;\u00e9tablissent des lignes de champ qui sont grossi\u00e8rement comparables \u00e0 celles d&rsquo;un simple barreau aimant\u00e9, repr\u00e9sent\u00e9 en rouge sur la figure 1.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"566\" height=\"503\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Earths_magnetic_field_schematic.png\" alt=\"\" class=\"wp-image-668\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Earths_magnetic_field_schematic.png 566w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Earths_magnetic_field_schematic-300x267.png 300w\" sizes=\"auto, (max-width: 566px) 85vw, 566px\" \/><figcaption class=\"wp-element-caption\">Figure 1 : Les lignes du champ magn\u00e9tique terrestre (d&rsquo;apr\u00e8s <a href=\"https:\/\/commons.wikimedia.org\/wiki\/File:Earth%27s_magnetic_field,_schematic.svg\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Earth's magnetic field, schematic\">Wikimedia Commons<\/a>)<\/figcaption><\/figure>\n<\/div>\n\n\n<p>On voit sur cette repr\u00e9sentation sch\u00e9matique que les lignes de champ sont grossi\u00e8rement parall\u00e8les \u00e0 la surface terrestre aux environs de l&rsquo;\u00e9quateur, perpendiculaires \u00e0 cette surface aux environs des p\u00f4les magn\u00e9tiques et plus ou moins inclin\u00e9es en fonction de la latitude. Mais quelle que soit la localisation g\u00e9ographique, la projection d&rsquo;une ligne du champ magn\u00e9tique sur un plan parall\u00e8le \u00e0 la surface terrestre est toujours orient\u00e9e vers un p\u00f4le magn\u00e9tique. C&rsquo;est ce qui est \u00e0 la base du principe de la boussole, un instrument qui doit toujours \u00eatre horizontal pour pr\u00e9tendre indiquer la direction du p\u00f4le magn\u00e9tique.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le magn\u00e9tom\u00e8tre<\/h3>\n\n\n\n<p>Le c\u0153ur d&rsquo;un compas digital est constitu\u00e9 d&rsquo;un magn\u00e9tom\u00e8tre triaxial. Ce capteur particulier analyse le champ magn\u00e9tique environnant, et le d\u00e9compose en trois vecteurs, selon les trois axes orthogonaux x, y et z de son propre rep\u00e8re cart\u00e9sien.<\/p>\n\n\n\n<p>Il existe une tr\u00e8s grande vari\u00e9t\u00e9 de magn\u00e9tom\u00e8tres. Ceux qui nous int\u00e9ressent dans le cadre de ce site sont de type magn\u00e9tor\u00e9sistif. Cette technologie permet d&rsquo;obtenir des capteurs pr\u00e9cis, sensibles et fiables, de taille inframillim\u00e9trique. Ce sont eux qui \u00e9quipent tous les smartphones du commerce. Ces capteurs sont tr\u00e8s souvent associ\u00e9s \u00e0 des acc\u00e9l\u00e9rom\u00e8tres et des gyrom\u00e8tres, au sein d&rsquo;une IMU (Inertial Measurement Unit).<\/p>\n\n\n\n<p>Si un magn\u00e9tom\u00e8tre est pos\u00e9 horizontalement sur une table, axe z vertical, les axes x et y de ce magn\u00e9tom\u00e8tre sont donc dans un plan horizontal, parall\u00e8le \u00e0 la surface terrestre. Dans ce cas particulier, l&rsquo;analyse des seules composantes x et y suffit pour calculer l&rsquo;orientation magn\u00e9tique du magn\u00e9tom\u00e8tre.<\/p>\n\n\n\n<p>Mais dans un avion, le magn\u00e9tom\u00e8tre, fix\u00e9 \u00e0 la structure, ne peut pas toujours \u00eatre \u00e0 l&rsquo;horizontale. Par cons\u00e9quent, en \u00e9volutions, le calcul de l&rsquo;orientation magn\u00e9tique devra faire intervenir les 3 axes du magn\u00e9tom\u00e8tre et int\u00e9grer l&rsquo;attitude de l&rsquo;avion en assiette et en inclinaison.<\/p>\n\n\n\n<p>Dans le cadre de ce projet, nous avons choisi d&rsquo;utiliser le capteur <a href=\"https:\/\/www.google.com\/url?sa=t&amp;source=web&amp;rct=j&amp;url=https:\/\/www.st.com\/resource\/en\/datasheet\/lis3mdl.pdf&amp;ved=2ahUKEwidsIKBxufzAhWmzYUKHcvVBYEQFnoECAQQAQ&amp;usg=AOvVaw0er2_yXRSETSyj15KzGnCx\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"ST Micro LIS3MDL datasheet\">LIS3MDL<\/a> de STMicroelectronics, sur une carte <a href=\"https:\/\/www.google.com\/url?sa=t&amp;source=web&amp;rct=j&amp;url=https:\/\/www.adafruit.com\/product\/4479&amp;ved=2ahUKEwjUoP_Hx-fzAhUO3hoKHU5kAdMQFnoECAQQAQ&amp;usg=AOvVaw3KP0jTFlo_uwZKP07-D1jX\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Adafruit LIS3MDL ID 4479\">Adafruit<\/a>. Ce capteur r\u00e9cent utilise le bus I2C ou le bus SPI pour communiquer. Plusieurs biblioth\u00e8ques sont disponibles.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Le calibrage du magn\u00e9tom\u00e8tre<\/h3>\n\n\n\n<p>Le LIS3MDL est calibr\u00e9 en usine pour la sensibilit\u00e9 et le niveau z\u00e9ro-gauss. Les facteurs correctifs sont stock\u00e9s dans une m\u00e9moire non volatile, interne au capteur, et \u00e0 chaque mise sous tension, ils sont charg\u00e9s dans les registres internes pour \u00eatre pris en compte durant l&rsquo;utilisation. Ce calibrage particulier n&rsquo;est donc pas \u00e0 refaire par l&rsquo;utilisateur.<\/p>\n\n\n\n<p>Par contre, un calibrage particuli\u00e8rement soigneux doit \u00eatre r\u00e9alis\u00e9 par l&rsquo;utilisateur, afin de prendre en compte l&rsquo;environnement magn\u00e9tique particulier du capteur, \u00e0 son emplacement d\u00e9finitif dans l&rsquo;avion. En effet, cet environnement peut perturber plus ou moins s\u00e9v\u00e8rement le champ magn\u00e9tique terrestre qui seul nous int\u00e9resse. <\/p>\n\n\n\n<p>Il existe deux sources de perturbations magn\u00e9tiques, dites fer-dur et fer-doux (hard iron and soft iron). Pour faire simple, fer dur d\u00e9signe les objets qui produisent un champ magn\u00e9tique, par exemple des aimants permanents ou des conducteurs o\u00f9 circule un courant \u00e9lectrique. Le fer doux d\u00e9signe certains m\u00e9taux comme le fer ou le nickel qui, bien que non aimant\u00e9s, sont capables de d\u00e9vier les lignes du champ magn\u00e9tique terrestre. <\/p>\n\n\n\n<p>Il existe sur Internet de tr\u00e8s nombreux sites expliquant 1) la th\u00e9orie de ces perturbations, 2) les techniques de calibrage et 3) les m\u00e9thodes de compensation. Sans entrer dans des th\u00e9ories math\u00e9matiques complexes, qui nous d\u00e9passent, nous allons simplement aborder de fa\u00e7on tr\u00e8s pratique les points 2 et 3, ce qui pourra aider le lecteur \u00e0 calibrer n&rsquo;importe quel magn\u00e9tom\u00e8tre, c&rsquo;est-\u00e0-dire d\u00e9terminer les coefficients n\u00e9cessaires \u00e0 la compensation.<\/p>\n\n\n\n<p>Puis nous expliquerons comment introduire ces coefficients de compensation dans un algorithme, afin d&rsquo;obtenir un cap magn\u00e9tique exact, malgr\u00e9 les perturbations fer dur et fer doux de l&rsquo;environnement du magn\u00e9tom\u00e8tre. Charge \u00e0 l&rsquo;utilisateur de tenir ensuite compte de la d\u00e9clinaison du lieu o\u00f9 il vole pour calculer le cap g\u00e9ographique.<\/p>\n\n\n\n<p>Il va sans dire que la plus \u00e9l\u00e9mentaire des pr\u00e9cautions consiste surtout \u00e0 installer le magn\u00e9tom\u00e8tre dans l&rsquo;avion le plus loin possible de toutes les sources de perturbations. Par exemple dans un saumon d&rsquo;aile, \u00e0 la condition qu&rsquo;il n&rsquo;y circule pas de courants intermittents de tr\u00e8s forte intensit\u00e9, par exemple pour alimenter des feux \u00e0 \u00e9clats&#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La proc\u00e9dure de calibrage<\/h3>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p>Elle consiste \u00e0 recueillir, dans l&rsquo;environnement futur du magn\u00e9tom\u00e8tre, le plus grand nombre possible de mesures du champ magn\u00e9tique, sur les 3 axes, et dans toutes les positions possibles du capteur. Il faut pour cela, apr\u00e8s connexion du magn\u00e9tom\u00e8tre \u00e0 un microcontr\u00f4leur (Arduino, Teensy, ou autre), uploader un sketch tr\u00e8s simple qui envoie sur le terminal de l&rsquo;IDE Arduino les valeurs brutes du champ magn\u00e9tique sur les 3 axes.<\/p>\n\n\n\n<p>Toutes les biblioth\u00e8ques proposent ce type de sketch en exemple. Il faut adapter le sketch pour obtenir en sortie des donn\u00e9es convenablement format\u00e9es pour l&rsquo;outil qu&rsquo;on va ensuite utiliser pour calculer les coefficients. Puis il faut lancer le sketch et faire tourner manuellement le capteur autour de tous ses axes, pendant au moins 30 \u00e0 60 secondes.  Il suffit ensuite de faire un copier-coller du contenu de l&rsquo;\u00e9cran du terminal, et de l&rsquo;enregistrer dans un fichier \u00ab\u00a0txt\u00a0\u00bb, on obtient par exemple ceci :<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-c58bf01e-0c00-4acb-a93c-c46cd29a8297\" href=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/data_pour_Magneto12.txt\">data_pour_Magneto12<\/a><a href=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/data_pour_Magneto12.txt\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-c58bf01e-0c00-4acb-a93c-c46cd29a8297\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Dans cet exemple, l&rsquo;outil qui sera utilis\u00e9 pour calculer les coefficients de calibration est le logiciel Magneto 1.2, t\u00e9l\u00e9chargeable <a href=\"http:\/\/esprtk.wap.sh\/download\/magneto12_Calibration_Helper.zip\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Download Magneto v1.2\">ici<\/a>. Le fichier txt doit \u00eatre format\u00e9 (par exemple avec NotePad++, ou n&rsquo;importe quel logiciel de traitement de texte et la fonction \u00ab\u00a0rechercher-remplacer\u00a0\u00bb) pour contenir sur chaque ligne les valeurs du champ magn\u00e9tique, respectivement sur les axes x, y et z, simplement s\u00e9par\u00e9es par un espace.<\/p>\n\n\n\n<p>Une fois les donn\u00e9es enregistr\u00e9es, il suffit de lancer Magneto 1.2, et de lui indiquer l&#8217;emplacement du fichier texte \u00e0 traiter. Plus d&rsquo;explications <a href=\"https:\/\/www.navsparkforum.com.tw\/viewtopic.php?t=1673\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Magneto 1.2\">ici<\/a>, notamment pour la saisie \u00e0 effectuer dans la case \u00ab\u00a0Norm of Magnetic or Gravitational Field\u00a0\u00bb. Il faut proc\u00e9der par approximations successives, jusqu&rsquo;\u00e0 ce que la moyenne des 3 cases en diagonale entour\u00e9es en rouge sur la copie d&rsquo;\u00e9cran ci-dessous (Fig. 2) soit la plus proche possible de 1.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"694\" height=\"637\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Magneto12_screenshot-2.jpg\" alt=\"\" class=\"wp-image-704\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Magneto12_screenshot-2.jpg 694w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/Magneto12_screenshot-2-300x275.jpg 300w\" sizes=\"auto, (max-width: 694px) 85vw, 694px\" \/><figcaption class=\"wp-element-caption\"> Figure 2 : Copie d&rsquo;\u00e9cran de Magneto 1.2 <\/figcaption><\/figure>\n\n\n\n<p>On a ainsi dans le cadre vert de la figure 2 tous les coefficients de calibrage qu&rsquo;il faudra introduire \u00e0 l&rsquo;\u00e9tape suivante dans le sketch exploitant le magn\u00e9tom\u00e8tre, afin de parfaitement compenser les distorsions fer dur et fer doux. <\/p>\n\n\n\n<p>On peut obtenir ces coefficients avec un autre logiciel : MotionCal, t\u00e9l\u00e9chargeable <a href=\"https:\/\/www.pjrc.com\/store\/prop_shield.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Download PJRC MotionCal\">ici<\/a>. En fonction du syst\u00e8me d&rsquo;exploitation utilis\u00e9 et des \u00e9ventuelles protections antivirus, MotionCal peut parfois \u00eatre un peu \u00ab\u00a0r\u00e9tif\u00a0\u00bb au t\u00e9l\u00e9chargement, sans doute parce qu&rsquo;il s&rsquo;agit d&rsquo;un fichier ex\u00e9cutable h\u00e9berg\u00e9 sur une page non s\u00e9curis\u00e9e du site PJRC (le fabricant des cartes Teensy). En copiant et collant l&rsquo;URL de la page de t\u00e9l\u00e9chargement dans un nouvel onglet du navigateur, cela r\u00e8gle g\u00e9n\u00e9ralement la question.<\/p>\n\n\n\n<p> (http:\/\/www.pjrc.com\/teensy\/beta\/imuread\/MotionCal.exe).<\/p>\n\n\n\n<p>Le principe de MotionCal est l\u00e9g\u00e8rement diff\u00e9rent. Ce logiciel exploite en temps r\u00e9el les donn\u00e9es du magn\u00e9tom\u00e8tre, re\u00e7ues sur le port s\u00e9rie, sans avoir besoin de les enregistrer dans un fichier. Il faut pour cela fermer le terminal de l&rsquo;IDE Arduino, et indiquer dans MotionCal quel port s\u00e9rie utiliser. Il s&rsquo;agit de celui o\u00f9 est connect\u00e9e la carte Arduino ou Teensy.<\/p>\n\n\n\n<p>Le formatage de la sortie des donn\u00e9es vers le port s\u00e9rie est un peu plus compliqu\u00e9 qu&rsquo;avec Magneto 1.2, car MotionCal est pr\u00e9vu pour recevoir les donn\u00e9es d&rsquo;une IMU 9 DOF (acc\u00e9l\u00e9rom\u00e8tre triaxial + gyrom\u00e8tre triaxial + magn\u00e9tom\u00e8tre triaxial). Si on prend la premi\u00e8re ligne du fichier pr\u00e9vu pour Magn\u00e9to 1.2, \u00e0 savoir : \u00ab\u00a0-52.27 -8.07 -40.49\u00a0\u00bb, son formatage pour MotionCal serait : \u00ab\u00a0raw:0,0,0,0,0,0,523,81,405\u00a0\u00bb. Les valeurs relev\u00e9es sur les 3 axes du magn\u00e9tom\u00e8tre sont multipli\u00e9es par 10 et arrondies \u00e0 l&rsquo;entier le plus proche, pr\u00e9c\u00e9d\u00e9es par 6 z\u00e9ros, et s\u00e9par\u00e9es par des virgules, avec le mot raw en d\u00e9but de chaque ligne. <\/p>\n\n\n\n<p>L&rsquo;exemple imucal.ino de la biblioth\u00e8que Adafruit pour le LIS3MDL met en \u0153uvre ce formatage particulier. Lors des mouvements de rotation imprim\u00e9s au magn\u00e9tom\u00e8tre pour le calibrage, on voit progressivement se dessiner une sph\u00e8re dans la fen\u00eatre graphique de MotionCal. Quand la sph\u00e8re est compl\u00e8te et centr\u00e9e, on peut arr\u00eater la proc\u00e9dure et relever les valeurs figurant dans le cadre vert, voir la figure 3.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"868\" height=\"647\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/MotionCal_screenshot.jpg\" alt=\"\" class=\"wp-image-711\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/MotionCal_screenshot.jpg 868w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/MotionCal_screenshot-300x224.jpg 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/MotionCal_screenshot-768x572.jpg 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Figure 3 : capture d&rsquo;\u00e9cran de MotionCal.<\/figcaption><\/figure>\n\n\n\n<p>Les deux outils, Magn\u00e9to v1.2 et MotionCal, fournissent chacun deux matrices de nombres d\u00e9cimaux ; leur comparaison montre que les deux logiciels fournissent des coefficients quasiment identiques. Il reste \u00e0 exploiter ces coefficients dans le logiciel d&rsquo;application utilisant le magn\u00e9tom\u00e8tre, de fa\u00e7on \u00e0 r\u00e9aliser la compensation fer dur et fer doux.<\/p>\n\n\n\n<p>On peut bien s\u00fbr objecter \u00e0 cette proc\u00e9dure de calibrage qu&rsquo;elle ne concerne que le magn\u00e9tom\u00e8tre lui-m\u00eame, avec l&rsquo;\u00e9ventuel microcontr\u00f4leur qui lui serait directement rattach\u00e9, ainsi que le bo\u00eetier qui prot\u00e8ge l&rsquo;ensemble, avec la connectique, mais avant fixation \u00e0 la structure de l&rsquo;avion. Cette derni\u00e8re peut en effet g\u00e9n\u00e9rer \u00e9galement des perturbations magn\u00e9tiques.  <\/p>\n\n\n\n<p>Mais il n&rsquo;est g\u00e9n\u00e9ralement pas possible de faire tourner rapidement l&rsquo;ensemble de l&rsquo;avion sur ses trois axes, sauf \u00e9volutions serr\u00e9es en voltige. D&rsquo;o\u00f9 l&rsquo;int\u00e9r\u00eat de choisir soigneusement l&#8217;emplacement du magn\u00e9tom\u00e8tre, le plus \u00e0 distance possible des perturbations magn\u00e9tiques. <\/p>\n\n\n\n<p>Il est cependant possible de r\u00e9aliser en vol un enregistrement des donn\u00e9es brutes du magn\u00e9tom\u00e8tre, dans toutes les positions possibles de l&rsquo;avion en fonction de son domaine de vol, et dans tous les azimuts. Apr\u00e8s le vol, il faut soumettre cet enregistrement \u00e0 Magneto 1.2 ou \u00e0 MotionCal, pour voir si les coefficients ainsi obtenus sont diff\u00e9rents de ceux obtenus en faisant simplement tourner manuellement le bo\u00eetier du magn\u00e9tom\u00e8tre comme d\u00e9crit ci-dessus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">La proc\u00e9dure de compensation fer dur et fer doux<\/h3>\n\n\n\n<p>Pour appliquer les coefficients de calibration obtenus \u00e0 l&rsquo;\u00e9tape pr\u00e9c\u00e9dente, il faut faire le produit d&rsquo;une matrice 3&#215;3 par une matrice 3&#215;1. Le lecteur pourra se r\u00e9f\u00e9rer \u00e0 un cours \u00e9l\u00e9mentaire de calcul matriciel (par exemple <a href=\"http:\/\/mathematiques.daval.free.fr\/IMG\/pdf\/Calcul_matriciel_Cours.pdf\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Calcul matriciel\">ici<\/a> ou <a href=\"https:\/\/www.lyceedadultes.fr\/sitepedagogique\/documents\/math\/mathTermES\/geraldine\/01_Les_Matrices_cours.pdf\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Calcul matriciel\">l\u00e0<\/a>) pour comprendre l&rsquo;algorithme.<\/p>\n\n\n\n<p>Le calcul \u00e0 r\u00e9aliser est le suivant :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"761\" height=\"175\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation.jpg\" alt=\"\" class=\"wp-image-716\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation.jpg 761w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation-300x69.jpg 300w\" sizes=\"auto, (max-width: 761px) 85vw, 761px\" \/><\/figure>\n<\/div>\n\n\n<p> o\u00f9 Xc, Yc et Zc sont les valeurs compens\u00e9e, C11 \u00e0 C33, ainsi que Cx, Cy et Cz sont les coefficients qui ont \u00e9t\u00e9 calcul\u00e9s par MotionCal ou Magneto 1.2, et X, Y, et Z sont les valeurs brutes issues du magn\u00e9tom\u00e8tre.<\/p>\n\n\n\n<p>Si on reprend par exemple les valeurs brutes cit\u00e9es plus haut, \u00e0 savoir  \u00ab\u00a0-52.27 -8.07 -40.49\u00a0\u00bb , et qu&rsquo;on veut leur appliquer une compensation avec les coefficients de la figure 3, cela donne :<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"902\" height=\"156\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation2-1.jpg\" alt=\"\" class=\"wp-image-720\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation2-1.jpg 902w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation2-1-300x52.jpg 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/10\/matrix_calculation2-1-768x133.jpg 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n<\/div>\n\n\n<p>D&rsquo;o\u00f9 :<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\" style=\"line-height:1\">Xc= 0,985 x  (-52,27+30,74) + 0,032 x (-8,07-1,88) + 0,003 x (-40,49 + 6,22) = -21,63<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\" style=\"line-height:1\">Yc= 0,032 x  ( -52,27+30,74 ) + 0,988 x ( -8,07-1,88 ) -0,018 x ( -40,49 + 6,22 ) = -9,90<\/p>\n\n\n\n<p class=\"has-text-align-center has-small-font-size\" style=\"line-height:1\">Zc = 0,003 x ( -52,27+30,74 ) -0,018 x ( -8,07-1,88 ) + 1,029 x ( -40,49 + 6,22 ) = -35,15<\/p>\n\n\n\n<p>Exemple du code correspondant :<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:12px\"><code>#include &lt;Adafruit_LIS3MDL.h&gt;\nAdafruit_LIS3MDL lis3mdl;\n#define LIS3MDL_ADDRESS 0x1C\n\n\/\/ Variables pour stocker les donn\u00e9es brutes du magn\u00e9tom\u00e8tre\nfloat magx, magy, magz;\n\n\/\/ Donn\u00e9es correctives issues de la calibration du magn\u00e9tom\u00e8tre. Ces donn\u00e9es sont applicables \u00e0 des mesures en \u00b5Tesla.\nfloat MagOffset&#91;3] = {-30.74, 1.88, -6.22}; \/\/ Offsets pour les axes x, y et z\nfloat mCal&#91;3]&#91;3] = \n{\n  {+0.985, +0.032, +0.003},\n  {+0.032, +0.988, -0.018},\n  {+0.003, -0.018, +1.029}\n};\n\n\/\/ Variables pour stocker les donn\u00e9es magn\u00e9tiques corrig\u00e9es\nfloat magxc, magyc, magzc;\nfloat capmagnetique;\n\nvoid setup() {\nlis3mdl.begin_I2C(LIS3MDL_ADDRESS, &amp;Wire1);\n}\n\nvoid loop() {\nlis3mdl.read();      \/\/ Acquisition de X, Y et Z \n  magx = lis3mdl.x\/68.42; \/\/Conversion des donn\u00e9es digitale brutes en \u00b5Tesla\n  magy = lis3mdl.y\/68.42; \/\/voir datasheet LIS3MDL p 8\n                          \/\/ (https:\/\/www.st.com\/resource\/en\/datasheet\/lis3mdl.pdf)\n  magz = lis3mdl.z\/68.42;\n  \n\/\/ Calcul du produit des matrices\n  magxc = mCal&#91;0]&#91;0]*(magx-MagOffset&#91;0])+ mCal&#91;0]&#91;1]*(magy-MagOffset&#91;1]) + mCal&#91;0]&#91;2]*(magz-MagOffset&#91;2]);\n  magyc = mCal&#91;1]&#91;0]*(magx-MagOffset&#91;0])+ mCal&#91;1]&#91;1]*(magy-MagOffset&#91;1]) + mCal&#91;1]&#91;2]*(magz-MagOffset&#91;2]);\n  magzc = mCal&#91;2]&#91;0]*(magx-MagOffset&#91;0])+ mCal&#91;2]&#91;1]*(magy-MagOffset&#91;1]) + mCal&#91;2]&#91;2]*(magz-MagOffset&#91;2]);\n\n}<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Le calcul du cap magn\u00e9tique<\/h3>\n\n\n\n<p>Une fois le magn\u00e9tom\u00e8tre calibr\u00e9, et les coefficients de calibration appliqu\u00e9s aux valeurs brutes, on a les \u00e9l\u00e9ments pour calculer un cap magn\u00e9tique.<\/p>\n\n\n\n<p>Dans le cas le plus simple o\u00f9 le magn\u00e9tom\u00e8tre est strictement horizontal, l&rsquo;axe z est vertical et sa composante de champ magn\u00e9tique n&rsquo;intervient pas dans le calcul. Le cap magn\u00e9tique (en degr\u00e9s, de 0 \u00e0 360) peut alors \u00eatre obtenu tr\u00e8s simplement par les deux lignes de code suivantes :<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:12px\"><code>capmagnetique = atan2(magyc,magxc)*(180\/PI);\nif (capmagnetique&lt;0) capmagnetique+=360;<\/code><\/pre>\n\n\n\n<p>Mais ce cas simple n&rsquo;est pas adapt\u00e9 \u00e0 l&rsquo;avion o\u00f9 il faut prendre en compte les angles de roulis et de tangage, et donc la mesure selon l&rsquo;axe z du champ magn\u00e9tique. Dans un avion, les angles de roulis et de tangage sont transmis par l&rsquo;AHRS de l&rsquo;EFIS. Il ne faudrait pas se fier aux indications d&rsquo;un simple acc\u00e9l\u00e9rom\u00e8tre, car en virage, la force centrifuge ne permettrait pas \u00e0 ce dernier de fournir une r\u00e9f\u00e9rence verticale dans le rep\u00e8re terrestre.<\/p>\n\n\n\n<p>Avant de calculer le cap magn\u00e9tique, il faut donc pr\u00e9alablement effectuer un calcul de compensation pour les inclinaisons de l&rsquo;avion selon les axes de roulis et de tangage (tilt compensation). Ce calcul permet de d\u00e9terminer les deux composantes Xh et Yh dans un plan horizontal, en fonction des composantes triaxiales mesur\u00e9es et calibr\u00e9es plus haut, Xc, Yc et Zc.<\/p>\n\n\n\n<p>Les \u00e9quations sont les suivantes :<\/p>\n\n\n\n<p style=\"line-height:1\">Xh = Xc * Cos(pitch) + Zc * Sin(pitch)<\/p>\n\n\n\n<p style=\"line-height:1\">Yh = Xc * sin(roll) * sin(pitch) + Yc * cos(roll) &#8211; Zc * Sin(roll) * Cos(pitch)<\/p>\n\n\n\n<p>Et le code permettant d&rsquo;obtenir un cap magn\u00e9tique exact en fonction de l&rsquo;attitude de l&rsquo;avion et des donn\u00e9es calibr\u00e9es du magn\u00e9tom\u00e8tre devient donc:<\/p>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-size:12px\"><code>Xh = magxc * cos(pitch) + magzc * sin(pitch);\nYh = magxc * sin(roll) * sin(pitch) + magyc * cos(roll) - magzc * sin(roll) * cos(pitch);\ncapmagnetique = atan2(Yh,Xh)*(180\/PI);\nif (capmagnetique&lt;0) capmagnetique+=360;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">La r\u00e9alisation pratique du compas digital<\/h3>\n\n\n\n<p>Dans leur tr\u00e8s grande majorit\u00e9, les magn\u00e9tom\u00e8tres ont une sortie I2C et\/ou SPI, tout comme le LIS3MDL. Ces interfaces ne sont pas pr\u00e9vues pour faire transiter des signaux sur une grande longueur. On a vu par ailleurs qu&rsquo;un bon emplacement devait se trouver \u00e0 distance des perturbations magn\u00e9tiques, notamment celles li\u00e9es au moteur et au tableau de bord. <\/p>\n\n\n\n<p>Pour ces raisons, nous avons choisi d&rsquo;associer, dans le m\u00eame bo\u00eetier, le magn\u00e9tom\u00e8tre et un microcontr\u00f4leur. Ce dernier est charg\u00e9 de transmettre les mesures au bo\u00eetier principal de l&rsquo;EFIS, situ\u00e9 sur le tableau de bord, via un CAN bus. En effet, ce bus tr\u00e8s rapide autorise les grandes longueurs, avec une excellente immunit\u00e9 face aux interf\u00e9rences \u00e9lectromagn\u00e9tiques.<\/p>\n\n\n\n<p>Le CAN Bus impl\u00e9ment\u00e9 dans notre projet est particuli\u00e8rement simple, il comporte pour l&rsquo;instant seulement six n\u0153uds, \u00e0 savoir le module magn\u00e9tom\u00e8tre distant dont il est question sur cette page, le module <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/efis\/\" title=\"EFIS\">EFIS<\/a>, le module <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/lahrs\/\" title=\"AHRS\">AHRS<\/a>, <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/ems-engine-monitoring-system\/\" title=\"EMS\">l&rsquo;EMS <\/a>, le <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/micro-ems-teensy\/\" title=\"Micro-EMS\">micro-EMS<\/a>, et <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/enregistreur-de-vol\/\" title=\"Enregistreur de vol\">l&rsquo;enregistreur de vol ESP32<\/a>. Nous nous sommes donc affranchis des lourdes contraintes et pr\u00e9conisations du protocole <a href=\"https:\/\/www.stockflightsystems.com\/canaerospace.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"CANaerospace\">CANaerospace<\/a>.<\/p>\n\n\n\n<p>L&#8217;emplacement choisi dans un saumon d&rsquo;aile est \u00e9galement propice \u00e0 l&rsquo;installation d&rsquo;un capteur de temp\u00e9rature et d&rsquo;humidit\u00e9. Ce dernier est n\u00e9cessaire au calcul de l&rsquo;altitude-densit\u00e9. Nous avons fait le choix du module Adafruit \u00ab\u00a0SHT-30 Mesh-protected Weather-proof Temperature\/Humidity Sensor\u00a0\u00bb, <a href=\"https:\/\/www.adafruit.com\/product\/4099\" target=\"_blank\" rel=\"noopener\" title=\"Adafruit temperature and humidity sensor\">product  ID 4099<\/a>.<\/p>\n\n\n\n<p>La carte microcontr\u00f4leur est une Teensy 4.0, associ\u00e9e \u00e0 un transceiver CAN bus MCP2562EP. Les connexions au CAN bus et au capteur de temp\u00e9rature et d&rsquo;humidit\u00e9 se font par une prise SUB-D 9 broches.<\/p>\n\n\n\n<p>Tout comme le module AHRS, le module compas digital doit \u00eatre parfaitement align\u00e9 avec les trois axes de roulis, de tangage et de lacet de l\u2019avion en ligne de vol horizontal rectiligne. Pour cela, dans un hangar ou au parking, il faut mettre l&rsquo;installation \u00e9lectrique de l&rsquo;avion sous tension, puis caler tr\u00e8s pr\u00e9cis\u00e9ment en hauteur les roues de l&rsquo;avion pour que l&rsquo;horizon artificiel soit parfaitement horizontal. Un simple niveau \u00e0 bulle est alors suffisant pour caler le module magn\u00e9tom\u00e8tre horizontalement \u00e0 0,1\u00b0 pr\u00e8s en tangage comme en roulis (fig. 4).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2024\/03\/CalageMagnetometre.jpg\" alt=\"\" class=\"wp-image-4163\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2024\/03\/CalageMagnetometre.jpg 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2024\/03\/CalageMagnetometre-300x225.jpg 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2024\/03\/CalageMagnetometre-768x576.jpg 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Figure 4 : proc\u00e9dure d&rsquo;alignement du module distant magn\u00e9tom\u00e8tre (dans son bo\u00eetier ABS) en bout d&rsquo;aile gauche.<\/figcaption><\/figure>\n<\/div>\n\n\n<p>L\u2019orientation du module compas digital (fig. 5) est la suivante : les cartes Teensy et LIS3MDL sont sur le dessus, la LIS3MDL vers l&rsquo;avant, et le connecteur D-SUB est \u00e0 droite.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"655\" src=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-1024x655.jpg\" alt=\"\" class=\"wp-image-1256\" srcset=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-1024x655.jpg 1024w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-300x192.jpg 300w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-768x491.jpg 768w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-1536x982.jpg 1536w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule-1200x767.jpg 1200w, https:\/\/avionicsduino.com\/wp-content\/uploads\/2021\/11\/RemoteModule.jpg 1600w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><figcaption class=\"wp-element-caption\">Figure 5 : EFIS remote module<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8aa31bbb-bf77-446a-bfd9-e103e2faf85d\" href=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2023\/04\/EFIS_Remote_Magnetometer_Module_Kicad_Files.zip\">EFIS Module Magn\u00e9tom\u00e8tre distant : fichiers Kicad<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-6aa38d7b-6ef4-47a9-8aab-d33a7e557e7c\" href=\"https:\/\/avionicsduino.com\/wp-content\/uploads\/2023\/05\/EFIS_Remote_Module_Gerber_and_drill_files.zip\">EFIS Module Magn\u00e9tom\u00e8tre distant : fichiers Gerber_et per\u00e7age<br><\/a><\/div>\n\n\n\n<p style=\"font-size:14px\"><a href=\"https:\/\/github.com\/bfrmd\/EFIS-Remote-Module-AvionicsDuino\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"T\u00e9l\u00e9charger le code source\">T\u00e9l\u00e9charger le code source sur GitHub <\/a><\/p>\n<\/div>\n<\/div>\n\n\n\n<h3 class=\"wp-block-heading\">R\u00e9sultats<\/h3>\n\n\n\n<p>Ce module distant, magn\u00e9tom\u00e8tre et capteur de temp\u00e9rature et d&rsquo;humidit\u00e9, a \u00e9t\u00e9 test\u00e9 en vol avec succ\u00e8s. Par rapport \u00e0 l&rsquo;EFIS Dynon mont\u00e9 sur le tableau de bord, les caps magn\u00e9tiques sont identiques \u00e0 plus ou moins 5 degr\u00e9s, la temp\u00e9rature ext\u00e9rieure est identique \u00e0 plus ou moins 0,5 \u00b0C. L&rsquo;altitude-densit\u00e9, dont le calcul fait appel \u00e0 la temp\u00e9rature ext\u00e9rieure et \u00e0 l&rsquo;humidit\u00e9 relative, est plus difficilement comparable avec celle affich\u00e9e par le Dynon qui ne comporte pas de capteur d&rsquo;humidit\u00e9, elle est g\u00e9n\u00e9ralement dans une fourchette de plus ou moins 250 pieds avec celle du Dynon, ce qui est parfaitement coh\u00e9rent avec l&rsquo;influence de l&rsquo;humidit\u00e9 relative.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>(Le compas digital : page mise \u00e0 jour par Benjamin le 14 ao\u00fbt 2024) Le compas magn\u00e9tique, le chronom\u00e8tre, le sextant et les cartes ont longtemps \u00e9t\u00e9 les seuls instruments de navigation. Avec le loch dans la marine, puis l&rsquo;an\u00e9mom\u00e8tre dans l&rsquo;a\u00e9ronautique, pour conna\u00eetre la vitesse et estimer la distance parcourue en fonction du temps &hellip; <a href=\"https:\/\/avionicsduino.com\/index.php\/fr\/le-compas-digital\/\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Le compas digital&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"open","ping_status":"open","template":"","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"class_list":["post-658","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/658","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/comments?post=658"}],"version-history":[{"count":116,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/658\/revisions"}],"predecessor-version":[{"id":5028,"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/pages\/658\/revisions\/5028"}],"wp:attachment":[{"href":"https:\/\/avionicsduino.com\/index.php\/wp-json\/wp\/v2\/media?parent=658"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}