Go Down

Topic: Bande de LEDs possédée/incontrôlable  (Read 975 times) previous topic - next topic

Hoodsocks

Feb 18, 2015, 07:57 pm Last Edit: Feb 18, 2015, 07:59 pm by Hoodsocks Reason: Précisions
Bonjour,

Après deux jours de galère, je me décide à solicité une personne qui gère.

Je vous présente le projet :

Deux bandes de LEDs blanches qui s'allument progressivement suivant un choix sur un site codé en HTML simple, soit l'une, soit l'autre, soit les deux. Avec un bouton pour reset l'Arduino afin de revenir au début.

Lors de mes tests avec des LEDs rouges 5v simples, tout fonctionne pour le mieux : elles sont éteintes, lorsque l'on active l'une des 3 fonctions, le processus d'allumage se lance et les LEDs désignées restent allumées. J'appuie alors sur le bouton reset afin de pouvoir jouir d'une nouvelle séquence de folie.

Parfait, installons les bandes maintenant. Je monte des transistors BD678 sur le conseil d'un vendeur (oui, je suis genre novice) et une alim 12V.

Le résultat : les LEDs s'allument bien... Mais dès le début, sans aucune boucle commencée. Je lance une des séquences... Et là stupeur, elles s'éteignent progressivement, comme des grandes. Ce qui je le rappelle, est totalement l'inverse de ce que je leur demande. En plus, elles ne finissent pas à zéro mais avec une faible lueur.

Le code n'a pas changé, juste ces transistors, alors est-ce que ce sont eux qui mettent un bazar dans le processus ou autre chose... J'abdique.

Je vous joins le plan du schéma, la tête du site HTML et le code :

Code: [Select]
#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

int ledMonsieur = 9; // Définir la broche 9 pour Monsieur  
int ledMadame = 3; // Définir la broche 3 pour Madame
int brightness = 0;    // how bright the LED is
int fadeAmount = 5;
YunServer server;

void setup() {
  // Start our connection
  Serial.begin(9600);
  pinMode(ledMonsieur, OUTPUT); // déclare la LED Monsieur comme sortie
  pinMode(ledMadame, OUTPUT); // déclare la LED Madame comme sortie
  Bridge.begin();  
  
  // Start listening for connections  
  
  server.begin();
 
}

void loop() {
  // Listen for clients
  YunClient client = server.accept();
  // Client exists?
  if (client) {
    // Lets process the request!
    process(client);
    client.stop();
  }
  delay(50);
}

void process(YunClient client) {
  // Collect user commands
  String command = client.readStringUntil('~'); // load whole string
  
  // Enable HTML
  client.println("Status: 200");
  client.println("Content-type: text/html");
  client.println();
  
  // Show UI
  client.println("<B><Center>");
  client.println("<a href='http://yun.local/arduino/monsieur~'>Wakin up Monsieur</a><br>");
  client.println("<a href='http://yun.local/arduino/madame~'>Wakin up Madame</a><br>");
  client.println("<a href='http://yun.local/arduino/both~'>Wakin up BOTH of this lil bastards</a><br>");
  client.print("Command: ");
  client.println(command);
  client.println("</B></Center>");
  
  // Check what the user entered ...
  
  // Turn on Monsieur
  if (command == "monsieur") {
 // la DEL s'allume progressivement
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // donne la valeur (de 0 à 255 avec un pas de 5) de luminosité
    // 0 correspond à la DEL éteinte
    // 255 correspond à la DEL allumée
    analogWrite(ledMonsieur, fadeValue);
    // pause pendant 300 millisecondes pour voir la progression  
    delay(300);                            
  }
}
   // Turn on Madame
  if (command == "madame") {
 // la DEL s'allume progressivement
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // donne la valeur (de 0 à 255 avec un pas de 5) de luminosité
    // 0 correspond à la DEL éteinte
    // 255 correspond à la DEL allumée
    analogWrite(ledMadame, fadeValue);
    // pause pendant 30 millisecondes pour voir la progression  
    delay(300);                            
  }
}

 // Turn on Both
  if (command == "both") {
 // la DEL s'allume progressivement
  for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {
    // donne la valeur (de 0 à 255 avec un pas de 5) de luminosité
    // 0 correspond à la DEL éteinte
    // 255 correspond à la DEL allumée
    analogWrite(ledMonsieur, fadeValue);
    analogWrite(ledMadame, fadeValue);
    // pause pendant 300 millisecondes pour voir la progression  
    delay(300);                            
  }
}
}
    
 


J'avais pas le bon visuel mais ce sont bien des LEDs strip blancs d'1 mètre chacunes (4,8W/M).

J'ai tenté d'inverser l'allumage progressif dans le code, en vain. Je vous rappelle ce que je veux qu'elles fassent :

- Commencent éteintes (LOW)
- Allumage progressif
- Restent allumée (HIGH)

Si quelqu'un a un avis, je suis preneur.

fdufnews

Le montage à transistor inverse le signal.
Pour retrouver ton effet original il suffit de gérer le PWM en partant de 255 et en décomptant jusqu'à 0.

Hoodsocks

Merci pour la rapidité, ça me semble plein de sens.

J'ai essayé ça, mais au milieu de tellement d'autres possibilités que j'ai pas dû bien saisir le mouvement.

En tout cas, l'état initial reste allumé et ça c'est un réel problème pour moi, même en modifiant le

int brightness = 0 en 1 ou 255 (j'ai essayé les deux car je ne connais pas la bonne variable)

Et rien à faire, les LEDs sont allumées au démarrage.

fdufnews

Dans le setup() il faudrait déjà commencer par mettre un analogWrite(ledMonsieur,255) et la même chose pour l'autre

Hoodsocks

Merci beaucoup!

Le transistor inverse tout donc, c'est bien ça.

J'avais mis cette ligne en début de loop, je ne savais même pas qu'on pouvait la mettre en setup.

La séquence d'allumage fonctionne bien.

Juste les LEDs ne sont pas réellement éteintes avec la commande analogWrite(ledMonsieur, 255); en setup.

J'espère encore trouver un moyen de régler ça sans l'emploi d'un relais.

patg_

Mets plutôt un BD677 et ça n'inversera pas le signal de commande.
Avec l'Emetteur à la masse, et le collecteur relié à la masse de tes leds.

Le BD678 est passant quand il n'est pas alimenté par l'arduino, alors que c'est le contraire pour le BD677.

Go Up