Télécommande Infra-rouge personnalisable

Choses promises....

Comme je l'avais laissé entendre lors de la publication de l'article sur mon pré-ampli à tubes, je viens de développer une télécommande, émetteur  & récepteur, sur une base Arduino Nano et un kit de chez Aliexpress, où il est commercialisé moins de $3... En lisant la suite de l'article vous verrez que le récepteur est adaptable à tous les types en 38Khz. Donc pas de problème pour utiliser ou partager une zapette existante.

Pre tcm em

Pre tcm rx1

 

Un gros avantage, on peut écrire sois-même le programme et affecter l'action de chaque bouton à, ou aux sorties, de notre choix; (Ex.: arrêter l'ampli avant la commutation) et même composer un process complet affecté à une touche . La largeur des possibilités d'Arduino permet d'utiliser la même télécommande pour différents appareils, le tout étant d'éviter les redondances dues au "double emploi", puisque le principe que j'utilise est l'affectation d'une trame à une action (je vous mets plus bas un bout de soft qui va permettre de visualiser les trames en hexadécimales envoyées ) Le programme se charge de capturer le mot émis, via le récepteur infrarouge et de le comparer avec le mot attribués à chaque touche.

Les schémas et le programme ...

Schéma de principe:

Pre tcm sch

 

L'alimentation arrive sur le connecteur X2 , en courant continu de 7,5 à 18 volts... La diode D1 ne sert qu'a éviter les inversions de polarité. Un (re) lissage est effectué par l'électrochimique de 2200µF/25v ...  Cette tension est appliquée directement sur l'arduino qui par ses régulateurs intégrés va générer le 5 volts dont on a besoin pour alimenter le récepteur infra-rouge. Les signaux modulés sont reçu par le capteur Keyes ou Vishay (si l'on choisi la 2ème version) puis mis en forme et transmis à la pin 2 du Nano.

Les sorties du circuit microcontrolleur passent par les résistances de base et pilotent les transistors 2N2222 qui viennent tirer à la masse les commandes de relais du pré-ampli.... 

 

Le circuit imprimé:

Pre tcm brd

 

Pre tcm cmp

 

Le logiciel :

 

#include <IRremote.h>

int broche_reception_ir = 2; // broche 2 utilisée en entrée IR
IRrecv reception_ir(broche_reception_ir); // crée une instance de réception
decode_results decode_ir; // stockage données reçues

// définition des broches utilisées sur le shield contrôle Sorties 
int Tcm_Pwr = 3; 
int Tcm_Plg = 4; 
int In_1 = 5; 
int In_2 = 6;
int In_3 = 7;
int Vol_M = 8;
int Vol_P = 9;


void setup() 

  //définit la direction des ports
pinMode(2, INPUT); 
pinMode(3, OUTPUT); 
pinMode(4, OUTPUT); 
pinMode(5, OUTPUT); 
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);

 
  reception_ir.enableIRIn(); // démarre la réception 
}

void loop() 

  if (reception_ir.decode(&decode_ir)) 
  { 
    if (decode_ir.value == 0xFF6897) 
    { 
      // touche 1 –> Mise en marche Preamp & canal 1, Coupe Cana 2 & 3
      digitalWrite(Tcm_Pwr,HIGH);
      digitalWrite(In_1 ,HIGH);
      digitalWrite(In_2 ,LOW);
      digitalWrite(In_3 ,LOW);
    } 
    if (decode_ir.value == 0xFF9867) 
    { 
      // touche 2 –> Mise en marche Preamp & canal 2, Coupe Cana 1 & 3 
      digitalWrite(Tcm_Pwr,HIGH);
      digitalWrite(In_1 ,LOW);
      digitalWrite(In_2 ,HIGH);
      digitalWrite(In_3 ,LOW);
    } 

    if (decode_ir.value == 0xFFB04F) 
    { 
      // touche 3 –> Mise en marche Preamp & canal 3, Coupe Cana 1 & 2 
      digitalWrite(Tcm_Pwr,HIGH);
      digitalWrite(In_1 ,LOW);
      digitalWrite(In_2 ,LOW);
      digitalWrite(In_3 ,HIGH); 
    } 
    if (decode_ir.value == 0xFF22DD) 
    { 
      // touche < –> Stop Preamp & canal 1, 2 & 3 
      digitalWrite(Tcm_Pwr,LOW);
      digitalWrite(In_1 ,LOW);
      digitalWrite(In_2 ,LOW);
      digitalWrite(In_3 ,LOW); 
    } 
    if (decode_ir.value == 0xFF02FD) 
    { 
      // touche OK –> Mise en marche Amp
      digitalWrite(Tcm_Plg,HIGH); 
    } 
    if (decode_ir.value == 0xFFC23D) 
    { 
      // touche > –> Stop Amp
      digitalWrite(Tcm_Plg,LOW); 
    } 
    if (decode_ir.value == 0xFFA857) 
    { 
      // touche Vol_M –> Volume en moins 
      digitalWrite(Vol_M,HIGH); 
      delay(300);
      digitalWrite(Vol_M,LOW); 
    } 
    if (decode_ir.value == 0xFF629D) 
    { 
      // touche Vol_P –> Volume en plus
      digitalWrite(Vol_P,HIGH); 
      delay(300);
      digitalWrite(Vol_P,LOW);
    } 
    
    
    reception_ir.resume(); // prépare la réception du prochain code 
  } 
}

-----------------------------------------------------------------------------------------------------------------------------------------------

Pour personnaliser les touches, il suffit de connaître le code généré par le télécommande et de le placer en lieu et place des autres codes if (decode_ir.value == 0xXXXXXX; Un petit programme Arduino, listé plus bas, permet de capturer les trames et les visualise sous hyperterminal. Les touches de sélection mettent les sorties dans un état permanent "actif ou non" alors que celle de la commande de volume envoie des impulsions de 300 millisecondes pour actionner le moteur du potentiomètre . Suivant les besoins, on pourra augmenter ou réduire ce temps en modifiant la valeur de l'instruction 'delay'... .  

 

La mise en place :

Pre tcm ins

 

 

 

Version personnalisée avec "zapette" existante ...

Comme vu précédemment, il est possible de s'affranchir de l'achat d'une télécommande et de son module de réception  de chez Keyes, et d'utiliser une zapette existante à 38KHz... Il suffit pour cela de se procurer un récepteur IR Vishay à 0,78 € et de l'adapter comme sur le schéma ci-joint:

Pre tcm1 sch

 

Pre tcm1 cmp

 

Pre tcl1 brd

 

Si vous utilisez le module de chez Keyes, une led rouge clignote sur les bits reçus, ce qui est bien utile pour voir si une télécommande débite ! Si vous avez choisi l'option de passer par le capteur IR Vishay, rien n'empêche de déclarer la sortie 13 de l'Arduino (led rouge sur le circuit) pour visualiser la bonne réception du module.

Ci-dessous, le programme qui va vous permettre de capturer le code hexadécimal de chaque touche, et de l'afficher via hyperterminal ou tout autre terminal émulé:


#include <IRremote.h>

int RECV_PIN = 2;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Initialise le recepteur
}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    irrecv.resume(); // Recoit la valeur suivante
  }
}

 

------------------------------------------------------------------------------------------------------------------

Dans cet article, j'ai affecté la télécommande à mon pré-ampli, mais vous voyez qu'il est tout à fait facile de dévier et d'aller jusqu'à commander l'ouverture et la fermeture du poullailer ... ou commander un robot .... etc... etc ...

Mon prochain épisode sera la commande d'une guirlande de leds 3 couleurs pour lumière d'ambiance ...

Ajouter un commentaire