Salutare tuturor amatorilor de bricolaj! Astăzi ne vom uita la una dintre numeroasele opțiuni de utilizare a benzii LED tip WS2812B pe LED-uri RGB adresabile. Astfel de benzi (precum și LED-urile WS2812B montate separat) pot fi folosite pentru a ilumina fundalul „Ambilight” al monitoarelor și televizoarelor de computer, iluminarea dinamică într-o mașină, un tablou, o ramă foto, un acvariu și așa mai departe. Sunt utilizate pe scară largă în proiectarea oricăror spații, sub formă de iluminări de Anul Nou sau spectacole de lumini. Folosirea benzii LED tip WS2812B face posibilă crearea unui număr mare de proiecte interesante.
LED-ul WS2812B este un LED RGB introdus în aceeași carcasă cu cipul WS2801.
LED-ul WS2812B în sine este un element SMD proiectat pentru montare la suprafață. În interior, LED-ul este format din cristale de lumină roșie, cristale de lumină verde și cristale de lumină albastră situate în aceeași carcasă. Cu acest LED puteți obține o mare varietate de nuanțe de culoare ale emisiei de lumină.
LED-ul RGB este controlat printr-o placă de microcontroler Arduino.
Am primit de la chinezi o bandă LED WS2812B.Este un segment lung de 1 metru cu 144 LED-uri. Mi-am dorit de mult să-l încerc pentru diferite experimente. Cu ajutorul bibliotecilor Arduino - Adafruit Neopixel și Fast led, puteți obține o mulțime de efecte de iluminare foarte neobișnuite. Dar apoi am decis să încerc să fac semnale de viraj dinamice pentru o mașină în așa-numitul „stil Audi.” Încă nu am început să folosesc această schemă în practică (cum o vor accepta polițiștii noștri?), dar efectul a fost cu siguranta foarte atractiv.
Placa Arduino Uno servește drept controler pentru controlul benzii LED; puteți folosi și alte plăci - Arduino Nano, Arduino Pro mini).
Urmărește întregul proces în videoclip:
Lista instrumentelor și materialelor.
-placa Arduino Uno;
- placa de coborâre 12V\5V la 3A;
- rezistente 100Kom-4buc;
-rezistente 47Kom-4buc;
- rezistențe de 500 Ohm - 1 bucată;
-butoane (pentru a simula semnalele de pornire) -4 buc;
- tabla de paine
-şurubelniţă;
alimentare de laborator
- ciocan de lipit;
-batist;
-tester.
- fire de conectare.
Primul pas. Asamblarea circuitului.
Am asamblat circuitul folosind o placă. Rezistoarele conectate la intrările digitale ale Arduino sunt necesare pentru a converti semnalele de intrare ale mașinii de la 12 la 5 volți. Rezistor de 500 Ohm pentru a proteja linia de control a benzii LED WS2812B.
Poza tablei
Ca convertor de la 12V la 5V am folosit o placă gata făcută de la Aliexpress. Poate fi utilizat orice convertor cu parametri adecvați. Convertorul este necesar pentru alimentarea stabilă a Arduino și a benzii LED WS2812B.
Pasul doi. Programare Arduino.
Intrările digitale ale plăcii Arduino nr. 3, 4 sunt folosite pentru a permite rotația la stânga și la dreapta. Pinul nr. 5 – aprindeți lumina de frână, pinul nr. 6 – porniți marșarierul. Pinul nr. 8 este semnalul de control pentru banda WS2812B.
În Arduino IDE, încărcați schița (linkul de mai sus). Două opțiuni de schiță - una pentru partea din față a mașinii, cealaltă pentru spate. Folosiți oricare dintre ele aveți nevoie. La începutul schiței, puteți seta numărul de LED-uri de care aveți nevoie. De asemenea, puteți regla viteza semnalizatoarelor în funcție de mașina dvs. De asemenea, puteți modifica luminozitatea LED-urilor folosind parametrul strip.Color(103,31,0) – schimbați primele două cifre de la 0 la 255. Adică puteți experimenta puțin.
Când apăsați butonul dorit, trimitem un semnal pentru a activa parametrul dorit. Când circuitul este asamblat corect, de obicei începe să funcționeze imediat.
Fotografie la serviciu.
Un experiment bun s-a dovedit a fi cu acest design de weekend. A fost interesant
Să luăm în considerare crearea unui semnal de viraj ca la un Audi, folosind exemplul unui far de la o mașină Renault Clio. Să facem semnale de viraj și DRL-uri într-un singur dispozitiv.
Ce veți avea nevoie pentru asta: bandă LED constând din LED-uri ws2812b Controler Arduino nano(poate fi folosit în orice alt factor de formă) Încărcător auto pentru telefoane mobile cu ieșire USB. Deoarece controlerul Arduino are nevoie de o tensiune de 5V, vom folosi acest încărcător ca convertor de tensiune de la 12V la 5V. Stabilizator de tensiune pentru 5V KR142EN5V (KREN5V) sau orice alt analog importat. 3 rezistențe de 10 kOhm ca rezistență de tragere.
Schema de conectare
Controlerul Arduino trebuie conectat la rețeaua mașinii printr-un convertor de 12V -> 5V, astfel încât tensiunea către circuit să provină de la punerea contactului. Trebuie să conectați firul pozitiv de la semnalizarea existentă la stabilizatorul de tensiune KREN5V. Acest articol discută conexiunea și firmware-ul unui singur semnal de viraj; pentru a face un al doilea semnal de întoarcere, trebuie să conectați în mod similar a doua bandă LED la orice ieșire digitală gratuită a Arduino (de exemplu 7) și, de asemenea, să adăugați cod pentru aceasta în firmware-ul conform exemplului nostru.
Firmware-ul controlerului
Pentru a lucra cu LED-uri pixeli veți avea nevoie de o bibliotecă
#include
// conectați biblioteca
Adafruit_NeoPixel strip = Adafruit_NeoPixel(22, 8, NEO_GRB + NEO_KHZ800);
int t,t1,t2,t3,t4,p2,p1 = 0;//variabila timp
void setup() (
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);strip.begin();
strip.show();}
void loop() (
if (digitalRead(2) == LOW) ( //Dacă semnalul de întoarcere este oprit
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(255,255,255)); // R=255, G=255, B=255 - culoarea albă a LED-ului, când este aprins aprindem luminile de mers
}
strip.show();
}if ((digitalRead(2) == HIGH) & (t == 1)) ( // verifică dacă semnalul de direcție este pornit
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // stinge toate diodele
}
strip.show();
pentru(int k = 0; k< 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,for(int i = 0; i< 23; i++){
if (digitalRead(2) == HIGH) (k = 0;) // dacă în timp ce semnalizatorul clipește, primim un alt semnal pozitiv, apoi resetați contorul astfel încât semnalizatorul să clipească încă de cel puțin 3 ori
strip.setPixelColor(i, strip.Color(255, 69, 0)); // R=255, G=69, B=0 - culoare LEDîntârziere((t4)/22);
strip.show();}
if (digitalRead(2) == HIGH) (t4=t4+20;) // dacă toate diodele sunt aprinse galben, dar semnalul de la releu încă vine, atunci creștem timpul de ardere
if (digitalRead(2) == LOW) (t4=t4-20;) // dacă toate diodele sunt aprinse galben, dar semnalul de la releu încă vine, atunci creștem timpul de arderefor(int i = 0; i< 23; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - culoare LED
întârziere((t3)/22);
strip.show();}
dacă ((digitalRead(2) == LOW)) (t3=t3+20;)
dacă ((digitalRead(2) == HIGH)) (t3=t3-20;)
}if ((digitalRead(2) == HIGH) & (t == 0)) ( // verifică dacă semnalul de direcție este pornit
t1 = milis(); //amintește-ți la ce oră ai pornit
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 69, 0)); // când porniți semnalizatorul pentru prima dată, porniți toate diodele galbene
}
strip.show();
în timp ce (digitalRead(2) == HIGH) ()
t2 = milis(); // amintește-ți la ce oră s-a oprit semnalizatorul
t4=t2-t1;for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // sting diodele când dispare semnalul de la releul de viraj
}
strip.show();
în timp ce (digitalRead(2) == LOW) (
dacă ((millis()-t2)>2000)(break;)
}
dacă ((milis()-t2)<2000) {
t3 = milis()-t2; // timp pentru care se sting semnalizatoarele
t = 1; // steag, știm că valoarea timpului a fost salvată.
}
}if (digitalRead(4) == HIGH) ( //semnale speciale
pentru(int j = 0; j< 16; j++) {
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 0, 0)); // R=255, G=0, B=0 - culoare LED
}
strip.show();
întârziere (20);
for(int i = 0; i< 22; i++){
}
strip.show();
întârziere (20);
}pentru(int j = 0; j< 16; j++) {
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 255)); // R=0, G=0, B=255 - culoare LED
}
strip.show();
întârziere (20);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - culoare LED
}
strip.show();
întârziere (20);
}
}if (digitalRead(3) == HIGH) ( //strobe
pentru(int j = 0; j< 24; j++) {
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 255, 255)); // R=255, G=255, B=255 - culoare LED
}
strip.show();întârziere (15);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - culoare LED
}
strip.show();
întârziere (15);
}
întârziere (500);
Faceți același lucru pentru codul pentru al doilea semnal de întoarcere.
Videoclip despre cum funcționează farul nostru
Designerul luminilor de rulare de la Aliexpress este o placă de circuit imprimat și un set de componente radio. Tot ce trebuie să faceți este să lipiți componentele pe placă.
Dar puteți obține efecte mai interesante ale luminilor de rulare din el. De exemplu, pentru semnalizatoarele auto sau luminile de frână, sau doar pentru ghirlande pentru o vacanță.
Acest circuit poate funcționa în intervalul de tensiune de alimentare de 3 -15 volți. Generatorul de impulsuri este asamblat pe cipul NE555, apoi impulsurile sunt trimise la un contor zecimal cu un decodor - un cip CD4017 (sau K561IE8), la ieșirile cărora LED-urile sunt conectate prin rezistențe de limitare a curentului.
Viteza de comutare a luminilor de mers este reglată de un rezistor de reglare. Adăugați un circuit cu declanșatoare și comutatoare cu tranzistori de ieșire. Nu este nevoie să programezi nimic etc. Ca rezultat, puteți obține efecte de iluminare mai interesante ale luminilor de rulare. Trebuie să facem o altă placă de circuit imprimat cu declanșatoare K561TM2 și întrerupătoare de alimentare KT815. Un impuls de la fiecare ieșire K561IE8 este furnizat la intrarea de declanșare folosind principiul „blocare”, adică la ieșirea de declanșare semnalul rămâne constant până când pulsul de resetare ajunge de la pinul 11 al microcircuitului CD4017(K561IE8). 9 canale sunt pornite pe ciclu.
Toți cei care au văzut o mașină mai mult sau mai puțin modernă nu pentru a doua oară și chiar dacă a fost o chestiune de condus, și-au notat de mult una dintre opțiunile utile... Oamenii o numesc semnal de viraj leneș sau politicos. semnal de viraj. Întreaga sa esență se rezumă la faptul că la virarea la dreapta sau la stânga, șoferul atinge o singură dată maneta semnalizatorului, fără a o fixa. Adică, pur și simplu face ca circuitele semnalizatoarelor să funcționeze, dar nu pornește tocmai acest comutator. Drept urmare, după eliberarea manetei, indicatoarele de direcție sunt activate de încă 3-4 ori, iar în acest moment șoferul își poate desfășura deja „afacerea”, adică să se dedice complet drumului. Opțiunea este foarte utilă atunci când trebuie să schimbați benzile. La urma urmei, când pârghia semnalizatorului este complet pornită, oprirea automată nu va avea loc, din cauza unghiului nesemnificativ de rotație al volanului, ceea ce înseamnă că va trebui să împingeți înainte și înapoi cu indicatorul în sine sau să-l susțineți constant cu mâna ta pe punctul de a se aprinde pentru a imita funcționarea semnalizatorului. Și dacă există o astfel de opțiune, atunci am atins ușor maneta și am uitat. În general, credem că esența lucrării a fost pe deplin dezvăluită, dar acum merită menționată posibilitatea implementării unei astfel de opțiuni pe mașina dvs.
Pentru ce circuite electrice este potrivit un semnal de întoarcere politicos pe Arduino?
Înainte de a intra în toate problemele serioase legate de producerea unui semnal de întoarcere politicos, trebuie să înțelegeți pentru ce diagrame de conectare electrică va fi potrivită fără a modifica circuitul electric al mașinii.
Aici ni se prezintă două opțiuni principale care diferă în principiu. Primul este atunci când semnalizatoarele se aprind atunci când sunt conectate ca sarcină. Adică, comutarea are loc datorită comutării circuitului lămpii de semnalizare, în care se află chiar pârghia semnalizatorului, acesta este cel care închide circuitul, după care are loc operațiunea. În acest caz, nu va fi posibil să folosim opțiunea noastră, deoarece atunci când pârghia deschide circuitul cu lămpile, dezactivăm imediat posibilitatea de indicare a luminii, chiar dacă un semnal ajunge la pârghie în sine, pur și simplu nu va merge deloc. mai departe.
A doua opțiune este a noastră, când există semnale de control și sunt semnale de putere de ieșire. În acest caz, în locul releului standard, puteți instala exact circuitul pe care am dori să vă aducem la cunoștință.
Modul de putere releu care poate fi achiziționat de pe Internet pentru a controla sarcina de putere
Schiță și circuitul unui semnal de întoarcere leneș (politicos) pe Arduino
Deci, se poate argumenta despre utilizarea Arduino ca unitate principală pentru semnalele de viraj leneși, deoarece aceasta nu este, de asemenea, o soluție complet ideală, ceea ce are dezavantajele sale. De exemplu, va fi necesar să aveți o putere constantă după pornirea contactului; pentru a asigura performanța, va fi necesar să conectați circuitele de alimentare. În același timp, cablarea în sine de la componente radio suplimentare este practic inutilă aici, deoarece în acest caz puteți pur și simplu să programați un microcontroler și să îl utilizați numai. Dar acest minus este și un plus, pentru că oricine are unul poate programa Arduino, iar pentru microcontrolere vei avea nevoie și de un programator.
Scrierea unui program va fi una dintre cele mai dificile sarcini. Aici un începător va trebui să petreacă mai mult de o oră din timpul său liber și să studieze munca algoritmilor, dar din fericire există Internet și există noi. Deci iată schița.
Int switchPinR=8; int switchPinL=7; int ledPinR=11; int ledPinL=12; boolean ledOn = fals; int i=0; int z=0; void setup() ( // puneți aici codul de configurare, pentru a rula o dată: pinMode(switchPinR, INPUT); pinMode(switchPinL, INPUT); pinMode(ledPinR, OUTPUT); pinMode(ledPinL, OUTPUT); Serial.begin(9600) ); ) void loop() ( // puneți codul principal aici, pentru a rula în mod repetat: //2 etichetă: if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinR, HIGH) ; digitalWrite(ledPinL, HIGH); i=0; în timp ce (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) ) else ( digitalWrite(ledPinR, LOW); digitalWrite(ledPinL, LOW); z=0; ) //ciclarea semnalului de urgență dacă (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) (du-te la etichetă;) //Semnalizator dreapta. dacă (digitalRead(switchPinR) == HIGH) ( digitalWrite(ledPinR, HIGH); i=0; în timp ce (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); delay(400); i++; z++; if (digitalRead(switchPinR) == LOW && z>=7) ( break; ) ) ) else ( digitalWrite(ledPinR, LOW); z=0; ) //Semnal de viraj stânga. dacă (digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinL, HIGH); i=0; în timp ce (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( break; ) ) ) else ( digitalWrite(ledPinL, LOW); z=0; ) ) )
Pentru a rezuma pe scurt, schița are 2 intrări și 2 ieșiri. În acest caz, atunci când la intrarea (8,7) este introdus un semnal pozitiv, adică de nivel înalt, primim un anumit număr de clipiri (z sau i) la ieșirea corespunzătoare (11,12). Pe scurt, ceva de genul acesta. Adică, dacă doriți să schimbați ceva în schiță în ceea ce privește numărul de clipiri și ieșirile de intrare, atunci acordați atenție acestor variabile. Dacă trebuie să modificați durata clipirilor, atunci atenția dumneavoastră ar trebui să se concentreze asupra funcției de întârziere.
O altă caracteristică a programului este o ieșire de alarmă oarecum neobișnuită. Mai întâi, indicatoarele din stânga și din dreapta sunt procesate, apoi se aprind luminile de avarie. Acest lucru se datorează faptului că se poate porni numai dacă intrarea este mare în același timp la intrările 8 și 7. Și această condiție va fi îndeplinită doar în al doilea ciclu, deoarece apăsarea a două butoane simultan este imposibil din punct de vedere fizic. Viteza microcontrolerului vă va permite să citiți mai repede ieșirea ridicată de la un buton și să decideți că aceasta este, până la urmă, o condiție pentru declanșarea semnalului de direcție și nu o alarmă. Deși nu ar trebui să vă faceți griji pentru asta, cu excepția cazului în care să vă mulțumesc pe drum va fi problematic.
Caracteristici de conectare a unui semnal de întoarcere leneș (politicos) într-o mașină folosind Arduino
Nu ar trebui să utilizați pinul 13 ca ieșire, deoarece de fiecare dată când porniți și opriți alimentarea, indicatorii care vor fi conectați la această ieșire pot pâlpâi.
Când treceți de la semnalele de control la semnalele de alimentare, utilizați blocuri corespunzătoare achiziționate de pe Internet sau asamblate de dvs. Am vorbit deja despre astfel de blocuri - module.
Când primiți semnalul 1 de la o tensiune de 12 volți, plasați o rezistență de 10 Kom în fața intrării.
Acestea sunt toate instrucțiunile pentru a face un semnal de întoarcere leneș pentru o mașină folosind un microcontroler Arduino, iar acum cam același lucru în videoclip...