Omet navegació

Leds RGB

1) Seqüencia de colors fixes

Un led RGB és en realitat tres leds que comparteixen el càtode (GND o -) i tenen tres ànodes (+) associats a tres colors bàsics  (Red/Roig) , (Green/Verd) i (Blue/Blau).  Variant la intensitat amb que brilla cada led aconseguim tots els colors de l'arc de Sant Martí.

Anem a veure-ho amb el següent muntatge.

Led RGB + ESP32

Podem mirar quina combinació de colors podem crear. Obre el programa Inskscape de Lliurex i dibuixa un cercle a l'eina el·líptica ( fletxa 1), escull l’eina editora de color (fletxa 2), i amb el cercle seleccionat varia la intensitat del Roig (fletxa 3) , del Green/Verd (fletxa 4) i del Blau (fletxa 5).

Color RGB a Inkscape

(Nota: A vora les propietats RGB hi la propietat «A» que és la opacitat que val 255 per tal que el cercle no siga transparent però aquesta propietat no la pot controlar BlocklyDuino, sols inkscape, per això al fer mescles de colors per Arduino la mantindrem a 255 dins de Inkscape).

Si esculls un color Roig pur tindràs un RGB = (255, 0, 0)

Red

Si esculls un color Green/Verd pur tindràs un RGB = (0, 255, 0)

Verd

Si esculls un colors Blau pur tindràs un RGB = (0, 0, 255)

Blau

Anem a veure com traguem partit a un led RGB amb ESP32. Fes el següent programa i anomena'l LedRGB_Seqüència

int pinRed=19;    //GPIO 19
int pinGreen= 21; //GPIO 21
int pinBlack= 22; //GPIO 22
int freq = 5000;
int canal1 = 0; 
int canal2 = 1;
int canal3 = 2;
int resolucio = 8;

void setup() {
  Serial.begin(115200);
  ledcSetup(canal1, freq, resolucio); // configurem la eixida analògica 1
  ledcAttachPin(pinRed,canal1); // canal que controlarà el color Roig
  ledcSetup(canal2, freq, resolucio); // configurem la eixida analògica 2
  ledcAttachPin(pinGreen,canal2); // canal que controlarà el color Verd
  ledcSetup(canal3, freq, resolucio); // configurem la eixida analògica 2
  ledcAttachPin(pinBlack,canal3); // canal que controlarà el color negre
}

//definim les funcions per als colors

// Pinta de roig el led
void Roig() {
  ledcWrite(canal1,255);
  ledcWrite(canal2,0);
  ledcWrite(canal3,0);
}


// Pinta de blanc el led
void Blanc() {
  ledcWrite(canal1,255);
  ledcWrite(canal2,255);
  ledcWrite(canal3,255);
}


// Pinta de groc el led
void Groc() {
  ledcWrite(canal1,255);
  ledcWrite(canal2,255);
  ledcWrite(canal3,0);
}


// Pinta de verd el led
void Verd() {
  ledcWrite(canal1,0);
  ledcWrite(canal2,255);
  ledcWrite(canal3,0);
}


// Apaga el led
void NegreApagat() {
  ledcWrite(canal1,0);
  ledcWrite(canal2,0);
  ledcWrite(canal3,0);
}


// Pinta de porpra el led
void Porpra() {
  ledcWrite(canal1,255);
  ledcWrite(canal2,0);
  ledcWrite(canal3,255);
}


// Pinta de blau el led
void Blau() {
  ledcWrite(canal1,0);
  ledcWrite(canal2,0);
  ledcWrite(canal3,255);
}


// Pinta de blaucel el led
void BlauCel() {
  ledcWrite(canal1,0);
  ledcWrite(canal2,255);
  ledcWrite(canal3,255);
}


// ara executem el programa principal
// que és una seqüencia de colors

void loop() {
    BlauCel();
    delay(1000);
    Blanc();
    delay(1000);
    Groc();
    delay(1000);
    Porpra();
    delay(1000);
    Roig();
    delay(1000);
    Verd();
    delay(1000);
    Blau();

} // final programa principal


No oblides prémer el botó boot al ESP32 i el mantens premut fins que comença a compilar-se
el programa 3 segons més tard de prémer el botó Puja/Transfereix a la targeta, podràs veure
el % de carrega del programa i al final veuràs un missatge al terminal d'Arduino
i el programa s'executarà.

2) Els colors varien de forma continua amb bucles for_next

Amb el mateix muntatge d'abans hem controlat una seqüència de colors fixes però no hem pogut variar de forma continua els colors. Prova el programa següent.

int pols; // Variable que farà variar el pols assignat a cada led RGB
int pinRed=19;    //GPIO 19
int pinGreen= 21; //GPIO 21
int pinBlack= 22; //GPIO 22
int freq = 5000;
int canal1 = 0; 
int canal2 = 1;
int canal3 = 2;
int resolucio = 8;

//
// Atura el led RGB
void Apagat() {
  ledcWrite(canal1,0);
  ledcWrite(canal2,0);
  ledcWrite(canal3,0);
}

void setup() {
  Serial.begin(115200);
  ledcSetup(canal1, freq, resolucio); // configurem la eixida analògica 1
  ledcAttachPin(pinRed,canal1); // canal que controlarà el pols Roig
  ledcSetup(canal2, freq, resolucio); // configurem la eixida analògica 2
  ledcAttachPin(pinGreen,canal2); // canal que controlarà el pols Verd
  ledcSetup(canal3, freq, resolucio); // configurem la eixida analògica 3
  ledcAttachPin(pinBlack,canal3); // canal que controlarà el pols negre
}

void loop() {
    for (pols = 0; pols <= 255; pols=pols+1) {
      Serial.println("pols Roig");
      Serial.println("Variem PWM des de 0 fins 255");
      ledcWrite(canal1,pols);
      delay(10);
      Apagat();
    }
    delay(1000);
    for (pols = 0; pols <= 255; pols=pols+1) {
      Serial.println("pols Verd/Green");
      Serial.println("Variem PWM des de 0 fins 255");
      ledcWrite(canal2,pols);
      delay(10);
      Apagat();
    }
    delay(1000);
    for (pols = 0; pols <= 255; pols=pols+1) {
      Serial.println("pols Blau");
      Serial.println("Variem PWM des de 0 fins 255");
      ledcWrite(canal3,pols);
      delay(10);
      Apagat();
    }
    delay(1000);

} // final de programa

No oblides prémer el botó boot al ESP32 i el mantens premut fins que comença a compilar-se el programa 3 segons més tard de prémer el botó  Puja/Transfereix a la targeta, podràs veure  el % de carrega del programa i al final veuràs un missatge al terminal d'Arduino i el programa s'executarà.

Creat amb eXeLearning (Finestra nova)