Introduction

Les télécommandes sont assez standard, que ça soit en Arduino ou bien la télécommande de votre télévision. Elles vont ainsi envoyer un signal par infrarouge puis un récepteur infrarouge va recevoir et traiter ce signal.

Le signal va être envoyé sous forme de bit (0 ou 1) ce qui va être traduit en hexadécimal par le capteur infrarouge. Ce mot hexadécimal correspond à un bouton présent sur la télécommande.

télécommande arduino
HéxadécimalBouton Télécommande
0xFFA25DPOWER
0xFFE21DFUNC/STOP
0xFF629DVOL+
0xFF22DDFAST BACK
0xFF02FDPAUSE
0xFFC23DFAST FORWARD
0xFFE01FDOWN
0xFFA857VOL-
0xFF906FUP
0xFF9867EQ
0xFFB04FST/REPT
Héxadécimal Bouton Télécommande
0xFF6897 0
0xFF30CF 1
0xFF18E7 2
0xFF7A85 3
0xFF10EF 4
0xFF38C7 5
0xFF5AA5 6
0xFF42BD 7
0xFF4AB5 8
0xFF52AD 9
0xFFFFFFFF REPEAT

Pour que le message de la télécommande soit reçu, il faut un capteur infrarouge. Il existe plusieurs format de capteur infrarouge disponible pour la carte Arduino, notamment ces deux-là :

Capteur infrarouge

Pour les schémas nous utiliserons le capteur ky-022. Vous pouvez retrouver notre cours sur Fritzing si vous voulez importer le capteur dans le logiciel : https://arduinofactory.fr/fritzing-cours-schema/

Comment installé la librairie IRremote ?

Avant de programmer pour votre télécommande, vous devez installer la librairie IRremote prévu pour faire fonctionner plus facilement la télécommande.

Pour cela dans Arduino Ide vous devez aller dans outils puis gestionnaire de librairie :

installer librairie arduino

Dans le gestionnaire de librairie, tapez irRemote, puis téléchargez cette librairie.

Vous êtes maintenant prêt à faire la suite du cours.

Librairie irRemote

Faire fonctionner la télécommande

télécommande schéma

Voici le code vous permettant de faire fonctionner la télécommande. Toutes les commandes reçues en hexadécimal sont traduites en commande correspondant au bouton sur lequel vous avez appuyé.

int receiver = 11; // Signal de la télécommande
IRrecv irrecv(receiver);
decode_results results;
void translateIR() // Fonction reliant le signal à la fonction associée
// describing Remote IR codes
{
switch(results.value)
{
case 0xFFA25D: Serial.println("POWER"); break;
case 0xFFE21D: Serial.println("FUNC/STOP"); break;
case 0xFF629D: Serial.println("VOL+"); break;
case 0xFF22DD: Serial.println("FAST BACK"); break;
case 0xFF02FD: Serial.println("PAUSE"); break;
case 0xFFC23D: Serial.println("FAST FORWARD"); break;
case 0xFFE01F: Serial.println("DOWN"); break;
case 0xFFA857: Serial.println("VOL-"); break;
case 0xFF906F: Serial.println("UP"); break;
case 0xFF9867: Serial.println("EQ"); break;
case 0xFFB04F: Serial.println("ST/REPT"); break;
case 0xFF6897: Serial.println("0"); break;
case 0xFF30CF: Serial.println("1"); break;
case 0xFF18E7: Serial.println("2"); break;
case 0xFF7A85: Serial.println("3"); break;
case 0xFF10EF: Serial.println("4"); break;
case 0xFF38C7: Serial.println("5"); break;
case 0xFF5AA5: Serial.println("6"); break;
case 0xFF42BD: Serial.println("7"); break;
case 0xFF4AB5: Serial.println("8"); break;
case 0xFF52AD: Serial.println("9"); break;
case 0xFFFFFFFF: Serial.println(" Répéter");break;
default:
Serial.println(" Autre bouton ");
}
delay(500); // Permet de laisser le temps de recevoir le prochain signal
}
void setup() // Fonction Setup qui s'éxécute qu'une seule fois
{
Serial.begin(9600);
Serial.println("Démarrage du décodage");
irrecv.enableIRIn(); // On démarre le receveur
}
void loop() // Boucle qui s'éxécute à l'infini
{
if (irrecv.decode(&results)) // Permet de savoir demande au capteur si on a reçu un signal
{
translateIR();
irrecv.resume(); // Permet de recevoir la valeur suivante
}
}

Une fois le code téléversé, vous pouvez voir le résultat en ouvrant le Moniteur série de votre logiciel arduino et en le réglant sur 9600 bauds (qui est la valeur par défaut) afin de voir apparaitre les noms des boutons sur lequel vous avez appuyé. Pour cela vous devez avoir connecté votre carte arduino sur votre ordinateur afin que la liaison puisse se faire.

Voici le résultat que l’on obtient :

Moniteur série arduino télécommande

On peut voir ici qu’il y a écrit plusieurs fois Répéter. Cela veut dire que le capteur n’a pas eu le temps de capter l’information envoyé par la télécommande. Ceci arrive quand le signal n’est pas bien compris par le capteur en raison du bruit ajouté au signal qui brouille le signal de départ. Il nous faut donc une résistance qui va limiter ce bruit.

La télécommande avec une résistance de pull up

Voici le nouveau schéma avec l’ajout de la résistance de 220 ohms comme on a branché le capteur sur le port 3,3 volts. La résistance est à ajouter sur la sortie du signal.

télécommande schéma

Pour le code, c’est exactement le même que celui sans résistance. Voici ce que l’on obtient :

Moniteur série arduino télécommande

On peut voir ici que l’on a pas de « Répéter » ou de « Autre bouton » donc le signal est mieux compris par le capteur de télécommande.

Une télécommande et un moteur

On va maintenant voir comment démarrer et éteindre un moteur grâce à une télécommande. Ce projet concerne un moteur mais il peut être adapté pour un autre composant.

Voici le schéma à faire :

télécommande moteur schéma

Puis voici le code à exécuter pour que cela fonctionne :

#include "IRremote.h"
int receiver = 11; // Signal pin pour recevoir la valeur du capteur
int moteur =6;
int Etat = 0; // Permet de définir l'état du composant : 0 moteur éteint et 1 moteur allumé.

/*-----On récupère les fonctions de la librairie qui permettent de décoder le signal-----*/
IRrecv irrecv(receiver);
decode_results results;

void setup(){
    Serial.begin(9600);
    Serial.println("Démarrage du décodage");
    irrecv.enableIRIn(); // On démarre le décodage
}
void loop(){
    if (irrecv.decode(&results)) // Permet d'obtenir les résultats de la réception du signal
    {
        if (results.value == 0xFFA25D){
            Serial.println("POWER");
            Allumer_composant(); // Fonction qui permet de démarrer et d'éteindre le moteur
        }
        delay(500);
        irrecv.resume(); // Permet de recevoir la valeur suivante
    }
}
void Allumer_composant(){
    if (Etat==0){ // si la variable Etat est à 0 on démarre le moteur
        digitalWrite(moteur, HIGH);
    }
    Etat+=1;
    if (Etat==2){ // Si la variable état est à 2 on éteint le moteur
        digitalWrite(moteur, LOW);
        Etat=0;
    }
}

Le moteur va donc s’allumer quand on appuie sur le bouton POWER de la télécommande.

Pilotez vos projets depuis votre téléphone !

Dans notre application Arduino Factory, nous avons développé une télécommande Bluetooth qui vous permet de piloter à distance votre projet. Notre télécommande possède deux designs pour qu’elle s’adapte à tous les projets.

Vous pouvez la télécharger : ici

Ou encore, vous pouvez regarder ce cours pour plus de détails sur celle-ci.

télécommande arduino

Conclusion

Le cours sur la télécommande est maintenant terminé. Vous avez maintenant tous les outils pour piloter votre projet à distance en adaptant les schémas et code proposé dans ce cours.

Si vous êtes intéressé par notre télécommande Bluetooth sur l’application Arduino Factory, n’hésitez pas à aller regarder le cours dédié à celle-ci : ici.