Как сделать самому несложную схему бегущего поворотника. Мастер-класс по изготовлению динамических «бегущих» поворотников. Инструменты и материалы

Рассмотрим создание бегающего поворотника как на ауди, на примере фары от автомобиля Рено Клио. Сделаем поворотники и ДХО в одном устройстве.

Что для этого потребуется: Светодиодная лента, состоящая из светодиодов ws2812b Контроллер Arduino nano (можно использовать в любом другом формфакторе) Автомобильное зарядное устройство для мобильных телефонов с USB выходом. Так как контроллеру Arduino нужно напряжение в 5В, то это зарядное будем использовать в качестве преобразователя напряжения с 12В на 5В. Стабилизатор напряжения на 5В КР142ЕН5В (КРЕН5В) или любой другой импортный аналог. 3 резистора 10 кОм, в качестве подтягивающего сопротивления.

Cхема подключения

Контроллер ардуино необходимо подключить к сети автомобиля через преобразователь 12В -> 5В так, чтобы напряжение на схему поступало от включения «зажигания». К стабилизатору напряжения КРЕН5В нужно подключить плюсовой провод от действующего поворотника. В данной статье рассмотрено подключение и прошивка только одного поворотника, чтобы сделать второй поворотник нужно аналогично подключить вторую светодиодную ленту к любому свободному цифровому выходу Arduino (например 7), а так же в прошивке добавить код для него по нашему примеру.

Прошивка контоллера

Для работы с пиксельными светодиодами нужна будет библиотека . Установить ее можно будет следующим образом: Скетч -> Подключить библиотеку -> Управлять библиотеками. Далее в меню поиска ввести название библиотеки Adafruit_NeoPixel.h и нажать кнопку установить. После этого вставить скетч в программу и заменить в коде количество светодиодов (у нас используется 22 диода):

#include // подключаем библиотеку
Adafruit_NeoPixel strip = Adafruit_NeoPixel(22, 8, NEO_GRB + NEO_KHZ800);
int t,t1,t2,t3,t4,p2,p1 = 0;// переменная времени
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) { //Если поворотник выключен
for(int i = 0; i < 23; i++) {
strip.setPixelColor(i, strip.Color(255,255,255)); // R=255, G=255, B=255 - белый цвет светодиода, при включении зажигаем ходовые огни
}
strip.show();
}

if ((digitalRead(2) == HIGH) & (t == 1)) { // проверяем включили ли поворотник
for(int i = 0; i < 23; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // тушим все диоды
}
strip.show();
for(int k = 0; k < 3; k++){ // цикл до трех - сигнал «перестроения» , при кратковременном включении мигает 3 раза,

for(int i = 0; i < 23; i++){

if (digitalRead(2) == HIGH) {k = 0;} // если во время мигания поворотника получаем еще плючоой сигнал, то обнуяем счетчик, чтобы поворотник мигал еще как минимум 3 раза
strip.setPixelColor(i, strip.Color(255, 69, 0)); // R=255, G=69, B=0 - цвет светодиода

delay((t4)/22);
strip.show();

}
if (digitalRead(2) == HIGH) {t4=t4+20;} // если зажгли все диоды желтым, но сигнал с реле еще идет, значит увеличиваем время горения
if (digitalRead(2) == LOW) {t4=t4-20;} // если зажгли все диоды желтым, но сигнал с реле еще идет, значит увеличиваем время горения

for(int i = 0; i < 23; i++){

strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - цвет светодиода

delay((t3)/22);
strip.show();

}
if ((digitalRead(2) == LOW)) {t3=t3+20;}
if ((digitalRead(2) == HIGH)) {t3=t3-20;}
}

if ((digitalRead(2) == HIGH) & (t == 0)) { // проверяем включили ли поворотник

t1 = millis(); //запоминаем во сколько включился
for(int i = 0; i < 22; i++) {
strip.setPixelColor(i, strip.Color(255, 69, 0)); // при первом включении поворотника зажигаем все диоды желтым
}
strip.show();
while (digitalRead(2) == HIGH) {}
t2 = millis(); // запоминаем во сколько выключился поворотник
t4=t2-t1;

for(int i = 0; i < 22; i++) {
strip.setPixelColor(i, strip.Color(0, 0, 0)); // тушим диоды, когда пропал сигнал с реле поворотов
}
strip.show();
while (digitalRead(2) == LOW) {
if ((millis()-t2)>2000){break;}
}
if ((millis()-t2)<2000) {
t3 = millis()-t2; // время на которое тухнут поворотники
t = 1; // флаг, знаем что значение времени сохранились.
}
}

if (digitalRead(4) == HIGH) { //спецсигналы
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 - цвет светодиода
}
strip.show();
delay(20);
for(int i = 0; i < 22; i++){

}
strip.show();
delay(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 - цвет светодиода
}
strip.show();
delay(20);
for(int i = 0; i < 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - цвет светодиода
}
strip.show();
delay(20);
}
}

if (digitalRead(3) == HIGH) { //стробоскоп
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 - цвет светодиода
}
strip.show();

delay(15);
for(int i = 0; i < 22; i++){
strip.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 - цвет светодиода
}
strip.show();
delay(15);
}
delay(500);

Аналогично по коду сделайте для второго поворотника.

Видео как работает наша фара

Сказал в прошлом еще году «Гоп» - пришла пора прыгать:)
Вернее, делать обещанный обзор бегущих поворотников.
Был заказан 1 метр черной ленты WS2812B (144 светодиода) в силиконовой трубке, при заказе выбирал «Black 1m 144led IP67» (возможно, кому-то понравится белый цвет подложки, такой выбор есть).

Небольшое предостережение

Мне пришла лента, спаянная из двух полуметровых кусков. Минус этого - уязвимое место спайки (со временем могут нарушиться контакты) и увеличенный зазор между светодиодами.
Перед покупкой уточняйте у продавца этот момент

К ленте были припаяны с двух сторон контактные провода для последовательного соединения нескольких кусков, т.к. мне это не требовалось, то с одной стороны провода отпаял, все загерметизировал нейтральным герметиком и еще немного черной изоленты намотал.



Крепил к стеклу с помощью двухсторонней прозрачной клейкой ленты, например, .

Подробности установки

Обезжирил поверхности, вначале приклеил клейкую ленту к трубке (буду так называть, хоть сечение и прямоугольное), срезал выступающие излишки более широкой ленты, просунул края трубки в щели между потолком и верхними частями декоративных панелей задних стоек (контактные провода с разъемом спрятал за одной панелью), отцентровал и стал прижимать к стеклу, потихоньку вытягивая защитный слой ленты.
Видео, к сожалению, нет - свободных рук для съемки не было, да и машины у всех разные.
Если что непонятно - спрашивайте в комментариях.
Проверка летней жарой прошла успешно - ничего не отклеилось и не поплыло.
Единственный минус - угол наклона стекла пологий, светодиоды светят больше вверх. В солнечный день плохо видно, но так как это дублирующие сигналы, то

Теперь переходим к электронной начинке.
Я использовал , но не так давно открыл для себя

Примерно за ту же стоимость получаем больше плюшек

Скетч без особых переделок будет работать и на Wemos при программировании в среде Arduino IDE, а если реализовать небольшой web-сервер, то при подключении к нему по Wi-Fi можно изменять значения таких переменных, как время задержки между миганиями, величина замедления при экстренном торможении и т.д.
Здесь в дальнейшем, если у кого-то появится заинтересованность в реализации проекта на ESP8266, могу выложить пример для изменения настроек через web-интерфейс, сохранения их в EEPROM, последующего чтения.
Запуск web-сервера можно реализовать, например, через включенный поворотник и нажатую педать тормоза при включении зажигания (в процедуре setup опросить состояние соответствующих входов).

Для реализации мигающего режима при резком торможении был куплен
В скетче отслеживается уровень замедления при нажатии педали тормоза, если он превышает 0,5G (резкое замедление, но без визга тормозов), то для привлечения дополнительного внимания на несколько секунд включается мигающий режим.
Управляющие сигналы на входы Arduino с «плюса» стопов, поворотников и заднего хода подаются через гальванические развязки - оптопары с ограничивающими ток резисторами, которые в итоге формируют уровень LOW на входах Arduino (постоянно притянуты к плюсу через резисторы 10кОм).
Питание - 5 вольт через понижающий преобразователь DC-DC.
Все это дело сложено бутербродом и упаковано в подходящую коробочку, на которой стрелочкой отметил направление монтажа для правильной ориентации датчика гравитации

Схема и фото



Номинал подтягивающих (к плюсу) резисторов стандартный - 10 кОм, ограничивающих ток оптопары резисторов - 1кОм. Оптопары выпаял из старых плат, две попались PC123, две - PC817.


На первом фото можно увидеть два дополнительных вывода, их я сделал для поворотников. Так как в моем автомобиле при включении подрулевого рычага происходит замыкание на массу, то подключил провода к колодке рычага и входам Arduino. Если подрулевой рычаг коммутирует плюс или берете сигнал с "+" лампочек левого/правого поворотника, то подключаете их через гальваническую развязку.



Ну и теперь сам скетч (Arduino IDE)

#include #include //несколько общих комментариев // я отключил по одному крайнему светодиоду, т.к. они отсвечивали на декоративные панели стоек //видно на примере этого цикла 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; //затем меняем циклы в блоке СТОП for (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); }

Постарался по максимуму его откомментировать, но если будут вопросы, постараюсь добавлять комментарии (поэтому располагаю его в тексте обзора, а не приложенным файлом). Это, кстати, касается и других пунктов обзора - также буду его дополнять, если в комментариях будут существенные вопросы.

И напоследок демонстрация работы (для видео использовал скетч с демо-режимом).

Upd. Скетч с демо-режимом сделал специально, чтобы в одно короткое видео вместить все.
Стоп-сигнал мигает только при резком торможении (об этом писалось выше), при плавном и стоянии в пробках просто горит, не раздражая водителей сзади.
Яркость в темное время суток не чрезмерная, т.к. светики из-за наклона стекла направлены больше вверх, чем назад.
Штатные фонари работают как обычно, эта полоса их дублирует.

Планирую купить +95 Добавить в избранное Обзор понравился +89 +191

Или на гирлянды и т.д.

Как то заказал себе KIT DIY наборчик с AliExpress –бегущие огни на светодиодах () . Привлекла смешная цена в 63 рубля и возможность потренироваться в пайке SMD радиоэлементов.



Этот конструктор состоит из печатной платы размером 20х55мм и соответственно набора необходимых радиодеталей. На плате обозначены места установки всех компонентов и их номиналы, так что трудностей с монтажом особых нет.

Весь процесс изготовления и работу схемы можно посмотреть в видео:

Перечень инструментов и материалов
-набор бегущие огни на микросхеме CD4017 или К561ИЕ8 ();
-отвертка;
- ножницы;
-паяльник;
-кембрик;
-аккумуляторная батарея от сотового телефона;
-блок питания на 12В;
-соединительные провода;
-фольгированный текстолит для печатной платы;
-микросхемы К561ТМ2;
-резисторы;
-транзисторы КТ815(или аналоги);
-светодиоды.

Шаг первый. Распайка печатной платы набора с AliExpress.

Все что необходимо это распаять компоненты набора на плату. В виду миниатюрных размеров SMD радиоэлементов использовал «третью руку» с увеличительным стеклом. Сначала распаял резисторы, конденсаторы и другие компоненты схемы кроме микросхем. В конце распаиваем микросхемы и светодиоды.

Данная схема работает от 3 до 15В. Генератор импульсов собран на микросхеме NE555, далее импульсы подаются на десятичный счетчик с дешифратором -микросхема CD4017 (К561ИЕ8), к десяти выходам которой подключены светодиоды через токоограничительные резисторы. Скорость переключения бегущих огней регулируется подстроечным резистором.

Схема конструктора.


У меня схема заработала при первом включении.

Шаг второй . Модернизация схемы бегущих огней.
Позже в процессе экспериментов вышла из строя микросхема CD4017. По быстрому на проводах пришлось заменить ее на отечественный аналог К561ИЕ8.
Хотелось получить более интересные световые эффекты бегущих огней. В результате собрал еще одну печатную плату с триггерами К561ТМ2 и силовыми ключами на КТ815. Импульс с каждого выхода К561ИЕ8 подается на вход триггера по принципу «защелка» то есть на выходе триггера сигнал остается постоянным до прихода импульса сброса с ноги 11 микросхемы CD4017(К561ИЕ8). За цикл вкючатся 9 каналов. Силовые ключи на транзисторах КТ815 предназначены для подключения нагрузки до 1-1,5А. Если нужно подключать более мощную нагрузку то надо заменить КТ815 соответственно на более мощные транзисторы. Так как я применил четыре микросхемы К561ТМ2 то получилась схема на восемь каналов. В данной схеме можно получить 9 каналов управления светодиодами, но тогда надо добавить в схему еще одну микросхему К561ТМ2, подключив один триггер(микросхема К561ТМ2 состоит из двух триггеров),а также добавить один транзисторный ключ.

Схема после переделки..



Для проверки работы подключил к каждому из восьми каналов куски светодиодной ленты с тремя светодиодами.


Заменил подстроечный резистор 50кОм на 470кОм чтобы расширить пределы регулировки частоты импульсов. Нашел в

Четыре светодиода включаются слева направо и справа налево
Схему можно приспособить к установке на мотоциклах

Принципиальная схема:

Перечень элементов:

Керметный или угольный подстроечный резистор 500 кОм ½ Вт

Резистор 4.7 кОм ¼ Вт

Резисторы 1 кОм ¼ Вт

Резисторы 10 кОм ¼ Вт

Электролитический или лавсановый конденсатор 1 мкФ 63 В

Электролитический конденсатор 220 мкФ 25 В

Ультраяркие желтые светодиоды

NPN транзисторы BC337 45 В, 800 мА

Микросхема КМОП таямера 7555, TS555CN или TLC555CP

Десятичный счетчик с дешифроатором

Выключатель указателя поворота

Аккумуляторная батарея 12 В

Комментарии:

Разработанное устройство управляет четырьмя светодиодами, последовательно включая их слева направо, или справа налево. Используется микросхема КМОП таймера 7555 (IC1), включенная по схеме автоколебательного мультивибратора. Импульсы мультивибратора поступают на вход микросхемы десятичного счетчика IC2. За счет соединения выводов 10 и 15, микросхема сконфигурирована как счетчик по модулю 4. При соответствующем соединении выводов можно установить любой иной коэффициент пересчета в диапазоне 2…10. Естественно, при этом необходимо добавить или удалить из схемы соответствующие светодиоды, транзисторы и их базовые резисторы.
Подстроечный резистор R1 используется для установки скорости переключения светодиодов. Переключатель SW1 - это тот, который уже есть на вашем мотоцикле. У него три положения: среднее, включено влево, включено вправо. Светодиоды D1, D3, D5 и D7 включаются при повороте налево, а D2, D4, D6 и D8 - направо.
При установке на мотоцикле светодиоды устанавливаются на одной плате шириной 20…25 см в соответствии с рисунком. Внешние красные светодиоды служат габаритными огнями и стоп-сигналами. Для управления ими может использоваться схема .

Замечания:

  • Необходимо обязательно использовать сверхяркие, высокоэффективные желтые светодиоды подходящего размера.
  • Разве что на мотоциклах (или велосипедах), как указано в статье.
  • Лучше всего такой примитив на велосипеде, у самого стоят бегущие огни на крыле (пластмасовом)
  • Великолепный вариант для легкового автоприцепа и не только.
  • Автомобиль (мотоцикл) не ёлка. Из-за этой самодеятельности можно оказаться виновным в ДТП.
  • как сделать для авто? хочу такую систему сделать в газ 21. но не пойму как сделать так чтобы все левые были в левой фаре, все правые в правом. как показано на схеме D1 и D2 подключаются к R3 и R4 одними выходами и другой выход приход на один транзистор Q1. если D1 в одной фаре, D2 в другой то тянуть кабели с них до Q1? или как? подскажите пожалуйста кто знает как можно сделать. Заранее спасибо!
  • Правильная мысль. Почему-то думаю, что гайцы и не позволят такое. Уверен, что подобная иллюминация запрещена.
  • Только так.
  • .....ЛЕПОТА-а-а-а!!!....
  • на новеньких ауди повороты так моргают, светодиодная линия, медленно бегут диоды от одного края к другому
  • Идея интересная, но будет ли это информативно? Мне кажется, лучше классический вариант. Я на своём веле повороты делаю так: Вид спереди: Внутри светильников - жёлтые 3-х-ваттные светодиоды. Ток, отдаваемый драйвером в цепочку светодиодов (передний и задний поворотники) - 0,5 А, весьма большая яркость получается.
  • В начале 90х делал повторитель поворотников для легковушек на заднее стекло. Последовательно зажигалась стрелка в направлении поворота. Штук 5 сделал, народ был доволен и, как говорили, водители грузовиков были довольны. Еще хотелось речевой синтезатор прилепить, но народ не раскошелился, а самому не интересно делать было.