2016-07-24 1 views
1

J'ai un Arduino UNO et j'essaie d'allumer et d'éteindre une lumière de couleur (rouge, verte ou bleue) de la bande. Voici mon code, mais toutes les lumières restent allumées. Le problème est que par exemple je pourrais vouloir montrer seulement la couleur ROUGE, mais je ne peux pas sembler obtenir n'importe quelles couleurs pour s'éteindre. Je les broches comme suit:Arduino | Contrôleur de bande LED RGB

  • ROUGE: 5
  • VERT: 6
  • BLEU: 3

Ma configuration: enter image description here

contrôleur par défaut photo: enter image description here

Code pertinent:

int ledPinR = 5; 
int ledPinG = 6; 
int ledPinB = 3; 

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 
void loop() { 
    analogWrite(ledPinR, 0); 
    analogWrite(ledPinG, 0); 
    analogWrite(ledPinB, 0); 
} 
+0

@MikeCAT wow! C'était rapide! Est-ce que le code est correct pour éteindre la bande –

+0

Quelle bande avez-vous? – djUniversal

+0

@djUniversal 'Ruban LED étanche SMD RGB 5050' –

Répondre

1

Je pense que vous avez mal compris mon dernier commentaire sous @ réponse de Secko, voici donc ce que je voulais dire:

int r = 5; 
int g = 6; 
int b = 3; 

void setup() { 
    pinMode(r, OUTPUT); 
    pinMode(g, OUTPUT); 
    pinMode(b, OUTPUT); 
} 

void loop() { 
    analogWrite(r, 128); 
    delay(50); 
    analogWrite(r, 0); 
    analogWrite(g, 128); 
    delay(50); 
    analogWrite(g, 0); 
    analogWrite(b, 128); 
    delay(50); 
    analogWrite(b, 0); 
    delay(50); 
} 

Vous devez désactiver la dernière couleur vous avez activé afin d'obtenir un rouge, vert et lumière bleue clignotante. Sinon, si vous passez au vert après le rouge, la bande sera jaune pendant une courte période. Si vous activez ensuite le bleu, il deviendra blanc et restera blanc, car aucune couleur n'est jamais désactivée.

Le deuxième paramètre est la tension appliquée à vos broches. Il va de 0 à 255, où 0 est 0V et 255 est 5V. 128 est juste au milieu avec 2,5V.

Si votre bande est grande (=> 3 LED avec LED à faible consommation d'énergie, sinon> 1), j'espère que vous utilisez des transistors pour décharger le courant de l'arduino vers le transistor. Sinon, vous allez souffler l'arduino très bientôt.

EDIT: Vous avez probablement fait sauter le arduino déjà en tirant trop de courant (trop) LED de lui est broches. Vous aurez besoin d'un transistor PNP entre chaque couleur et l'arduino qui peut gérer un courant important (puisque vous conduisez beaucoup de LED), ce qui signifie un circuit intégré darlington transistor.

Quelque chose comme le TIP125 me vient à l'esprit. (https://www.fairchildsemi.com/datasheets/TI/TIP125.pdf)

Il a un courant de collecteur maximal de 5A.Mettez ce droit au milieu de votre VCC et la bande (VCC à collecteur, la bande à l'émetteur) et connectez l'arduino à la base du transistor. Vous aurez besoin de 3, un pour chaque couleur.

EDIT2: Voici un schéma très rapide pour vous montrer les bases. Il devrait être entièrement fonctionnel pour une bande de LED 12V avec un tirage de courant de couleur individuel allant jusqu'à 5A (donc 15A total).

Vous pouvez ajouter des résistances sur la base du transistor pour absorber le courant.

tip125/arduino transistor schematic

EDIT3: Puisque vous êtes probablement nouveau à l'électronique: Un transistor PNP permettra la connexion entre le collecteur et émetteur si la base est faible. Signification: analogWrite(r, 0) va allumer la couleur sur la bande et analogWrite(r, 255) l'activera. Il est inversé avec le transistor entre les deux.

En outre, et j'espère que cela est évident, NE ROULEZ PAS 5A PAR COULEUR AU MOYEN D'UN PANNEAU DE PATIN OU AU MOYEN DE FILS MINCES. ILS ALLERONT DANS LA FUMÉE.

+0

Que devrait produire ce code? –

+0

Rouge, Vert, Bleu en succession rapide. – showp1984

+0

Juste la couleur unique? Ex quand le rouge continue, tous les autres sont éteints? –

0

Vous devez ajouter pinMode() à l'installation.

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 
+0

Même en faisant cela, ne désactive toujours pas la bande –

0

Vous devez retarder les opérations, avant votre tour la prochaine lumière allumée ou éteinte comme ceci:

EDIT: un fader complet pour votre cas, vous pouvez sauter 4 dans la boucle, mais Je vais vous laisser gérer cela.

int ledPinR = 5; 
int ledPinG = 6; 
int ledPinB = 3; 

int brightness = 0; 
int fade = 5; 

void setup() { 
    pinMode(ledPinR, OUTPUT); 
    pinMode(ledPinG, OUTPUT); 
    pinMode(ledPinB, OUTPUT); 
} 

void loop() { 
    for(int LED_PIN = 3; LED_PIN<=6; LED_PIN++) { 
    analogWrite(LED_PIN, brightness); //setting the brightness at LED pin 
    brightness += fade; //brightness increasE 
    if(brightness == 0 || brightness == 255){ 
     fade = -fade; 
    } 
    delay(30); //time of delay is in miliseconds 
    } 
} 

EDIT2: OK, vu votre configuration, j'étais loin sur ce que vous vouliez faire avec les couleurs, ne sais pas si je dois supprimer la réponse, il est maintenant misguiding. J'espère que le retard m'a aidé.

+0

La bande LED reste allumée. Pas de changement. Désolé d'être un tracas! Lol –

+0

@NicholasJohnson Cela ne fera que les alimenter un-par-un lors de la première mise sous tension. Après cela, ils resteront allumés. Vous devez désactiver la couleur après le délai si vous souhaitez qu'une seule couleur passe par la bande. – showp1984

+0

Eh bien, vous devez le faire disparaître ou changer la valeur de luminosité (il est 0 maintenant), mais je pensais que vous le saviez déjà. – Secko