USD
58.13
0.03
EUR
69.77
0.09

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

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

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

  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
Наверх