How to connect LEDs to Arduino?

Benzi LED și Arduino: Ghidul Complet

14/01/2022

Rating: 4.37 (15057 votes)

Benzile LED au devenit una dintre cele mai populare surse de lumină la nivel mondial. De la modificări auto și design interior, până la cosplay și proiecte DIY, este greu să găsești un domeniu în care benzile LED să nu fi fost utilizate. Dimensiunea lor, ușurința în utilizare și prețul relativ scăzut le-au transformat într-un element de bază pentru creatorii de pretutindeni. Când sunt combinate cu versatilitatea platformei Arduino, ele devin o combinație imbatabilă. Pentru un începător, utilizarea benzilor LED poate părea o sarcină descurajantă, dar nu trebuie să vă temeți! Acest ghid servește drept o introducere practică în utilizarea și integrarea benzilor LED în proiectele dumneavoastră.

How many LED strips can be connected to an Arduino?
In principle you can connect one strip per digital pin, but that looks like a huge amount of data to stream out of an Arduino. Even a Mega would likely be short of flash and RAM. you could use a bunch of $2 pro-minis, software serial controlled by a mega. There are three factors to consider when driving strings of these LEDs from an Arduino:
Cuprins

Tipuri de Benzi LED

La bază, benzile LED sunt pur și simplu LED-uri montate pe suprafață (SMD) atașate unui substrat flexibil. Cele trei tipuri cele mai comune de benzi sunt monocrome, RGB și adresabile. Alegerea depinde în întregime de proiectul dumneavoastră.

Benzi LED Monocrome

Benzile monocrome sunt cel mai puțin complexe tip de bandă LED. Fideli numelui lor, ele afișează o singură culoare, predeterminată de producător. Cu doar două terminale, ele funcționează similar cu un LED normal. Datorită complexității lor reduse, sunt adesea mai ieftine decât omologii lor RGB și adresabili.

Deși lipsa personalizării poate să nu fie atractivă, amintiți-vă că cerințele proiectului dictează ceea ce se face. Poate că proiectul necesită doar o singură culoare. Poate că nu doriți să vă deranjați cu complexitatea suplimentară a unui controler. Oricare ar fi motivul, dacă banda monocromă se potrivește nevoilor dumneavoastră, nu este necesar să folosiți ceva mai complex.

Benzi LED RGB

Un LED RGB individual este, în esență, un LED roșu, verde și albastru combinate într-un singur pachet compact. Prin ajustarea luminozității fiecărei componente LED, o multitudine de culori pot fi reproduse. O bandă LED RGB este compusă din multe LED-uri RGB conectate în paralel. Putem observa imediat că există câteva pad-uri în plus față de banda monocromă menționată mai sus.

Pad-urile suplimentare corespund terminalelor suplimentare ale fiecărui LED RGB. Utilizarea benzilor RGB este puțin mai complexă, deoarece este necesar un controler pentru a amesteca culoarea dorită. Puteți cumpăra un controler sau, cu cunoștințele și materialele potrivite, puteți construi unul singur. Această complexitate crescută poate fi un inconvenient, dar vă va oferi acces la peste 1,6 milioane de combinații de culori diferite. Pentru majoritatea oamenilor, o bandă RGB standard este tot ce au nevoie. Dar pentru cei care caută modele și animații complexe, o bandă adresabilă va satisface cu siguranță această dorință.

Benzi LED Adresabile

Deși o bandă adresabilă poate arăta ca o bandă RGB obișnuită, fiecare LED poate fi iluminat individual sau „adresat” (de unde și numele). Acest lucru înseamnă că fiecare LED poate avea o culoare și o luminozitate diferită de vecinul său, o caracteristică ce nu se găsește la benzile RGB standard. Această caracteristică este realizată printr-un mic circuit integrat (IC) încorporat în fiecare dintre LED-urile de pe bandă. Faptul că fiecare LED poate fi adresat individual deschide o lume de posibilități pentru modele și animații complexe.

Examinând pad-urile benzii, putem vedea că există un pad DO/DIN. Aceasta este linia de date, care este utilizată pentru a comunica benzii ce culori ar trebui afișate. Aveți nevoie de o singură linie de date pentru a comunica cu sute (sau chiar mii!) de LED-uri adresabile. Cel mai comun tip adresabil este WS2812, cunoscut și sub numele de NeoPixel, compatibil cu majoritatea plăcilor Arduino.

Tip Bandă LEDDescriereNumăr Terminale (Exemplu)Complexitate ControlCost (Estimare)
MonocromăO singură culoare fixă.2 (Plus/Minus)Foarte simpluScăzut
RGBCombinații de culori prin ajustarea R, G, B. Toate LED-urile au aceeași culoare.4 (R, G, B, GND/VCC comun)Mediu (necesită controler)Mediu
AdresabilăFiecare LED poate fi controlat individual (culoare și luminozitate).3 (VCC, GND, Date)Ridicat (necesită biblioteci dedicate)Ridicat

Câte Benzi LED sau LED-uri pot fi Conectate la un Arduino?

Numărul de LED-uri sau benzi LED pe care le puteți controla cu un Arduino depinde de mai mulți factori: tipul de LED (individual vs. bandă), tipul de bandă (monocromă, RGB, adresabilă) și, cel mai important, resursele Arduino-ului (pini, curent, RAM, viteză de procesare).

Controlul LED-urilor Individuale

Dacă vorbim de LED-uri individuale conectate direct la pinii digitali ai unui Arduino Uno, este important să ne încadrăm în limitele de curent ale fiecărui pin și ale întregii plăci. Un pin digital al Arduino Uno poate furniza în siguranță până la aproximativ 20mA, iar suma totală a curentului pentru toți pinii nu ar trebui să depășească 200mA. Prin urmare, ar fi înțelept să rotunjim acest număr la aproximativ 10 până la 12mA pentru fiecare LED pentru a rămâne confortabil în limite. Astfel, când utilizați doar pinii digitali ai unei plăci Arduino Uno, puteți controla individual aproximativ 13 LED-uri, atâta timp cât curentul este limitat la aproximativ 10 până la 12 mA pentru fiecare LED.

How many LEDs can an Arduino Uno board control?
Therefore it would be wise to round this number down to around 10 to 12mA for each LED to stay comfortably within the limit. So our final answer is that when using only the digital pins on an Arduino Uno board, we can individually control 13 LEDs so long as the current is limited to approximately 10 to 12 mA for each LED.

Controlul Benzilor LED

Benzi Monocrome și RGB (Non-adresabile):

Pentru aceste tipuri de benzi, sunteți limitat de numărul de pini digitali disponibili pe Arduino care pot fi folosiți pentru control (de obicei prin PWM pentru luminozitate/culoare). O bandă monocromă necesită un singur pin de control (plus alimentare), iar o bandă RGB necesită trei pini de control (plus alimentare). Astfel, un Arduino Uno, având 14 pini digitali (dintre care 6 cu PWM), poate controla un număr limitat de benzi RGB (max. 6 dacă folosiți doar pini PWM) sau mai multe benzi monocrome (până la 13). Rețineți că alimentarea benzilor LED se face, aproape întotdeauna, de la o sursă de alimentare externă, nu de la Arduino în sine.

Benzi LED Adresabile (WS2812/NeoPixel):

Aici lucrurile devin mai interesante. Un singur pin de date de la Arduino poate controla mii de LED-uri adresabile, deoarece datele sunt transmise serial. Limitarea principală nu este numărul de pini, ci:

  • Memoria RAM: Fiecare LED adresabil necesită o anumită cantitate de memorie RAM pentru a stoca informațiile despre culoare (de exemplu, 3 octeți pentru RGB). Un Arduino Uno are doar 2KB de RAM. Pentru o bandă WS2812, 2KB de RAM ar permite controlul a aproximativ 682 de LED-uri (2048 octeți / 3 octeți/LED). Cu toate acestea, sistemul de operare Arduino și alte variabile necesită și ele RAM, așa că un număr mai realist ar fi în jur de 500 de LED-uri pentru o funcționare stabilă.
  • Puterea de Procesare: Actualizarea a sute sau mii de LED-uri necesită timp de procesare. Cu cât sunt mai multe LED-uri, cu atât durează mai mult să le actualizați pe toate, ceea ce poate duce la o rată de cadre scăzută pentru animații.

Soluții pentru Extinderea Capacității:

Pentru a depăși aceste limitări, există mai multe abordări:

  • Benzi LED bazate pe SPI: Acestea nu sunt legate de sincronizări specifice și, prin urmare, permit generarea/transmiterea culorilor în flux continuu. Arduino poate calcula următoarea culoare și o poate trimite direct. În acest fel, veți avea nevoie de RAM doar pentru un singur pixel la un moment dat. Limita este acum doar timpul necesar pentru a actualiza o bandă. Trimiterea datelor în SPI se face prin hardware, permițând software-ului să se concentreze pe următoarea sarcină/pixel. De asemenea, nu este necesar să calculați întreaga bandă dintr-o dată înainte de a o trimite. Adesea, puteți trimite „pixeli” mult mai rapid, pur și simplu crescând frecvența ceasului SPI.
  • Hardware Mai Puternic: Dacă intenționați să forțați limitele Arduino-ului, de ce să nu utilizați un hardware mai bun? Teensy 3.2 este adesea folosit pentru proiectele cu benzi LED, deoarece are 64KB RAM și 256KB flash și poate rula la 96MHz. Aveți o privire și la bibliotecile FastLED și OctoWS, care sunt optimizate pentru performanță cu benzi adresabile.
  • Scalabilitate și Controlere Multiple: Pentru proiecte foarte mari, este recomandat să împărțiți proiectul pentru a-l face scalabil. Încercați să faceți un singur „rând” și apoi adăugați mai multe rânduri (cu controlere și alimentare individuale). Puteți utiliza protocoale de comunicare precum RS485 sau CAN pentru a conecta, comanda și sincroniza aceste rânduri diferite.

Alimentarea Benzilor LED

Un singur LED nu reprezintă o problemă, dar atunci când sunt utilizate multe, consumul de energie poate depăși rapid limitele controlerului. Pot apărea probleme precum LED-urile care devin mai roșii spre capătul benzii, firele care se încing neplăcut, sau chiar controlerul care se arde complet.

Selectarea Sursei de Alimentare

În primul rând, asigurați-vă întotdeauna că selectați o sursă de alimentare care poate susține consumul de energie al benzii. Pentru a determina consumul de energie anticipat, puteți consulta fișa tehnică a LED-ului utilizat. De exemplu, când R, G și B sunt setate la luminozitate maximă pentru un WS2812, fiecare WS2812 consumă aproximativ 60 mA. Acest lucru poate părea puțin, dar atunci când este compus pe întreaga bandă, consumul de curent poate deveni semnificativ. Verificați sursa de alimentare pe care o aveți la dispoziție pentru a-i determina curentul maxim nominal, indicat de obicei pe o etichetă sau un autocolant. Pentru a minimiza șansele de a se strica ceva, asigurați-vă că curentul nominal este peste consumul de curent așteptat.

Condensatori de Bypass

Asigurați-vă întotdeauna că instalați un condensator de bypass aproape de sursa de alimentare dacă alimentați un număr semnificativ de LED-uri. Un condensator de bypass este pur și simplu un condensator de dimensiuni decente plasat în paralel cu banda. Acest lucru ajută la atenuarea șocurilor cauzate de creșterile bruște ale consumului de curent, acționând ca un rezervor de sarcină.

Probleme cu Căderea de Tensiune (Roșeață și Diminuare)

Roșeața și diminuarea luminozității spre capete sunt efecte comune observate la benzile lungi. Pe măsură ce avansați de-a lungul benzii, există mai puțină tensiune disponibilă pentru a alimenta următorul LED. Acest lucru se întâmplă din cauza energiei risipite prin rezistența traseelor și a joncțiunilor benzii. Roșeața provine de la tensiunea de polarizare mai mare a LED-urilor albastre și verzi, ceea ce le face să cedeze treptat spre capăt. Această problemă poate fi rezolvată cu injectoare de tensiune. Nu vă lăsați intimidați de numele sofisticat! Aceasta implică doar lipirea unui fir +V de la sursa de alimentare la capătul sau mijlocul benzii (sau oriunde decideți să-l plasați).

Injectorul „reinjectează” tensiunea de alimentare originală în bandă, oferind impulsul final necesar pentru LED-urile de la capete. O altă soluție pentru roșeață/diminuare este utilizarea unei benzi cu tensiune mai mare (12V, 24V etc.). Această tensiune mai mare oferă o marjă mai mare pentru tensiunea pierdută și mai puțină căldură risipită. Nu sunt necesare injectoare pentru tensiuni mai mari, dar acest lucru vine cu costul de a trebui să susțineți mai mult de o tensiune în proiectul dumneavoastră.

Limitarea Luminozității

Nu în ultimul rând, limitarea luminozității este, de asemenea, o bună practică. O bandă la luminozitate maximă poate fi excesiv de luminoasă și rareori necesară, risipind energie. Setarea unei luminozități maxime în codul controlerului dumneavoastră este o modalitate bună de a limita curentul de vârf. Cu toate acestea, dacă aveți într-adevăr nevoie de luminozitate maximă de la banda dumneavoastră, asigurați-vă că utilizați un fel de difuzor pentru a reduce duritatea luminii.

Proiecte Demo Simple

Cea mai bună modalitate de a învăța cum să utilizați aceste benzi este prin realizarea unor exemple de bază. Vom realiza un Controler de Bază pentru Bandă RGB, un Controler de Bază pentru Bandă Adresabilă și, pentru a demonstra o aplicație a benzilor adresabile, un Indicator de Distanță.

Controler de Bază pentru Bandă RGB

Prezentare Generală: Acest mini-proiect este doar un schelet de cod pentru un controler RGB. Acesta alternează între afișarea culorilor roșu, verde, albastru și auriu. Încercați să modificați valorile RGB pentru a schimba culorile pe care le produce!

Materiale Necesare:

  • Bandă LED RGB standard de 5V
  • Arduino (la alegere)
  • Fire de 20 sau 22 AWG sau Conectori pentru Bandă RGB
  • Breadboard

Pași:

  1. Dacă este necesar, tăiați banda RGB la o lungime potrivită, tăind la pad-urile de cupru cu foarfece sau clești de tăiat fire. Nu tăiați în altă parte, deoarece ar putea deteriora banda. Asigurați-vă că nu faceți banda prea lungă! Dacă sunt prea multe LED-uri, consumul de energie ar putea prăji Arduino-ul.
  2. Dacă nu este deja atașat, atașați un conector de bandă la banda tăiată. Dacă aveți instrumentele și abilitățile, puteți lipi în loc fire jumper.
  3. Atașați pinii R, G, B ai benzii la pinii corespunzători conform codului de mai jos. Nu ezitați să schimbați valorile pinilor în predefinire.
  4. Încărcați codul și observați.

Cod:

#define red_pin 9 #define green_pin 6 #define blue_pin 5 void setup() { pinMode(red_pin, OUTPUT); pinMode(green_pin, OUTPUT); pinMode(blue_pin, OUTPUT); } void loop() { RGB_color(255, 0, 0); // Roșu. delay(400); RGB_color(0, 255, 0); // Verde. delay(400); RGB_color(0,0,255); // Albastru. delay(400); RGB_color(255,215,0); // Auriu. delay(400); } void RGB_color(int red_value, int green_value, int blue_value) { analogWrite(red_pin, red_value); analogWrite(green_pin, green_value); analogWrite(blue_value, blue_value); }

Note: După cum puteți vedea, controlul benzilor RGB este similar cu controlul unui singur LED RGB. Funcția RGB_color() de aici utilizează 3 instrucțiuni analogWrite pentru a emite semnale PWM către componentele LED roșu, verde și albastru. Dacă alimentați mai multe LED-uri sau la tensiuni mai mari, emiterea acestui semnal PWM către MOSFET-uri ar fi recomandabilă.

How many LED strips can be connected to an Arduino?
In principle you can connect one strip per digital pin, but that looks like a huge amount of data to stream out of an Arduino. Even a Mega would likely be short of flash and RAM. you could use a bunch of $2 pro-minis, software serial controlled by a mega. There are three factors to consider when driving strings of these LEDs from an Arduino:

Controler de Bază pentru Bandă Adresabilă

Prezentare Generală: Acest mini-proiect este un schelet de cod pentru un controler LED adresabil, arătând cum este tratată banda în cod. Acesta afișează o alternanță de roșu și verde.

Materiale Necesare:

  • Bandă LED WS2812
  • Arduino (la alegere)
  • Fire de 20 sau 22 AWG sau Conectori pentru Bandă Adresabilă

Pași:

  1. Urmați din nou pașii 1 și 2 de la demo-ul benzii RGB. Aceleași practici de bază se aplică tuturor benzilor LED.
  2. Atașați pinul de date al benzii la pinul corespunzător de pe Arduino, așa cum este setat în codul de mai jos. Dacă aveți un număr diferit de LED-uri sau doriți să utilizați un alt pin de date LED, nu ezitați să schimbați valorile în predefinire.
  3. Încărcați codul și observați.

Cod:

#include <Adafruit_NeoPixel.h> #define PIN 2 // pinul de intrare la care este atașat Neopixel #define NUMPIXELS 8 // numărul de neopixeli din bandă Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int delayval = 100; // întârziere în milisecunde int redColor = 0; int greenColor = 0; int blueColor = 0; void setup() { // Inițializează biblioteca NeoPixel. pixels.begin(); } void loop() { setColor(); for (int i=0; i < NUMPIXELS; i++) { // pixels.Color ia valori RGB, de la 0,0,0 până la 255,255,255 pixels.setPixelColor(i, pixels.Color(redColor, greenColor, blueColor)); // Aceasta trimite culoarea pixelului actualizată către hardware. pixels.show(); // Întârziere pentru o perioadă de timp (în milisecunde). delay(delayval); } } // setColor() // alege valori aleatorii pentru a seta RGB void setColor(){ redColor = random(0, 255); greenColor = random(0,255); blueColor = random(0, 255); }

Note: Biblioteca utilizată aici este Adafruit_NeoPixel (sau FastLED, deși codul dat este NeoPixel), o bibliotecă populară pentru controlul LED-urilor adresabile. Rețineți că modificările aduse benzii sunt afișate numai atunci când apelați funcția pixels.show()! Aceasta este un exemplu foarte simplu a ceea ce pot face aceste biblioteci. Ele au mult mai multe funcții, cum ar fi funcții matematice speciale și funcții de spațiu de culoare HSV. Consultați documentația și exemplele lor pentru mai multe!

Indicator de Distanță

Prezentare Generală: Combinarea senzorilor cu o formă de ieșire vizuală este o combinație clasică. În acest mini-proiect, vom combina un senzor de distanță ultrasonic și o bandă LED adresabilă pentru a realiza un indicator de distanță. Indicatorul de distanță va fi eficient între valorile MIN_DISTANCE și MAX_DISTANCE. Cu cât un obiect este mai departe, cu atât mai multe LED-uri sunt aprinse.

Materiale Necesare:

  • Senzor Ultrasonic HC SR04
  • Arduino Uno
  • Bandă LED WS2812
  • Breadboard

Pași:

  1. Ca și înainte, urmați pașii 1 și 2 ai mini-proiectului controlerului RGB pentru a pregăti banda LED.
  2. Conectați pinii benzii și ai senzorului ultrasonic la pinii specificați în cod. Nu ezitați să schimbați valorile în predefinire pentru a se potrivi nevoilor dumneavoastră.
  3. Încărcați codul și observați.

Cod:

#include <FastLED.h> #define TRIG_PIN 2 #define ECHO_PIN 3 #define LED_COUNT 8 #define LED_OUT 4 //În centimetri #define MIN_DISTANCE 10 #define MAX_DISTANCE 40 CRGB leds[LED_COUNT]; float duration, distance; float dist_div = (MAX_DISTANCE-MIN_DISTANCE)/LED_COUNT; void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); FastLED.addLeds<WS2812,LED_OUT,GRB>(leds,LED_COUNT); } void loop() { //Determinare distanță digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); duration = pulseIn(ECHO_PIN, HIGH); distance = (duration*.0343)/2; //Setează LED-urile for (int i = 0; i < LED_COUNT; ++i) { if (distance > MIN_DISTANCE+i*dist_div) { leds[i] = CRGB(100,0,0); } else { leds[i] = CRGB(0,0,0); } } FastLED.show(); delay(100); }

Note: Există multe modalități de a integra ieșirea vizuală într-un proiect. Deși nu poate afișa rezultate la fel de precis ca LCD-urile 16x2 sau OLED-urile, utilizarea unei benzi adresabile este cu siguranță una dintre cele mai ușoare modalități. În acest mini-proiect, banda a acționat ca un indicator, dar posibilitățile de feedback vizual sunt nelimitate.

Întrebări Frecvente (FAQ)

Q: Pot alimenta direct banda LED de la Arduino?

A: Nu este recomandat pentru majoritatea benzilor LED. Arduino poate furniza doar o cantitate limitată de curent (max. 500mA prin portul USB sau 200mA prin pinul VIN). Benzile LED, mai ales cele lungi sau adresabile, necesită mult mai mult curent. Utilizați întotdeauna o sursă de alimentare externă pentru benzi LED.

Q: Ce bibliotecă ar trebui să folosesc pentru benzile adresabile?

A: Cele mai populare și robuste biblioteci sunt FastLED și Adafruit NeoPixel. Ambele oferă funcționalități excelente pentru controlul benzilor WS2812 și a altor tipuri de LED-uri adresabile.

Q: Ce înseamnă „injectoare de tensiune”?

A: Injectoarele de tensiune sunt conexiuni suplimentare de alimentare (pozitiv și negativ) pe care le adăugați de-a lungul unei benzi LED lungi pentru a compensa căderea de tensiune. Acest lucru ajută la menținerea luminozității și a culorii uniforme pe toată lungimea benzii, prevenind „roșeața” sau diminuarea luminozității la capete.

Q: Pot controla mai multe benzi adresabile cu un singur Arduino?

A: Da, puteți controla mai multe benzi adresabile, fiecare pe un pin de date diferit al Arduino-ului. Limitarea principală va fi memoria RAM a Arduino-ului și puterea de procesare necesară pentru a gestiona toate LED-urile simultan. Pentru proiecte mari, considerați utilizarea unui Arduino mai puternic (cum ar fi Mega) sau a unui microcontroler mai avansat (cum ar fi Teensy).

Q: Este necesar un rezistor pentru LED-urile din bandă?

A: Nu, benzile LED au rezistoare încorporate (sau circuite integrate de control în cazul benzilor adresabile) pentru a limita curentul către fiecare LED. Nu este nevoie să adăugați rezistoare externe.

Concluzie

Benzile LED sunt una dintre cele mai populare surse de lumină utilizate astăzi. Ieftine, flexibile și ușor de utilizat, și-au găsit un loc în aproape fiecare trusă de instrumente a unui creator. Cu o mare varietate de benzi disponibile, sunteți sigur că veți găsi ceva care se va potrivi nevoilor dumneavoastră. Combinate cu versatilitatea și accesibilitatea platformei Arduino, posibilitățile de proiecte luminoase și interactive sunt practic infinite. Nu ezitați să experimentați și să adăugați o strălucire unică proiectelor dumneavoastră!

Dacă vrei să descoperi și alte articole similare cu Benzi LED și Arduino: Ghidul Complet, poți vizita categoria Fitness.

Go up