Aujourd'hui, il ne me reste plus qu'à ajouter quelques boutons à l'Arduino afin de produire une télécommande pleinement fonctionnelle.
Voici le problème: j'utilise un vieux téléviseur analogique muni d'une boîte de conversion analogique-numérique. Pour allumer ou éteindre le téléviseur, ou encore pour changer le volume, il faut utiliser la télécommande du téléviseur. Mais pour changer de chaîne, il faut utiliser la télécommande du convertisseur analogique-numérique...en gros, la famille n'utilise que 5 boutons, mais ils sont disposés sur deux télécommandes différentes!
J'ai donc assemblé un prototype de télécommande ne comportant que 6 boutons correspondant aux fonctions fréquemment utilisées: marche/arrêt, channel up, channel down, volume up, volume down et input. Bien entendu, une LED infrarouge est branchée à la sortie numéro 3 de l'Arduino.
Voici les détails du circuit:
Et voici mon sketch, mais bien sûr les messages envoyés au téléviseurs sont très spécifiques au modèle que je possède (vous devrez procéder tel que décrit dans les rubriques précédentes pour connaître les codes de votre modèle de télécommande).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Sketch pour télécommande à 6 boutons permettant | |
de contrôler mon téléviseur (ça ne fonctionnera | |
probablement pas pour votre modèle!) | |
LED infrarouge branchée à la pin 3 | |
https://electroniqueamateur.blogspot.com/2013/01/clonage-dune-telecommande-infrarouge_21.html | |
*/ | |
#include <IRremote.h> | |
IRsend irsend; | |
// là où sont branchés les boutons | |
int on_off_button = 8; | |
int ch_down_button = 9; | |
int ch_up_button = 10; | |
int vol_down_button = 11; | |
int vol_up_button = 12; | |
int input_button = 13; | |
unsigned int L = 1800; //durée d'un 1 | |
unsigned int C = 800; //durée d'un 0 | |
unsigned int X = 300; // durée d'une impulsion lumineuse | |
unsigned long time; | |
// signal on-off | |
unsigned int on_off_1[] = { | |
X,L,X,C,X,C,X,C,X,C,X,C,X,L,X,L,X,C,X,L,X,C,X,C,X,C,X,L,X,C,X}; | |
unsigned int on_off_2[] = { | |
X,L,X,C,X,C,X,C,X,C,X,L,X,C,X,C,X,L,X,C,X,L,X,L,X,L,X,C,X,L,X}; | |
// signal vol up | |
unsigned int vol_up_1[] = { | |
X,L,X,C,X,C,X,C,X,C,X,C,X,C,X,L,X,C,X,L,X,C,X,C,X,C,X,L,X,C,X}; | |
unsigned int vol_up_2[] = { | |
X,L,X,C,X,C,X,C,X,C,X,L,X,L,X,C,X,L,X,C,X,L,X,L,X,L,X,C,X,L,X}; | |
// signal vol down | |
unsigned int vol_down_1[] = { | |
X,L,X,C,X,C,X,C,X,C,X,L,X,C,X,L,X,C,X,L,X,C,X,C,X,C,X,L,X,C,X}; | |
unsigned int vol_down_2[] = { | |
X,L,X,C,X,C,X,C,X,C,X,C,X,L,X,C,X,L,X,C,X,L,X,L,X,L,X,C,X,L,X}; | |
// signal input | |
unsigned int input_1[] = { | |
X,L,X,C,X,C,X,C,X,C,X,L,X,L,X,C,X,C,X,L,X,C,X,C,X,C,X,L,X,C,X}; | |
unsigned int input_2[] = { | |
X,L,X,C,X,C,X,C,X,C,X,C,X,C,X,L,X,L,X,C,X,L,X,L,X,L,X,C,X,L,X}; | |
void setup() | |
{ | |
pinMode(on_off_button, INPUT); | |
pinMode(ch_down_button, INPUT); | |
pinMode(ch_up_button, INPUT); | |
pinMode(vol_down_button, INPUT); | |
pinMode(vol_up_button, INPUT); | |
pinMode(input_button, INPUT); | |
} | |
void loop() { | |
if (digitalRead(on_off_button)) | |
{ | |
irsend.sendRaw(on_off_1, 31, 38); | |
delay(30); | |
irsend.sendRaw(on_off_2, 31, 38); | |
delay(30); | |
irsend.sendRaw(on_off_1, 31, 38); | |
delay(200); | |
} | |
if (digitalRead(vol_up_button)) | |
{ | |
irsend.sendRaw(vol_up_1, 31, 38); | |
delay(30); | |
irsend.sendRaw(vol_up_2, 31, 38); | |
delay(30); | |
irsend.sendRaw(vol_up_1, 31, 38); | |
delay(200); | |
} | |
if (digitalRead(vol_down_button)) | |
{ | |
irsend.sendRaw(vol_down_1, 31, 38); | |
delay(30); | |
irsend.sendRaw(vol_down_2, 31, 38); | |
delay(30); | |
irsend.sendRaw(vol_down_1, 31, 38); | |
delay(200); | |
} | |
if (digitalRead(input_button)) | |
{ | |
irsend.sendRaw(input_1, 31, 38); | |
delay(30); | |
irsend.sendRaw(input_2, 31, 38); | |
delay(30); | |
irsend.sendRaw(input_1, 31, 38); | |
delay(200); | |
} | |
if (digitalRead(ch_up_button)) | |
{ | |
for (int i = 0; i < 3; i++) { | |
irsend.sendNEC(0xFDB04F, 32); | |
delay(40); | |
} | |
} | |
if (digitalRead(ch_down_button)) | |
{ | |
for (int i = 0; i < 3; i++) { | |
irsend.sendNEC(0xFD8877, 32); | |
delay(40); | |
} | |
} | |
} | |
Ça fonctionne à la perfection! Il ne reste plus qu'à trouver un réceptacle pour en faire un objet un peu plus...design. Pour ce faire, je prévois construire mon appareil autour un Atmega 328 autonome (tel qu'expliqué ici).
Yves Pelletier (Twitter: @ElectroAmateur)