{"id":1413,"date":"2024-09-10T06:10:20","date_gmt":"2024-09-10T04:10:20","guid":{"rendered":"https:\/\/labopothier.com\/?p=1413"},"modified":"2025-03-21T11:52:24","modified_gmt":"2025-03-21T10:52:24","slug":"activite-arduino-python-mesurer-une-vitesse-a-laide-dun-module-capteur-de-vitesse-de-rotation-lm293-type-fc-03-ou-vma347-trace-de-graphe-en-temps-reel","status":"publish","type":"post","link":"https:\/\/labopothier.com\/index.php\/2024\/09\/10\/activite-arduino-python-mesurer-une-vitesse-a-laide-dun-module-capteur-de-vitesse-de-rotation-lm293-type-fc-03-ou-vma347-trace-de-graphe-en-temps-reel\/","title":{"rendered":"ACTIVIT\u00c9 ARDUINO\/PYTHON : Mesurer une vitesse \u00e0 l&rsquo;aide d&rsquo;un module capteur de vitesse de rotation LM293 type FC-03 ou VMA347 (trac\u00e9 de graphe en temps r\u00e9el)"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><a href=\"https:\/\/www.youtube.com\/watch?v=3cNg9YotLQk&amp;feature=youtu.be\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube--1024x576.jpg\" alt=\"\" class=\"wp-image-971\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube--1024x576.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube--300x169.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube--768x432.jpg 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube--1536x864.jpg 1536w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/Vitesse-youtube-.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\"><a href=\"https:\/\/www.youtube.com\/watch?v=3cNg9YotLQk&amp;feature=youtu.be\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.youtube.com\/watch?v=3cNg9YotLQk&amp;feature=youtu.be<\/a><\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Objectifs et enjeux <\/strong><\/h4>\n\n\n\n<p>Mesurer une vitesse avec un capteur de vitesse de rotation avec fourche optique et roue codeuse type FC-03 ou LM393<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Capteur de vitesse<\/strong><\/h4>\n\n\n\n<div class=\"wp-block-group alignwide is-layout-flow wp-block-group-is-layout-flow\">\n<div class=\"wp-block-media-text alignfull is-stacked-on-mobile is-vertically-aligned-center\" style=\"grid-template-columns:33% auto\"><figure class=\"wp-block-media-text__media\"><img loading=\"lazy\" decoding=\"async\" width=\"538\" height=\"442\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/LM393.png\" alt=\"\" class=\"wp-image-935 size-full\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/LM393.png 538w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/LM393-300x246.png 300w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/figure><div class=\"wp-block-media-text__content\">\n<p class=\"has-normal-font-size\">Le capteur de vitesse utilis\u00e9 ici est le <strong>FC-03<\/strong>, module avec circuit int\u00e9gr\u00e9 <strong>LM293<\/strong>. Le principe de mesure de vitesse repose sur un capteur optique \u00e0 fourche qui va d\u00e9tecter un signal. Ce signal sera r\u00e9guli\u00e8rement \u00ab\u00a0coup\u00e9\u00a0\u00bb par une roue perfor\u00e9e en rotation. Il sera alors possible de remonter \u00e0 la vitesse de rotation de la roue en mesurant le nombre d&rsquo;interruptions par secondes et en tenant compte du nombre de trous de la roue codeuse.<\/p>\n<\/div><\/div>\n<\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Dispositif exp\u00e9rimental pour l&rsquo;acquisition<\/strong><\/h4>\n\n\n\n<p>La roue codeuse est fix\u00e9e sur l&rsquo;axe d&rsquo;un <strong>moteur \u00e0 courant continu <\/strong>qui est contr\u00f4l\u00e9 par une <strong>alimentation stabilis\u00e9e<\/strong> dont on peut faire varier la tension.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-gallery 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=\"1024\" height=\"768\" data-id=\"942\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3445-1024x768.jpg\" alt=\"\" class=\"wp-image-942\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3445-1024x768.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3445-300x225.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3445-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Avec A0<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"943\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3452-1024x768.jpg\" alt=\"\" class=\"wp-image-943\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3452-1024x768.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3452-300x225.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3452-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Moteur contr\u00f4l\u00e9 par alimentation continue variable<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"941\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3444-1024x768.jpg\" alt=\"\" class=\"wp-image-941\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3444-1024x768.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3444-300x225.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3444-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Carte Arduino<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"944\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3453-1024x768.jpg\" alt=\"\" class=\"wp-image-944\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3453-1024x768.jpg 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3453-300x225.jpg 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/IMG-3453-768x576.jpg 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Avec D0<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Branchement sur la carte Arduino<\/strong><\/h4>\n\n\n\n<p>Il existe deux branchements possibles : on peut d\u00e9tecter le signal avec la broche <strong>D0 <\/strong>ou la broche <strong>A0<\/strong>. Voici ci dessous le sch\u00e9ma de branchement pour ces deux possibilit\u00e9s :<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"716\" data-id=\"938\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-A0_bb-1024x716.png\" alt=\"\" class=\"wp-image-938\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-A0_bb-1024x716.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-A0_bb-300x210.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-A0_bb-768x537.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-A0_bb.png 1167w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Avec A0<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"687\" data-id=\"939\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-D0_bb-1024x687.png\" alt=\"\" class=\"wp-image-939\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-D0_bb-1024x687.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-D0_bb-300x201.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-D0_bb-768x515.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/FC-03-D0_bb.png 1275w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><strong>Avec D0<\/strong><\/figcaption><\/figure>\n<\/figure>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>T\u00e9l\u00e9versement du programme Arduino<\/strong><\/h4>\n\n\n\n<p>Voici les deux programmes Arduino \u00e0 t\u00e9l\u00e9verser pour chacune de ces deux possibilit\u00e9s<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><em><strong>Code avec le branchement sur A0<\/strong><\/em><\/h4>\n\n\n\n<pre title=\"Code Arduino pour mesure de vitesse de rotation avec la sortie A0\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\nint sensor = A0; \/\/ broche pour d\u00e9tection du capteur\nint etatSensor ; \/\/ \u00e9tat du capteur (haut ou bas)\nunsigned long start_time=0; \/\/temps de d\u00e9but d'un comptage\nunsigned long end_time =0; \/\/temps de fin d'un comptage\n \nint nb_trous =20 ; \/\/ nombre de trous de la roue codeuse\nbool etat_old= false ; \/\/ \nbool  etat_new = false; \/\/ les \u00e9tats vont changer \u00e0 chaque chaque modiication de la valeu lue par le capteur (haut\/5V ou bas\/0V)\nint compt=0; \/\/ comptage initialis\u00e9 \u00e0 0\nfloat rps=0; \/\/ vitesse intialis\u00e9e \u00e0 0\nlong temps; \/\/mesure du temps pour l'acquisition\n\nvoid setup() \n{\n  \n  pinMode(sensor,INPUT); \/\/ la broche A0 est d\u00e9clar\u00e9e comme entr\u00e9e\n  Serial.begin(9600); \/\/ pour le moniteur s\u00e9rie\n  temps = millis(); \/\/ mesure du temps \n}  \n \nvoid loop()\n{\n compt = 0;\n start_time=millis(); \/\/on mesure le temps\n end_time=start_time+1000; \/\/ pour un comptage toutes les secondes\n temps = millis(); \/\/mesure du temps pour l'acquisition\n \n\nwhile(millis()&lt;end_time){ \/\/ comptage sur une seconde\n  if (analogRead(sensor)&lt; 50){\n    etat_new = true; \n  }\n  else {\n    etat_new =false;\n  }\n  if (etat_old != etat_new) {\n    etat_old = etat_new;\n    compt = compt + 1;\n  }\n  \n}\nrps = float(compt)\/(2*nb_trous) ; \/\/ il faut diviser par 2 car pour chaque trou , deux changements d'\u00e9tat vont \u00eatre d\u00e9tect\u00e9s\nSerial.print(\"temps  \");\nSerial.print(temps);\nSerial.print(\"  rps \");\nSerial.println(rps);\n\n\n   \n}\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\"><em><strong>Code avec le branchement sur D0<\/strong><\/em><\/h4>\n\n\n\n<pre title=\"Code Arduino pour mesure de vitesse de rotation avec la sortie D0\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">\nint sensor = 3; \/\/ broche pour d\u00e9tection du capteur\nint etatSensor ; \/\/ \u00e9tat du capteur (haut ou bas)\nunsigned long start_time=0; \/\/temps de d\u00e9but d'un comptage\nunsigned long end_time =0; \/\/temps de fin d'un comptage\n \nint nb_trous =20 ; \/\/ nombre de trous de la roue codeuse\nint etat_old= 1 ; \/\/ \nint  etat_new = 1; \/\/ les \u00e9tats vont changer \u00e0 chaque chaque modiication de la valeu lue par le capteur (haut\/5V ou bas\/0V)\nint compt=0; \/\/ comptage initialis\u00e9 \u00e0 0\nfloat rps=0; \/\/ vitesse intialis\u00e9e \u00e0 0\nlong temps; \/\/mesure du temps pour l'acquisition\n\nvoid setup() \n{\n  \n  pinMode(sensor,INPUT); \/\/ la broche 3 est d\u00e9clar\u00e9e comme entr\u00e9e\n  Serial.begin(9600); \/\/ pour le moniteur s\u00e9rie\n  temps = millis(); \/\/ mesure du temps \n}  \n \nvoid loop()\n{\n compt = 0;\n start_time=millis(); \/\/on mesure le temps\n end_time=start_time+1000; \/\/ pour un comptage toutes les secondes\n temps = millis(); \/\/mesure du temps pour l'acquisition\n \n\nwhile(millis()&lt;end_time){ \/\/ comptage sur une seconde\n  etat_new = digitalRead(sensor);\n  if (etat_old  != etat_new) { \/\/ petite boucle pour incr\u00e9menter le compteur \u00e0 chaque changement d'\u00e9tat lu par le capteur\n    etat_old = etat_new;\n    compt = compt+1;\n  }  \n}\n\nrps = float(compt)\/(2*nb_trous) ; \/\/ il faut diviser par 2 car pour chaque trou , deux changements d'\u00e9tat vont \u00eatre d\u00e9tect\u00e9s\n\nSerial.print(\"temps  \");\nSerial.print(temps);\nSerial.print(\"  rps \");\nSerial.println(rps);\n\n\n   \n}\n<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Mais quel branchement choisir ???<\/strong><\/p>\n\n\n\n<p>Et ben \u2026 \u00e7a d\u00e9pend !!!<\/p>\n\n\n\n<p>On pourrait privil\u00e9gier l&rsquo;utilisation de la sortie num\u00e9rique <strong>D0 <\/strong>pour des mesures plus pr\u00e9cises mais cela ne fonctionnera plus pour des vitesses trop \u00e9lev\u00e9es. Pour les mesures \u00e9lev\u00e9es, il faudrait choisir la m\u00e9thode avec la sortie analogique <strong>A0<\/strong>. <\/p>\n\n\n\n<p>Explications ci-dessous &#8230;<\/p>\n\n\n\n<p><\/p>\n<\/blockquote>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Explication du code Arduino et choix de la sortie du capteur de vitesse<\/strong><\/h4>\n\n\n\n<p>La sortie num\u00e9rique <strong>D0 <\/strong>va renvoyer la valeur <strong>True <\/strong>(<strong>5V<\/strong>) lorqu&rsquo;un signal est d\u00e9tect\u00e9 et la valeur <strong>False <\/strong>quand le signal sera occult\u00e9 par la roue.<\/p>\n\n\n\n<p>Voici le signal observ\u00e9 \u00e0 l&rsquo;oscilloscope<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-ok.png\" alt=\"\" class=\"wp-image-948\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-ok.png 800w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-ok-300x225.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-ok-768x576.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><strong>Signal D0 OK<\/strong><\/figcaption><\/figure>\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>Le code Arduino va compter chaque passage d&rsquo;une valeur \u00e0 une autre , donc<strong> le comptage se fera deux fois pour un trou<\/strong>. (voir animation ci contre)<\/p>\n\n\n\n<p>C&rsquo;est pour cela qu&rsquo;on demande au code de calculer le nombre de tours par secondes ainsi :<\/p>\n\n\n\n<p class=\"has-text-align-center\"> <strong>Nombre de comptages pour 1s \/nombre de trous<\/strong> &#8230;<strong> divis\u00e9 par deux<\/strong> ! <\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><video controls src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/animationa0-sbwg5skq-c8xh_BrCCQ9BS_D2fe.mp4\"><\/video><\/figure><\/div>\n\n\n\n<p>Cette m\u00e9thode est assez pr\u00e9cise mais montre ses limites \u00e0 vitesse \u00e9lev\u00e9e car le capteur n&rsquo;arrive plus \u00e0 suivre &#8230; ce probl\u00e8me est sans doute li\u00e9 au temps de r\u00e9ponse du capteur :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-pas-ok.png\" alt=\"\" class=\"wp-image-954\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-pas-ok.png 800w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-pas-ok-300x225.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-D0-pas-ok-768x576.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><strong>Signal D0 pas OK !<\/strong><\/figcaption><\/figure>\n\n\n\n<p>Il faudrait donc privil\u00e9gier la mesure avec la sortie analogique <strong>A0<\/strong>, qui est certes beaucoup moins propre &#8230; mais pour laquelle nous pouvons observer un signal m\u00eame \u00e0 vitesse \u00e9lev\u00e9e. <\/p>\n\n\n\n<p>Nous voyons bien \u00e0 l&rsquo;oscilloscope que, bien qu&rsquo;il y ait un certain temps de r\u00e9ponse du capteur, il est quand m\u00eame possible de r\u00e9cup\u00e9rer la vitesse de la roue   :<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" data-id=\"956\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok.png\" alt=\"\" class=\"wp-image-956\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok.png 800w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-300x225.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-768x576.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><strong>Signal A0 pour faible vitesse<\/strong><\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"600\" data-id=\"957\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-meme-vite.png\" alt=\"\" class=\"wp-image-957\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-meme-vite.png 800w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-meme-vite-300x225.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/oscillo-A0-ok-meme-vite-768x576.png 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><figcaption class=\"wp-element-caption\"><strong>Signal A0 pour vitesse \u00e9lev\u00e9e<\/strong><\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>L&rsquo;id\u00e9e est alors de \u00ab\u00a0ruser\u00a0\u00bb dans le code avec<strong> A0<\/strong> en d\u00e9finissant un seuil pour lequel on bascule d&rsquo;un \u00e9tat \u00e0 un autre<\/p>\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>Ce comtage est illustr\u00e9 par cette animation, <strong> le comptage se fera \u00e0 chaque passage du seuil , donc toujours deux fois pour un trou<\/strong> !<\/p>\n\n\n\n<p>Donc, on demande encore au code de calculer le nombre de tours par secondes ainsi :<\/p>\n\n\n\n<p class=\"has-text-align-center\"> <strong>Nombre de comptages pour 1s \/nombre de trous<\/strong> &#8230;<strong> divis\u00e9 par deux<\/strong> ! <\/p>\n<\/div><figure class=\"wp-block-media-text__media\"><video controls src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2021\/05\/animationa0-yvmfeptd-ixwm-ubwfq02n-mfas_loQ0NaLf_g1Gu.mp4\"><\/video><\/figure><\/div>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Donc pour r\u00e9sumer &#8230;<\/strong><\/p>\n<\/blockquote>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utiliser le branchement avec <strong>D0 <\/strong>et le code Arduino associ\u00e9 pour les mesures de <strong>faible vitesse<\/strong><\/li>\n\n\n\n<li>Utiliser le branchement avec <strong>A0 <\/strong>et le code Arduino associ\u00e9 pour les<strong> mesures \u00e9lev\u00e9es de vitesse<\/strong><\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>R\u00e9cup\u00e9ration des donn\u00e9es avec Python<\/strong><\/h4>\n\n\n\n<p>Une fois ce code Arduino t\u00e9l\u00e9vers\u00e9, nous pouvons r\u00e9cup\u00e9rer les valeurs avec Python (par le biais d&rsquo;un IDE comme Pyzo, Spyder, IDLE, Sublime Text,..). Il est alors possible de tracer un graphe en temps r\u00e9el, traiter les donn\u00e9es, mod\u00e9liser les courbes etc&#8230;<\/p>\n\n\n\n<p>Dans cet article , je ne rentrerai pas dans les d\u00e9tails pour les \u00e9tapes de r\u00e9cup\u00e9ration de donn\u00e9es. Pour cela, je vous invite \u00e0 consulter l&rsquo;article qui explique ces diff\u00e9rentes \u00e9tapes sur ce lien : <\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong><a href=\"https:\/\/labopothier.com\/index.php\/2024\/09\/10\/activite-arduino-python-recuperer-avec-python-les-donnees-dune-carte-arduino-avec-trace-de-graphes-exemple-avec-une-mesure-de-distance-par-ultrason\/\" target=\"_blank\" rel=\"noreferrer noopener\">R\u00e9cup\u00e9ration des donn\u00e9es d&rsquo;une carte Arduino avec Python<\/a><\/strong><\/p>\n\n\n\n<p>Voici le script Python \u00e0 ex\u00e9cuter :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">\n #importation des modules\n import serial\n import serial.tools.list_ports # pour la communication avec le port s\u00e9rie\n import matplotlib.pyplot as plt  # pour le trac\u00e9 de graphe\n from matplotlib import animation # pour la figure anim\u00e9e\n import time # gestion du temps\n \n\n #initialisation des listes\n \n\n liste_temps=[] # liste pour stocker les valeurs de temps en partant de t=0\n liste_rps = [] # liste pour stocker les valeurs de vitesse\n \n\n t_acquisition = 10.0\n rpsmax= 150 # en mm\n \n\n \n\n #pour le graphe en temps r\u00e9el\n def animate(i):\n     line1 = Data.readline()\n     print (line1)\n     # on retire les caract\u00e8res d'espacement en d\u00e9but et fin de cha\u00eene\n     listeDonnees = line1.strip()\n     # on s\u00e9pare les informations re\u00e7ues s\u00e9par\u00e9es par les espaces et on stocke ces informations dans une liste pour chacune de lignes\n     listeDonnees = line1.split()\n     print (listeDonnees)\n \n\n \n\n     if len(listeDonnees)!= 0 : # parfois des lignes de donn\u00e9es vides peuvent \u00eatre envoy\u00e9es, il faut les \"\u00e9carter\"\n         rps = float(listeDonnees[3].decode()) # apr\u00e8s consulation des donn\u00e9es, nous choisissons le 4\u00e8me \u00e9l\u00e9ment de listeDonnees\n         temps = (float(listeDonnees[1].decode()))\/1000.0 # apr\u00e8s consulation des donn\u00e9es, nous choisissons le 2\u00e8me \u00e9l\u00e9ment de listeDonnees\n \n\n \n\n         while temps &lt;= t_acquisition:\n             liste_rps.append(rps)\n             print(\"rps = %f\"%(rps)) # affichage de la valeur de la vitesse\n             liste_temps.append(temps)\n             print(\"temps mesur\u00e9 = %f\"%(temps), \" s\") # affichage de la valeur du temps absolu\n             line.set_data(liste_temps,liste_rps)\n             return line,\n \n\n \n\n \n\n \n\n \n\n \n\n # Fonction pour la r\u00e9cup\u00e9ration des donn\u00e9es s\u00e9rie 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 :\n             mData = serial.Serial(p.device,9600)\n     print(mData.is_open) # Affiche et v\u00e9rifie que le port est ouvert\n     print(mData.name) # Affiche le nom du port\n     return mData\n \n\n \n\n \n\n \n\n \n\n \n\n Data =recup_port_Arduino() #r\u00e9cup\u00e9ration des donn\u00e9es\n \n\n # Cr\u00e9ation figure\n fig=plt.figure()\n line, = plt.plot([],[])\n plt.xlim(0, t_acquisition)\n plt.ylim(0,rpsmax)\n plt.xlabel('temps en s')\n plt.ylabel('rps')\n plt.grid()\n \n\n \n\n #Animation\n ani = animation.FuncAnimation(fig, animate, frames=200,  interval=20,repeat=False)\n \n\n plt.show()\n \n\n plt.close(fig)\n Data.close() # pour arr\u00eater la lecture des donn\u00e9es s\u00e9rie\n \n\n \n\n \n\n plt.title('rps=f(t)') # titre du graphique\n plt.scatter(liste_temps,liste_rps, color ='r', marker = 'o') # On affiche les points de coordonn\u00e9es (t,rps) avec des points rouges\n plt.xlabel('temps en s')\n plt.ylabel('rps')\n plt.xlim (min(liste_temps),max(liste_temps))  #limtes pour les axes avec les valeurs extr\u00eames de t et de rps\n plt.ylim(min(liste_rps),max(liste_rps))\n plt.show()  #afficher le graphique (ne rien mettre dans la parenth\u00e8se)\n \n\n #Ecriture dans un fichier txt\n lines=['t\\trps\\n'] #premi\u00e8re ligne du fichier txt\n for i in range (len (liste_rps)):\n     line = str(liste_temps[i]) +'\\t'+ str(liste_rps[i])+'\\n'\n     lines.append(line)\n \n\n# Utilisation de 'with open' pour assurer la fermeture du fichier\nwith open('data_arduino.txt', 'w', encoding='utf-8') as fichier:\n    fichier.writelines(lines)  # cr\u00e9ation d'un nouveau fichier texte\n<\/code><\/pre>\n\n\n\n<p>Lien Github des scripts Python et Arduino :<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Donnees%20serie%20mesure%20vitesse\">https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Donnees%20serie%20mesure%20vitesse<\/a><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Objectifs et enjeux Mesurer une vitesse avec un capteur de vitesse de rotation avec fourche optique et roue codeuse type FC-03 ou LM393 Capteur de vitesse Le capteur de vitesse utilis\u00e9 ici est le FC-03, module avec circuit int\u00e9gr\u00e9 LM293. Le principe de mesure de vitesse repose sur un capteur optique \u00e0 fourche qui va [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1542,"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":"","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-1413","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\/1413","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=1413"}],"version-history":[{"count":9,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1413\/revisions"}],"predecessor-version":[{"id":1772,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1413\/revisions\/1772"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media\/1542"}],"wp:attachment":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}