RGB LED cu Arduino Leonardo

Utilizand leduri RGB si combinand cele 3 culori, putem obtine orice culoare dorim. Marele avantaj al ledurilor, monocrome sau RGB este ca ne semnalizeaza pentru proiecte mai complexe, in ce stare se afla programul nostru, fie ca le aprindem sau stingem, fie ca le coloram intr-un anumit mod pe care il intelegem.

Asadar, sa va dau 3 exemple:

1. Avem un program arduino care prin intermediul unui senzor de temperatura ne citeste temperatura din casa. Daca este prea mica coloreaza in rosu, daca este acceptabila coloreaza in galben, daca este ok coloreaza verde, samd.

2. Avem un server definit pe o placa arduino cu un shield ethernet. De fiecare data cand un client face un GET la server sa “beculeasca”  de 2 ori (multumesc unei colege ca m-a invatat termenul).

3. Daca avem un robotel care se calibreaza (un line follower spre exemplu) vrem ca in momentul calibrarii sa “beculeasca” un LED. Sau daca avem un robot obstacle avoidance pe parcursul intoarcerii ca sa evite obstacolul sa ne aprinda un led.

Asadar LED-urile sunt folosite in folosul nostru pentru control de sanitate, sau chiar debugging.

Vom utiliza pentru acest tutorial un LED RGB cu Anod comun legat la PIN 7, pe placuta Leonardo.

Schema electrica arata in felul urmator.  Practic LEDul RGB contine 3 leduri monocrome, iar noi alegem sa aplicam diverse tensiuni pe fiecare LED/dioda.

Cablare: 

Red – PIN 9

Green – PIN 10

Blue – PIN 11

Anodul comun – PIN 7

Eu am folosit rezistente de 220 Ohmi, fata de cele din figura.

image

Sa vedem acum codul sursa. Vom obtine un set predefinit de culori trimitand prin seriala un anumit string. Arduino il va interpreta si va pune tensiunile pe fiecare dioda asa cum dorim noi.

Codul Arduino

int redPin = 9;
int greenPin = 10;
int bluePin = 11;
int startLEDpin = 7;
String color = “”;
String tmp = “”; 

void setup()
{
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT); 
pinMode(startLEDpin,OUTPUT);
Serial.begin(9600);
}

void setColor(int red, int green, int blue)
{
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue); 
}

void loop()

if (Serial.available() > 0) {
/* read the most recent byte */
while(Serial.available() > 0) {
color+=char(Serial.read());
}
}

if (color == “red”) {
setColor(0, 255, 255); // red
delay(1000);
color=””;
Serial.write(“Red branch \n”);
digitalWrite(9, LOW);
}
else if (color == “start”) { 
digitalWrite(7, HIGH);
}
else if (color == “stop”) { 
digitalWrite(7, LOW);
}
else if (color == “green”) {
setColor(255, 0, 255); // green
delay(1000);
color=””;
Serial.write(“Green branch \n”);
digitalWrite(10, LOW);
}
else if (color == “blue”) {
setColor(255, 255, 0); // blue
delay(1000);
color=””;
Serial.write(“Blue branch \n”);
digitalWrite(11, LOW);
}
else if (color == “yellow”) {
setColor(0, 0, 255); // yellow
delay(1000);
color=””;
Serial.write(“Yellow branch \n”);
digitalWrite(10, LOW);
digitalWrite(9, LOW);

}
else if (color == “purple”) {
setColor(0, 80, 0); // purple
delay(1000);
color=””;
Serial.write(“Purple branch \n”);
digitalWrite(9, LOW);
digitalWrite(11, LOW);
}
else if (color == “pink”) {
setColor(0, 255, 128); // pink
delay(1000);
color=””;
Serial.write(“Pink branch \n”);
digitalWrite(9, LOW);
}
else if (color == “brown”) {
setColor(40, 150, 225); // pink
delay(1000);
color=””;
Serial.write(“Brown branch \n”);
}
else if (color == “aqua”) {
setColor(255, 0, 0); // aqua
delay(1000);
color=””;
Serial.write(“Aqua branch \n”);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
}
else {
//Serial.write(“Else branch:”); Serial.println(color);
color=””;
delay(1000);
}
}

Rezultat video aici.

LED monocrom cu Arduino Leonardo

Prima lecție de pe blog va fi despre LED-uri monocrome.

Aici este un exemplu de schema electrica: LED

Arduino Uno R3 are protecție pe PIN-ul 13 cu o rezistenta, asadar nu este niciun pericol sa ardeti ledul.

Vom folosi pentru acest tutorial un Arduino Leonardo (orice board poate fi folosit pentru acest tutorial simplu) si un LED rosu ca acesta.

Vom conecta LED-ul la PIN-ul 13 anodul si la GND catodul.

Codul arduino

int ledpin=13; // daca vreodata modificam codul sa ne fie mult mai usor

void setup() { //rutina se executa o singura data

pinMode(ledpin, OUTPUT); //pe acest PIN vom aplica o tensiune de 5V

}

void loop() { //se executa la infinit

digitalWrite(ledpin, HIGH); //intre PIN 13 si GND vom avea o tensiune de 5V

delay(1000); //asteptam 1 secunda

digitalWrite(ledpin, LOW); //punem tensiune de 0V intre PIN 13 si GND

delay(1000);
}

Rezultat

LED-ul se va aprinde pentru 1 secunda si va sta stins pentru o secunda. Se repeta aceasta in bucla infinita.

image

Posibile probleme pentru care nu se aprinde LEDul:

1. LED-ul nu se aprinde deoarece anodul si catodul nu sunt conectate corect.

2. LED-ul nu se aprinde din cauza unui fir defect, sau ambelor. Pentru a preintampina aceasta infigeti direct LED-ul pe placa fara fire aditionale.

3. Cablarea fizica nu corespunde codului sursa (sarma sa fie conectata la PIN 12 si codul sa genereze tensiunea de lucru pe PIN 13)

4. LED-ul este nefunctional. Testarea se face punand anodul la 5V si catodul la GND. Atentie ! Puneti si o rezistenta de ordinul KOhmi sa nu ardeti LEDul.

5. Placa Arduino nu genereaza pe PINul de interes tensiunea de 5V. Puteti verifica cu un multimetru acest lucru.