{"id":2808,"date":"2020-04-20T12:24:07","date_gmt":"2020-04-20T10:24:07","guid":{"rendered":"http:\/\/www.ardpylab.fr\/?page_id=2808"},"modified":"2020-05-10T17:06:01","modified_gmt":"2020-05-10T15:06:01","slug":"gestion-des-sorties-analogiques","status":"publish","type":"page","link":"https:\/\/www.ardpylab.fr\/?page_id=2808","title":{"rendered":"Gestion des sorties analogiques"},"content":{"rendered":"\n<h2 style=\"text-align: center;\"><em><strong>(par le protocole \u201dFirmata standard\u201d)<\/strong><\/em><\/h2>\n\n\n\n<p>&nbsp;<\/p>\n<p><br>Pour utiliser une broche de l\u2019Arduino en sortie analogique (mode PWM), il faut au pr\u00e9alable la d\u00e9clarer en cr\u00e9ant un objet <strong>\u201d<\/strong><strong>pinPWM\u201d<\/strong>&nbsp;avec la commande suivante&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p style=\"padding-left: 40px;\"><strong>pinPWM = board.get_pin(&lsquo;d:<\/strong><strong>num\u00e9ro_de_pin:p&rsquo;)<\/strong>&nbsp;<\/p>\n<p><br>La syntaxe est:<\/p>\n<p style=\"padding-left: 40px;\">. <strong>\u201d<\/strong><strong>d\u201d<\/strong>&nbsp;pour digital,<\/p>\n<p style=\"padding-left: 40px;\">. <strong>\u201d<\/strong><strong>num\u00e9ro_de_pin\u201d<\/strong>&nbsp;est le num\u00e9ro de la broche (pour rappel, les broches supportant le PWM sont les broches 3, 5, 6, 9, 10, 11 sur l&rsquo;Arduino Uno),<\/p>\n<p style=\"padding-left: 40px;\">. <strong>\u201d<\/strong><strong>p\u201d<\/strong>&nbsp;pour PWM,<\/p>\n<p style=\"padding-left: 40px;\"><strong>. \u201dboard\u201d<\/strong> est l\u2019objet cr\u00e9\u00e9 lors de l\u2019appel de la m\u00e9thode <strong>\u201dArduino\u201d<\/strong> du module <strong>\u201dpyfirmata\u201d<\/strong>.&nbsp;<br><br><\/p>\n<p>On peut d\u00e9finir une fonction d\u00e9clarant plus facilement une broche en sortie analogique&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 21px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\">def AnalogOutput(board,pin):<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">AnalogOutputPin=board.get_pin(&lsquo;d:&rsquo;+ str(pin) +&rsquo;:p&rsquo;)<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">return AnalogOutputPin<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>La syntaxe pour d\u00e9clarer, par exemple, la broche N\u00b011 en sortie analogique est alors&nbsp;plus simple:<\/p>\n<p style=\"padding-left: 40px;\"><strong>pinPWM<\/strong><strong> = AnalogOutput(board,11)<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>La tension de la broche N\u00b011 d\u00e9clar\u00e9e en sortie analogique est r\u00e9glable en modifiant le rapport cyclique du signal PWM entre <strong>0<\/strong> (0 %) et <strong>1<\/strong> (100%)&nbsp;:<\/p>\n<p style=\"padding-left: 40px;\"><strong>board.digital[11].write(rapport cyclique)<br><br><\/strong><\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si rapport cyclique = 0, alors la tension est de 0 V<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si rapport cyclique = 1, alors la tension est de 5 V<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; si rapport cyclique = 0.5, alors la tension est de 2,5 V<\/p>\n<p>&nbsp;<\/p>\n<p>On peut \u00e9galement d\u00e9finir une fonction pour modifier le rapport cyclique d\u2019une broche d\u00e9clar\u00e9e en sortie analogique&nbsp;:<\/p>\n\n\n\n<figure class=\"wp-block-table\">\n<table style=\"width: 100%; height: 21px;\">\n<tbody>\n<tr style=\"height: 21px;\">\n<td style=\"height: 21px; padding-left: 40px;\" bgcolor=\"#FFFFCC\">\n<p><span style=\"color: #000000;\">def AnalogWrite(board,pin,val):<\/span><\/p>\n<p style=\"padding-left: 40px;\"><span style=\"color: #000000;\">board.digital[pin].write(val)<\/span><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n\n\n\n<p>Ainsi, l\u2019instruction pour appliquer une tension de 2,5V sur la sortie <strong>\u201d11\u201d<\/strong> d\u00e9clar\u00e9e en sortie analogique, de l\u2019objet <strong>\u201dboard\u201d<\/strong>, est :<\/p>\n<p style=\"padding-left: 40px;\"><strong>AnalogWrite(board, 11, 0.5)<br><br><\/strong><\/p>\n\n\n\n<p><u>Exemple<\/u>\u00a0:<\/p>\n<p>Nous allons utiliser les propri\u00e9t\u00e9s des sorties analogiques de l\u2019Arduino pour r\u00e9gler la luminosit\u00e9 de la DEL rouge de notre <a href=\"https:\/\/www.ardpylab.fr\/?page_id=2497\/#circuit\" data-wplink-url-error=\"true\">circuit<\/a> entre 0 et 100%. Le programme (<strong>\u201d<\/strong><strong><a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-standard\/ledrvbanalogoutput.zip\" data-wplink-url-error=\"true\">LedRVBAnalogOutput.py<\/a>\u201d<\/strong>) va demander \u00e0 l\u2019utilisateur de saisir un nombre entier entre 0 et 100 de fa\u00e7on \u00e0 r\u00e9gler la tension de la broche sur laquelle la DEL est connect\u00e9e entre 0 et 5 V.<br \/><br \/><\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-2500 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-ms5.png\" alt=\"\" width=\"616\" height=\"337\" \/><\/figure>\n<\/div>\n<p>\u00a0<\/p>\n\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/www.ardpylab.fr\/downloads\/firmata-standard\/codes\/py\/LedRVBAnalogOutput.py\" data-wplink-url-error=\"true\"><img loading=\"lazy\" decoding=\"async\" width=\"854\" height=\"1024\" class=\"wp-image-2811 aligncenter\" style=\"border: 3px solid #eeeeee; padding: 3px; margin: 3px;\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm7-854x1024.png\" alt=\"\" srcset=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm7-854x1024.png 854w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm7-250x300.png 250w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm7-768x921.png 768w, https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/04\/com-ardpy-firm7.png 902w\" sizes=\"auto, (max-width: 854px) 100vw, 854px\" \/><\/a><\/figure>\n<\/div>\n\n\n\n<p><strong><u><br \/>D\u00e9roulement du programme<\/u><\/strong><strong>\u00a0:<\/strong><\/p>\n<p>&#8211; <u>Importation des librairies\u00a0et d\u00e9finition de fonctions<\/u> :<\/p>\n<p style=\"padding-left: 40px;\">. Le module <strong>\u201dConnectToArduino.py\u201d, <\/strong>contenant les fonctions de connexion \u00e0 l\u2019arduino via le protocole <strong>\u201dFirmata standard\u201d<\/strong>,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>AnalogOutput\u201d <\/strong>pour d\u00e9clarer une sortie analogique,<\/p>\n<p style=\"padding-left: 40px;\">. Fonction <strong>\u201d<\/strong><strong>AnalogWrite\u201d <\/strong>pour modifier la tension d\u2019une broche analogique.<br \/><br \/><\/p>\n<p>&#8211; <u>D\u00e9claration des constantes et variables<\/u>\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">. <strong>PinLedR = 11<\/strong> (constante correspondant au n\u00b0 de la broche sur laquelle la DEL rouge est connect\u00e9e)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>RapportCyclique = 0.0<\/strong> (variable pour stocker la valeur du rapport cyclique du signal PWM)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>ChoixRP =False<\/strong> (variable bool\u00e9enne indiquant si la saisie du rapport cyclique a \u00e9t\u00e9 r\u00e9alis\u00e9e)<\/p>\n<p style=\"padding-left: 40px;\">. <strong>PortComArduino <\/strong>(port COM sur lequel l\u2019Arduino est connect\u00e9)<br \/><br \/><\/p>\n<p>&#8211; <u>Connexion \u00e0 l&rsquo;Arduino<\/u>\u00a0(Idem programme pr\u00e9c\u00e9dent)\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">. Tentative d\u2019ouverture du port COM s\u00e9lectionn\u00e9\u00a0et connexion \u00e0 l\u2019Arduino:<\/p>\n<p style=\"padding-left: 80px;\"><strong>PortComArduino = SelectPortCOM()<\/strong><\/p>\n<p style=\"padding-left: 80px;\"><strong>board = OpenPortCom(PortComArduino)<br \/><\/strong><\/p>\n<p style=\"padding-left: 40px;\">. si la connexion \u00e0 l\u2019Arduino est r\u00e9ussie:<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; D\u00e9claration de la broche de la DEL rouge en sortie analogique :<\/p>\n<p style=\"padding-left: 80px;\"><strong>PinPWM = AnalogOutput(board, PinLedR)<br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Boucle principale du programme (boucle \u201d<\/u><u>while True\u201d<\/u><u>)<\/u> :<\/p>\n<p style=\"padding-left: 40px;\">. Demande de saisie de la valeur de la luminosit\u00e9 souhait\u00e9e\u00a0entre 0 et 100 (un test est effectu\u00e9 sur la valeur saisie):<\/p>\n<p style=\"padding-left: 80px;\"><strong>saisie = input(\u201d\u201d)<br \/><\/strong><\/p>\n<p style=\"padding-left: 40px;\">. Calcul du rapport cyclique entre 0 et 1\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>RapportCyclique = float(saisie\/100)<br \/><\/strong><\/p>\n<p style=\"padding-left: 40px;\">. La luminosit\u00e9 de la DEL rouge est r\u00e9gl\u00e9e \u00e0 l\u2019aide du rapport cyclique calcul\u00e9\u00a0:<\/p>\n<p style=\"padding-left: 80px;\"><strong>AnalogWrite(board,PinLedR,RapportCyclique)<br \/><br \/><\/strong><\/p>\n<p>&#8211; <u>Fin du programme en appuyant sur <\/u><u>Ctrl-C<\/u>\u00a0:<\/p>\n<p style=\"padding-left: 40px;\">&#8211;&gt; La DEL rouge est \u00e9teinte et le port COM est ferm\u00e9.<\/p>\n<p>\u00a0<\/p>\n\n\n<div  class=\"grids-section grids-is-stretch\" style=\"--_gs-gap-desktop:0px 0px;--_gs-m-desktop:0 0 0 0;--_gs-p-desktop:0 0 0 0;--_gs-bg-desktop:transparent none;--_gs-bg-xp-desktop:0px;--_gs-zi-desktop:auto;--_gs-d-desktop:block;--_gs-mw-desktop:calc(100% - 0 - 0);--_gs-gap-tablet:0px 0px;--_gs-m-tablet:0 0 0 0;--_gs-p-tablet:0 0 0 0;--_gs-bg-tablet:transparent none;--_gs-bg-xp-tablet:0px;--_gs-zi-tablet:auto;--_gs-d-tablet:block;--_gs-mw-tablet:calc(100% - 0 - 0);--_gs-gap-mobile:0px 0px;--_gs-m-mobile:0 0 0 0;--_gs-p-mobile:0 0 0 0;--_gs-bg-mobile:transparent none;--_gs-bg-xp-mobile:0px;--_gs-zi-mobile:auto;--_gs-d-mobile:block;--_gs-mw-mobile:calc(100% - 0 - 0);--_gs-columns:2;--_gs-rows:1\"><div class=\"grids-s-w_i\">\n<div class=\"grids-area\" style=\"--_ga-column:1\/2;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2784\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/moins.jpg\" alt=\"\" class=\"wp-image-107\"\/><\/a><\/figure><\/div>\n\n<\/div>\n\n<div class=\"grids-area\" style=\"--_ga-column:2\/3;--_ga-row:1\/2;--_ga-m-desktop:0 0 0 0;--_ga-p-desktop:0 0 0 0;--_ga-bg-desktop:transparent none;--_ga-zi-desktop:auto;--_ga-d-desktop:flex;--_ga-mw-desktop:calc(100% - 0 - 0);--_ga-m-tablet:0 0 0 0;--_ga-p-tablet:0 0 0 0;--_ga-bg-tablet:transparent none;--_ga-zi-tablet:auto;--_ga-d-tablet:flex;--_ga-mw-tablet:calc(100% - 0 - 0);--_ga-m-mobile:0 0 0 0;--_ga-p-mobile:0 0 0 0;--_ga-bg-mobile:transparent none;--_ga-zi-mobile:auto;--_ga-d-mobile:flex;--_ga-mw-mobile:calc(100% - 0 - 0)\">\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large\"><a href=\"https:\/\/www.ardpylab.fr\/?page_id=2831\"><img loading=\"lazy\" decoding=\"async\" width=\"50\" height=\"28\" src=\"https:\/\/www.ardpylab.fr\/wp-content\/uploads\/2020\/03\/plus.jpg\" alt=\"\" class=\"wp-image-106\"\/><\/a><\/figure><\/div>\n\n<\/div>\n<\/div><\/div>\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>(par le protocole \u201dFirmata standard\u201d) &nbsp; Pour utiliser une broche de l\u2019Arduino en sortie analogique (mode PWM), il faut au pr\u00e9alable la d\u00e9clarer en cr\u00e9ant un objet \u201dpinPWM\u201d&nbsp;avec la commande suivante&nbsp;:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pinPWM = board.get_pin(&lsquo;d:num\u00e9ro_de_pin:p&rsquo;)&nbsp; La syntaxe est: . \u201dd\u201d&nbsp;pour digital, . \u201dnum\u00e9ro_de_pin\u201d&nbsp;est le num\u00e9ro de la broche (pour rappel, les broches supportant le PWM sont [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2808","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2808","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2808"}],"version-history":[{"count":0,"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=\/wp\/v2\/pages\/2808\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ardpylab.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2808"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}