Commander son projecteur de l’Arduino

Diverses solutions existent pour obturer momentanément le faisceau d”un vidéo projecteur. Du bout de carton à l’iris motorisé, tout est possible pour des coûts fonctions de la complexité de la solution mise en oeuvre. Chacune n’a pas non plus la même élégance. Après, tout est affaire de goût et de budget.
L’autre solution pour se débarrasser du noir numérique est d’éteindre le projecteur. Parfois difficilement accessible de la régie avec télécommande ou pas, la solution pour le commander à distance (l’éteindre, l’allumer dans notre cas) est de lui envoyer un code de commande par son entrée série (présent sur presque tous les projecteurs).
Lorsqu’on consulte la liste des commandes qu’un projecteur peut recevoir sur son entrée série, on se rend compte qu’on peut parfois faire tout ce que propose le menu ou la télécommande et parfois plus.

Voici quelques photos du boitier ainsi que le plan de montage de l’électronique.

control_3

control_1

control_4

Coté technique, le boitier que je présente ci-dessous ne fait qu’allumer ou éteindre le vidéo projecteur. Il est construit sur la base d’un Arduino (NG ) auquel j’ai adjoint un circuit intégré Max232N de chez Texas Instrument afin de convertir le signal des sorties 0 et 1 de l’Arduino (RX et TX) vers un signal de type série, c’est-à-dire, compris entre -12 et +12V. Autrement dit on passe d’un protocole TTL à un protocole série 232.
Le circuit est trivial : on sort des sorties 0 et 1 (RX et TX), on entre dans le Max232 et on en ressort vers l’entrée série du projecteur. Le cablage du Max232 est largement expliqué dans sa documentation. Il faut connecter 5 condensateurs de 1 microF sur certaines entrées. J’ai ajouté un interrupteur et une led d’état.
Coté programmation, le code est là aussi très simple pour peu qu’on connaisse les codes de commande du projecteur.

Le code que j’utilise pour les projecteurs de la marque Nec est disponible ci-dessous.


const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin

// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
int projstate = 0;

byte P_ON[]={0x02, 0x00, 0x00, 0x00, 0x00, 0x02};

byte P_OFF[]={0x02, 0x01, 0x00, 0x00, 0x00, 0x03};

void setup() {
Serial.begin(38400);
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
}

void loop(){
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);

// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == HIGH) {
// turn LED on:
digitalWrite(ledPin, HIGH);
if (projstate == 0) {
Serial.write(P_ON, 6);
projstate = 1;
}
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
if (projstate == 1){
Serial.write(P_OFF, 6);
projstate = 0;
}
}
}

Leave a comment

Your email address will not be published. Required fields are marked *