Bekijk de 38 andere Arduino lessen

9 · Arduino aansturen met afstandbediening (HX1838 VS1838)


In deze video maak ik nog gebruik van IRremote v2.0 Op https://github.com/Arduino-IRremote/Arduino-IRremote#converting-your-2x-program-to-the-3x-version staan de stappen om hem voor 3.0 geschikt te maken

Introductie

Een afstandsbediening heeft iets magisch: door de lucht gegevens versturen zonder dat je aan een draad vast zit. In deze deze Nederlandstalige Arduino tutorial voor beginners ga ik je uitleggen hoe je dit zelf kunt maken 😃

Lesmateriaal

Onderaan op deze pagina vind je de knop lesmateriaal waarmee je het lesmateriaal kunt downloaden. Dit materiaal bestaat uit de code, schakelschema en andere bestanden die in de les worden gebruikt.

Infrarood

De afstandsbediening in deze tutorial maakt gebruik van infrarood. Dit kan door mensen niet worden waargenomen. Soms kun je via je telefoon dit licht zichtbaar maken. Open op je telefoon de camera. Richt nu een afstandsbediening richting de lens. Je ziet dan het lampje oplichten. De signalen van de afstandsbediening kunnen niet door materialen heen. Daarom werkt de afstandsbediening niet als er iemand bijvoorbeeld de ontvanger afdekt.

Infrarood afstandsbediening zichtbaar op camera
Infrarood afstandsbediening zichtbaar op camera

Signalen

Als de ontvanger alleen maar kijkt of het lampje op de afstandsbediening aan staat, dan kunnen we maar 1 signaal versturen. Op de meeste afstandsbedieningen zitten veel meer knoppen. Om het verschil tussen verschillende knoppen te zien is een slimme truc gebruikt: knipperen. Door de snelheid van het knipperen aan te passen kan de ontvanger veel meer signalen onderscheiden.

HX1838 VS1838 infrarood ontvanger

IR ontvanger
HX1838 VS1838 infrarood ontvanger

Aan de bovenkant van ontvanger lijkt een LED te zitten. Dit is het echter niet. Hier zit de IR ontvanger. Verder heeft de ontvanger drie pins:

  • - of GND is de aarde (ground)
  • + of Vcc is 5V
  • S of TRIG is de signaal pin

Via de S pin kunnen we straks de ontvanger uitlezen.

De schakeling

HX1838 VS1838 infrarood ontvanger aangesloten op de Arduino
HX1838 VS1838 infrarood ontvanger aangesloten op de Arduino

Druk de HX1838 VS1838in het breadboard en sluit de volgende jumper wires aan:

  • De GND op de Arduino -> de linker pin van de sensor
  • De 5V op de Arduino -> de middelste pin van de sensor
  • De 12 op de Arduino -> de rechter pin van de sensor

Bibliotheken

Ook in deze les maken we gebruik van een bibliotheek. Deze bibliotheek regelt alle afhandeling van de IR signalen:

1 #include <IRremote.h>

Mocht je deze nog niet hebben, dan kun je ze installeren via de Arduino IDE:

Schets ▸ Bibliotheek gebruiken ▸ Bibliotheken beheren

Zoek hier op IRremote, als het goed is vind je dan de bibliotheek van shirriff.

Arduino Code

We beginnen de code met het definiëren van twee variabelen:

1 int IrReceiverPin = 12;
2 decode_results results;
  • IrReceiverPin is de pin waarop we de trigger hebben aangesloten.
  • results is de variabele waar we het de ontvangen knop-code in opslaan. Deze is van het type decode_results Dit type komt uit de IRremote bibliotheek.

Ontvanger initialiseren

1 IRrecv irrecv(IrReceiverPin);

De volgende regel is wat ingewikkelder. We hebben aan het begin de IRremote bibliotheek aan ons project toegevoegd. Deze bevat een functie die we kunen gebruiken.

In dit geval maken we de variabele irrecv aan en geven we de pin mee waarop deze is aangesloten. In ons geval is deze in IrReceiverPin opgeslagen.

setup()

1 void setup() {
2   Serial.begin(9600);                 
3   pinMode(LED_BUILTIN, OUTPUT);       
4   Serial.println("IR-ontvanger wordt gestart...");
5 
6   irrecv.enableIRIn();                
7   Serial.println("IR-ontvanger actief");
8 
9   digitalWrite(LED_BUILTIN, LOW);
10 }

Als eerste initialiseren we de seriële monitor. Daarna stellen we de LED_BUILTIN in als uitvoer en printen we de start melding naar de seriële monitor.

Vervolgens vertellen we tegen de IR ontvanger dat deze kan gaan lezen en actief kan worden.

loop()

1 // Herhaal oneindig
2 void loop() {
3   if (irrecv.decode(&results)) {
4 
5     Serial.println(results.value, HEX);
6 
7     irrecv.resume();
8 
9     switch (results.value) {
10         case 0xFF42BD:  // knop *
11             digitalWrite(LED_BUILTIN, HIGH);
12             break;
13 
14         case 0xFF52AD:  // knop #
15             digitalWrite(LED_BUILTIN, LOW);
16             break;        
17     }
18 
19   }
20 
21   delay(100);         
22 }

Uitlezen van sensor()

1 irrecv.decode(&results)

Deze regel houdt in de gaten of er een nieuw signaal is ontvangen. Wat deze hier gebeurd is dat de decode functie als parameter &results krijgt. Dit is het geheugenadres waar de variabele is opgeslagen. Op deze manier kan de functie de ontvangen IR waarde hier opslaan. Het resultaat is een hexdecimale waarde. In dit geval bestaat de waarde uit 6 posities bijvoorbeeld: 0xFF52AD. Aan het begin zie je 0x staan. Hiermee wordt aangegeven dat het om een hexadecimale waarde gaat.

Met irrecv.resume(); vertellen we de ontvanger dat deze verder kan luisteren naar nieuwe signalen.

Ingedrukte knop bepalen

Met switch (results.value) gaan we bepalen welke knop is ingedrukt. Op de seriële monitor zien we code van de ingdrukte knop. Op de manier kunnen de de case goed instellen. In mijn geval 0xFF42BD voor de * knop en 0xFF52AD voor de # knop.

Tot slot wachten we 100ms totdat opnieuw wordt gekeken of er een knop is ingedrukt.

Code uploaden naar Arduino

Ons programma is nu klaar om naar de Arduino te worden gestuurd. Open hierna de seriële monitor:

Hulpmiddelen ▸ Seriële monitor

Ontvangen signalen door infrarood ontvanger
Ontvangen signalen door infrarood ontvanger

Druk nu op verschillende knoppen op je afstandbediening. Als het goed is zie je nu de ontvangen codes in de seriële monitor.

9 &middot; Arduino aansturen met afstandbediening (HX1838 VS1838) schakelschema

Bas van Dijk

Over Bas on Tech


Mijn naam is Bas van Dijk, ondernemer, freelance frontend developer en maker. Onder de naam "Bas on Tech" bied ik op YouTube videolessen aan over technische onderwerpen zoals Arduino en 3D-printen.

De video’s zijn in het Nederlands met ondertiteling, zodat mensen met een gehoorbeperking ze ook kunnen volgen.

Jaren geleden toen ik mijn eerste Arduino kocht had ik maar één doel: zo snel mogelijk een LCD schermpje aansluiten en er een tekst op laten zien. Na allerlei bronnen te hebben geraadpleegd kwam ik er na veel puzzelen eindelijk uit. Ik was als een kind zo blij met die paar letters op een geel schermpje.

Met Bas on Tech wil ik mijn kennis delen zodat ook anderen deze blijheid kunnen ervaren. Ik heb gekozen voor kort en krachtige YouTube video’s, met een duidelijke vaste opbouw en één onderwerp per video. Daarnaast staan onder elke video links naar de broncode en webshops waar de onderdelen te koop zijn.