Go Down

Topic: Ambilight simpliste (avec Freebox v6) (Read 1 time) previous topic - next topic

Vortof

Alors voilà, je me suis aperçu que mon Freebox Player diffusait simultanément le signal vidéo sur le port mini-DIN (vers Péritel) et HDMI.
N'utilisant jusque là que le HDMI, j'ai fabriqué un cordon mini-DIN vers RJ45 puis RJ45 vers Péritel pour relier une autre télé.

Puis je me suis dit que ce ne serait pas mal d'essayer de faire un Ambilight monocanal.
J'ai dévié les signaux RGB pour les relier aux ports analogiques d'un Arduino (100kohms en série + 1uF entre chaque entrée et la masse).

J'ai écrit un court programme de test qui fonctionne mais est loin d'être parfait... très loin même.
Au départ, comme c'est un mélange de couleur, tout était très blanc.
J'ai donc établit un seuil au dessous duquel je ne prends pas en compte la couleur.
Il existe un offset aussi, c'est ce que détecte le port analogique quand rien n'est affiché (perturbation sans doute).
Le port analogique 5 sert à ralentir le rafraichissement quand il est relié au 5V.

J'ai commenté au maximum le code.
Si vous avez des solutions pour un affichage plus progressif ou autre, n'hésitez pas.

Code: [Select]

/* vortof@hotmail.com
*  2012/03/00
*  Test pour Ambilight monocanal
*  on récupère le signal 0/1.35V de la péritel sur les entrées analogiques 0/5V
*/

// Seuil sous lequel, on n'affiche pas la couleur
int seuil = 80;

// sélectionne la pin d'entrée analogique
int analogRed = 0;
int analogGreen = 1;
int analogBlue = 2;
// sélectionne la pin de sortie numérique
int ledPinRed = 9;
int ledPinGreen = 10;
int ledPinBlue = 11;
// variable pour stocker la valeur d'entrée
int valInRed = 0;
int valInGreen = 0;
int valInBlue = 0;
// variable pour stocker la valeur de sortie
int valOutRed = 0;
int valOutGreen = 0;
int valOutBlue = 0;
// valeur max de la couleur reçue sur analog
int limitRed = 202;
int limitGreen = 179;
int limitBlue = 202;
// valeur min de la couleur reçue sur analog
int offsetRed = 176;
int offsetGreen = 176;
int offsetBlue = 176;

// DEBUG - pour ralentir le rafraichissement
int analogT = 5; // sélectionne la pin d'entrée analogique
int time; // ne sert que pour les tests

void setup() {
  Serial.begin(9600); // ouvre le port série à 9600 bauds
  pinMode(ledPinRed, OUTPUT); // déclare ledPinX comme sortie
  pinMode(ledPinGreen, OUTPUT);
  pinMode(ledPinBlue, OUTPUT);
}
void loop()  {
 
  //DEBUG - si niveau haut, on ralentit
  if (analogRead(analogT) > 1000){
    time = 2000;
  }
  else {
    time = 25;
  }

  valInRed = analogRead(analogRed) - offsetRed;
  if (valInRed > seuil) {
    valOutRed = map(valInRed, 0, limitRed, 0, 255); // Passe le signal 0~limit en 0~255
  }
  else {
    valOutRed = 0;
  }
  analogWrite(ledPinRed, valOutRed);
 
  valInGreen = analogRead(analogGreen) - offsetGreen;
  if (valInGreen > seuil) {
    valOutGreen = map(valInGreen, 0, limitGreen, 0, 255);
  }
  else {
    valOutGreen = 0;
  }
  analogWrite(ledPinGreen, valOutGreen);
 
  valInBlue = analogRead(analogBlue) - offsetBlue;
  if (valInBlue > seuil) {
    valOutBlue = map(valInBlue, 0, limitBlue, 0, 255);
  }
  else {
    valOutBlue = 0;
  }
  analogWrite(ledPinBlue, valOutBlue);
 
  // DEBUG - Affiche la valeur de l'entrée et de la sortie
  // (ln pour le retour à la ligne, \t pour la tabulation)
  Serial.print("R: "), Serial.print(analogRead(analogRed)), Serial.print("\t");
  Serial.print(valInRed), Serial.print("\t"), Serial.println(valOutRed);
  Serial.print("G: "), Serial.print(analogRead(analogGreen)), Serial.print("\t");
  Serial.print(valInGreen), Serial.print("\t"), Serial.println(valOutGreen);
  Serial.print("B: "), Serial.print(analogRead(analogBlue)), Serial.print("\t");
  Serial.print(valInBlue), Serial.print("\t"), Serial.println(valOutBlue);
 
  delay(time); // délai de x ms avant prochaine mesure
}



Artouste


Alors voilà, je me suis aperçu que mon Freebox Player diffusait simultanément le signal vidéo sur le port mini-DIN (vers Péritel) et HDMI.
N'utilisant jusque là que le HDMI, j'ai fabriqué un cordon mini-DIN vers RJ45 puis RJ45 vers Péritel pour relier une autre télé.

Puis je me suis dit que ce ne serait pas mal d'essayer de faire un Ambilight monocanal.
J'ai dévié les signaux RGB pour les relier aux ports analogiques d'un Arduino (100kohms en série + 1uF entre chaque entrée et la masse).


Bonjour
preambule
tu es bien sur d'avoir de dispo les signaux RVB et pas simplement de la sortie composite ou du Y/C (S video) ?
les mini din en general , c'est pour sortir en composantes separées

Vortof

#2
Mar 29, 2012, 01:45 pm Last Edit: Mar 29, 2012, 01:48 pm by Vortof Reason: 1
Ah oui je suis bien certain, le système fonctionne parfaitement comme ça, c'est juste pas très jolie a regarder pour l'instant.

J'ai transféré 4 images sur le serveur, pour le réglage des valeurs min et max:
une blanche (255/255/255)
une rouge (255/0/0)
une verte (0/255/0)
une bleue (0/0/255)

quand je les sélectionne, l'éclairage ce fait bien avec ces couleurs là.

Vortof

Voici le câblage dispo sur la mini-DIN du player:

      G D
RG VID VE CL
GND    BL CR

GND: masse (pins 4, 14, 18, 20, 5, 9, 13, 17 péritel)
VID: video composite + synchro (pin 20 péritel)
CL : commutation lente (pin 8 péritel)
CR: commutation rapide (pin 16 péritel)
RG: rouge (pin 15 péritel)
VE: vert (pin 11 péritel)
BL: bleu (pin 7 péritel)
G: audio gauche (pin 6 péritel)
D: audio droite (pin 2 péritel)

Artouste

#4
Mar 29, 2012, 01:55 pm Last Edit: Mar 29, 2012, 02:07 pm by Artouste Reason: 1

Voici le câblage dispo sur la mini-DIN du player:

     G D
RG VID VE CL
GND    BL CR

GND: masse (pins 4, 14, 18, 20, 5, 9, 13, 17 péritel)
VID: video composite + synchro (pin 20 péritel)
CL : commutation lente (pin 8 péritel)
CR: commutation rapide (pin 16 péritel)
RG: rouge (pin 15 péritel)
VE: vert (pin 11 péritel)
BL: bleu (pin 7 péritel)
G: audio gauche (pin 6 péritel)
D: audio droite (pin 2 péritel)

oui
j'ai fait un rapide google
http://cjoint.com/12ma/BCDn2msapgV_pining.jpg

le (ton) probleme vient surement du fait que l'excursion (je n'ai pas verifié) des canaux RVB dispo et comprise entre 0 et 1V  chargé sous 75 Ohms (norme video) et que toi tu échantillonne sur 0-->5V
voir a utiliser le pin Aref sur l'arduino

edit : j'ai vu que tu avais pris ça en compte de maniere soft
Code: [Select]
*  on récupère le signal 0/1.35V de la péritel sur les entrées analogiques 0/5V


Go Up