Les 21/31: Gebruik van infrarood afstandsbediening met Arduino | SunFounder Robojax
Introductie
In deze les verkennen we de fascinerende wereld van infraroodcommunicatie (IR) door een project te bouwen dat signalen van een standaard afstandsbediening decodeert met behulp van een Arduino. Met dit project kun je detecteren welke knop op een IR-afstandsbediening wordt ingedrukt en acties dienovereenkomstig activeren, zoals het inschakelen van een zoemer. De mogelijkheid om met IR-afstandsbedieningen te communiceren opent een breed scala aan praktische toepassingen, van eenvoudige domotica tot aangepaste besturingssystemen.
Hier zijn enkele inspirerende ideeën voor wat je met deze technologie kunt bouwen:
- Universele afstandsbediening vervangen: Maak een aangepaste afstandsbediening voor je tv, audiosysteem of andere IR-gestuurde apparaten.
- Domotica: Bedien lampen, ventilatoren of andere apparaten door op een knop van een standaard afstandsbediening te drukken.
- Interactieve projecten: Bouw een beveiligingssysteem dat een alarm activeert wanneer een specifieke knop wordt ingedrukt.
- Robotica-besturing: Gebruik een IR-afstandsbediening om de bewegingen en acties van een robot draadloos te besturen.
- Toegankelijkheidshulpmiddelen: Ontwikkel een eenvoudige afstandsbediening met grote knoppen voor mensen met beperkte mobiliteit.
Hardware & componenten
Dit project is opgebouwd rond een paar eenvoudige componenten, die allemaal doorgaans zijn inbegrepen in startersets zoals de SunFounder 3-in-1-kit. Je hebt nodig:
- Een Arduino-bord (bijv. Uno)
- Een IR-ontvangermodule (bijv. TSOP38238 of vergelijkbaar)
- Een standaard IR-afstandsbediening (met een CR2025-batterij)
- Een passieve zoemer
- Jumperdraden en een breadboard
Bedradingsgids
Hier is het eenvoudige bedradingsschema voor dit project. De IR-ontvanger is het belangrijkste onderdeel. Wanneer je naar het gebogen oppervlak van de ontvanger kijkt, is de pinindeling als volgt:
- Rechterpin: Verbind met de 5V-pin op de Arduino.
- Middelste pin: Verbind met de GND-pin op de Arduino.
- Linkerpin (signaal): Verbind met digitale pin 11 op de Arduino.
Verbind daarnaast, voor het actiegedeelte van het project, de positieve (langere) poot van de zoemer met digitale pin 2 en de andere poot met GND.
Uitleg van de code
Dit project vertrouwt op de IRremote-bibliotheek om de complexe taak van het decoderen van de infraroodsignalen te verwerken. De code is gestructureerd om eerst de specifieke codes van je afstandsbediening te leren en deze vervolgens te gebruiken om acties te activeren. Laten we de door de gebruiker configureerbare delen opsplitsen.
Eerst definiëren we de pin waarmee de signaaldraad van de IR-ontvanger is verbonden. Dit is een cruciale configuratie die moet overeenkomen met je fysieke bedrading.
const int IR_RECEIVE_PIN = 11; // Definieer het pinnummer voor de IR-sensor
In de setup()-functie wordt de IR-ontvanger geïnitialiseerd met behulp van de pin die we zojuist hebben gedefinieerd. Dit vertelt de bibliotheek om te beginnen met luisteren naar signalen op die pin.
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start de IR-ontvanger
De kern van de actielogica bevindt zich in de loop(). De code controleert of er een knop is ingedrukt en decodeert deze. De functie decodeKeyValue() is een aangepaste functie die de ruwe hexadecimale code van de afstandsbediening vertaalt naar een leesbare string zoals "POWER" of "MUTE". Dit is het deel dat je moet aanpassen zodat het overeenkomt met jouw specifieke afstandsbediening. De voorbeeldcode definieert een buzzerPin en schakelt deze alleen in wanneer de knop "POWER" wordt ingedrukt.
const int buzzerPin = 2; // Definieer de pin voor de zoemer
// ... binnen loop()
if (decodedValue == "POWER") {
digitalWrite(buzzerPin, HIGH); // Zet de zoemer aan
} else {
digitalWrite(buzzerPin, LOW); // Zet de zoemer uit
}
Hoe te gebruiken: De functie decodeKeyValue() is de sleutel tot het aanpassen van dit project. Om het met je eigen afstandsbediening te gebruiken, moet je eerst de code uitvoeren met de Seriële Monitor geopend. Druk op elke knop van je afstandsbediening en noteer de hexadecimale waarde die voor elke knop wordt weergegeven. Werk vervolgens de switch-instructie in de functie decodeKeyValue() bij om die waarden aan betekenisvolle namen te koppelen. Je kunt deze namen vervolgens in je if-instructies gebruiken om verschillende acties te activeren, net zoals het voorbeeld doet voor de knop "POWER".
Live project & demonstratie
Zodra de code is geüpload, open je de Seriële Monitor met een baudrate van 9600. Richt je afstandsbediening op de IR-ontvanger en druk op een knop. De Seriële Monitor toont de bijbehorende toetsnaam (bijv. "POWER", "MUTE"). Om de actie in werking te zien, druk je op de knop "POWER". Je zult de zoemer horen inschakelen. Door op een andere knop te drukken, zoals "MUTE", wordt de zoemer uitgeschakeld. Dit demonstreert een eenvoudig maar krachtig concept: het gebruik van een afstandsbediening om digitale uitgangen op je Arduino te activeren.
Hoofdstukken
- [00:00] Inleiding tot infraroodafstandsbediening met Arduino
- [01:25] Overzicht van de IR-ontvanger en -zender
- [02:24] Begrip van de IR-ontvangermodule en bedrading
- [03:31] Installeren van de IRremote-bibliotheek
- [04:22] Openen en uitleggen van de decodeercode
- [07:29] Uploaden van code en testen van afstandsbedieningstoetsen
- [08:41] Toevoegen van een actie: een zoemer bedienen
- [10:37] Voorbeeld van aankomende IR-projecten
/*
Lesson 21/31: Decoding Infrared from remote
Get this code and watch video Download and resource page https://robojax.com/RJT604
YouTube video https://www.youtube.com/watch?v=EAlqaVy8fYY
*/
#include <IRremote.h>
const int IR_RECEIVE_PIN = 11; // Define the pin number for the IR Sensor
String lastDecodedValue = ""; // Variable to store the last decoded value
void setup() {
Serial.begin(9600); // Start serial communication at 9600 baud rate
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK); // Start the IR receiver
}
void loop() {
if (IrReceiver.decode()) {
String decodedValue = decodeKeyValue(IrReceiver.decodedIRData.command);
if (decodedValue != "ERROR") {
Serial.println(decodedValue);
delay(100);
}
IrReceiver.resume(); // Enable receiving of the next value
}
}
String decodeKeyValue(long result)
{
switch(result){
case 0x16:
return "0";
case 0xC:
return "1";
case 0x18:
return "2";
case 0x5E:
return "3";
case 0x8:
return "4";
case 0x1C:
return "5";
case 0x5A:
return "6";
case 0x42:
return "7";
case 0x52:
return "8";
case 0x4A:
return "9";
case 0x9:
return "+";
case 0x15:
return "-";
case 0x7:
return "EQ";
case 0xD:
return "U/SD";
case 0x19:
return "CYCLE";
case 0x44:
return "PLAY/PAUSE";
case 0x43:
return "FORWARD";
case 0x40:
return "BACKWARD";
case 0x45:
return "POWER";
case 0x47:
return "MUTE";
case 0x46:
return "MODE";
case 0x0:
return "ERROR";
default :
return "ERROR";
}
}
Common Course Links
Common Course Files
Dingen die je misschien nodig hebt
-
Amazon
-
eBay
Hulpmiddelen en referenties
Nog geen middelen.
Bestanden📁
Arduino-bibliotheken (zip)
-
SunFounder's 3-in-1 Smart Car learning kit source code
3in1-kit-main-v2.zip12.80 MB