{"id":3051,"date":"2015-11-10T21:00:42","date_gmt":"2015-11-10T20:00:42","guid":{"rendered":"http:\/\/www.alphak.net\/news\/?p=3051"},"modified":"2015-11-10T21:00:42","modified_gmt":"2015-11-10T20:00:42","slug":"winter-is-coming-s01e03","status":"publish","type":"post","link":"https:\/\/www.alphak.net\/news\/2015\/11\/winter-is-coming-s01e03\/","title":{"rendered":"Winter is coming \u2013 S01E03"},"content":{"rendered":"<p><a href=\"http:\/\/www.alphak.net\/news\/2014\/07\/winter-is-coming-s01e02\/\">Pr\u00e9c\u00e9demment<\/a>, sur AlphaK.net\u00a0: j\u2019ai r\u00e9ussi \u00e0<strong> capturer les codes infrarouges<\/strong> envoy\u00e9s par la t\u00e9l\u00e9commande de ma clim r\u00e9versible Airton CSH-12, et \u00e0 en comprendre le fonctionnement. J\u2019ai m\u00eame r\u00e9dig\u00e9, avec rigueur et amour, un document de sp\u00e9cifications sur le sujet, que je ne peux malheureusement pas rendre accessible en libre t\u00e9l\u00e9chargement sur ce site, pour des raisons l\u00e9gales. L\u2019\u00e9tape suivante consiste \u00e0 <strong>remplacer la t\u00e9l\u00e9commande d&rsquo;origine par un Arduino<\/strong> et lui faire <strong>\u00e9mettre les m\u00eames codes<\/strong>. Allais-je y arriver\u00a0? C\u2019est sur ce cliffhanger insoutenable que l\u2019\u00e9pisode pr\u00e9c\u00e9dent s\u2019\u00e9tait arr\u00eat\u00e9, plongeant l\u2019ensemble de mes lecteurs dans un \u00e9tat d\u2019angoisse sans pr\u00e9c\u00e9dent. C\u2019est justement l\u00e0 que nous reprenons le fil de l\u2019histoire.<!--more--><\/p>\n<p><em>Cet \u00e9pisode est d\u00e9di\u00e9 \u00e0 Olivier et J\u00e9r\u00e9mie, qui m\u2019ont tann\u00e9 les fesses pour que mes publications suivent un rythme plus soutenu. Merci \u00e0 vous deux. Si cet \u00e9pisode voit le jour, c\u2019est un peu gr\u00e2ce \u00e0 vous. Et aussi un peu parce que je suis bloqu\u00e9 dans un TGV pour un trajet de 3 heures avec pas grand chose de mieux \u00e0 faire au moment o\u00f9 je r\u00e9dige ces lignes.<\/em><\/p>\n<p>L\u2019\u00e9tape de r\u00e9cup\u00e9ration et de compr\u00e9hension des codes de la t\u00e9l\u00e9commande \u00e9tait une <strong>\u00e9tape cl\u00e9<\/strong>. Maintenant celle-ci r\u00e9alis\u00e9e, on est en droit de penser que l\u2019\u00e9mission de ces m\u00eames codes constituera une <strong>simple formalit\u00e9<\/strong> pour quiconque est en mesure de pondre quelques lignes de codes assez proprement pour qu\u2019elles compilent dans un environnement de d\u00e9veloppement pour Arduino. En principe, c\u2019est mon cas. Mais si la th\u00e9orie est une chose, la pratique en est une autre\u00a0: apr\u00e8s \u00e9criture d&rsquo;un code source propre en apparence, permettant l\u2019envoi de quelques codes de t\u00e9l\u00e9commande, et apr\u00e8s c\u00e2blage ad\u00e9quat sur plaque d\u2019essai, la clim ne r\u00e9agit pas aux signaux envoy\u00e9s. Je dois me rendre \u00e0 l\u2019\u00e9vidence\u00a0: \u00e7a ne fonctionne pas. Reste \u00e0 trouver pourquoi.<\/p>\n<h3>\u00c0 la recherche de la copie conforme du signal<\/h3>\n<p>Si \u00e7a ne fonctionne pas, c\u2019est probablement parce que <strong>ce que j\u2019envoie ne correspond pas \u00e0 ce que je souhaite envoyer<\/strong>. Pour le v\u00e9rifier, le mieux est de prendre la tension \u00e0 l\u2019oscilloscope aux bornes de la LED et de v\u00e9rifier que le signal transmis est conforme \u00e0 ce que j\u2019attends. Les mesures \u00e0 l\u2019oscilloscope ne m\u2019aident pas \u00e9norm\u00e9ment\u00a0: mon appareil de mesure \u00e9tant assez ancien d&rsquo;une part (\u00e0 l&rsquo;instar d&rsquo;un T-800 : <em>old, not obsolete<\/em>), et le signal \u00e9mis \u00e9tant assez long d&rsquo;autre part, enregistrer ou afficher \u00e0 l&rsquo;\u00e9cran la totalit\u00e9 ce celui-ci ne s\u2019effectue qu\u2019au prix de l\u2019impossibilit\u00e9 de distinguer pr\u00e9cis\u00e9ment chaque bit.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-1 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t\t#gallery-1 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-1 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-1' class='gallery galleryid-3051 gallery-columns-2 gallery-size-medium'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-1.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-1-300x225.jpg\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-3060\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-1-300x225.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-1-768x576.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-1.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-3060'>\n\t\t\t\tEssais de visualisation \u00e0 l&rsquo;oscilloscope&#8230;\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-2.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"225\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-2-300x225.jpg\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-1-3061\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-2-300x225.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-2-768x576.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/tests-oscillo-2.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-1-3061'>\n\t\t\t\t&#8230; r\u00e9alisables mais peu exploitables.\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Je dois donc trouver autre chose. J\u2019adopte une solution que certains bidouilleurs de tout poil connaissent bien\u00a0: r\u00e9cup\u00e9rer et enregistrer le signal via <strong>l\u2019entr\u00e9e Line-In d\u2019une carte son<\/strong>, et le visualiser gr\u00e2ce \u00e0 un logiciel sp\u00e9cialis\u00e9 comme <a href=\"https:\/\/www.zeitnitz.eu\/scope_en\" target=\"_blank\">Soundcard Scope<\/a>, ou tout autre logiciel d&rsquo;\u00e9dition sonore \u00e0 ma convenance.<\/p>\n<p><span style=\"color: #ff0000;\"><strong>Attention\u00a0:<\/strong> balancer n\u2019importe quoi en entr\u00e9e de la carte son int\u00e9gr\u00e9e de votre tout dernier PC gamer de roxor est susceptible d\u2019endommager irr\u00e9m\u00e9diablement tout ou partie de celui-ci. Ne connectez <strong>JAMAIS<\/strong> un signal \u00e9lectrique en entr\u00e9e d\u2019une carte son sans en conna\u00eetre les caract\u00e9ristiques intrins\u00e8ques, et faites en toutes circonstances le n\u00e9cessaire pour que le signal en sortie du syst\u00e8me soit dissip\u00e9 dans une r\u00e9sistance de valeur ad\u00e9quate, afin que le signal effectivement transmis \u00e0 l\u2019entr\u00e9e Line-In de la carte son soit sans danger pour l\u2019\u00e9lectronique de la machine.<\/span><\/p>\n<p>Les avertissements de circonstance \u00e9tant lanc\u00e9s, passons \u00e0 la d\u00e9monstration. Je programme l&rsquo;Arduino pour qu&rsquo;il puisse \u00e9mettre un signal Airton \u00e0 la demande. J&rsquo;ajoute la photodiode sur le montage, celle-ci est aliment\u00e9e par l&rsquo;Arduino, mais ici l&rsquo;Arduino ne cherchera pas \u00e0 lire le signal re\u00e7u par la photodiode. Le but est de mettre ce signal \u00e0 port\u00e9e de la<strong> carte son<\/strong>, gr\u00e2ce \u00e0 un cordon Jack 3.5 mm, pour qu&rsquo;il soit mesur\u00e9. Pour maximiser mes chances de ne pas flinguer ma carte son int\u00e9gr\u00e9e, j&rsquo;ai pris soin d&rsquo;att\u00e9nuer le signal sorti de la photodiode, en utilisant un pont diviseur 4.7 k\u03a9 + 470 \u03a9, et d&rsquo;effectuer la mesure aux bornes de la r\u00e9sistance de\u00a0470 \u03a9, comme indiqu\u00e9 sur les sch\u00e9mas ci-dessous. J\u2019ai \u00e9galement utilis\u00e9 une technique commun\u00e9ment d\u00e9nomm\u00e9e <em>\u00ab\u00a0ceinture-bretelles\u00a0\u00bb<\/em> : j&rsquo;ai achet\u00e9 pour une bouch\u00e9e de pain une petite <a href=\"http:\/\/www.amazon.fr\/gp\/product\/B003UR9B8M\" target=\"_blank\">carte son USB<\/a>, que j&rsquo;utilise pour les mesures en lieu et place de ma carte son int\u00e9gr\u00e9e, en me disant qu&rsquo;avec un peu de chance c&rsquo;est la carte son USB qui fumera avant ma carte-m\u00e8re en cas d&rsquo;erreur de c\u00e2blage malencontreuse.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-2 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-2 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t\t#gallery-2 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-2 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-2' class='gallery galleryid-3051 gallery-columns-2 gallery-size-medium'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p1.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"215\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p1-300x215.jpg\" class=\"attachment-medium size-medium\" alt=\"\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p1-300x215.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p1-768x551.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p1.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p2.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"211\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p2-300x211.jpg\" class=\"attachment-medium size-medium\" alt=\"\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p2-300x211.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p2-768x540.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/fritzing-s01e03-p2.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Je lance mon logiciel d\u2019\u00e9dition sonore favori et programme un enregistrement sur la carte son USB avec un taux d\u2019\u00e9chantillonnage ad\u00e9quat. Dans mon cas, 44100 Hz suffisent pour distinguer nettement le code binaire, mais j&rsquo;ai \u00e9t\u00e9 oblig\u00e9 de travailler en \u00e9chantillonnant entre 96000 Hz et 192000 Hz pour m&rsquo;assurer que les timings des fronts montants et descendants sont conformes \u00e0 ceux observ\u00e9s quand le signal provient de la t\u00e9l\u00e9commande d&rsquo;origine. Au final, l\u2019affichage de l\u2019allure du signal me permet de dissiper tout doute concernant les \u00e9ventuels bugs de logique dans mon code, et de rectifier des inexactitudes de timings, provoqu\u00e9es en partie par la fonction <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/DelayMicroseconds\" target=\"_blank\">delayMicroseconds()<\/a>.<\/p>\n\n\t\t<style type=\"text\/css\">\n\t\t\t#gallery-3 {\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t\t#gallery-3 .gallery-item {\n\t\t\t\tfloat: left;\n\t\t\t\tmargin-top: 10px;\n\t\t\t\ttext-align: center;\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t\t#gallery-3 img {\n\t\t\t\tborder: 2px solid #cfcfcf;\n\t\t\t}\n\t\t\t#gallery-3 .gallery-caption {\n\t\t\t\tmargin-left: 0;\n\t\t\t}\n\t\t\t\/* see gallery_shortcode() in wp-includes\/media.php *\/\n\t\t<\/style>\n\t\t<div id='gallery-3' class='gallery galleryid-3051 gallery-columns-2 gallery-size-medium'><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"204\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-300x204.jpg\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-3-3065\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-300x204.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-768x522.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-1024x696.jpg 1024w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal.jpg 1399w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-3-3065'>\n\t\t\t\tVisualisation impeccable du signal sur une des 2 voies, en \u00e9chantillonnant \u00e0 44100 Hz.\n\t\t\t\t<\/dd><\/dl><dl class='gallery-item'>\n\t\t\t<dt class='gallery-icon landscape'>\n\t\t\t\t<a href='https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-with-zoom.jpg'><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"204\" src=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-with-zoom-300x204.jpg\" class=\"attachment-medium size-medium\" alt=\"\" aria-describedby=\"gallery-3-3066\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-with-zoom-300x204.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-with-zoom-768x524.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/recorded-signal-with-zoom.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a>\n\t\t\t<\/dt>\n\t\t\t\t<dd class='wp-caption-text gallery-caption' id='gallery-3-3066'>\n\t\t\t\tIl est m\u00eame possible de zoomer d&rsquo;assez pr\u00eat sur le signal enregistr\u00e9 afin de v\u00e9rifier les timings. Dans ce cas, pr\u00e9f\u00e9rez un \u00e9chantillonnage plus fin.\n\t\t\t\t<\/dd><\/dl><br style=\"clear: both\" \/>\n\t\t<\/div>\n\n<p>Au terme de cette investigation, je suis en mesure de confirmer que le code binaire et les timings de codage \u00e9mis par l\u2019Arduino sont absolument conformes \u00e0 l\u2019attendu. Pourtant, en essayant \u00e0 nouveau d\u2019envoyer mon signal sur ma climatisation, celle-ci ne r\u00e9agit toujours pas.<\/p>\n<h3>\u00c0 la recherche de la solution \u00e9vidente<\/h3>\n<p>Parfois, dans la vie, on a l\u2019impression que le sort s\u2019acharne. J&rsquo;ai tout fait dans les r\u00e8gles : obtenu une copie conforme du signal, des timings r\u00e9gl\u00e9s quasiment \u00e0 la microseconde pr\u00e8s, et pourtant la clim ne montre toujours aucun signe de vie. Avouons que c&rsquo;est rageant.<\/p>\n<p>\u00c0 ce stade, apr\u00e8s une p\u00e9riode de r\u00e9flexion d\u00e9passant le temps n\u00e9cessaire pour taper violemment du poing sur mon bureau en vocif\u00e9rant des injures chamarr\u00e9es, j&rsquo;en arrive \u00e0 \u00e9mettre les <strong>hypoth\u00e8ses suivantes<\/strong> :<\/p>\n<ol>\n<li>La diode \u00e9met le bon code binaire mais \u00e0 une intensit\u00e9 lumineuse insuffisante pour \u00eatre capt\u00e9e par le r\u00e9cepteur de la clim.<\/li>\n<li>La diode \u00e9met le bon code binaire mais modul\u00e9 \u00e0 une fr\u00e9quence non reconnue par le r\u00e9cepteur de la clim.<\/li>\n<li>La diode \u00e9met le bon code binaire mais pas \u00e0 la longueur d\u2019onde exacte accept\u00e9e par le r\u00e9cepteur de la clim.<\/li>\n<\/ol>\n<p>La difficult\u00e9 pour ces points r\u00e9side dans l&rsquo;impossibilit\u00e9 d\u2019effectuer les <strong>mesures ad\u00e9quates<\/strong>, tout le monde ne disposant pas chez soi d&rsquo;un spectrom\u00e8tre. Je balaie alors les hypoth\u00e8ses dans l&rsquo;ordre :<\/p>\n<ul style=\"list-style-type: disc;\">\n<li><strong>Intensit\u00e9 lumineuse :<\/strong> pour lever le doute sur le point n\u00b01, je me rapproche et m&rsquo;\u00e9loigne du r\u00e9cepteur de la clim pendant que mon montage \u00e9met les codes binaires en continu. Pas de changement. Je joue sur la valeur de la r\u00e9sistance en s\u00e9rie avec la LED pour que la luminosit\u00e9 soit plus intense, en veillant \u00e0 ne pas cramer la LED. S&rsquo;entend : plus intense pour le r\u00e9cepteur de la clim, pas pour mes yeux, \u00e9videmment. Pas de changement. Je change alors de strat\u00e9gie. Je dispose d\u2019un ampli home cin\u00e9ma qui se pilote lui-aussi par t\u00e9l\u00e9commande IR, et j&rsquo;avais pu constater lors de mes essais pr\u00e9c\u00e9dents que cette t\u00e9l\u00e9commande diffuse des codes NEC. Je programme quelques-uns de ces codes dans l\u2019Arduino et les rejoue en direction de l\u2019ampli, \u00e0 bonne distance. Aucun probl\u00e8me, les codes programm\u00e9s sont bien reconnus par l\u2019ampli jusqu\u2019\u00e0 environ 2m. Il ne s\u2019agit pas \u00e0 priori d\u2019un probl\u00e8me d\u2019intensit\u00e9 lumineuse.<\/li>\n<\/ul>\n<ul style=\"list-style-type: disc;\">\n<li><strong>Fr\u00e9quence de la modulation :<\/strong> pour lever le doute sur le point n\u00b02, j&rsquo;ai la possibilit\u00e9 d&rsquo;intervenir directement dans le code. C&rsquo;est une intervention qui s&rsquo;effectue une nouvelle fois \u00e0 l&rsquo;aveugle, car en r\u00e9alit\u00e9 lorsque je positionne un niveau logique haut sur la patte de l4arduino pilotant la LED, celle-ci n&rsquo;\u00e9met par r\u00e9ellement de mani\u00e8re continue mais plut\u00f4t par trains d&rsquo;impulsions lumineuses \u00e0 une fr\u00e9quence donn\u00e9e, par d\u00e9faut \u00e0 38 kHz dans le code. Lorsque je mesure la tension aux bornes de ma photodiode, comme celle-ci int\u00e8gre d\u00e9j\u00e0 un syst\u00e8me de lissage du signal, il ne m&rsquo;est pas possible de visualiser la fr\u00e9quence de ces impulsions \u00e0 l&rsquo;oscilloscope. Je visualise \u00e0 la place un autre niveau logique haut, dont la dur\u00e9e est proportionnelle \u00e0 la quantit\u00e9 d&rsquo;impulsions \u00e9mises. Il ne m&rsquo;est donc pas possible de mesurer simplement la fr\u00e9quence des impulsions \u00e9mises par la LED de la t\u00e9l\u00e9commande d&rsquo;origine sans la d\u00e9monter. Si le r\u00e9cepteur int\u00e9gr\u00e9 \u00e0 la clim est un peu capricieux, des impulsions dont la fr\u00e9quence est par exemple trop faible ne seront pas reconnues comme un niveau logique haut. Quoi qu&rsquo;il en soit, j&rsquo;ai la possibilit\u00e9 de jouer sur cette fr\u00e9quence d&rsquo;\u00e9mission directement dans le code. La biblioth\u00e8que <em>IRremote<\/em> de Ken\u00a0Shirriff, dont je me suis largement inspir\u00e9 (infos <a href=\"http:\/\/www.righto.com\/2009\/08\/multi-protocol-infrared-remote-library.html\" target=\"_blank\">ici<\/a> et <a href=\"https:\/\/github.com\/z3t0\/Arduino-IRremote\" target=\"_blank\">ici<\/a>), g\u00e9n\u00e8re ces impulsions en utilisant les registres PWM (Pulse-Width Modulation) de l&rsquo;Arduino, et fournit les fonctions de haut niveau pour g\u00e9n\u00e9rer ces impulsions sur une plage comprise entre 36 et 40 kHz. Je teste donc toutes les valeurs de cette plage par pas de 1 kHz, sans am\u00e9lioration. Le doute n&rsquo;est pas enti\u00e8rement lev\u00e9, mais les probabilit\u00e9s que le probl\u00e8me vienne de la fr\u00e9quence des impulsions s&rsquo;amenuise. Je reviens donc \u00e0 la valeur de 38 kHz et passe au point suivant. Pour plus de d\u00e9tails sur l&rsquo;utilisation du PWM sur Arduino, je conseille vivement la lecture de <a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/SecretsOfArduinoPWM\" target=\"_blank\">cet article<\/a>.<\/li>\n<\/ul>\n<ul style=\"list-style-type: disc;\">\n<li><strong>Longueur d&rsquo;onde :<\/strong> pour lever le doute sur le point n\u00b03, peu d\u2019options\u00a0: je commande sur Conrad et DealeXtreme une dizaine de types de LED de longueur d&rsquo;onde diff\u00e9rentes (infrarouge, mais pas seulement, on ne sait jamais). La commande re\u00e7ue, je teste chaque mod\u00e8le de diode un par un sur ma plaque d\u2019essai. Et enfin, bingo\u00a0! Sur la dizaine de LED diff\u00e9rentes en ma possession, un seul mod\u00e8le du lot fait r\u00e9agir la clim\u00a0! Il va sans dire que partager cette information pourra \u00e9pargner bien des peines \u00e0 toute personne effectuant les m\u00eames recherches que moi, et mine de rien, je sais qu&rsquo;il y en a. La LED miraculeuse provient de <a href=\"http:\/\/www.dx.com\/s\/124841\" target=\"_blank\">DealeXtreme, r\u00e9f\u00e9rence n\u00b0 124841<\/a>.<\/li>\n<\/ul>\n<div id=\"attachment_3068\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2015\/11\/order-conrad.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3068\" class=\"wp-image-3068 size-medium\" src=\"http:\/\/cdn.alphak.net\/news\/wp-content\/uploads\/sites\/2\/2015\/11\/order-conrad-300x225.jpg\" alt=\"Livraison de chez Conrad : un bel assortiment de LED pour usage imm\u00e9diat et de microcontr\u00f4leurs pour usage futur.\" width=\"300\" height=\"225\" srcset=\"https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/order-conrad-300x225.jpg 300w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/order-conrad-768x576.jpg 768w, https:\/\/cdn.alphak.net\/wp-content\/uploads\/sites\/2\/2015\/11\/order-conrad.jpg 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3068\" class=\"wp-caption-text\">Livraison de chez Conrad : un bel assortiment de LED pour usage imm\u00e9diat et de microcontr\u00f4leurs pour usage futur.<\/p><\/div>\n<p>Pour f\u00eater \u00e7a, je mets \u00e0 disposition le code source de mon framework pour Arduino <em>\u00ab\u00a0AirtonRemote\u00a0\u00bb<\/em> ainsi qu&rsquo;un script basique d&rsquo;\u00e9mission de codes IR utilisant ce framework, sous la d\u00e9nomination <strong>\u00ab\u00a0Airton Emitter for Arduino\u00a0\u00bb<\/strong>, archive trouvable sur la page des <a href=\"http:\/\/www.alphak.net\/news\/telechargements\/\">t\u00e9l\u00e9chargements<\/a>. Le sch\u00e9ma Fritzing de cet article est incorpor\u00e9 dans l&rsquo;archive.<\/p>\n<p>Incontestablement, de <strong>gros progr\u00e8s<\/strong> ont \u00e9t\u00e9 faits \u00e0 ce stade. La prochaine \u00e9tape serait d&rsquo;arriver \u00e0 <strong>optimiser la partie mat\u00e9rielle<\/strong>. Utiliser un Arduino entier pour juste pour piloter une LED, c&rsquo;est un peu comme utiliser un rouleau compresseur pour assommer une mouche. \u00c7a fonctionne, mais au prix d&rsquo;une d\u00e9bauche de moyens. Des solutions similaires, mais plus l\u00e9g\u00e8res et peu co\u00fbteuses, seraient parfaitement envisageables. Mais nous verrons cela ult\u00e9rieurement.<\/p>\n<p>En d&rsquo;autres termes, c&rsquo;est tout pour aujourd&rsquo;hui. Dans mon prochain article, le SMS automatis\u00e9 fera son come-back pour des raisons inattendues.<\/p>\n","protected":false},"excerpt":{"rendered":"<p><a href=\"http:\/\/www.alphak.net\/news\/2014\/07\/winter-is-coming-s01e02\/\">Pr\u00e9c\u00e9demment<\/a>, sur AlphaK.net\u00a0: j\u2019ai r\u00e9ussi \u00e0<strong> capturer les codes infrarouges<\/strong> envoy\u00e9s par la t\u00e9l\u00e9commande de ma clim r\u00e9versible Airton CSH-12, et \u00e0 en comprendre le fonctionnement. J\u2019ai m\u00eame r\u00e9dig\u00e9, avec rigueur et amour, un document de sp\u00e9cifications sur le sujet, que je ne peux malheureusement pas rendre accessible en libre t\u00e9l\u00e9chargement sur ce site, pour des raisons l\u00e9gales. L\u2019\u00e9tape suivante consiste \u00e0 <strong>remplacer la t\u00e9l\u00e9commande d&rsquo;origine par un Arduino<\/strong> et lui faire <strong>\u00e9mettre les m\u00eames codes<\/strong>. Allais-je y arriver\u00a0? C\u2019est sur ce cliffhanger insoutenable que l\u2019\u00e9pisode pr\u00e9c\u00e9dent s\u2019\u00e9tait arr\u00eat\u00e9, plongeant l\u2019ensemble de mes lecteurs dans un \u00e9tat d\u2019angoisse sans pr\u00e9c\u00e9dent. C\u2019est justement l\u00e0 que nous reprenons le fil de l\u2019histoire.<\/p>\n\t<div class=\"post-teaser-block\">\r\n\t\t<div class=\"teaserHellip\">\r\n\t\t\t<span class=\"teaserLeft\">[<\/span><span class=\"teaserCenter\">&hellip;<\/span><span class=\"teaserRight\">]<\/span>\r\n\t\t<\/div>\r\n\t\t<div class=\"teaserText\">\r\n\t\t\t<a href=\"https:\/\/www.alphak.net\/news\/2015\/11\/winter-is-coming-s01e03\/\" title=\"Winter is coming \u2013 S01E03\" rel=\"bookmark\"><span class=\"teaserlink\">Lire la suite de l'article&nbsp;<i class=\"fa fa-chevron-right\"><\/i><\/span><\/a>\r\n\t\t<\/div>\r\n\t\t<a class=\"teaserLink\" href=\"https:\/\/www.alphak.net\/news\/2015\/11\/winter-is-coming-s01e03\/\" title=\"Winter is coming \u2013 S01E03\" rel=\"bookmark\"><\/a>\r\n\t<\/div>\r\n","protected":false},"author":1,"featured_media":3057,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[253],"tags":[323,221,324,36,325,352],"class_list":["post-3051","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projet-domotique","tag-airton","tag-arduino","tag-climatisation","tag-domotique","tag-infrarouge","tag-oscilloscope"],"_links":{"self":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/3051"}],"collection":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/comments?post=3051"}],"version-history":[{"count":18,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/3051\/revisions"}],"predecessor-version":[{"id":3078,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/posts\/3051\/revisions\/3078"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/media\/3057"}],"wp:attachment":[{"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/media?parent=3051"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/categories?post=3051"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alphak.net\/news\/wp-json\/wp\/v2\/tags?post=3051"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}