{"id":1438,"date":"2024-09-10T06:06:52","date_gmt":"2024-09-10T04:06:52","guid":{"rendered":"https:\/\/labopothier.com\/?p=1438"},"modified":"2025-12-08T16:10:26","modified_gmt":"2025-12-08T15:10:26","slug":"activite-arduino-python-utilisation-dun-capteur-de-force-avec-arduino-trace-de-graphe-dans-python","status":"publish","type":"post","link":"https:\/\/labopothier.com\/index.php\/2024\/09\/10\/activite-arduino-python-utilisation-dun-capteur-de-force-avec-arduino-trace-de-graphe-dans-python\/","title":{"rendered":"ACTIVITE ARDUINO\/PYTHON : Utilisation d&rsquo;un capteur de force avec Arduino, trac\u00e9 de graphe dans Python"},"content":{"rendered":"\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<p><strong>Objectif<\/strong> : R\u00e9aliser des tests de traction \u00e0 l&rsquo;aide d&rsquo;un capteur de force (programme PCSI) \u00e0 l&rsquo;aide d&rsquo;un microcontr\u00f4leur, avec acquisition en temps r\u00e9el sur Python.<\/p>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p><strong>Remarque<\/strong> : Cet article s&rsquo;inspire librement d&rsquo;un protocole de TP d&rsquo; Allan PETRILLO, technicien de laboratoire du lyc\u00e9e Lakanal \u00e0 Sceaux. un grand merci \u00e0 lui !<\/p>\n\n\n\n<p>Le capteur de force est constitu\u00e9 de :<\/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>Une jauge de contrainte 5 kg&nbsp;CZL 635 (\u00e0 peu pr\u00e8s 10 euros)&nbsp;: <a href=\"https:\/\/www.gotronic.fr\/art-capteur-de-force-5-kg-czl635-5-17599.htm\">https:\/\/www.gotronic.fr\/art-capteur-de-force-5-kg-czl635-5-17599.htm<\/a><\/li>\n<\/ul>\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\/2022\/09\/ar-capteur-de-force-5-kg-czl635-5-17599.jpg\" alt=\"\" class=\"wp-image-1115 size-full\"\/><\/figure><\/div>\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 21%\"><div class=\"wp-block-media-text__content\">\n<ul class=\"wp-block-list\">\n<li>Un amplificateur \u00e0 pont de Wheatstone \u2013 convertisseur analogique\/num\u00e9rique SEN-13879 bas\u00e9 sur HX711 (librairies arduino adapt\u00e9es, \u00e0 peu pr\u00e8s 10 euros aussi)&nbsp;: <a href=\"https:\/\/www.gotronic.fr\/art-amplificateur-pour-capteur-de-force-sen-13879-25334.htm\">https:\/\/www.gotronic.fr\/art-amplificateur-pour-capteur-de-force-sen-13879-25334.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\/2022\/09\/ar-amplificateur-pour-capteur-de-force-sen-13879-25334-1.jpg\" alt=\"\" class=\"wp-image-1112 size-full\"\/><\/figure><\/div>\n\n\n\n<p>Voici le montage \u00e0 r\u00e9aliser :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"729\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/jauge_bb-1024x729.png\" alt=\"\" class=\"wp-image-1160\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/jauge_bb-1024x729.png 1024w, https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/jauge_bb-300x214.png 300w, https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/jauge_bb-768x547.png 768w, https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/jauge_bb.png 1146w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Pour \u00e9viter l&rsquo;utilisation d&rsquo;une breadboard suppl\u00e9mentaire, on utilise ici la sortie 3,3 V de l&rsquo;Arduino pour VDD, \u00e7a ne semble pas poser de probl\u00e8me &#8230; Autre solution : utiliser une broche d&rsquo;Arduino comme sortie 5 V (voir lignes comment\u00e9es)<\/p>\n<\/blockquote>\n\n\n\n<p>Comme premi\u00e8re application, nous pourrions simplement \u00ab\u00a0fabriquer\u00a0\u00bb une balance avec mesure de masses (dispositif avec tige filet\u00e9e et petit crochet adapt\u00e9s \u00e0 la jauge) :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"603\" height=\"760\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588.png\" alt=\"\" class=\"wp-image-1119\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588.png 603w, https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588-238x300.png 238w\" sizes=\"auto, (max-width: 603px) 100vw, 603px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Avant de t\u00e9l\u00e9verser, il est n\u00e9cessaire d&rsquo;installer la biblioth\u00e8que HX711<\/strong> :<\/p>\n\n\n\n<p>Pour cela :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ouvrir le logiciel&nbsp;Arduino<\/li>\n\n\n\n<li>\u00c0 partir du menu&nbsp;<strong>[Croquis][Inclure une biblioth\u00e8que][G\u00e9rer les biblioth\u00e8ques<\/strong>], rechercher la librairie \u00ab&nbsp;<strong>HX711 arduino library<\/strong>\u00bb , (choisir la version par Bogdan Necula) puis <strong>Installer<\/strong><\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p>Voici le code Arduino :<\/p>\n\n\n\n<pre title=\"Code Arduino pour capteur de force\" class=\"wp-block-code\"><code lang=\"cpp\" class=\"language-cpp\">#include \"HX711.h\"\n HX711 capteur;\n int DAT = 3;\n int CLK = 2;\n long valeur;\n float valeur2;\n void setup() {\n\/\/  pinMode(8,OUTPUT);\n \/\/  digitalWrite(8,HIGH); \/\/ si on veut cr\u00e9er une alimentation 5V sur la broche 8 de la carte Arduino, pour la broche VDD de l'amplificateur\n   capteur.begin(DAT, CLK);\n   Serial.begin(9600);\n   capteur.tare();\n   delay(1000);\n }\n void loop() {\n   valeur = capteur.get_value();\n   valeur2 = 0.00234*valeur -0.328 ;\n\/\/   Serial.print(\"Valeur mesur\u00e9e (avec tare) : \");\n\/\/   Serial.print(valeur);\n\/\/   Serial.println (\"\\t\");\n   Serial.println(valeur2);\n   delay(20);\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>On pourrait \u00e9talonner la balance en r\u00e9alisant des mesures avec une gamme de masses \u00e9talon.<\/p>\n\n\n\n<p>A l&rsquo;issue de ces r\u00e9sultats, il faudrait alors modifier la formule donnant la masse \u00ab\u00a0r\u00e9elle\u00a0\u00bb :<\/p>\n\n\n\n<p>valeur2 = 0.00234*valeur -0.328<\/p>\n<\/blockquote>\n\n\n\n<p>Un code Python est aussi propos\u00e9 ici pour r\u00e9cup\u00e9rer les donn\u00e9es et tracer une courbe.<\/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\u2019article qui explique ces diff\u00e9rentes \u00e9tapes sur ce lien :<\/p>\n\n\n\n<p><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\u2019une carte Arduino avec Python<\/a><\/strong><\/p>\n\n\n\n<p>Voici le code Python pour r\u00e9cup\u00e9rer les donn\u00e9es et tracer le graphe en temps r\u00e9el<\/p>\n\n\n\n<pre title=\"Script Python pour r\u00e9cup\u00e9ration des donn\u00e9es et trac\u00e9 de graphe\" 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 \n\n #initialisation des listes\n liste_temps_mesure =[] # liste pour stocker le temps\"brut\"\n liste_temps=[] # liste pour stocker les valeurs de temps en partant de t=0\n liste_masse = [] # liste pour stocker les valeurs de masse\n \n\n t_acquisition = 10.0\n mmax= 500 # en g\n mmin =-500\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 \n\n \n\n \n\n \n\n \n\n \n\n     if len(listeDonnees)== 1 : # parfois des lignes de donn\u00e9es vides peuvent \u00eatre envoy\u00e9es, il faut les \"\u00e9carter\"\n         masse = float(listeDonnees[0].decode()) # apr\u00e8s consulation des donn\u00e9es, nous choisissons le 1er \u00e9l\u00e9ment de listeDonnees\n         tempsmes = time.time()\n         liste_temps_mesure.append(tempsmes) # temps mesur\u00e9 \"brut\" stock\u00e9 dans une liste\n         tempsreel = tempsmes - liste_temps_mesure[0] # pour faire partir le temps de 0 (cette valeur de temps sera stock\u00e9e dans une autre liste : liste_temps)\n \n\n \n\n \n\n \n\n         while tempsreel &lt;= t_acquisition:\n             liste_masse.append(masse)\n             print(\"m = %f\"%(masse), \" g\") # affichage de la valeur de la concentration\n             liste_temps.append(tempsreel)\n             print(\"temps mesur\u00e9 = %f\"%(tempsmes), \" s\") # affichage de la valeur du temps absolu\n             print(\"temps r\u00e9el= %f\"%(tempsreel), \" s\") # affichage de la valeur du temps en partant de 0\n             line.set_data(liste_temps,liste_masse)\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 Data =recup_port_Arduino() #r\u00e9cup\u00e9ration des donn\u00e9es\n \n\n \n\n \n\n \n\n # Cr\u00e9ation figure\n fig=plt.figure()\n line, = plt.plot([],[])\n plt.xlim(0, t_acquisition)\n plt.ylim(mmin,mmax)\n plt.xlabel('temps en s')\n plt.ylabel('masse en g')\n plt.grid()\n \n\n \n\n #Animation\n ani = animation.FuncAnimation(fig, animate, frames=2000,  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 #Ecriture dans un fichier txt\n lines=['t\\tm\\n'] #premi\u00e8re ligne du fichier txt\n for i in range (len (liste_masse)):\n     line = str(liste_temps[i]) +'\\t'+ str(liste_masse[i])+'\\n'\n     lines.append(line)\n \n\n fichier = open('U:\\Documents\\\\data_arduino.txt', 'w')\n fichier.writelines(lines) #cr\u00e9ation d'un nouveau fichier texte<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Attention<\/strong><\/p>\n\n\n\n<p>Attendre quelques secondes au d\u00e9but de l&rsquo;acquisition pour que le capteur proc\u00e8de au tarage.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"542\" src=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588-1.png\" alt=\"\" class=\"wp-image-1123\" srcset=\"https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588-1.png 633w, https:\/\/labopothier.com\/wp-content\/uploads\/2022\/09\/IMG-3588-1-300x257.png 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><figcaption class=\"wp-element-caption\">Trac\u00e9 sans\/avec masse de 100 g<\/figcaption><\/figure>\n\n\n\n<p>Lien Github avec les scripts :<\/p>\n\n\n\n<p><a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Donn%C3%A9es%20s%C3%A9rie%20jauge\" target=\"_blank\">https:\/\/github.com\/jonasforlot\/python-arduino\/tree\/main\/Donn%C3%A9es%20s%C3%A9rie%20jauge<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Il s&rsquo;agit pour l&rsquo;instant d&rsquo;une application simple d&rsquo;utilisation de ce capteur, l&rsquo;article est susceptible d&rsquo;\u00e9voluer avec des am\u00e9liorations et des compl\u00e9ments : proc\u00e9dure d&rsquo;\u00e9talonnage,  tests de traction<\/strong> &#8230;<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>Objectif : R\u00e9aliser des tests de traction \u00e0 l&rsquo;aide d&rsquo;un capteur de force (programme PCSI) \u00e0 l&rsquo;aide d&rsquo;un microcontr\u00f4leur, avec acquisition en temps r\u00e9el sur Python. Remarque : Cet article s&rsquo;inspire librement d&rsquo;un protocole de TP d&rsquo; Allan PETRILLO, technicien de laboratoire du lyc\u00e9e Lakanal \u00e0 Sceaux. un grand merci \u00e0 lui ! Le capteur [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1552,"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-1438","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\/1438","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=1438"}],"version-history":[{"count":11,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1438\/revisions"}],"predecessor-version":[{"id":1945,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/posts\/1438\/revisions\/1945"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media\/1552"}],"wp:attachment":[{"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/media?parent=1438"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/categories?post=1438"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/labopothier.com\/index.php\/wp-json\/wp\/v2\/tags?post=1438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}