Witam wszystkich majsterkowiczów! Dzisiaj rozważymy jedną z wielu opcji zastosowania paska LED WS2812B na adresowalnych diodach LED RGB. Taśmy takie (a także oddzielnie montowane diody WS2812B) mogą służyć do podświetlania tła „Ambilight” monitorów komputerowych i telewizorów, dynamicznego oświetlenia w samochodzie, obrazu, ramki na zdjęcia, akwarium itp. Są szeroko stosowane w projektowaniu dowolnych pomieszczeń, w formie iluminacji noworocznych lub pokazów świetlnych. Zastosowanie taśmy LED typu WS2812B umożliwia uzyskanie dużej ilości ciekawych projektów.
Dioda LED WS2812B to dioda LED RGB osadzona w tej samej obudowie co układ WS2801.
Sama dioda WS2812B jest elementem SMD przeznaczonym do montażu natynkowego. Wewnątrz dioda LED składa się z kryształów światła czerwonego (czerwonego), zielonego (zielonego) i niebieskiego (niebieskiego) w jednym opakowaniu. Dzięki tej diodzie LED można uzyskać szeroką gamę odcieni kolorów promieniowania świetlnego.
Dioda LED RGB jest kontrolowana przez płytkę mikrokontrolera Arduino.
Dostałem od Chińczyka pasek LED WS2812B.Jest to odcinek o długości 1 metra ze 144 diodami. Od dawna chciałem spróbować różnych eksperymentów. Z pomocą bibliotek dla Arduino - Adafruit Neopixel i Fast led można uzyskać wiele bardzo nietypowych efektów świetlnych. Ale potem postanowiłem spróbować zrobić dynamiczne kierunkowskazy do samochodu w tak zwanym „stylu Audi”. Jeszcze nie wdrożyłem tego schematu w życie (jak przyjmą to nasi gibbddeshniks?), ale efekt okazał się być bardzo atrakcyjnym.
Płytka Arduino Uno służy jako kontroler do sterowania taśmą LED, można zastosować inne płytki - Arduino Nano, Arduino Pro mini).
Zobacz cały proces na filmie:
Wykaz narzędzi i materiałów.
-Płyta Arduino Uno;
- płytka obniżająca napięcie 12V \ 5V przy 3A;
- rezystory 100Kom-4szt;
-rezystory 47Kom-4szt;
- rezystory 500 Ohm-1szt;
-przyciski (do symulacji włączenia sygnałów) -4szt;
- deska do chleba
-Śrubokręt;
zasilacz laboratoryjny
- lutownica;
- kambr;
-próbnik.
- przewody łączące.
Krok pierwszy. Montaż schematu.
Złożyłem obwód za pomocą płytki prototypowej (płytki stykowej). Rezystory podłączone do wejść cyfrowych Arduino są potrzebne do konwersji sygnałów wejściowych samochodu z 12 na 5 woltów. Rezystor 500 ohm do zabezpieczenia linii sterującej taśmy LED WS2812B.
Zdjęcie tablicy
Jako przetwornicę z 12V na 5V wykorzystałem gotową płytkę z Aliexpress. Można zastosować dowolny konwerter o odpowiednich parametrach. Przetwornica jest potrzebna do stabilnego zasilania Arduino oraz taśmy LED WS2812B.
Krok drugi. Programowanie Arduino.
Wejścia cyfrowe płytki Arduino nr 3,4 służą do włączania skrętu w lewo i w prawo. Pin numer 5 - włącz światło hamowania, pin numer 6 - włącz bieg wsteczny. Pin numer 8 - taśma sygnału sterującego WS2812B.
W Arduino IDE prześlij szkic (link powyżej). Dwie opcje szkicu - jedna z przodu samochodu, druga z tyłu. Użyj tego, czego potrzebujesz. Na początku szkicu możesz ustawić liczbę potrzebnych diod LED. Możesz także dostosować prędkość kierunkowskazów do swojego samochodu. Możesz także zmienić jasność diod LED za pomocą parametru strip.Color(103,31,0) - zmień pierwsze dwie cyfry od 0 do 255. Oznacza to, że możesz trochę poeksperymentować.
Po naciśnięciu żądanego przycisku dajemy sygnał do włączenia żądanego parametru. Przy prawidłowym złożeniu obwodu zwykle natychmiast zaczyna działać.
Zdjęcie w toku.
Dobry eksperyment okazał się z tym weekendowym projektem. To było ciekawe
Rozważmy stworzenie działającego kierunkowskazu, jak w Audi, na przykładzie reflektora z samochodu Renault Clio. Zróbmy kierunkowskazy i DRL w jednym urządzeniu.
Czego potrzebujesz do tego: Taśma LED składająca się z diod ws2812b Nanokontroler Arduino(może być używany w dowolnej innej obudowie) Ładowarka samochodowa do telefonów komórkowych z wyjściem USB. Ponieważ kontroler Arduino potrzebuje napięcia 5 V, użyjemy tej ładowarki jako konwertera napięcia z 12 V na 5 V. Stabilizator napięcia dla 5V KR142EN5V (KREN5V) lub dowolnego innego importowanego analogu. 3 rezystory 10 kΩ jako rezystor podciągający.
Diagram połączeń
Kontroler arduino trzeba podłączyć do sieci samochodu poprzez przetwornicę 12V -> 5V tak aby napięcie do obwodu pochodziło z włączenia "zapłonu". Do stabilizatora napięcia KREN5V należy podłączyć przewód dodatni z aktualnego kierunkowskazu. W tym artykule omówiono podłączenie i oprogramowanie układowe tylko jednego kierunkowskazu, aby wykonać drugi kierunkowskaz, należy w podobny sposób podłączyć drugi pasek LED do dowolnego wolnego wyjścia cyfrowego Arduino (na przykład 7), a także dodać kod dla to w oprogramowaniu zgodnie z naszym przykładem.
oprogramowanie kontrolera
Do pracy z pikselowymi diodami LED potrzebna jest biblioteka
#włączać
// dołącz bibliotekę
Pasek Adafruit_NeoPixel = Adafruit_NeoPixel(22, 8, NEO_GRB + NEO_KHZ800);
int t,t1,t2,t3,t4,p2,p1 = 0;//zmienna czasowa
anuluj konfigurację()(
tryb pin(2, WEJŚCIE);
tryb pin(3, WEJŚCIE);
tryb pin(4, WEJŚCIE);
digitalWrite(2, NISKI);
zapis cyfrowy(3, NISKI);
zapis cyfrowy(4, NISKI);rozbierz.rozpocznij();
rozbierz.pokaż();}
pusta pętla() (
if (digitalRead(2) == LOW) ( //Jeśli kierunkowskaz jest wyłączony
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(255,255,255)); // R=255, G=255, B=255 - biały kolor diody, po włączeniu włączają światła do jazdy
}
rozbierz.pokaż();
}if ((digitalRead(2) == HIGH) & (t == 1)) ( // sprawdź czy włączony jest kierunkowskaz
for(int i = 0; i< 23; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // zgaś wszystkie diody
}
rozbierz.pokaż();
for(int k = 0; k< 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,for(int i = 0; i< 23; i++){
if (digitalRead(2) == HIGH) (k = 0;) // jeśli otrzymamy kolejny pozytywny sygnał podczas migania kierunkowskazu, to zresetuj licznik tak, aby kierunkowskaz zamigał jeszcze co najmniej 3 razy
strip.setPixelColor(i, strip.Color(255, 69, 0)); // R=255, G=69, B=0 - kolor diodyopóźnienie((t4)/22);
rozbierz.pokaż();}
if (digitalRead(2) == HIGH) (t4=t4+20;) // jeśli wszystkie diody świecą się na żółto, ale sygnał z przekaźnika jest nadal włączony, to zwiększamy czas palenia
if (digitalRead(2) == LOW) (t4=t4-20;) // jeśli wszystkie diody świecą się na żółto, ale sygnał z przekaźnika jest nadal włączony, to zwiększamy czas paleniafor(int i = 0; i< 23; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - kolor diody
opóźnienie((t3)/22);
rozbierz.pokaż();}
if ((odczyt cyfrowy(2) == NISKI)) (t3=t3+20;)
if ((odczyt cyfrowy(2) == WYSOKI)) (t3=t3-20;)
}if ((digitalRead(2) == HIGH) & (t == 0)) ( // sprawdź czy włączony jest kierunkowskaz
t1 = milis(); // zapamiętaj, o której godzinie się włączył
for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(255, 69, 0)); // przy pierwszym włączeniu kierunkowskazu zapalamy wszystkie diody na żółto
}
rozbierz.pokaż();
while (odczyt cyfrowy(2) == WYSOKI) ()
t2 = milis(); // zapamiętaj, o której wyłączył się kierunkowskaz
t4=t2-t1;for(int i = 0; i< 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // zgasić diody w przypadku utraty sygnału z przekaźnika skrętu
}
rozbierz.pokaż();
while (digitalRead(2) == NISKI) (
if ((millis()-t2)>2000)(break;)
}
jeśli ((milis()-t2)<2000) {
t3 = milis()-t2; // czas na jaki gasną kierunkowskazy
t = 1; // flaga, wiemy, że wartość czasu została zapisana.
}
}if (digitalRead(4) == HIGH) ( //sygnały specjalne
for(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 - kolor diody
}
rozbierz.pokaż();
opóźnienie(20);
for(int i = 0; i< 22; i++){
}
rozbierz.pokaż();
opóźnienie(20);
}for(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 - Kolor diody
}
rozbierz.pokaż();
opóźnienie(20);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - kolor diody
}
rozbierz.pokaż();
opóźnienie(20);
}
}if (digitalRead(3) == HIGH) ( //strobe
for(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 - kolor diody LED
}
rozbierz.pokaż();opóźnienie(15);
for(int i = 0; i< 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - kolor diody
}
rozbierz.pokaż();
opóźnienie(15);
}
opóźnienie(500);
Zrób to samo dla drugiego kierunkowskazu.
Film, jak działa nasz reflektor
Konstruktorem świateł do jazdy z Aliexpress jest płytka drukowana oraz zestaw elementów radiowych. Wszystko, co musisz zrobić, to przylutować elementy do płytki.
Ale z niego można uzyskać ciekawsze efekty świateł do jazdy. Na przykład do kierunkowskazów samochodowych lub w sygnalizatorze stopu lub po prostu na girlandach na wakacje.
Obwód ten może pracować w zakresie napięcia zasilania 3-15 woltów. Generator impulsów jest montowany na chipie NE555, następnie impulsy są podawane do licznika dziesiętnego z dekoderem - chipem CD4017 (lub K561IE8), do którego wyjść podłączone są diody LED poprzez rezystory ograniczające prąd.
Szybkość przełączania świateł do jazdy jest regulowana przez rezystor strojenia. Dodaj obwód z przerzutnikami i wyjściowymi przełącznikami tranzystorowymi. Nie wymaga programowania itp. W efekcie można uzyskać ciekawsze efekty świetlne świateł mijania. Musisz wykonać kolejną płytkę drukowaną z wyzwalaczami K561TM2 i klawiszami zasilania na KT815. Impuls z każdego wyjścia K561IE8 jest podawany na wejście wyzwalające zgodnie z zasadą „zatrzasku”, to znaczy sygnał na wyjściu wyzwalającym pozostaje stały, dopóki impuls resetujący nie nadejdzie z styku 11 układu CD4017 (K561IE8). W każdym cyklu włączanych jest 9 kanałów.
Wszyscy ci, którzy widzieli mniej więcej nowoczesny i nie drugi raz samochód, a jeśli nadal była to kwestia jazdy, od dawna zauważyli dla siebie jedną z przydatnych opcji… Ludzie nazywają to leniwym kierunkowskazem lub grzecznym kierunkowskaz. Cała jego istota sprowadza się do tego, że skręcając w prawo lub w lewo, kierowca tylko raz dotyka dźwigni kierunkowskazów, nie naprawiając jej. Oznacza to, że po prostu pozwala działać obwodom kierunkowskazów, ale nie włącza tego samego przełącznika. W rezultacie po zwolnieniu dźwigni kierunkowskazy działają jeszcze 3-4 razy, a kierowca w tym czasie może już zajmować się swoimi sprawami, czyli całkowicie poddać się drodze. Opcja jest bardzo przydatna, gdy trzeba zmienić pas. Rzeczywiście, gdy dźwignia kierunkowskazów jest całkowicie włączona, automatyczne wyłączenie nie nastąpi z powodu nieznacznego kąta obrotu kierownicy, co oznacza, że \u200b\u200bkonieczne będzie szturchanie samego wskaźnika w przód iw tył lub ciągłe podtrzymywanie go ręką na granicy włączenia, aby zasymulować działanie kierunkowskazu. A jeśli jest taka opcja, po prostu lekko dotknąłem dźwigni i zapomniałem. Ogólnie uważamy, że istota pracy została w pełni ujawniona, ale teraz warto wspomnieć o możliwym zaimplementowaniu takiej opcji na swojej maszynie.
Które obwody elektryczne są odpowiednie dla grzecznego kierunkowskazu w Arduino
Zanim wdasz się w poważne kłopoty związane z wytwarzaniem grzecznego kierunkowskazu, musisz zrozumieć, dla jakich schematów połączeń elektrycznych jest on odpowiedni bez modyfikowania obwodu elektrycznego w samochodzie.
Tutaj mamy do czynienia z dwiema głównymi opcjami, różniącymi się zasadniczo. Po pierwsze, gdy kierunkowskazy włączają się, gdy są podłączone jako obciążenie. Oznacza to, że włączenie następuje z powodu przełączenia obwodu kierunkowskazów, w którym znajduje się sama dźwignia kierunkowskazów, to on zamyka obwód, po czym następuje operacja. W takim przypadku nie sprawdzi się skorzystanie z naszej opcji, ponieważ gdy dźwignia otworzy obwód z lampkami, natychmiast wyłączamy możliwość sygnalizacji świetlnej, nawet jeśli do samej dźwigni dojdzie sygnał, to po prostu nie przejdzie dalej.
Druga opcja jest nasza, gdy są sygnały sterujące i są sygnały mocy wyjściowej. W takim przypadku zamiast zwykłego przekaźnika możesz umieścić tylko obwód, na który chcielibyśmy zwrócić Twoją uwagę.
Przekaźnikowy moduł zasilania, który można kupić w Internecie do sterowania obciążeniem
Szkic i schemat leniwego (grzecznego) kierunkowskazu na Arduino
Można więc dyskutować o wykorzystaniu Arduino jako jednostki głównej jako leniwych kierunkowskazów, ponieważ nie jest to również idealne rozwiązanie, które ma swoje wady. Powiedzmy, że po włączeniu zapłonu konieczne będzie posiadanie stałej mocy, aby zapewnić prędkość, konieczne będzie podłączenie obwodów zasilających. Jednocześnie samo opasywanie zbędnych elementów radiowych jest tutaj w zasadzie bezużyteczne, ponieważ w tym przypadku można po prostu zaprogramować mikrokontroler i używać tylko go. Ale ten minus to też plus, bo każdego, kto go ma, stać na zaprogramowanie Arduino, a do mikrokontrolerów też będzie potrzebny programator.
Samo napisanie programu będzie jednym z najtrudniejszych zadań. Tutaj początkujący będzie musiał poświęcić ponad godzinę swojego wolnego czasu i przestudiować działanie algorytmów, ale na szczęście jest Internet i my jesteśmy. Więc oto szkic.
int switchPinR=8; int przełączPinL=7; intledPinR=11; intledPinL=12; boolean ledOn = fałsz; int i=0; cal = 0; void setup() ( // umieść tutaj swój kod instalacyjny, aby uruchomić się raz: pinMode(switchPinR, INPUT); pinMode(switchPinL, INPUT); pinMode(ledPinR, OUTPUT); pinMode(ledPinL, OUTPUT); Serial.begin(9600 ); ) void loop() ( // umieść tutaj swój główny kod, aby uruchamiał się wielokrotnie: //2 label: if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinR, HIGH) ; digitalWrite(ledPinL, HIGH); i=0; podczas gdy (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; ) // Zapętl alarm if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) = = HIGH) (etykieta goto;) //Kierunkowskaz w prawo. if (digitalRead(switchPinR) == HIGH) ( digitalWrite(ledPinR, HIGH); i=0; while (i<7) { ledOn = !ledOn; digitalWrite(ledPinR, ledOn); delay(400); i++; z++; if (digitalRead(switchPinR) == LOW && z>=7) ( przerwa; ) ) ) else ( digitalWrite(ledPinR, LOW); z=0; ) //Lewy kierunkowskaz. if (digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinL, HIGH); i=0; while (i<7) { ledOn = !ledOn; digitalWrite(ledPinL, ledOn); delay(400); i++; z++; if (digitalRead(switchPinL) == LOW && z>=7) ( break; ) ) ) else ( digitalWrite(ledPinL, LOW); z=0; ) ) )
W skrócie możemy podsumować, że szkic ma 2 wejścia i 2 wyjścia. Jednocześnie na wejściu dodatnim, czyli wysokim poziomie sygnału na wejściu (8.7), otrzymujemy pewną liczbę mignięć (z lub i) na odpowiednim wyjściu (11.12). W skrócie coś takiego. Oznacza to, że jeśli chcesz coś zmienić w szkicu pod względem liczby mignięć i wyjść wejść, zwróć uwagę na te zmienne. Jeśli konieczna będzie zmiana długości mrugnięć, należy zwrócić uwagę na funkcję opóźnienia.
Kolejną cechą programu jest nieco nietypowe wyjście alarmowe. Najpierw opracowywane są lewe i prawe wskaźniki, a następnie włączany jest alarm światła awaryjnego. Wynika to z tego, że może się załączyć tylko jeśli wejście jest jednocześnie wysokie na wejściach 8 i 7. I ten warunek będzie spełniony dopiero dla drugiego cyklu, bo wciśnięcie dwóch przycisków jednocześnie nie zadziała tylko fizycznie. Szybkość mikrokontrolera pozwoli szybciej odczytać stan wysoki z jakiegoś przycisku i stwierdzić, że jest to nadal warunek działania kierunkowskazu, a nie alarmu. Chociaż nie powinieneś się tym przejmować, z wyjątkiem tego, że powiedzenie „dziękuję” w drodze będzie problematyczne.
Funkcje podłączenia leniwego (grzecznego) kierunkowskazu do Arduino w samochodzie
Nie należy używać pinu 13 jako wyjścia, ponieważ za każdym razem, gdy zasilanie jest włączane i wyłączane, wskaźniki, które zostaną podłączone do tego wyjścia, mogą migać.
Podczas przełączania z sygnałów sterujących na sygnały zasilające należy użyć odpowiednich bloków zakupionych w Internecie lub samodzielnie zmontowanych. Mówiliśmy już o takich blokach - modułach.
Podczas odbierania sygnału 1 z napięcia 12 woltów umieść rezystor 10 kΩ przed wejściem.
To właściwie wszystkie pożegnalne słowa podczas robienia leniwego kierunkowskazu dla samochodu na mikrokontrolerze Arduino, a teraz mniej więcej to samo na filmie ...