Динамические поворотники (бегущие поворотники) своими руками
Заметил что тема про динамические поворотники, довольно популярная в интернете. Вот и я решил приобщится к ней и внести свой вклад. Выбор пал на контроллер arduino Digispark так как он не дорого стоит, имеет маленькие габариты, минимум обвязки и не прихотлив. К тому же у меня уже есть опыт работы с Digispark ATtiny85
В качестве светодиодной ленты для тестов я использовал светодиодное кольцо на 24 пикселя, на нем установлены такие же как и на ленте светодиоды ws2812b.
Схема бегущих, динамических поворотников
Я думаю что рано или поздно, все производители автомобилей перейдут на светодиодную индикацию. Так как она имеет много преимуществ
1 – Почти не греется
2 – Мало потребляет энергии
3 – Имеет меньшие габариты
4 – Не требует специфической оптики
5 – Можно использовать один светосигнальный элемент для всех световых сигналов
Скетч для Arduino Digispark
В директивах #define можно менять настройки таймингов, если не нравятся предустановленные настройки.
#include <adafruit_neopixel.h> /* #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); }</adafruit_neopixel.h>
0 комментариев