USD
59.65
-0.28
EUR
70.00
-0.37

Как сделать бегущий «умный» поворотник своими руками для автомобиля

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

Что для этого потребуется:

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

 

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

Контроллер ардуино необходимо подключить к сети автомобиля через преобразователь 12В -> 5В так, чтобы напряжение на схему поступало от включения «зажигания».

К стабилизатору напряжения КРЕН5В нужно подключить плюсовой провод от действующего поворотника.

В данной статье рассмотрено подключение и прошивка только одного поворотника, чтобы сделать второй поворотник нужно аналогично подключить вторую светодиодную ленту к любому свободному цифровому выходу Arduino (например 7), а так же в прошивке добавить код для него по нашему примеру.

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

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

После этого вставить скетч в программу и заменить в коде количество светодиодов (у нас используется 22 диода):

#include <Adafruit_NeoPixel.h> // подключаем библиотеку
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.setPixelColor(i, strip.Color(0, 0, 0)); // R=0, G=0, B=0 — цвет светодиода
}
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);

}
}

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

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


Читайте также:
comments powered by HyperComments
Наверх