{"id":1425,"date":"2024-09-10T06:08:27","date_gmt":"2024-09-10T04:08:27","guid":{"rendered":"https:\/\/labopothier.com\/?p=1425"},"modified":"2025-11-26T15:01:11","modified_gmt":"2025-11-26T14:01:11","slug":"activite-arduino-python-controler-un-moteur-pas-a-pas-bipolaire-avec-arduino","status":"publish","type":"post","link":"https:\/\/labopothier.com\/index.php\/2024\/09\/10\/activite-arduino-python-controler-un-moteur-pas-a-pas-bipolaire-avec-arduino\/","title":{"rendered":"ACTIVITE ARDUINO\/PYTHON : Contr\u00f4ler un moteur pas \u00e0 pas bipolaire avec Arduino"},"content":{"rendered":"\n<p><strong>Objectif<\/strong> : Explorer les diff\u00e9rentes options pour contr\u00f4ler un moteur pas \u00e0 pas bipolaire. Pour chaque exemple, nous nous limitons \u00e0 un seul usage (un tour horaire, puis  deux tours anti-horaires). Il existe de nombreux articles \u00e0 ce sujet, celui-ci a pour but de compiler les informations de la mani\u00e8re la plus simple possible, et en essayant de ne pas avoir recours aux biblioth\u00e8ques.<\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 22%\"><div class=\"wp-block-media-text__content\">\n<ul class=\"wp-block-list\">\n<li>Le moteur utilis\u00e9 ici est un <strong>moteur bipolaire<\/strong> <strong>200 pas<\/strong> (angle pour un pas de 1,8\u00b0)<strong> NEMA 23:<\/strong> <a href=\"https:\/\/www.gotronic.fr\/art-moteur-23hs30-2804s-18357.htm\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.gotronic.fr\/art-moteur-23hs30-2804s-18357.htm<\/a><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"288\" height=\"271\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/ar-moteur-23hs30-2804s-18357.jpg\" alt=\"\" class=\"wp-image-1228 size-full\"\/><\/figure><\/div>\n\n\n\n<p>Pour comprendre le fonctionnement d&rsquo;un moteur pas \u00e0 pas, quelques explications  sur ce site : <a rel=\"noreferrer noopener\" href=\"https:\/\/electrotoile.eu\/moteur-pas-a-pas-sequence-commande-arduino.php\" target=\"_blank\">https:\/\/electrotoile.eu\/moteur-pas-a-pas-sequence-commande-arduino.php<\/a><\/p>\n\n\n\n<p>Un moteur bipolaire est constitu\u00e9 d&rsquo;un aimant permanent (<strong>rotor<\/strong>) qui tourne d&rsquo;un pas sous l&rsquo;action de deux paires de bobines (<strong>stator<\/strong>) reli\u00e9es entre elles de part et d&rsquo;autre du rotor (il n&rsquo;y a donc finalement que deux bobines car une paire de bobines reli\u00e9es en s\u00e9rie correspond \u00e0 une seule bobine !).<\/p>\n\n\n\n<p>Sans rentrer dans les d\u00e9tails (que je ne ma\u00eetrise pas !), voici les 4 \u00e9tapes pour faire tourner le moteur pas par pas :<\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-2 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"323\" height=\"241\" data-id=\"1237\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire1-3.png\" alt=\"\" class=\"wp-image-1237\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire1-3.png 323w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire1-3-300x224.png 300w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><figcaption class=\"wp-element-caption\"><strong> 1. On applique une tension aux bornes de la paire de bobines A\/C (courant de A vers C)<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" data-id=\"1240\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire2-2.png\" alt=\"\" class=\"wp-image-1240\"\/><figcaption class=\"wp-element-caption\"><strong>2. On applique une tension aux bornes de la paire de bobines B\/D (courant de B vers D)<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"323\" height=\"241\" data-id=\"1239\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire3-1.png\" alt=\"\" class=\"wp-image-1239\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire3-1.png 323w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire3-1-300x224.png 300w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><figcaption class=\"wp-element-caption\"><strong>3. On applique une tension aux bornes de la paire de bobines A\/C (courant de C vers A)<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"323\" height=\"241\" data-id=\"1238\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire4-1.png\" alt=\"\" class=\"wp-image-1238\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire4-1.png 323w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/bipolaire4-1-300x224.png 300w\" sizes=\"auto, (max-width: 323px) 100vw, 323px\" \/><figcaption class=\"wp-element-caption\"><strong>1. On applique une tension aux bornes de la paire de bobines B\/D (courant de D vers B)<\/strong><\/figcaption><\/figure>\n<figcaption class=\"blocks-gallery-caption wp-element-caption\"><strong>Les 4 \u00e9tapes pour faire tourner le rotor de 4 pas<\/strong><\/figcaption><\/figure>\n\n\n\n<p>Chacune de ces \u00e9tapes permet de faire tourner le moteur d&rsquo;un pas. Pour un moteur <strong>200 pas,<\/strong> il faudrait donc r\u00e9p\u00e9ter cette op\u00e9ration <strong>50 fois.<\/strong><\/p>\n\n\n\n<p>Pour ce moteur NEMA, l&rsquo;association des bobines A\/C correspond aux fils <strong>bleu et rouge<\/strong> et celle des bobines B\/D aux fils <strong>noir et vert<\/strong>. <\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 39%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-text-align-center has-normal-font-size\">Il est facile d&rsquo;identifier les paires de bobines \u00e0 l&rsquo;aide d&rsquo;un <strong>ohmm\u00e8tre <\/strong>(une valeur de quelques ohms devrait s&rsquo;afficher si on relie l&rsquo;ohmm\u00e8tre aux deux fils d&rsquo;une m\u00eame paire de bobines).<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img decoding=\"async\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/IMG-21271-1.jpg\" alt=\"\" class=\"wp-image-1244 size-full\"\/><\/figure><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Nous allons utiliser plusieurs types de <strong>shields <\/strong>disponibles dans le commerce.  Un <strong>shield <\/strong>est une extension de la carte Arduino (que l&rsquo;on branche par dessus la carte). Il pr\u00e9sente l&rsquo;avantage de ne pas avoir besoin de tout \u00ab\u00a0c\u00e2bler \u00e0 la main\u00a0\u00bb. Les composants sont d\u00e9j\u00e0 assembl\u00e9s entre eux et connect\u00e9s aux pins de la carte Arduino.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Remarque<\/strong><\/h3>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 37%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-text-align-center\">Pour chacune des applications dans cet article, nous avons besoin d&rsquo;une source d&rsquo;alimentation externe car l&rsquo;alimentation de la carte Arduino ne suffit pas (manque de puissance).<\/p>\n\n\n\n<p class=\"has-text-align-center\">Nous utilisons ici une <strong>alimentation stabilis\u00e9e ELC <\/strong><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img decoding=\"async\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/IMG-2128-1024x768.jpg\" alt=\"\" class=\"wp-image-1245 size-full\"\/><\/figure><\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. Utilisation d&rsquo;un driver L293 seul <u>sans shield<\/u><\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 17%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-normal-font-size\">Tout d\u2019abord, nous allons utilisons un driver sans shield (circuit int\u00e9gr\u00e9 qui permet d&rsquo;alimenter et de contr\u00f4ler les deux bobines avec deux ponts en H). Cela n\u00e9cessite plus de c\u00e2blage, mais ce type de montage peut permettre plus de souplesse dans certains cas.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/768-1.png\" alt=\"\" class=\"wp-image-1307 size-full\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/768-1.png 1000w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/768-1-300x300.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/768-1-150x150.png 150w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/768-1-768x768.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure><\/div>\n\n\n\n<p>Voici le montage :<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 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<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"724\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293-1024x724.jpg\" alt=\"\" class=\"wp-image-1315\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293-1024x724.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293-300x212.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293-768x543.jpg 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293-1536x1086.jpg 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/02\/l293.jpg 1754w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Montage pour un seul moteur pas \u00e0 pas L293D seul (sans shield)<\/strong><\/figcaption><\/figure>\n\n\n\n<pre title=\"Code Arduino pour piloter un moteur pas \u00e0 pas bipolaire (un tour horaire et deux tours anti horaires) avec L293D\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">const int pinBobine1A = 8 ;\nconst int pinBobine1C = 9 ;\nconst int pinBobine2B = 10 ;\nconst int pinBobine2D = 11 ;\n\n\nfloat Tps =8;\nint Tour=0; \/\/ D\u00e9claration variable nombre de tour\n\nvoid setup() {\n    pinMode(pinBobine1A, OUTPUT); \/\/ \n    pinMode(pinBobine1C, OUTPUT); \/\/ \n    pinMode(pinBobine2B, OUTPUT); \/\/ \n    pinMode(pinBobine2D, OUTPUT); \/\/\n\n  \n\n    Serial.begin(9600);\n}\n\n\n\n\nvoid loop(){\n    sens_normal();\n    stop();\n   delay(100);\n    sens_inverse();\n   delay(100);\n    sens_inverse();\n   delay(100);\n  \n\n\n \n}\n\nvoid sens_normal(){\n    for (Tour = 0; Tour &lt; 50; Tour++){   \/\/ Boucle pour faire 1 tour complet (Moteur 200 pas\/4 = 50)\n       \/\/ Commande moteur pas \u00e0 pas Bipolaire 4 fils en Mode Wave | Sens Normal\n       \/\/ Pas n\u00b01 | \n       digitalWrite(pinBobine1A, LOW);\n       digitalWrite(pinBobine1C, HIGH);  \n       digitalWrite(pinBobine2B, LOW);\n       digitalWrite(pinBobine2D, LOW);\n\n       delay(Tps);\n  \n      \/\/ Pas n\u00b02 | \n       digitalWrite(pinBobine1A, LOW);\n       digitalWrite(pinBobine1C, LOW);   \n       digitalWrite(pinBobine2B, LOW);\n       digitalWrite(pinBobine2D, HIGH);\n       delay(Tps); \n\n       \/\/ Pas n\u00b03 | \n       digitalWrite(pinBobine1A, HIGH);\n       digitalWrite(pinBobine1C, LOW);  \n       digitalWrite(pinBobine2B, LOW);\n       digitalWrite(pinBobine2D, LOW);\n       delay(Tps); \n\n       \/\/ Pas n\u00b04 | \n       digitalWrite(pinBobine1A, LOW);\n       digitalWrite(pinBobine1C, LOW);   \n       digitalWrite(pinBobine2B, HIGH);\n       digitalWrite(pinBobine2D, LOW);\n       delay(Tps); \n        }\n\n  \n}\n\n\nvoid sens_inverse(){\n    for (Tour = 0; Tour &lt; 50; Tour++){ \/\/ Boucle pour faire 1 tour complet (Moteur 200 pas\/4 = 50)\n      \/\/ Commande moteur pas \u00e0 pas Bipolaire 4 fils en Mode Wave | Sens Inverse\n      \/\/ Pas n\u00b01 |\n      digitalWrite(pinBobine1A, LOW);\n      digitalWrite(pinBobine1C, LOW);   \n      digitalWrite(pinBobine2B, HIGH);\n      digitalWrite(pinBobine2D, LOW);\n      delay(Tps); \n\n\n      \/\/ Pas n\u00b02 |\n      digitalWrite(pinBobine1A, HIGH);\n      digitalWrite(pinBobine1C, LOW);  \n      digitalWrite(pinBobine2B, LOW);\n      digitalWrite(pinBobine2D, LOW);\n      delay(Tps); \n\n      \/\/ Pas n\u00b03 |\n      digitalWrite(pinBobine1A, LOW);\n      digitalWrite(pinBobine1C, LOW);   \n      digitalWrite(pinBobine2B, LOW);\n      digitalWrite(pinBobine2D, HIGH);\n      delay(Tps); \n\n      \/\/ Pas n\u00b04 |\n      digitalWrite(pinBobine1A, LOW);\n      digitalWrite(pinBobine1C, HIGH);  \n      digitalWrite(pinBobine2B, LOW);\n      digitalWrite(pinBobine2D, LOW);\n      delay(Tps); \n\n      delay(Tps);\n  \n\n\n\n\n        }\n  \n}\n\nvoid stop(){\n    digitalWrite(pinBobine1A, LOW);\n     digitalWrite(pinBobine1C, LOW);  \n     digitalWrite(pinBobine2B, LOW);\n     digitalWrite(pinBobine2D, LOW);\n}\n\n  <\/code><\/pre>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Utilisation d&rsquo;un motorshield L298P<\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 20%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-normal-font-size\">L&rsquo;<strong>Arduino Motor Shield Rev3<\/strong> dispose d&rsquo;un <strong>circuit int\u00e9gr\u00e9 L298P<\/strong> qui est \u00e9quip\u00e9 de ponts en H. Ce composant permet d&rsquo;inverser les tensions au bornes des bobines et de supporter des tensions et courants \u00e9lev\u00e9s. On peut utiliser ce type de driver pour piloter un moteur pas \u00e0 pas ou aussi un moteur \u00e0 courant continu.<\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/ARDUINO_SHD_MOT_NEU.jpg\" alt=\"\" class=\"wp-image-1258 size-full\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/ARDUINO_SHD_MOT_NEU.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/ARDUINO_SHD_MOT_NEU-150x150.jpg 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure><\/div>\n\n\n\n<p>Voici le montage :<\/p>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 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<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"401\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4-1024x401.png\" alt=\"\" class=\"wp-image-1267\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4-1024x401.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4-300x117.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4-768x300.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4-1536x601.png 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-motor-shield-stepper-bipolar_bb-4.png 1626w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Montage pour un seul moteur pas \u00e0 pas L298P motorshield<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"2560\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/IMG-2131-1-scaled.jpg\" alt=\"\" class=\"wp-image-1251\"\/><\/figure>\n\n\n\n<pre title=\"Code Arduino pour piloter un moteur pas \u00e0 pas bipolaire (un tour horaire et deux tours anti horaires) pour motor shiel L293P Arduino\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/\/Parameters\n const int directionA  = 12;\n const int directionB  = 13;\n const int rateA  = 3;\n const int rateB  = 11;\n int millisBtwnSteps = 2000;\n int rate =255 ;\n void setup() {\n   \/\/Init Serial USB\n   Serial.begin(9600);\n   Serial.println(F(\"Initialize System\"));\n   \/\/Init Motor Shield\n   pinMode(directionA, OUTPUT); \/\/Initiates Motor Channel A pin\n   pinMode(directionB, OUTPUT); \/\/Initiates Motor Channel B pin\n }\n void loop() {\n testStepperMS();\n }\n void testStepperMS() { \/* function testStepperMS *\/\n   \/\/\/\/ Test stepper\n   Serial.println(\"Move stepper 1 step clockwise\");\n   stpCW(50);\n   delay(1000);\n   Serial.println(\"Move stepper 2 step counter clockwise\");\n   stpCCW(100);\n   delay(1000);\n }\n void stpCW(int nbstep) { \/* function stpCW *\/\n   \/\/\/\/ Move stepper clockwise\n   for (int i = 0; i &lt; nbstep; i++) { \n     digitalWrite(directionA, HIGH);  \/\/Set direction of CH A\n     analogWrite(rateA, 255);   \n     analogWrite(rateB, 0);   \n     delayMicroseconds(millisBtwnSteps); \n\n     digitalWrite(directionB, LOW);\/\/Set direction of CH B\n     analogWrite(rateB, 255);   \n     analogWrite(rateA, 0);   \n     delayMicroseconds(millisBtwnSteps);\n\n     digitalWrite(directionA, LOW);   \/\/Set direction of CH A\n     analogWrite(rateA, 255);   \n     analogWrite(rateB, 0);   \n     delayMicroseconds(millisBtwnSteps); \n\n     digitalWrite(directionB, HIGH);   \/\/Set direction of CH B\n     analogWrite(rateB, 255);   \n     analogWrite(rateA, 0);   \n     delayMicroseconds(millisBtwnSteps);\n \n }\n }\n void stpCCW(int nbstep) { \/* function stpCCW *\/\n   \/\/\/\/ Move stepper counter-clockwise\n   for (int i = 0; i &lt; nbstep; i++) {\n\n     digitalWrite(directionA, HIGH);   \/\/Set direction of CH A\n     analogWrite(rateA, 255);   \n     analogWrite(rateB, 0);   \n     delayMicroseconds(millisBtwnSteps);\n\n     digitalWrite(directionB, HIGH);   \/\/Set direction of CH B\n     analogWrite(rateB, 255);   \n     analogWrite(rateA, 0);   \n     delayMicroseconds(millisBtwnSteps); \n\n      digitalWrite(directionA, LOW);   \/\/Set direction of CH A\n     analogWrite(rateA, 255);   \n     analogWrite(rateB, 0);   \n     delayMicroseconds(millisBtwnSteps);\n\n     digitalWrite(directionB, LOW);   \/\/Set direction of CH B\n     analogWrite(rateB, 255);   \n     analogWrite(rateA, 0);   \n     delayMicroseconds(millisBtwnSteps);\n\n }\n }<\/code><\/pre>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Utilisation d&rsquo;un motorshield CNC Shield V3<\/strong><\/h2>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\" style=\"grid-template-columns:auto 29%\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-normal-font-size\">Le <strong>CNC Shield V3 <\/strong>est une autre carte d\u2019extension pour Arduino UNO ou Mega qui offre la particularit\u00e9 de pouvoir contr\u00f4ler 4 moteurs pas-\u00e0-pas, en branchant par dessus des drivers de type A4988. <\/p>\n\n\n\n<p><a href=\"https:\/\/www.gotronic.fr\/art-shield-cnc-pour-uno-ard-cnc-k1-27753.htm\">https:\/\/www.gotronic.fr\/art-shield-cnc-pour-uno-ard-cnc-k1-27753.htm<\/a><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"675\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-mounted-800x675-1.jpg\" alt=\"\" class=\"wp-image-1259 size-full\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-mounted-800x675-1.jpg 800w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-mounted-800x675-1-300x253.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-mounted-800x675-1-768x648.jpg 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 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<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-1024x484.png\" alt=\"\" class=\"wp-image-1260\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-1024x484.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-300x142.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-768x363.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-1536x725.png 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb.png 1626w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Montage pour un seul moteur pas \u00e0 pas (sur l&#8217;emplacement Y)<\/strong><\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Voici le code Arduino :<\/p>\n\n\n\n<pre title=\"Code Arduino pour piloter un moteur pas \u00e0 pas bipolaire (un tour horaire et deux tours anti horaires) pour motor shiel CNC \" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">const int enPin=8;\n const int stepPin = 3; \/\/Y.STEP\n const int dirPin = 6; \/\/ Y.DIR\n const int stepsPerRev=200;\n int pulseWidthMicros = 100;   \/\/ microseconds\n int millisBtwnSteps = 1000;\n void setup() {\n   Serial.begin(9600);\n   pinMode(enPin, OUTPUT);\n   digitalWrite(enPin, LOW);\n   pinMode(stepPin, OUTPUT);\n   pinMode(dirPin, OUTPUT);\n   Serial.println(F(\"CNC Shield Initialized\"));\n }\n void loop() {\n   Serial.println(F(\"Running clockwise\"));\n   digitalWrite(dirPin, HIGH); \/\/ Enables the motor to move in a particular direction\n   \/\/ Makes 200 pulses for making one full cycle rotation\n   for (int i = 0; i &lt; stepsPerRev; i++) {\n       digitalWrite(stepPin, HIGH);\n       delayMicroseconds(pulseWidthMicros);\n       digitalWrite(stepPin, LOW);\n       delayMicroseconds(millisBtwnSteps);\n   }\n   delay(1000); \/\/ One second delay\n   Serial.println(F(\"Running counter-clockwise\"));\n   digitalWrite(dirPin, LOW); \/\/Changes the rotations direction\n   \/\/ Makes 400 pulses for making two full cycle rotation\n   for (int i = 0; i &lt; 3*stepsPerRev; i++) {\n       digitalWrite(stepPin, HIGH);\n       delayMicroseconds(pulseWidthMicros);\n       digitalWrite(stepPin, LOW);\n       delayMicroseconds(millisBtwnSteps);\n   }\n   delay(1000);\n }<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Remarque<\/strong><\/p>\n\n\n\n<p>Il est possible d&rsquo;am\u00e9liorer la r\u00e9solution du moteur au 1\/2, 1\/4, 1\/8 ou 1\/16 en connectant des cavaliers (jumpers) sur les broches M0, M1 et M2. Ceci peut \u00eatre utile pour des mouvements \u00e0 faible vitesse. Ceci est appel\u00e9 le <strong>microstepping<\/strong>. Pour un tour complet, il faudrait penser \u00e0 multiplier le nombre d&rsquo;\u00e9tapes par le facteur de r\u00e9solution (2, 4, 8 ou 16) dans les boucles <strong>for<\/strong>.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"788\" height=\"818\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/Sans-titre.png\" alt=\"\" class=\"wp-image-1262\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/Sans-titre.png 788w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/Sans-titre-289x300.png 289w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/Sans-titre-768x797.png 768w\" sizes=\"auto, (max-width: 788px) 100vw, 788px\" \/><figcaption class=\"wp-element-caption\"><strong>Tableau de positionnement des jumpers pour les diff\u00e9rentes r\u00e9solutions<\/strong><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Utilisation d&rsquo;un motorshield Arduino\/Velleman L293D <\/strong><\/h2>\n\n\n\n<div class=\"wp-block-media-text alignwide has-media-on-the-right is-stacked-on-mobile\"><div class=\"wp-block-media-text__content\">\n<p class=\"has-normal-font-size\">Le <strong>Motorshield L293D <\/strong>est une autre carte d\u2019extension pour Arduino UNO ou Mega, il dispose de deux ponts en H <strong>L293D<\/strong> et d&rsquo;un registre \u00e0 d\u00e9calage (ce composant permet d&rsquo;augmenter le nombre d&rsquo;entr\u00e9es\/sorties de la carte d&rsquo;Arduino) <\/p>\n\n\n\n<p><a href=\"https:\/\/www.velleman.eu\/products\/view?id=439178&amp;country=be&amp;lang=fr\">https:\/\/www.velleman.eu\/products\/view?id=439178&amp;country=be&amp;lang=fr<\/a><\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"620\" height=\"350\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/l239d-datasheet.jpg\" alt=\"\" class=\"wp-image-1264 size-full\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/l239d-datasheet.jpg 620w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/l239d-datasheet-300x169.jpg 300w\" sizes=\"auto, (max-width: 620px) 100vw, 620px\" \/><\/figure><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Remarque<\/strong><\/p>\n\n\n\n<p>Il est plus ais\u00e9 d&rsquo;utiliser une biblioth\u00e8que pour ce shield car l&rsquo;utilisation du registre \u00e0 d\u00e9calage complexifie le code. Nous utiliserons ici la biblioth\u00e8que d&rsquo;Adafruit <strong>AFMotor.h<\/strong>, disponible <a href=\"https:\/\/github.com\/adafruit\/Adafruit-Motor-Shield-library\" target=\"_blank\" rel=\"noreferrer noopener\">ici<\/a><\/p>\n\n\n\n<p><strong>Proc\u00e9dure d&rsquo;installation de la biblioth\u00e8que :<\/strong><\/p>\n\n\n\n<p>&#8211; Dans la page Github t\u00e9l\u00e9charger le fichier dans <strong>Code \/ Download ZIP<\/strong>. <\/p>\n\n\n\n<p>&#8211; Puis dans l\u2019application Arduino, \u00e0 partir du menu <strong>[Croquis][Inclure une librairie][Ajouter la librairie .ZIP]<\/strong>, installer la librairie \u00ab<strong>Adafruit-Motor-Shield-library-master.zip<\/strong> \u00bb<\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-group is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 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<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"509\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1-1024x509.png\" alt=\"\" class=\"wp-image-1269\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1-1024x509.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1-300x149.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1-768x382.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1-1536x764.png 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/L293D-motorshield-1.png 1626w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Montage pour un seul moteur pas \u00e0 pas L293D motorshield<\/strong><\/figcaption><\/figure>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p>Voici le code Arduino :<\/p>\n\n\n\n<pre title=\"Code Arduino pour piloter un moteur pas \u00e0 pas bipolaire (un tour horaire et deux tours anti horaires) pour motor shiel L293D\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\/\/ Adafruit Motor shield library\n \/\/ copyright Adafruit Industries LLC, 2009\n \/\/ this code is public domain, enjoy!\n# include &lt;AFMotor.h&gt;\n \/\/ Connect a stepper motor with 200 steps per revolution (1.8 degree)\n \/\/ to motor port #2 (M3 and M4)\n AF_Stepper motor(200, 2);\n void setup() {\n   Serial.begin(9600);           \/\/ set up Serial library at 9600 bps\n   Serial.println(\"Stepper test!\");\n motor.setSpeed(100);  \/\/ 100 rpm   \n }\n void loop() {\n   Serial.println(\"Running clockwise\");\n   motor.step(200, FORWARD, SINGLE); \n   delay(1000);\n Serial.println(\"Running counter-clockwise\");\n   motor.step(400, BACKWARD, SINGLE); \n   delay(1000);\n }<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>BONUS : Programmation avec Python<\/strong> <strong>du motorshield CNC Shield V3<\/strong><\/h2>\n\n\n\n<p>Vous trouverez ci-dessous un code Python permettant de faire tourner le moteur pas \u00e0 pas avec le shield cnc. Pour cela, il faut que la biblioth\u00e8que Nanpy soit t\u00e9l\u00e9vers\u00e9e pr\u00e9alablement sur la carte Arduino (pour plus de pr\u00e9cisions sur la programmation de la carte Arduino  en Python, voir l&rsquo;article <a rel=\"noreferrer noopener\" href=\"https:\/\/labopothier.com\/index.php\/2020\/04\/04\/programmer-en-python-pour-la-carte-arduino\/\" target=\"_blank\">Programmer-en-python-pour-la-carte-arduino<\/a>)<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"484\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2-1024x484.png\" alt=\"\" class=\"wp-image-1276\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2-1024x484.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2-300x142.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2-768x363.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2-1536x725.png 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/arduino-cnc-shield-v3_bb-2.png 1626w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Donc, pour ex\u00e9cuter ce code avec Python, il faut donc :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u00e9l\u00e9verser nanpy sur la carte Arduino,&nbsp; ( pour rappel, si ce n&rsquo;est pas fait, dans&nbsp; <strong>[Croquis][Inclure une librairie][Ajouter la librairie .ZIP]<\/strong>, installer la librairie \u00ab <strong>Nanpy_Arduino.zip<\/strong> \u00bb biblioth\u00e8que disponible sur ce lien&nbsp; <a href=\"https:\/\/drive.google.com\/file\/d\/1ZF6odibIBuOAS1ESFEJPiq33Z3tjzOk0\/view\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/drive.google.com\/file\/d\/1ZF6odibIBuOAS1ESFEJPiq33Z3tjzOk0\/view<\/a> ) :<\/li>\n\n\n\n<li>Ex\u00e9cuter le code ci dessous<\/li>\n<\/ul>\n\n\n\n<pre title=\"Script Python pour commander un moteur pas \u00e0 pas avec le CNC driver (utilisation avec nanpy)\" class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">\n\n #########################################  IMPORTATION DES BIBLIOTHEQUES ET MODULES  #############################################################################\n import serial\n import serial.tools.list_ports # pour la communication avec le port s\u00e9rie\n from nanpy import ArduinoApi    # importation des biblioth\u00e8ques pour communication avec Arduino\n from nanpy import SerialManager\n from nanpy import Servo  # pour utiliser le servomoteur\n from time import sleep    # pour faire des \"pauses\" dans l'ex\u00e9cution du programme\n \n\n #########################################  COMMUNICATION AVEC CARTE ARDUINO ET DEFINITION DES BROCHES ET VARIABLES  #######################################################\n # Fonction pour la r\u00e9cup\u00e9ration du port COM venant de la carte Arduino\n def recup_port_Arduino() :\n     ports = list(serial.tools.list_ports.comports())\n     for p in ports:\n         if 'Arduino' in p.description or  'CDC'in p.description or 'USB' in p.description :\n             mData = serial.Serial(p.device,9600)\n     print(mData.is_open) # Affiche et v\u00e9rifie que le port est ouvert\n     return (mData.name) # Retourne le nom du port\n \n\n port = recup_port_Arduino()\n connection = SerialManager(device=port) #indiquer le bon port de la carte Arduino\n \n\n a = ArduinoApi(connection=connection) #connection \u00e0 la carte Arduino, on pr\u00e9c\u00e9dera chaque instruction Arduino par a. (exemple a.pinMode(2,a.OUTPUT)\n \n\n \n\n \n\n \n\n \n\n #########################################   CODE ARDUINO  EN LANGAGE PYTHON    #################################################################################\n stepPin = 3 #Y.STEP\n dirPin = 6 # Y.DIR\n enPin=8\n stepsPerRev=200\n \n\n \n\n \n\n \n\n a.pinMode(stepPin, a.OUTPUT)\n a.pinMode(dirPin, a.OUTPUT)\n a.pinMode(enPin, a.OUTPUT)\n a.digitalWrite(enPin, a.LOW)\n print(\"CNC Shield Initialized\")\n \n\n while True:\n     print(\"Running clockwise\")\n     a.digitalWrite(6, a.HIGH) # Enables the motor to move in a particular direction\n     #Makes 200 pulses for making one full cycle rotation\n \n\n     for i in range (int(stepsPerRev\/2)):\n         a.analogWrite(stepPin, 25)\n \n\n \n\n     a.analogWrite(stepPin, 0)\n     sleep(1)#One second delay\n     print(\"Running counter_clockwise\")\n     a.digitalWrite(dirPin, a.LOW) #Changes the rotations direction\n \n\n     a.analogWrite(stepPin, 0)\n \n\n     # #Makes 400 pulses for making two full cycle rotation\n     for i in range(stepsPerRev):\n         a.analogWrite(stepPin, 25)\n \n\n     a.analogWrite(stepPin, 0)\n     sleep(1) #One second delay\n \n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><br><strong>Quelques remarques &#8230; car j&rsquo;ai eu des difficult\u00e9s \u00e0 obtenir des r\u00e9sultats ! <\/strong><\/p>\n\n\n\n<p>Les contr\u00f4les \u00e0 l&rsquo;oscilloscope m&rsquo;ont permis d&rsquo;y voir plus clair dans les d\u00e9fauts :<\/p>\n\n\n\n<p><br>&#8211; Je n&rsquo;arrive pas \u00e0 obtenir une vitesse \u00e9lev\u00e9e car en passant par nanpy, les p\u00e9riodes des impulsions n&rsquo;arrivent pas \u00e0 descendre en dessous de 30 ms ! On pourrait se contenter d&rsquo;une vitesse lente mais le moteur \u00e9met un bruit d\u00e9sagr\u00e9able. Pour pallier ce probl\u00e8me de bruit, il faudrait changer la r\u00e9solution du moteur, c&rsquo;est possible en ajoutant des cavaliers sur M0, M1 et M2 (voir tableau dans la section 2)<\/p>\n\n\n\n<p>&#8211; J&rsquo;ai trouv\u00e9 une solution alternative pour retrouver de la vitesse : utiliser l&rsquo;<strong>analogWrite <\/strong>au lieu du <strong>digitalWrite<\/strong>. On pourrait choisir un <strong>PWM <\/strong>avec un rapport cyclique de 10%  (analogWrite r\u00e9gl\u00e9 \u00e0 25). L&rsquo;avantage du PWM est qu&rsquo;il est r\u00e9gl\u00e9 par d\u00e9faut \u00e0 environ 500 Hz, donc une p\u00e9riode de 2 ms, ce qui permet de faire tourner assez vite le moteur \u2026 mais on perd le contr\u00f4le de la vitesse :-(. A priori la fr\u00e9quence du PWM peut se r\u00e9gler mais \u00e7a a l&rsquo;air un peu compliqu\u00e9&#8230;<\/p>\n\n\n\n<p>&#8211; Je me suis rendu compte (toujours \u00e0 l&rsquo;oscilloscope) que lorsqu&rsquo;on demande une impulsion PWM, deux sont envoy\u00e9es ! Donc il faut prendre ce facteur 2 en compte dans le script.<\/p>\n<\/blockquote>\n\n\n\n<div class=\"wp-block-media-text alignwide is-stacked-on-mobile is-vertically-aligned-center\" style=\"grid-template-columns:15% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/kisspng-computer-icons-github-github-logo-save-icon-format-5ab0fad15af349.5031683815215479853725-150x150.png\" alt=\"\" class=\"wp-image-1285 size-thumbnail\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/kisspng-computer-icons-github-github-logo-save-icon-format-5ab0fad15af349.5031683815215479853725-150x150.png 150w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/kisspng-computer-icons-github-github-logo-save-icon-format-5ab0fad15af349.5031683815215479853725-300x300.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2023\/01\/kisspng-computer-icons-github-github-logo-save-icon-format-5ab0fad15af349.5031683815215479853725.png 512w\" sizes=\"auto, (max-width: 150px) 100vw, 150px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-text-align-center has-medium-font-size\">Lien Github pour ces scripts : <\/p>\n\n\n\n<p class=\"has-text-align-center has-medium-font-size\"><a href=\"https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Moteur%20pas%20%C3%A0%20pas\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Moteur%20pas%20%C3%A0%20pas<\/a><\/p>\n<\/div><\/div>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objectif : Explorer les diff\u00e9rentes options pour contr\u00f4ler un moteur pas \u00e0 pas bipolaire. Pour chaque exemple, nous nous limitons \u00e0 un seul usage (un tour horaire, puis deux tours anti-horaires). Il existe de nombreux articles \u00e0 ce sujet, celui-ci a pour but de compiler les informations de la mani\u00e8re la plus simple possible, et [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1539,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"default","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[7,11],"tags":[],"class_list":["post-1425","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microcontroleurs-et-python","category-recuperer-les-donnees-dune-carte-arduino-avec-python"],"_links":{"self":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/comments?post=1425"}],"version-history":[{"count":6,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1425\/revisions"}],"predecessor-version":[{"id":1858,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1425\/revisions\/1858"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media\/1539"}],"wp:attachment":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}