Projektantem świateł do biegania z Aliexpress jest płytka drukowana oraz zestaw komponentów radiowych. Wystarczy przylutować elementy do płytki.

Ale z tego możesz uzyskać więcej ciekawe efektyświatła do jazdy. Na przykład do kierunkowskazów samochodowych lub w sygnale 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 układzie NE555, a następnie impulsy są podawane do licznika dziesiętnego z dekoderem - układem CD4017 (lub K561IE8), do którego wyjść diody LED są podłączone przez rezystory ograniczające prąd.

Prędkość przełączania świateł do jazdy jest regulowana przez rezystor dostrajający. Dodaj obwód z przerzutnikami i wyjściowymi przełącznikami tranzystorowymi. Nie wymaga programowania itp. W rezultacie ciekawsze efekty świetlneświatła do jazdy. 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 pinu 11 układu CD4017 (K561IE8). 9 kanałów jest włączanych na cykl.

Wielu entuzjastów samochodów do poprawy wygląd zewnętrzny swojego samochodu, dostrój ich „Jaskółkę” za pomocą świateł LED. Jedną z opcji tuningu jest włączony kierunkowskaz, który zwraca na siebie uwagę innych użytkowników drogi. Artykuł zawiera instrukcje dotyczące instalacji i konfiguracji 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 użytych zanieczyszczeń zmienia się kolor cebulek.

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

Narzędzia i materiały

Aby zrobić włączony 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 Zaopatrzenie musisz przygotować włókno szklane. Jest potrzebny do produkcji 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 komponenty sieci (autorem wideo jest Evgeny Zadvornov).

Sekwencja pracy

Zanim wykonasz kierunkowskazy, musisz wybrać odpowiedni schemat.

Następnie, w oparciu o schemat, wykonaj płytkę drukowaną i nanieś na niej oznaczenia, aby pomieścić przyszłe elementy.

Montaż składa się z sekwencji działań:

  1. Najpierw wyłącz zasilanie samochodu, odłączając ujemny zacisk od 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 kierunkowskaz działający z ogniem.
  6. Dalszy montaż i instalacja lamp odbywa się w odwrotnej kolejności.
  7. Po instalacji przewody są połączone.

W kolejnym etapie do sieci dołączane jest dodatkowe stabilizowane źródło zasilania. Zasilanie jest dostarczane na jego wejście z przekaźnika pośredniczącego, a wyjście jest połączone z diodą. 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 montażu i regulacji kierunkowskazów jazdy

Możesz zainstalować dynamiczne kierunkowskazy zamiast konwencjonalnych diod LED. Aby to zrobić, usuwają, demontują płytkę za pomocą diod LED i rezystorów ograniczających prąd. Na repeaterze musisz oderwać szybę od korpusu. Odbłyśnik należy następnie ostrożnie wyciąć i usunąć.

W miejscu zdalnego reflektora montowana jest płytka SMD 5730, na której znajdują się żółte diody LED. Ponieważ repeater ma zakrzywiony kształt, płyta będzie musiała być uwarstwiona i lekko wygięta. Na stara tablica musisz odciąć część ze złączem i przylutować, aby podłączyć kontroler. Następnie wszystkie elementy wracają na swoje miejsce.

Aby dostosować czas pracy światła ledowe Przełącznik jest przylutowany do mikrokontrolera. Po znalezieniu odpowiedniej prędkości w miejscu przełącznika lutowane są zworki. Po podłączeniu dwóch zacisków do masy, minimalny czas między błyskami diody LED wynosi 20 ms. Gdy styki są zwarte, czas ten wyniesie 30 ms.


Cena emisyjna

Ze świateł do jazdy dziennej możesz włączyć kierunkowskaz. Ich koszt to 600 rubli. Jako źródła światła w tym przypadku można wziąć „pikselowe” diody RGB w ilości 7 sztuk na każdy uruchomiony kierunkowskaz. 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.

Wszyscy, którzy widzieli samochód mniej lub bardziej nowoczesny, a nie drugi raz, a jeśli była to jeszcze kwestia jazdy, już dawno zauważyli jeden z przydatne opcje... Ludzie nazywają to leniwym kierunkowskazem lub uprzejmym kierunkowskazem. 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ż prowadzić własną działalność, czyli całkowicie poddać się drodze. Ta opcja jest bardzo przydatna, gdy musisz zmienić pas. W końcu, gdy dźwignia kierunkowskazów jest całkowicie włączona, automatyczne wyłączanie nie nastąpi, ze względu na nieznaczny kąt obrotu kierownicy, co oznacza, że ​​konieczne będzie grzebanie w przód i w tył samą wskazówką lub ciągłe podpieranie jej ręką na granicy włączenia w celu zasymulowania operacji kierunkowskazu. A jeśli jest taka opcja, po prostu dotknąłem trochę dźwigni i zapomniałem. Generalnie uważamy, że istota pracy została w pełni ujawniona, ale teraz warto wspomnieć o ewentualnej implementacji takiej opcji na swoim komputerze.

Które obwody elektryczne są odpowiednie dla uprzejmego kierunkowskazu na Arduino?

Zanim wpadniesz w poważne kłopoty z produkcją uprzejmego kierunkowskazu, musisz zrozumieć, do jakich schematów połączeń elektrycznych jest odpowiedni bez modyfikacji obwód elektryczny w samochodzie.
Tutaj mamy dwie główne opcje, zasadniczo różne. Pierwszym z nich jest włączenie kierunkowskazów, gdy są one 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 otwiera obwód z lampkami, od razu wyłączamy możliwość sygnalizacji świetlnej, nawet jeśli sygnał dotrze do samej dźwigni, po prostu nie pojedzie 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, aby kontrolować obciążenie mocy

Szkic i schemat leniwego (uprzejmego) kierunkowskazu na Arduino

A więc o używaniu Arduino jako jednostki głównej jako leniwe kierunkowskazy można się spierać, bo to też nie do końca idealne rozwiązanie, co 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 zasilania. Jednocześnie samo wiązanie z niepotrzebnych elementów radiowych jest tutaj w zasadzie bezużyteczne, bo w tym przypadku można po prostu zaprogramować mikrokontroler i używać tylko go. Ale ten minus to też plus, bo każdy kto go ma może sobie pozwolić na zaprogramowanie Arduino, a do mikrokontrolerów potrzebny będzie też programator.
Samo napisanie programu będzie jednym z najbardziej wymagające zadania. Tutaj początkujący będzie musiał spędzić ponad godzinę wolnego czasu i studiować działanie algorytmów, ale na szczęście jest Internet i my jesteśmy. Oto szkic.

int przełącznikPinR=8; int przełącznikPinL=7; intedPinR=11; intledPinL=12; boolean ledOn = fałsz; int i=0; cal=0; void setup() ( // umieść tutaj swój kod konfiguracji, aby uruchomić 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 uruchomić wielokrotnie: //2 label: if (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) == HIGH) ( digitalWrite(ledPinR, HIGH) ; digitalWrite(ledPinL, HIGH); i=0; while (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, jeśli (digitalRead(switchPinR) == HIGH && digitalRead(switchPinL) = = HIGH) (etykieta goto;) //Prawy kierunkowskaz. 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; ) //Sygnał skrętu w lewo. 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) ( przerwa; ) ) ) else ( digitalWrite(ledPinL, LOW; z=0; )) ) )

Krótko mówiąc, 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ę mrugnięć (z lub i) na odpowiednim wyjściu (11,12). Krótko mówiąc, coś takiego. Oznacza to, że jeśli chcesz coś zmienić w szkicu, jeśli chodzi o liczbę mrugnięć 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ą lewy i prawy wskaźnik, a następnie włączany jest alarm światła awaryjnego. Wynika to z tego, że może się włączyć tylko wtedy, gdy wejście jest jednocześnie stan wysoki na wejściach 8 i 7. I ten warunek zostanie spełniony dopiero dla drugiego cyklu, ponieważ 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 zdecydować, że jest to jeszcze warunek wyzwolenia kierunkowskazu, a nie alarm. Chociaż nie powinieneś się tym przejmować, poza tym, że podziękowanie w drodze będzie problematyczne.

Funkcje podłączenia leniwego (uprzejmego) 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 będą podłączone do tego wyjścia, mogą migotać.
Przełączając się z sygnałów sterujących na sygnały zasilające, użyj odpowiednich bloków zakupionych w Internecie lub zmontowanych przez Ciebie. Mówiliśmy już o takich blokach - modułach.
Odbierając sygnał 1 z napięcia 12 woltów, przed wejściem należy umieścić rezystor 10 kΩ.

To właściwie wszystkie słowa rozstania podczas robienia leniwego kierunkowskazu dla samochodu na mikrokontrolerze Arduino, a teraz mniej więcej to samo na wideo ...


Witam wszystkich majsterkowiczów! Dziś przyjrzymy się jednej z wielu aplikacji Pasek ledowy typ WS2812B na adresowalnych diodach LED RGB. Takie taśmy (a także oddzielnie montowane diody LED WS2812B) można wykorzystać do oświetlania tła „Ambilight” monitorów komputerowych i telewizorów, dynamicznego oświetlenia w samochodzie, obrazu, ramki na zdjęcia, akwarium i tak dalej. Są szeroko stosowane w projektowaniu dowolnych pomieszczeń, w postaci iluminacji noworocznych lub pokazów świetlnych. Zastosowanie taśmy LED typu WS2812B daje możliwość uzyskania dużej ilości ciekawych projektów.

WS2812B LED to dioda LED RGB osadzona w tej samej obudowie z chipem 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), światła zielonego (zielonego) i światła niebieskiego (niebieskiego) w jednym opakowaniu. Dzięki tej diodzie LED można uzyskać szeroką gamę odcieni kolorów promieniowania świetlnego.

Dioda LED RGB jest sterowana za pomocą płytki mikrokontrolera Arduino.
Otrzymałem od Chińczyków taśmę 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ć wykonać dynamiczne kierunkowskazy do samochodu w tzw. „stylu Audi”. Tego schematu jeszcze nie wprowadziłem w życie (jak przyjmą to nasi gibbdesznicy?), ale efekt okazał się być bardzo atrakcyjnym.

Płytka służy jako kontroler do sterowania paskiem LED. Arduino Uno Możesz użyć innych płytek - Arduino Nano, Arduino Pro mini).
Obejrzyj cały proces na filmie:


Lista narzędzi i materiałów.
-Płytka Arduino Uno;
- płytka obniżająca napięcie 12V\5V przy 3A;
- rezystory 100Kom-4szt;
-rezystory 47Kom-4szt;
- rezystory 500 Ohm-1szt;
-przyciski (symulujące włączenie sygnałów) -4szt;
- deska chlebowa
-Śrubokręt;
blok laboratoryjny odżywianie
- lutownica;
- kambrowy;
-próbnik.
- przewody łączące.

Krok pierwszy. Montaż schematu.


Układ zmontowałem za pomocą płytki stykowej (bradboard). Rezystory podłączone do wejść cyfrowych Arduino są potrzebne do konwersji sygnałów wejściowych samochodu z 12 na 5 woltów. Rezystor 500 omów do ochrony linii sterującej taśmy LED WS2812B.
Zdjęcie tablicy


Jako konwerter z 12V na 5V użyłem gotowej płytki z Aliexpress. Można zastosować dowolny konwerter o odpowiednich parametrach. Konwerter jest potrzebny do stabilnego zasilania Arduino i taśmy LED WS2812B.


Krok drugi. Programowanie Arduino.

Wejścia cyfrowe płytki Arduino nr 3,4 służą do włączania skrętu lewego i prawego. Pin nr 5 - włącz światło hamowania, pin nr 6 - włącz bieg wsteczny. Numer pinu 8 - taśma sygnału sterującego WS2812B.

W Arduino IDE wgraj szkic (link powyżej). Dwie opcje szkicu - jedna na przód samochodu, druga na tył. Użyj tego, czego potrzebujesz. Na początku szkicu możesz ustawić liczbę potrzebnych diod LED. Możesz również dostosować prędkość kierunkowskazów do swojego samochodu. Możesz również zmienić jasność diod LED za pomocą paska. Parametr Kolor(103,31,0) - zmień pierwsze dwie cyfry z 0 na 255. Czyli możesz trochę poeksperymentować.

Po naciśnięciu żądanego przycisku dajemy sygnał, aby włączyć żądany parametr. Przy prawidłowym montażu obwodu zwykle zaczyna działać natychmiast.

Zdjęcie w toku.






W ten weekendowy projekt okazał się niezłym eksperymentem. To było ciekawe

Powiedział w zeszłym roku "Gop" - czas skakać :)
A raczej zrobić obiecany przegląd włączonych 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ę lutowaną z dwóch półmetrowych kawałków. Wadą tego jest słaby punkt lutowania (z czasem styki mogą pękać) oraz zwiększona szczelina między diodami.
Skontaktuj się ze sprzedawcą przed zakupem

Przewody jezdne zostały przylutowane do taśmy z obu stron do szeregowego połączenia kilku sztuk, ponieważ Nie potrzebowałem go, potem odlutowałem go z jednej strony drutu, zapieczętowałem neutralnym uszczelniaczem i nawinąłem jeszcze trochę czarnej taśmy elektrycznej.



Mocowana do szkła za pomocą dwustronnej przezroczystej taśmy klejącej np.

Szczegóły instalacji

Odtłuściłem powierzchnie, najpierw przykleiłem taśmę samoprzylepną do rurki (nazwę to tak, mimo że przekrój jest prostokątny), odciąłem wystający nadmiar szerszej taśmy, wepchnąłem krawędzie rurki w szczelinę między sufit i górne części paneli ozdobnych słupków tylnych (przewody stykowe ze złączem schowałem za jednym panelem ), wycentrował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ś nie jest jasne - zapytaj w komentarzach.
Letni test upałów wypadł pomyślnie - nic się nie odkleiło ani nie unosiło.
Jedynym minusem jest to, że kąt nachylenia szkła jest łagodny, diody świecą bardziej do góry. W słoneczny dzień trudno to zobaczyć, ale ponieważ są to zduplikowane sygnały, to

Przejdźmy teraz do farszu elektronicznego.
Użyłem, ale niedawno odkryłem

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

Szkic będzie działał bez żadnych modyfikacji na Wemos podczas programowania w Arduino IDE, a jeśli zaimplementujesz mały serwer WWW, to po połączeniu się z nim przez Wi-Fi możesz zmienić wartości zmiennych, takich jak czas opóźnienia między mrugnięciami, wielkość opóźnienia podczas hamowania awaryjnego itp.
Tutaj w przyszłości, jeśli ktoś jest zainteresowany realizacją projektu na ESP8266, to mogę zamieścić przykład zmiany ustawień przez interfejs webowy, zapisania ich do EEPROM, a następnie odczytania.
Uruchomienie serwera WWW można zrealizować np. poprzez włączenie kierunkowskazów i wciśnięcie pedału hamulca przy włączonym zapłonie (w procedurze konfiguracji odpytywanie stanów odpowiednich wejść).

Aby wdrożyć tryb migania podczas gwałtownego hamowania został zakupiony
Szkic monitoruje poziom zwalniania po wciśnięciu pedału hamulca, jeśli przekracza 0,5G (mocne hamowanie, ale nie pisk hamulców), to na kilka sekund aktywowany jest tryb migania, aby przyciągnąć dodatkową uwagę.
Sygnały sterujące na wejścia Arduino z "plusa" zatrzymują się, kierunkowskazy i wsteczne są podawane izolacja galwaniczna- transoptory z rezystorami ograniczającymi prąd, które ostatecznie tworzą poziom LOW na wejściach Arduino (na stałe podciągnięty do dodatniego przez rezystory 10kΩ).
Zasilanie - 5 woltów przez konwerter DC-DC buck.
Całość składana jak kanapka i pakowana w odpowiednie pudełko, na którym zaznaczyłem strzałką kierunek montażu dla prawidłowej orientacji czujnika grawitacyjnego

Schemat i zdjęcie



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


Na pierwszym zdjęciu widać dwa dodatkowe piny, zrobiłem je do kierunkowskazów. Ponieważ w moim aucie przy włączonej dźwigni kolumny kierownicy występuje zwarcie do masy, podłączyłem przewody do bloku dźwigni i wejść Arduino. Jeśli przełącznik kolumny kierownicy przełącza się na plus lub odbiera sygnał z żarówek „+” lewego / prawego kierunkowskazu, podłącz je przez 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, ponieważ błyszczały na ozdobnych panelach regałów // widoczne na tym przykładzie dla pętli(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); }

Próbowałem go maksymalnie skomentować, ale jeśli pojawią się pytania, postaram się dodać komentarz (w związku z tym umieszczam go 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 demonstracja pracy (użyłem szkicu z trybem demo do wideo).

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