Codewerkplaats Les 4 (Infrarood afstandsbediening)
Dit is al de vierde les. Deze les gaan we de afstandsbediening aansluiten en programmeren. Met de afstandsbediening kunnen we het karretje eindelijk gaan besturen!
Eerst even dit [↑]
De vorige les hebben we de motoren aangesloten en het programma gebouwd waarmee het karretje met de ultrasoonsensor objecten kan ontwijken. Dat werkte hartstikke goed!
Bij het testen van de afstandsbediening kwam ik er achter dat pin 3 die we gebruikten voor de snelheid van de rechtermotor het samen met de afstandsbediening niet deed. De besturing van de rechtermotor heb ik daarom aangepast.
Het enige dat jij moet doen is:
- het stekkertje omdraaien dat bij de Arduino op de pinnen 3, 4 en 5 zit;
- de code gebruiken die je verderop in deze les tegenkomt.
Infrarood afstandsbediening [↑]
Deze afstandsbediening zendt onzichtbare lichtsignalen. Bij iedere knop hoort een signaal.
Met een IR-ontvangstmodule vangen we de lichtsignalen op.
LET OP: Knoopcelbatterij! [↑]
![]() |
De afstandsbediening werkt met een knoopcelbatterij (CR2025). Er zijn twee belangrijke dingen die iedereen over deze batterijen moet weten:
|
Knoopcelbatterijen zijn gevaarlijk als iemand ze inslikt [↑]
|
![]() |
Batterijen horen NIET bij het gewone afval [↑]
|
![]() |
IR-ontvangstmodule aansluiten [↑]
De IR-ontvangstmodule heeft drie aansluitpinnen:
- De pin bij het minteken is de GND (zwarte draad).
- De middelste pin hoort bij de 5V (rode draad).
- De pin met de letter S is de signaaldraad die naar pin D2 van de Arduino gaat.
Zo sluit je de IR-ontvanger aan op pin 2 van de Arduino
IR-ontvangstmodule op het chassis schroeven [↑]
Voor het bevestigen gebruiken we wat dunnere schroeven (M2,5 x 16) met kleinere moertjes en twee afstandsbusjes van 5 mm.

De IR-ontvangstmodule komt tussen de linker koplamp en linker motor. Het is handig om de koplamp even weg te draaien.
Het programma [↑]
Met het programma hieronder kunnen we de knoppen van de afstandsbediening hiervoor gebruiken:
Knop | Doet dit |
2 | Ga vooruit |
8 | Ga achteruit |
4 | Draai links |
6 | Draai rechts |
5 | STOP |
EQ | Koplampen AAN/UIT |
CH- | Mode Ultrasoon, het karretje rijdt vanzelf en ontwijkt objecten die in de weg staan |
Bibliotheken [↑]
Zorg dat je deze libraries in de IDE hebt geladen:
- L298N
- NewPing
- IRremote
De code [↑]
Kopieer de code hieronder en plak deze in de IDE op je laptop:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
// Versie 2024-03-26_1630 // Dit is de code die we gaan gebruiken bij de Codewerkplaats op 29-3-2024 // Geschreven door Chris Dorna, met dank aan Paul van Deelen die me hielp // bij het oplossen van het probleem dat de rechter motor niet meer bestuurd // kon worden als de bibliotheek IRremote werd gebruikt. #include <L298N.h> // We gebruiken de library L298N voor de motordriver // Dit programma is getest met versie 2.0.3 van deze bibliotheek #include <NewPing.h> // We gebruiken de library NewPing voor de ultrasoon afstandssensor // Dit programma is getest met versie 1.9.7 van deze bibliotheek #include <IRremote.hpp> // We gebruiken de library IRremote voor de afstandsbediening // Dit programma is getest met versie 4.3.0 van deze bibliotheek unsigned long ontvangenCode; // Variabele om code uit afstandsbediening in op te slaan #define pinLampRechts 6 // Nummer van de pin waarop de koplamp rechts is aangesloten. #define pinLampLinks 7 // Nummer van de pin waarop de koplamp links is aangesloten. // Maak L298N-object voor de rechter motor L298N motorRechts(5, 4, 3); // ENA, IN1, IN2 // Draad van pin 3 naar IN2 is bruin // Draad van pin 4 naar IN1 is rood // Draad van pin 5 naar ENA is bruin // Maak L298N-object voor de linker motor L298N motorLinks(9, 10, 11); // ENB, IN3, IN4 // Draad van pin 9 naar ENB is bruin // Draad van pin 10 naar IN4 is rood // Draad van pin 11 naar IN3 is oranje NewPing sonar(16, 17, 40); // Maak een NewPing-object met de naam 'sonar' // 16 = Pin 16 voor trigger // 17 = Pin 17 voor echo // 40 = maximale afstand in centimeter double gemetenAfstand = 0; // Wordt gebruikt om de afstand in op te slaan boolean modeUltrasoon = false; // Variabele om aan te geven of robotkarretje // in de mode 'Ultrasoon' moet werken int snelheid; // Variabele om snelheid van de motoren in op te slaan void setup() { pinMode(13, OUTPUT); // LED op de Arduino digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); pinMode(pinLampRechts, OUTPUT); pinMode(pinLampLinks, OUTPUT); // Hiermee kunnen we informatie van de Arduino naar de laptop sturen. // Dit is handig om fouten in het programma op te sporen Serial.begin(9600); Serial.println("Communicatie tussen Arduino en Serial Monitor van IDE gestart"); IrReceiver.begin(2); // Start IR-ontvanger (aangesloten op pin 2) digitalWrite(pinLampRechts, HIGH); // Koplamp Rechts AAN digitalWrite(pinLampLinks, HIGH); // Koplamp Links AAN snelheid = 125; motorLinks.setSpeed(snelheid); // Instellen snelheid (kan van 0 tot 255) motorRechts.setSpeed(snelheid); } void loop() { if (IrReceiver.decode()) { // Kijken of we een IR-signaal hebben ontvangen ontvangenCode = IrReceiver.decodedIRData.decodedRawData; Serial.println("--------------------"); // Stuur informatie naar de laptop, Serial.print("DEC: "); // dit werkt alleen als de USB-kabel is aangesloten Serial.println(ontvangenCode); // if (ontvangenCode != 0) { // != betekent NIET gelijk switch (ontvangenCode) { case 3125149440: // Knop CH- [ULTRASOON] // Gaan we gebruiken om robot in de stand 'Ultrasoon' te zetten modeUltrasoon = true; Serial.println("*** Knop CH- ***"); break; case 3108437760: // Knop CH Serial.println("*** Knop CH ***"); break; case 3091726080: // Knop CH+ Serial.println("*** Knop CH+ ***"); break; case 4077715200: // Knop 1 Serial.println("*** Knop 1 ***"); break; case 3877175040: // Knop 2 [RECHTDOOR] modeUltrasoon = false; Serial.println("*** Knop 2 [RECHTDOOR)] ***"); motorLinks.forward(); // vooruit motorRechts.forward(); // vooruit break; case 2707357440: // Knop 3 Serial.println("*** Knop 3 ***"); break; case 4144561920: // Knop 4 [LINKS] modeUltrasoon = false; Serial.println("*** Knop 4 [LINKS] ***"); motorLinks.stop(); motorRechts.forward(); // vooruit break; case 3810328320: // Knop 5 [STOP] modeUltrasoon = false; Serial.println("*** Knop 5 [STOP] ***"); motorLinks.stop(); // stop motorRechts.stop(); // stop break; case 2774204160: // Knop 6 [RECHTS] modeUltrasoon = false; Serial.println("*** Knop 6 [RECHTS] ***"); motorLinks.forward(); //vooruit motorRechts.stop(); break; case 3175284480: //Knop 7 Serial.println("*** Knop 7 ***"); break; case 2907897600: //Knop 8 [ACHTERUIT] modeUltrasoon = false; Serial.println("*** Knop 8 [ACHTERUIT] ***"); motorLinks.backward(); // achteruit motorRechts.backward(); // achteruit break; case 3041591040: //Knop 9 Serial.println("*** Knop 9 ***"); break; case 3910598400: //knop 0 Serial.println("*** Knop 0 ***"); break; case 4127850240: // Knop EQ [LAMPEN AAN/UIT] Serial.println("*** Knop EQ ***"); // Als de koplampen AAN zijn, gaan ze UIT en andersom // Eerder hebben we tegen de Arduino gezegd dat de pinnen 6 // (pinLampLinks) en 7 (pinLampRechts) worden gebruikt als OUTPUT. // met de digitalRead() hieronder kijken we of de lamp AAN of // UIT is. Met het uitroepteken geef je aan dat de waarde moet // worden omgekeerd. // Deze 'omkeertruc'is getest op een Arduino Nano digitalWrite(pinLampRechts, !digitalRead(pinLampRechts)); // Koplamp Rechts digitalWrite(pinLampLinks, !digitalRead(pinLampLinks)); // Koplamp Links break; case 4161273600: // knop MIN [GA LANGZAMER] Serial.println("*** Knop MIN ***"); Serial.print("Snelheid: "); Serial.println(snelheid); if (snelheid >= 25) { snelheid = snelheid - 25; motorLinks.setSpeed(snelheid); // Instellen snelheid motorRechts.setSpeed(snelheid); motorLinks.forward(); // De nieuwe snelheid wordt pas gebruikt motorRechts.forward(); // als je opnieuw een opdracht geeft } break; case 3927310080: // knop PLUS [GA SNELLER] Serial.println("*** Knop PLUS ***"); Serial.print("Snelheid: "); Serial.println(snelheid); if (snelheid <= 225) { snelheid = snelheid + 25; motorLinks.setSpeed(snelheid); // Instellen snelheid motorRechts.setSpeed(snelheid); motorLinks.forward(); // De nieuwe snelheid wordt pas gebruikt motorRechts.forward(); // als je opnieuw een opdracht geeft } break; } } IrReceiver.resume(); // IrReceiver weer starten } if (modeUltrasoon == true) { functieUltrasoon(); } } void functieUltrasoon() { // We beginnen met het meten we de afstand en zetten deze in // de variabele gemetenAfstand. gemetenAfstand = sonar.ping_cm(); if (gemetenAfstand > 0 && gemetenAfstand < 10) { // Dde gemeten afstand is kleiner dan 10 cm // - De twee is gelijk tekens '==' geven aan dat er twee dingen met // elkaar worden vergeleken. // - De twee rechte streepjes '&&', geven EN aan. digitalWrite(13, HIGH); // LED op Arduino AAN motorLinks.forward(); // motor eerst stoppen vóór je richting omkeert motorRechts.forward(); // motor eerst stoppen vóór je richting omkeert motorLinks.backward(); // achteruit motorRechts.backward(); // achteruit delay(500); motorLinks.stop(); delay(500); motorRechts.stop(); } else { // De gemeten afstand is groter dan 10 cm digitalWrite(13, LOW); // LED op Arduino UIT motorLinks.forward(); // vooruit motorRechts.forward(); // vooruit } } |
Link naar de website [↑]
Colofon [↑]
![]() |
Huis73 | maakte het mogelijk om deze lessen te schrijven en organiseert de lessen. |
![]() |
Digitaal Atelier | had de spullen voor het lasersnijden en 3d-printen van de onderdelen en is ook nog eens een hartstikke leuke ruimte waar iedereen hartstikke leuke dingen kan doen. |
![]() |
Stichting Leaphy | was de eerste die in Nederland op grote schaal Arduino-robotkarretjes beschikbaar stelde en ook nog eens de programmeeromgeving Leaphy Easybloqs ontwikkelde en voor iedereen beschikbaar stelt. |
![]() |
CodeKids | bedacht de lessen, ontwikkelde een eigen (goedkoper) karretje en verzorgt de lessen. |
![]() |
Iedereen mag materiaal uit deze lessen (her)gebruiken als daarbij de bron (www.codekids.nl) wordt vermeld. |