{"id":267,"date":"2020-10-05T12:02:05","date_gmt":"2020-10-05T10:02:05","guid":{"rendered":"https:\/\/www.picademie.nl\/?p=267"},"modified":"2024-11-20T16:53:54","modified_gmt":"2024-11-20T15:53:54","slug":"gpio-controle-met-afstandsbediening","status":"publish","type":"post","link":"https:\/\/www.picademie.nl\/index.php\/2020\/10\/05\/gpio-controle-met-afstandsbediening\/","title":{"rendered":"GPIO controle met IR afstandsbediening"},"content":{"rendered":"\n<pre class=\"wp-block-preformatted\">In dit project gaan we met een Infra Rood (IR) afstandsbediening de GPIO poorten aansturen. Het enige dat we hierbij nodig hebben is een Raspberry Pi, een IR ontvanger en een IR afstandsbediening. En uiteraard zal er een script geschreven moeten worden.<\/pre>\n\n\n\n<p><strong>De Infrarood Ontvanger<\/strong><br>Voor de IR ontvanger nemen we de TP1838 sensor. Deze sensor doet precies wat het moet doen, is goedkoop en eenvoudig op de Raspberry Pi aan te sluiten. Het belangrijkste van de IR ontvanger is te weten voor welke draaggolf het geschikt is. Daarnaast moet je weten welk protocol de afstandsbediening gebruikt. <\/p>\n\n\n\n<p><strong>TL1838 Infrarood Ontvanger<\/strong><br>&#8211; Voedingsspanning (Vcc) : 2.7 \u2013 5.5 V (voorkeur 3.3V)<br>&#8211; Ontvangst afstand           : 10 &#8211; 15 meter<br>&#8211; Draaggolf                           : 38 kHz<br>&#8211; Acceptatiehoek                 : +\/- 35 graden vanaf midden as<br>&#8211; Ruststroom (Icc)               : 0.8 \u2013 1.5 mA<\/p>\n\n\n\n<p><strong>De IR-sensor met de Raspberry Pi verbinden<\/strong><br>Het aansluiten van de IR-sensor op een Raspberry Pi is heel eenvoudig, want de IR-sensor heeft slechts 3 pinaansluitingen, te weten: Signaal, GND (ground) en Voeding (3.3V). <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"813\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2-1024x813.jpg\" alt=\"\" class=\"wp-image-532\" style=\"width:228px;height:193px\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2-1024x813.jpg 1024w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2-300x238.jpg 300w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2-768x610.jpg 768w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2-1536x1219.jpg 1536w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/5-x-V1838B-TL1838-38Khz-Universal-IR-Infrared-Receiver-Sensor-Durable-Metal-Cage-362093267606-2.jpg 1600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Op het breadboard verbinden we de uitgang met <span class=\"has-inline-color has-vivid-cyan-blue-color\">GPIO 18 (pin 12)<\/span>. Je kunt een andere pin kiezen, maar let er op dat je de juiste pin in de code opgeeft.<\/p>\n\n\n\n<p><strong>De afstandsbediening<\/strong><br>De meeste afstandsbedieningen werken door middel van nabij infrarood (IR) licht. Voor afstandsbedieningen ligt de golflengte normaal in het niet-zichtbare deel van het golflengtegebied, tussen 800 en 950 nm. <\/p>\n\n\n\n<p>De voornaamste reden van de populariteit van IR-afstandsbedieningen zijn:<br>\u2022 de lage kostprijs<br>\u2022 de simpele techniek<br>\u2022 het feit dat het licht zich in het niet-zichtbare spectrum bevindt.<\/p>\n\n\n\n<p><strong>Protocol<\/strong><br>De meeste grote merken gebruiken hun eigen infraroodprotocol. Dit is een samenstel van regels voor de indeling van de berichten die de afstandsbediening en het toestel zoals een TV of radio met elkaar uitwisselen. Deze regels moeten door beide toestellen correct worden gevolgd om de berichten juist te interpreteren. De bekendste protocollen zijn:<br>\u2022 Philips RC-5<br>\u2022 Philips RC-6<br>\u2022 Philips RC-MM<br>\u2022 Philips RECS80<br>\u2022 ITT-protocol<br>\u2022 JVC-protocol<br>\u2022 NEC-protocol (meest voorkomend)<\/p>\n\n\n\n<p>Hieronder zie je als voorbeeld het <strong>NEC Protocol<\/strong>. De datastring bestaat uit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Leading pulse (beginframe)<\/li>\n\n\n\n<li>Space<\/li>\n\n\n\n<li>Byte 1 (bitstream, adres 1)<\/li>\n\n\n\n<li>Byte 2 (bitstream &#8211; inverse, adres 2)<\/li>\n\n\n\n<li>Byte 3 (bitstream, commando 1)<\/li>\n\n\n\n<li>Byte 4 (bitstream &#8211; inverse, commando 2)<\/li>\n<\/ul>\n\n\n\n<p>In de afbeelding hieronder zie je goed hoelang ieder deel is. De totale duur van de string is 67,5ms.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"206\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/NEC-protocol.png\" alt=\"\" class=\"wp-image-519\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/NEC-protocol.png 640w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/NEC-protocol-300x97.png 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><figcaption class=\"wp-element-caption\">NEC Protocol voor IR communicatie<\/figcaption><\/figure>\n\n\n\n<p>Het&nbsp;<strong>beginframe<\/strong>&nbsp;(leading pulse) is een PWM (puls wave modulatie) &#8216;burst&#8217; van 9ms.&nbsp;In deze fase knippert de IR Led en volgt daarna een pauze van 4,5 ms. Daarna&nbsp;begint&nbsp;de&nbsp;<strong>bitstream<\/strong>&nbsp;.&nbsp;Er worden vier bytes verzonden.&nbsp;Slechts twee ervan bevatten de juiste gegevens, het adres van de ontvanger en het commando. NEC is doorschoten met hun logische inverse bytes.&nbsp;Dit zijn bits t.b.v. een foutcontrole, maar die wordt nauwelijks gebruikt.&nbsp;Van alle informatiebits worden eerst de LSB (minst belangrijk bit, 2<sup>0<\/sup>) gestreamd, code byte 1 = 10110001 = 141, dus niet 177. Bereken zelf de andere codes.<\/p>\n\n\n\n<p><strong>Python script<\/strong><br>Ik heb twee Python scripts beschikbaar gesteld die je nodig hebt om:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>de afstandsbediening te analyseren, ook wel het snifferscript.<\/li>\n\n\n\n<li>de GPIO poorten aan te sturen.<\/li>\n<\/ul>\n\n\n\n<p>Het snifferscript werkt volledig autonoom. Het geeft na het inlezen van de IR-datastroom de waarden van de eerste vier bytes weer van de afstandsbediening met het NEC protocol. Indien je een afstandsbediening met een ander protocol gebruikt zal je geen waarde op het display zien.<br><br>De uitkomst van de code levert per ingedrukte knop op de afstandsbediening unieke commando bytes op. Aan de hand van deze codes kun je voortbouwen om bijvoorbeeld de GPIO poorten aan te sturen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"410\" height=\"126\" src=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/sniffer-resultaat2.jpg\" alt=\"\" class=\"wp-image-548\" srcset=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/sniffer-resultaat2.jpg 410w, https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/sniffer-resultaat2-300x92.jpg 300w\" sizes=\"auto, (max-width: 410px) 100vw, 410px\" \/><figcaption class=\"wp-element-caption\">Meetwaarde van het snifferscript<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/IR_NEC_sniffer.zip\">Klik hier om het bestand te downloaden.<\/a><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/IR_NEC_sniffer.zip\" class=\"wp-block-file__button wp-element-button\" download>Download<\/a><\/div>\n\n\n\n<p><strong>Aansturing GPIO-pinnen<\/strong><br>Om de GPIO pinnen aan te kunnen sturen wordt voor een deel dezelfde code gebruikt die ook voor het snifferscript gebruikt is. Met het voorbeeld script heb ik tien GPIO pinnen opgenomen die je met de afstandsbediening kunt aansturen. Je zou iedere knop van de afstandsbediening kunnen gebruiken. De codes (byte 3) die je ervoor nodig hebt lees je met de sniffer.<\/p>\n\n\n\n<p>Als je de structuur van het script onderzoekt zul je zien dat het erg makkelijk is meerder GPIO pinnen in het script aan te brengen en er commando&#8217;s aan te geven, zoals het HOOG zetten van een GPIO pin en hoe lang het relais aan moet zijn. <\/p>\n\n\n\n<p>Een leuke bijkomstigheid is dat als je meerdere apparaten wilt schakelen, je de SainSmart 16 relais module er voor kunt gebruiken. Deze leg ik uit in een ander project.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Raspberry Pi - Gebruik IR afstandsbediening om relais aan te sturen (SainSmart 16 relay)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/8YwFzg-DdNw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/IR_NEC_GPIO_v5.zip\">De software die je in het filmpje ziet kun je hier downloaden.<\/a><a href=\"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/IR_NEC_GPIO_v5.zip\" class=\"wp-block-file__button wp-element-button\" download>Download<\/a><\/div>\n\n\n\n<p>Veel succes!<\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>In dit project gaan we met een Infra Rood (IR) afstandsbediening de GPIO poorten aansturen. Het enige dat we hierbij nodig hebben is een Raspberry <a class=\"mh-excerpt-more\" href=\"https:\/\/www.picademie.nl\/index.php\/2020\/10\/05\/gpio-controle-met-afstandsbediening\/\" title=\"GPIO controle met IR afstandsbediening\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":1,"featured_media":557,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"jetpack_featured_media_url":"https:\/\/www.picademie.nl\/wp-content\/uploads\/2020\/10\/ir-remotes2.jpg","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/267","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":0,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media\/557"}],"wp:attachment":[{"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.picademie.nl\/index.php\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}