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 Kontroler Arduino nano (może być używany w dowolnym innym formacie) Motoryzacja Ładowarka dla telefony komórkowe 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 na 5V KR142EN5V (KREN5V) lub dowolny inny importowany odpowiednik. 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 podłączyć drugi w ten sam sposób Pasek ledowy do dowolnego wolnego wyjścia cyfrowego Arduino (np. 7), a także dodaj jego kod w oprogramowaniu zgodnie z naszym przykładem.

oprogramowanie kontrolera

Do pracy z pikselowymi diodami LED potrzebna jest biblioteka . Możesz zainstalować go w następujący sposób: Szkic -> Dołącz bibliotekę -> Zarządzaj bibliotekami. Następnie w menu wyszukiwania wpisz nazwę biblioteki Adafruit_NeoPixel.h i kliknij przycisk instalacji. Następnie wstaw szkic do programu i zamień ilość diod w kodzie (my używamy 22 diod):

#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 diody

opóź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 palenia

for(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

W zeszłym roku powiedział "Gop" - czas na skoki :)
A raczej zrobić obiecany przegląd działających kierunkowskazów.
Zamówiłem 1 metr czarnej taśmy WS2812B (144 diody) w silikonowej tubie, przy zamówieniu wybrałem „Czarny 1m 144led IP67” (może komuś spodoba się biały kolor podłoża, jest taki wybór).

Małe zastrzeżenie

Otrzymałem taśmę zlutowaną z dwóch półmetrowych kawałków. Minusem tego jest słaby punkt lutowania (styki mogą z czasem pękać) oraz zwiększony odstęp między diodami.
Przed zakupem sprawdź u sprzedawcy

Przewody jezdne zostały przylutowane do taśmy z obu stron w celu szeregowego połączenia kilku sztuk, ponieważ Nie potrzebowałem go, potem przylutowałem go po jednej stronie drutu, uszczelniłem wszystko neutralnym uszczelniaczem i nawinąłem trochę czarnej taśmy elektrycznej.



Mocowana do szkła za pomocą dwustronnej przezroczystej taśmy samoprzylepnej, np.

Szczegóły instalacji

Odtłuściłem powierzchnie, najpierw przykleiłem taśmę samoprzylepną do tuby (tak ją będę nazywał, mimo że przekrój jest prostokątny), odciąłem wystający nadmiar szerszej taśmy, brzegi tuby włożyłem w szczelinę między sufit i górne części paneli ozdobnych tylnych słupków (przewody jezdne wraz ze złączem schowałem za jednym panelem), wyśrodkowałem i zacząłem dociskać do szyby powoli wyciągając warstwę ochronną taśmy.
Niestety nie ma wideo - nie było wolnych rąk do strzelania, a samochody każdego są inne.
Jeśli coś jest nie jasne - pytaj w komentarzach.
Test letnich upałów wypadł pomyślnie - nic się nie łuszczyło ani nie pływało.
Jedynym minusem jest to, że kąt nachylenia szkła jest delikatny, diody świecą bardziej do góry. W słoneczny dzień trudno to zobaczyć, ale ponieważ są to zduplikowane sygnały

Przejdźmy teraz do wypełnienia elektronicznego.
Używałem, ale niedawno odkryłem

Za mniej więcej ten sam koszt dostajemy więcej bułek

Szkic bez żadnych modyfikacji będzie działał również na Wemos podczas programowania w Arduino IDE, a jeśli zaimplementujesz mały serwer WWW, to po podłączeniu do niego przez Wi-Fi możesz zmieniać wartości zmiennych, takich jak czas opóźnienia między mrugnięciami, wielkość opóźnienia podczas hamowania awaryjnego itp.
Tutaj w przyszłości jak ktoś będzie zainteresowany wykonaniem projektu na ESP8266 to mogę wrzucić przykładową zmianę ustawień przez interfejs webowy, zapisanie ich do EEPROM, a następnie odczytanie.
Uruchomienie serwera WWW można zrealizować np. poprzez włączenie kierunkowskazu i wciśnięcie pedału hamulca przy włączonym zapłonie (w procedurze konfiguracji odpytaj stan odpowiednich wejść).

Aby zaimplementować tryb migania podczas gwałtownego hamowania został zakupiony
Szkic monitoruje poziom zwalniania po naciśnięciu pedału hamulca, jeśli przekracza 0,5G (mocne zwalnianie, ale bez pisku hamulca), wówczas tryb migania jest włączany na kilka sekund, aby przyciągnąć dodatkową uwagę.
Sygnały sterujące do wejść Arduino z „plusa” stopów, kierunkowskazów i rewersu podawane są poprzez izolację galwaniczną - transoptory z rezystorami ograniczającymi prąd, które ostatecznie tworzą poziom NISKI na wejściach Arduino (ciągle ciągnięty do plusa przez rezystory 10kΩ ).
Zasilanie - 5 woltów przez przetwornicę DC-DC.
Całość złożona jak kanapka i zapakowana w odpowiednie pudełko, na którym zaznaczyłem strzałką kierunek montażu dla prawidłowego ułożenia czujnika grawitacyjnego

Schemat i zdjęcie



Wartość rezystorów podciągających (do plusa) jest standardowa - 10 kOhm, ograniczające prąd rezystory transoptorowe - 1 kOhm. Transoptory wypadły ze starych płyt, dwa dostały PC123, dwa - PC817.


Na pierwszym zdjęciu widać dwa dodatkowe piny, zrobiłem je pod kierunkowskazy. Ponieważ w moim aucie po włączeniu dźwigni kolumny kierownicy następuje zwarcie do masy, podłączyłem przewody do bloku dźwigni i wejść Arduino. Jeśli przełącznik kolumny kierownicy przełącza plus lub pobiera sygnał z żarówek „+” lewego / prawego kierunkowskazu, należy je połączyć poprzez izolację galwaniczną.



No to teraz sam szkic (Arduino IDE)

#włączać #włączać //kilka uwag ogólnych // Wyłączyłem jedną z zewnętrznych diod LED, ponieważ świeciły na panelach dekoracyjnych stojaków //widocznych na przykładzie tej pętli for (int i=1; i<143; i++) //если отключать не нужно, заменяем на for (int i=0; i<144; i++) //задний ход и аварийка у меня не используются, т.к. в первом случае яркость никакая, во втором надо подключать входы к лампам поворотников //поворотники и стоп-сигнал одновременно не включаются, чтобы это реализовать, нужно переписывать соответствующий код скетча (делить ленту на три секции, подбирать тайминги миганий, менять диапазон переменных циклов). //Дерзайте - все в ваших руках // Пин для подключения управляющего сигнала светодной ленты const int PinLS = 2; //Пины для подключения датчиков //если более удобно будет подключать контакты в другом порядке - просто поменяйте значения переменных const int buttonPinL = 3; const int buttonPinR = 4; const int buttonPinS = 6; const int buttonPinD = 5; //начальные статусы входов (подтянуты к плюсу) int buttonStateS = HIGH; int buttonStateD = HIGH; int buttonStateL = HIGH; int buttonStateR = HIGH; // пауза pause_pov1 (в миллисекундах) нужна, чтобы синхронизировать циклы "пробегания" полоски и включения лампочки поворотника // такое может быть, если используется меньше половины светодиодов // в моем случае паузы нет (pause_pov1 = 0) int pause_pov1 = 1; // этой паузой регулируем длительность состояния, когда все светодиоды выключены //я определял опытным путем - включал поворотник, засекал по отдельности время ста мыргов лампочкой и ста беганий полоски, разницу делил на 100, на полученное время увеличивал или уменьшал значение переменной (в зависимости от того, отставали или убегали вперед лампочки) int pause_pov2 = 62; // переменная для получения значения ускорения int ix; Adafruit_NeoPixel strip = Adafruit_NeoPixel(144, PinLS, NEO_GRB + NEO_KHZ800); Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(12345); void setup() { pinMode(buttonPinS, INPUT); pinMode(buttonPinD, INPUT); pinMode(buttonPinL, INPUT); pinMode(buttonPinR, INPUT); strip.begin(); // гасим ленту for (int i=0; i<144; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); accel.begin(); // ограничиваем измеряемый диапазон четырьмя G (этого хватит с большим запасом) accel.setRange(ADXL345_RANGE_4_G); accel.setDataRate(ADXL345_DATARATE_100_HZ); } void loop() { // СТОПЫ: если включены - высший приоритет //Чтобы сделать меняющуюся по ширине полоску в зависимости от интенсивности торможения //(уточнение - никакой светомузыки, ширина полосы после нажатия на тормоз не меняется!) //от плавного торможения до тапки в пол. //Добавляем еще одну переменную, например, ix2, //присваиваем ей значение ix с коэффициентом умножения, //заодно инвертируем и округляем до целого //ix = event.acceleration.x; //ix2 = -round(ix*10); //ограничиваем для плавного торможения в пробках //(чтобы не менялась при каждом продвижении на 5 метров) //if (ix2<10) ix2 = 0; //и для резкого торможения. //Реальный диапазон изменения переменной ix - от 0 до -5 //для максимальной ширины полосы при G равном или большем 0.5 //if (ix2 >50) ix2 = 50; //następnie zmień cykle w bloku STOP na (int i=1; i<143; i++) на for (int i=51-ix2; i<93+ix2; i++) //Получаем минимальную ширину полоски ~30 см (для стояния в пробке) и максимальную для резкого торможения //конец комментария buttonStateS = digitalRead(buttonPinS); if (buttonStateS == LOW) { sensors_event_t event; accel.getEvent(&event); ix = event.acceleration.x; // проверка резкого торможения - мигающий режим // значение 5 - это 0,5G, минус - торможение if (ix < -5) { for (int is=0; is<15; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(240,0,0)); strip.show(); delay(10 + is*10); for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(0,0,0)); strip.show(); delay(10 + is*3); buttonStateS = digitalRead(buttonPinS); if (buttonStateS == HIGH) return; } } // помигали - и хватит, включаем постоянный режим, если педаль тормоза еще нажата // или если не было резкого торможения и предыдущее условие не сработало if (buttonStateS == LOW) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(200,0,0)); strip.show(); while(buttonStateS == LOW){ buttonStateS = digitalRead(buttonPinS); delay(50); } // плавно гасим for (int is=0; is<20; is++) { for (int i=1; i<143; i++) strip.setPixelColor(i, strip.Color(190 - is*10,0,0)); strip.show(); delay(10); } // СТОПЫ конец } } else // если СТОПЫ выключены { // ЗАДНИЙ ХОД: если включен - средний приоритет buttonStateD = digitalRead(buttonPinD); if (buttonStateD == LOW) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(63,63,63)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(63,63,63)); strip.show(); while(buttonStateD == LOW){ buttonStateD = digitalRead(buttonPinD); delay(50); } //плавно гасим for (int is=0; is<16; is++) { for (int i=1; i<37; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); for (int i=107; i<143; i++) strip.setPixelColor(i, strip.Color(60 - is*4,60 - is*4,60 - is*4)); strip.show(); delay(10); } } buttonStateL = digitalRead(buttonPinL); buttonStateR = digitalRead(buttonPinR); // если включена аварийка if (buttonStateL == LOW && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(63,31,0)); strip.setPixelColor(il+72, strip.Color(63,31,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ЛЕВЫЙ ПОВОРОТНИК if (buttonStateL == LOW && buttonStateR == HIGH) { for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(il+72, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } // если включен ПРАВЫЙ ПОВОРОТНИК if (buttonStateL == HIGH && buttonStateR == LOW) { for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(220,120,0)); strip.show(); delay(pause_pov1); } for (int il=0; il<71; il++) { strip.setPixelColor(71-il, strip.Color(0,0,0)); strip.show(); delay(pause_pov1); } delay(pause_pov2); } //правый поворотник конец } //конец условия else Стоп // задержка для следующего опроса датчиков delay(10); }

Starałem się maksymalnie skomentować, ale jeśli będą pytania, postaram się dodać komentarze (dlatego umieszczam to w tekście recenzji, a nie jako załączony plik). Nawiasem mówiąc, dotyczy to również innych punktów recenzji - uzupełnię ją również, jeśli w komentarzach pojawią się istotne pytania.

I na koniec pokaz pracy (do filmu użyłem szkicu z trybem demonstracyjnym).

Aktualizacja Zrobiłem szkic w trybie demonstracyjnym specjalnie po to, aby zmieścić wszystko w jednym krótkim filmie.
Światło hamowania miga tylko podczas gwałtownego hamowania (to było napisane powyżej), gdy jest płynne i stoi w korkach, po prostu pali się bez irytowania kierowców z tyłu.
Jasność w ciemności nie jest nadmierna, ponieważ. ze względu na nachylenie szyby światła są skierowane bardziej do góry niż do tyłu.
Zwykłe światła działają jak zwykle, ten pasek je powiela.

Planuję kupić +97 Dodaj do ulubionych Podobała mi się recenzja +89 +191

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 zadziała skorzystanie z naszej opcji, ponieważ gdy dźwignia otworzy obwód z lampkami, od razu 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 ...


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

Wielu kierowców, aby poprawić wygląd swojego samochodu, dostraja swoje Jaskółki za pomocą świateł LED. Jedną z opcji strojenia jest biegnący kierunkowskaz, który zwraca na siebie uwagę innych użytkowników dróg. Artykuł zawiera instrukcje dotyczące instalowania i konfigurowania kierunkowskazów ze światłami do jazdy.

[ Ukrywać ]

instrukcje składania

Lampy LED to elementy półprzewodnikowe, które świecą pod wpływem prądu elektrycznego. Głównym elementem w nich jest krzem. W zależności od zastosowanych zanieczyszczeń zmienia się kolor cebulek.

Galeria zdjęć „Możliwe opcje dynamicznych kierunkowskazów”

Narzędzia i materiały

Aby zrobić biegnący kierunkowskaz własnymi rękami, będziesz potrzebować następujących narzędzi:

  • lutownica;
  • obcinaki boczne lub szczypce;
  • lutownica i materiał lutowniczy;
  • próbnik.

Z materiałów eksploatacyjnych musisz przygotować włókno szklane. Jest potrzebny do wykonania płytki drukowanej, na której zostanie umieszczony element półprzewodnikowy. Wybrano wymagane diody LED. W zależności od charakterystyki diod LED oraz wartości prądu i napięcia sieci pokładowej obliczane są charakterystyki rezystorów ochronnych. Za pomocą obliczeń wybierane są pozostałe elementy sieci (autorem filmu jest Evgeny Zadvornov).

Sekwencja pracy

Zanim zrobisz kierunkowskazy, musisz wybrać odpowiedni schemat.

Następnie na podstawie schematu wykonaj płytkę drukowaną i nanieś na nią oznaczenia, aby pomieścić przyszłe elementy.

Zespół składa się z sekwencji działań:

  1. Najpierw wyłącz zasilanie samochodu, odłączając ujemny zacisk akumulatora.
  2. Następnie musisz usunąć stare kierunkowskazy i ostrożnie je zdemontować.
  3. Stare żarówki należy odkręcić.
  4. Spoiny należy oczyścić z kleju, odtłuścić, umyć i pozostawić do wyschnięcia.
  5. W miejsce każdego starego elementu montowany jest nowy zapalający się kierunkowskaz.
  6. Dalszy montaż i instalacja lamp odbywa się w odwrotnej kolejności.
  7. Po instalacji przewody są podłączone.

W kolejnym etapie do sieci włączane jest dodatkowe stabilizowane źródło zasilania. Zasilanie jest dostarczane do jego wejścia z przekaźnika pośredniego, a wyjście jest podłączone do diody. Lepiej umieścić go w desce rozdzielczej.

Podczas podłączania diod LED należy upewnić się, że anoda jest podłączona do plusa źródła zasilania, a katoda do minusa. Jeśli połączenie nie zostanie wykonane prawidłowo, elementy półprzewodnikowe nie będą się świecić, a nawet mogą się przepalić.


Cechy instalacji i regulacji kierunkowskazów jazdy

Możesz zainstalować dynamiczne kierunkowskazy zamiast konwencjonalnych diod LED. Aby to zrobić, usuwają, demontują płytkę z diodami LED i rezystorami ograniczającymi prąd. Na repeaterze musisz oderwać szkło od korpusu. Odbłyśnik należy następnie ostrożnie wyciąć i wyjąć.

W miejsce odbłyśnika zdalnego zamontowano płytkę SMD 5730, na której umieszczono żółte diody LED. Ponieważ repeater ma zakrzywiony kształt, płyta będzie musiała być rozwarstwiona i lekko zgięta. Ze starej płytki trzeba odciąć część ze złączem i przylutować aby podłączyć sterownik. Następnie wszystkie komponenty wracają na swoje miejsce.

Do regulacji czasu świecenia diod LED do mikrokontrolera przylutowany jest przełącznik. Po znalezieniu odpowiedniej prędkości zworki są lutowane w miejscu przełącznika. W przypadku podłączenia dwóch zacisków do masy minimalny czas między błyskami diody LED wyniesie 20 ms. Gdy styki są zwarte, czas ten wyniesie 30 ms.


Cena emisyjna

Możesz sprawić, że kierunkowskaz zacznie płonąć ze świateł do jazdy dziennej. Ich koszt to 600 rubli. Jako źródła światła w tym przypadku można wziąć „pikselowe” diody LED RGB w ilości 7 sztuk dla każdego uruchomionego kierunkowskazu. Koszt jednego elementu to 19 rubli. Aby sterować diodami LED, musisz kupić Arduino UNO o wartości 250 rubli. Tak więc całkowity koszt wyniesie 1060 rubli.