Бегущие поворотники на arduino
Заметил что тема про динамические поворотники, довольно популярная в интернете. Вот и я решил приобщится к ней и внести свой вклад. Выбор пал на контроллер arduino Digispark так как он не дорого стоит, имеет маленькие габариты, минимум обвязки и не прихотлив. К тому же у меня уже есть опыт работы с Digispark ATtiny85
В качестве светодиодной ленты для тестов я использовал светодиодное кольцо на 24 пикселя, на нем установлены такие же как и на ленте светодиоды ws2812b.
Схема бегущих, динамических поворотников
Я думаю что рано или поздно, все производители автомобилей перейдут на светодиодную индикацию. Так как она имеет много преимуществ
1 – Почти не греется
2 – Мало потребляет энергии
3 – Имеет меньшие габариты
4 – Не требует специфической оптики
5 – Можно использовать один светосигнальный элемент для всех световых сигналов
Скетч для Arduino Digispark
В директивах #define можно менять настройки таймингов, если не нравятся предустановленные настройки.
#include /* #define pause_dark 17 // задержка между пикселями при затухании #define pause_light 17 // задержка между пикселями при загорании #define delay_dark 200 // задержка затухания всей ленты #define delay_light 200 // задержка свечения всей ленты #define pause_dark 0 // задержка между пикселями при затухании #define pause_light 20 // задержка между пикселями при загорании #define delay_dark 250 // задержка затухания всей ленты #define delay_light 100 // задержка свечения всей ленты */ #define pause_dark 10 // задержка между пикселями при затухании #define pause_light 20 // задержка между пикселями при загорании #define delay_dark 300 // задержка затухания всей ленты #define delay_light 50 // задержка свечения всей ленты #define num_pixel 24 // число пикселей в ленте #define led_pin 4 // пин к которому подключена светодиодная лента #define brightness 255 //яркость ленты Adafruit_NeoPixel pixelink = Adafruit_NeoPixel(num_pixel, led_pin, NEO_GRB NEO_KHZ800); void setup() { pinMode(0, INPUT_PULLUP); //Пин для подключения кнопки pinMode(1, INPUT_PULLUP); //Пин для подключения кнопки pinMode(2, INPUT_PULLUP); //Пин для подключения кнопки pixelink.begin(); pixelink.setBrightness(brightness); pixelink.show(); } void loop() { if(digitalRead(0) == LOW) turn_light(); if(digitalRead(1) == LOW) stop_light(); if(digitalRead(2) == LOW) police_light(); if(analogRead(3) < 30 ) parking_light(); //test_port(analogRead(3)); } //================================================ void turn_light() { fill_strip(255,92,0,pause_light); delay(delay_light); fill_strip(0,0,0,pause_dark); delay(delay_dark); } //================================================ void stop_light() { set_strip(255,0,0); fill_strip(92,0,0,60); fill_strip(255,0,0,20); if(digitalRead(1) == HIGH) { fill_strip(0,0,0,10); } } //================================================ void police_light() { for (int j = 0; j < 4; j ) { set_strip(255,0,0); delay(50); set_strip(0,0,0); delay(50); } delay(200); for (int j = 0; j < 4; j ) { set_strip(0,0,255); delay(50); set_strip(0,0,0); delay(50); } delay(200); } //================================================ void parking_light() { fill_strip(255,255,255,30); while(analogRead(3) < 30){} fill_strip(0,0,0,30); } //================================================ void fill_strip(uint8_t red, uint8_t green, uint8_t blue, uint8_t pix_pause) { for (uint8_t i = 0; i < num_pixel; i ) { pixelink.setPixelColor(i, red, green, blue); pixelink.show(); delay(pix_pause); } } //================================================ void set_strip(uint8_t red, uint8_t green,uint8_t blue) { for (uint8_t i = 0; i < num_pixel; i ) { pixelink.setPixelColor(i, red, green, blue); } pixelink.show(); } /* реверс for (int i = num_pixel-1; i > -1 ; i--) { pixelink.setPixelColor(i, 0, 0, 0); pixelink.show(); delay(5); } */ //================================================ void test_port(int analog) { if(analog < 10) analog=1; else analog=analog/10; for (int i = 0; i < analog; i ) { pixelink.setPixelColor(i, 64, 64, 64); } pixelink.show(); delay(100); set_strip(0,0,0); }
Очень интересная конструкция которая позволяет сильно приобразить Ваши поворотники. Для питания нужен преобразователь 12 => 5 вольт.
Можно использовать обазную зарядку для мобилки.
Для меня лучше подойдет скрытый вариант, который оставит место для других потребителей.
Для построение чудо поворотника необходимо: 4 резистора 100 кОм и 4 резистора 47 кОм, сама ардуино, а также отрезки адресной светодиодной ленты ws2812b(обычная не подойдет)
Для соединения вхес елементов в целое необходима пайка, я думаю с этим проблем не будет, схему подключить так чтобы напряжение на схему поступало от включения «зажигания».
Плюсовой провод от действующих поворотников подключаются к 5 и 6 контакту контроллера через делитель напряжения из резисторов. Аналогичным образом подключаются кнопки для дополнительных режимов работы контроллера
Прошивка контоллера
Для прошивки необходим usb кабель и компьютер, ноутбук.
НОВЫЙ скетч, в котором количество диодов меняется переменно count качайте тут.
Скачать готовый скетч в файле можете по этой ссылке.
Для работы с пиксельными светодиодами нужна будет библиотека . Установить ее можно будет следующим образом: Скетч -> Подключить библиотеку -> Управлять библиотеками. Далее в меню поиска ввести название библиотеки Adafruit_NeoPixel.h и нажать кнопку установить.
Как прошить ардуино, уже существует тысячи прекрасных постов поэтому я оставлю ссылку где подробно все расписано.
Весь код я оставлю ниже
Я думаю что лучше будет смотрется с силиконовыми каналами
Поворотник станет еще более плавным и приятным.
Осталось дело за страшным сном — разборка фары )
Если вам понравится думаю иногда выкладывать подобные посты.
Ну а на сегодня у меня все. Всем добра)
Видео работы:
Привет всем самодельщикам! Сегодня рассмотрим один из множества вариантов применения светодиодной ленты типа WS2812B на адресуемых RGB-светодиодах. Такие ленты (как и отдельно монтируемые светодиоды WS2812B) можно использовать для подсветки фона «Ambilight» мониторов компьютера а также телевизоров, светодинамической подсветки в автомашине, картины, фоторамки, аквариума и так далее. Широко применяются разработке дизайне любых помещений, в форме новогодних иллюминаций или световых шоу. Использование светодиодной ленты типа WS2812В дает возможность получить большое количество интересных проектов.
Светодиод WS2812B представляет собой RGB-светодиод вставленный в один корпус с чипом WS2801.
ТЕМАТИЧЕСКИЕ ИНСТРУМЕНТЫ И МАТЕРИАЛЫ:
Сам светодиод WS2812B представляет собой SMD элемент предназначенный для поверхностного монтажа. Внутри светодиод состоит из кристаллов красного света (red), зеленого света (green) и синего света (blue) кристаллов, находящихся в одном корпусе. С помощью этого светодиода можно получить большое ранообразие цветовых оттенков светового излучения.
Управление RGB-светодиода происходит через плату микроконтроллера Arduino.
Получил я от китайцев светодиодную ленту WS2812B.Она представляет собой отрезок длиной 1 метр с количеством светодиодов -144 штуки. Давно хотел попробовать для разных экспериментов. С помощью библиотек для Ардуино- Adafruit Neopixel и Fast led можно получить массу очень необычных световых эффектов. Но далее решил попробовать сделать динамические поворотники для автомобиля в так называем «стиле Ауди».Применять на практике эту схему я у себя пока не стал(как примут наши гиббддешники?) ,но эффект получился конечно очень привлекательный.
В роли контроллера управления светодиодной лентой служит плата Arduino Uno можно использовать и другие платы- Arduino Nano, Arduino Pro mini).
Весь процесс посмотреть в видео:
Перечень инструментов и материалов.
-плата Arduino Uno;
— понижающая плата 12В5В на 3А;
— резисторы 100Ком-4шт;
-резисторы 47Ком-4шт;
— резисторы 500Ом-1шт;
-кнопки (для имитации включения сигналов) -4шт;
-макетная плата
-отвертка;
лабораторный блок питания
-паяльник;
-кембрик;
-тестер.
-соединительные провода.
Шаг первый. Сборка схемы.
Собрал схему с помощью макетной платы (бредборда). Резисторы подключенные к цифровым входами Ардуино нужны для преобразования входных сигналов автомобиля с 12-ти до 5 вольт. Резистор 500 Ом для защиты линии управления светодиодной ленты WS2812B.
В качестве преобразователя с 12В на 5В использовал готовую плату с Алиэкспресс. Можно применить любой преобразователь с подходящими параметрами. Преобразователь нужен для стабильного питания Ардуино и светодиодной ленты WS2812B.
Шаг второй. Программирование Ардуино.
Цифровые входы платы Ардуино №3,4 служат для включения левого и правого поворота. Пин №5 –включение стоп сигнала, пин №6 –включение заднего хода. Пин №8 –управляющий сигнал лентой WS2812B.
В среде Arduino IDE загружаем скетч (ссылка выше). Два варианта скетча-один для передней части автомобиля, другой – для задней. Используйте какой вам нужен. В начале скетча можно выставить нужное вам количество светодиодов. Так же можно откорректировать скорость поворотников соответственно вашему авто. Еще можно изменить яркость светодиодов параметром strip.Color(103,31,0) –менять первые две цифры от 0 до 255. То есть можно немного поэкспериментировать.
При нажатии на нужную кнопку мы подаем сигнал на включение нужного параметра. При правильной сборке схемы она как правило сразу начинает работать.
Фото в работе.
Неплохой эксперимент получился с этой конструкция выходного дня. Было интересно своими руками сделать и запрограммировать данную схему. Сделать самостоятельно такой прибор по силам начинающему без больших затрат времени и финансов.
Попутно световые эффекты с этой лентой(из библиотек Adafruit Neopixel и Fast led)
Фото с световыми эффектами.
На весь работу пошло один выходной вечер, всю электронику брал на Алиэкспресс. Остальные комплектующие у меня были в наличии. На базе платформы Ардуино можно собирать множество разнообразных полезных устройств.
Всем желаю удачи и успехов в жизни и творчестве!