Translate

mercredi 12 février 2014

Commande de leds RVB en Bluetooth

Je vous propose ici de piloter des leds RVB avec une tablette ou un téléphone sous Androïde via Bluetooth.
Nous avons vu précédemment un montage pilotant plusieurs leds, ici on va piloter une ou plusieurs leds RVB ou un bandeau de leds.

Le Schéma


Le schéma est assez simple, on utilise ici un ATM328 avec le bootloader UNO, un module bluetooth, quelques composants et 3 transistors MOSFET permettant de driver jusqu'a 4A sans chauffer.

Comme vous pouvez le voir sur le schéma, il nous faut deux alimentations 1x12V et 1x5V  il suffit de mettre un régulateur 7805 sur l'alimentation 12V, je ne l'ai pas mis sur le schéma (peut être un peu de fainéantise lol).





Le circuit terminé.

Pour gagner de la place, celui-ci est en double face





Comme vous pouvez le voir sur la face 2, j'ai apporté quelques modifications de dernière minutes, a la base j'étais parti sur le pilotage via un ULN 2803 mais vu le courant que consomme un bandeau de leds, j'ai laissé cette solution de coté et opter pour des transistors MOSFET. J'ai malgré tout laissé le dessin du circuit intégré, cela permet d'utiliser l'une ou l'autre des solution suivant l’utilisation que l'on veut faire du montage.

En vidéo



Désolé, on ne voit pas bien les couleurs de la leds. Une petite précision concernant les leds, on a toujours tendance a prendre des leds haute luminosité c'est bien lorsqu'elle sont derrière un diffuseur sinon le mélange RVB ne se voit pas. L'idéal est de prendre des leds RVB diffusantes. Idem pour le bandeau de leds, attention il en existe deux sortes l'une ne permet pas le mélange des couleur (une couleur par led), la seconde est full color (les 3 couleurs sont dans la même led).

Le sketch

J'ai crée un programme permettant de piloter les leds par couleur
- Rouge
- Vert
- Bleu
- Jaune
- Blanc
- Blanc clair
- Rose
- Variation de couleur automatique


/*Commande de leds RVB en Bluetooth via Android
Mode de fonctionnement par couleurs

Rouge
Bleu
Jaune
Rose
Bleu clair
Blanc
Automatique
By Jojo Bricolo*/


int ldr = 9;
int ldv = 10;
int ldb = 11;
#define FADESPEED 10 // Vitesse de transition


int state;
int flag=0;
void setup() {
 
pinMode (ldr,OUTPUT);
pinMode (ldv,OUTPUT);
pinMode (ldb,OUTPUT);

Serial.begin(9600);
}

void loop() {


  if(Serial.available() > 0){
state = Serial.read();
flag=0;
  }

  if (state == 'a') {
  digitalWrite (ldr,HIGH);
  digitalWrite (ldv,HIGH);
  digitalWrite (ldb,HIGH);
 
  if(flag == 0){
Serial.println("Led Blanc");
flag=1;
}
}
else
 if (state == 'z') {
  digitalWrite (ldr,HIGH);
  digitalWrite (ldv,HIGH);
  digitalWrite (ldb,LOW);
 
  if(flag == 0){
Serial.println("Led Jaune");
flag=1;
}
}
else
 if (state == 'e') {
  digitalWrite (ldr,HIGH);
  digitalWrite (ldv,LOW);
  digitalWrite (ldb,HIGH);
 
  if(flag == 0){
Serial.println("Led Rose");
flag=1;
}
}
  else
   if (state == 'r') {
  digitalWrite (ldr,LOW);
  digitalWrite (ldv,HIGH);
  digitalWrite (ldb,HIGH);
 
  if(flag == 0){
Serial.println("Led Bleu clair");
flag=1;
}
}
else
 if (state == 't') {
  digitalWrite (ldr,LOW);
  digitalWrite (ldv,LOW);
  digitalWrite (ldb,HIGH);
 
  if(flag == 0){
Serial.println("Led Bleu");
flag=1;
}
}

else
 if (state == 'y') {
  digitalWrite (ldr,LOW);
  digitalWrite (ldv,HIGH);
  digitalWrite (ldb,LOW);
 
  if(flag == 0){
Serial.println("Led vert");
flag=1;
}
}
else
 if (state == 'u') {
  digitalWrite (ldr,HIGH);
  digitalWrite (ldv,LOW);
  digitalWrite (ldb,LOW);
 
  if(flag == 0){
Serial.println("Led Rouge");
flag=1;
}
}
else
 if (state == 'h') {
  digitalWrite (ldr,LOW);
  digitalWrite (ldv,LOW);
  digitalWrite (ldb,LOW);
 
  if(flag == 0){
Serial.println("Led : Arret");
flag=1;
}
}
else

 if (state == 'i') {
   Serial.println("Led Automatique");
    int r, g, b;
    for (r = 0; r < 256; r++) {
    analogWrite(ldr, r);
    delay(FADESPEED);
    }
   
    for (b = 255; b > 0; b--) {
    analogWrite(ldb, b);
    delay(FADESPEED);
   
    }
  
    for (g = 0; g < 256; g++) {
    analogWrite(ldv, g);
    delay(FADESPEED);
    }
   
    for (r = 255; r > 0; r--) {
    analogWrite(ldr, r);
    delay(FADESPEED);
    }
   
    for (b = 0; b < 256; b++) {
    analogWrite(ldb, b);
    delay(FADESPEED);
    }
   
    for (g = 255; g > 0; g--) {
    analogWrite(ldv, g);
    delay(FADESPEED);
    }
  
  if(flag == 0){

flag=1;
  }
 }

 }

void setColor(int red, int green, int blue)
{
    analogWrite(ldr, 255-red);
    analogWrite(ldv, 255-green);
    analogWrite(ldb, 255-blue);
   
}



J'ai utilisé les lettres "a-z-e-r-t-y-u-i" pour les diverse couleurs et "h" pour l'arrêt mais rien ne vous empêche de modifier ces lettres. Petit détail, dans le programme j'utilise la fonction "delay" pour le mode fondue de couleur, cela ralenti la fonction suivante demandée quand ce mode est en cours. Donc si le module en fondu, que vous appuyer sur une couleur fixe le programme attends la fin de la séquence avant de valider la commande demandée.

Si cela vous intéresse, je suis en mesure de vous faire un kit ou même vous réaliser ce montage !!!
N'hésitez pas a me contacter.

3 commentaires:

  1. Bonjour Jojo!

    Merci pour ton blog, on peut y trouver un tas d'infos très intéressantes! :-)

    Comment peut on te contacter?

    RépondreSupprimer
    Réponses
    1. Merci pour le compliment!
      Oui on peut me contacter, je t'envoie un mail

      A++
      Jojo

      Supprimer