Schéma de principe:

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é:


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 le 'monitor serie' de l'IDE. 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 :
