PCCar.ru - Ваш автомобильный компьютер

Вернуться   PCCar.ru - Ваш автомобильный компьютер > Всё Остальное > Arduino проекты

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2018, 23:12   #1
admin
Administrator
 
Аватар для admin
 
Регистрация: 15.06.2005
Город: Москва
Регион: 77, 97, 99, 177
Машина: Lexus RX400h
Сообщений: 842
admin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of light
По умолчанию Динамические огни на Digispark

Я думаю что этот проект можно применить для динамической индикации поворотов автомобиля.
Если у кого то появится интерес, то я постараюсь подправить скетч

Для этого проекта используется самый маленький контроллер компании Atmel Digispark и светодиоднная лента WS2812B. В скетче используется давно известная библиотека NeoPixel. Я думаю что тому кто работал с этой библиотекой не составит большого труда добавить новых эффектов. Базу эффектов буду пополнять, так что жду от Вас новых световых схем. У меня с фантазией как то слабо сложилось, скорее всего логическое мышление не дает фантазии развиваться
Схема подключения ATtiny85 к светодиодной ленте WS2812b простая, всего 3 провода. В своем проекте я запитал эту цветомузыку через USB разъем от Power Bank, но можно питать от любого источника 5В, ток зависит от длины самой ленты

Схема подключения Arduino Digispark ATtiny85:
Нажмите на изображение для увеличения
Название: digispark.png
Просмотров: 2084
Размер:	104.2 Кб
ID:	49496

Видео динамических огней на Digispark ATtiny85:


Скетч для Digispark ATtiny85:
PHP код:
#include <Adafruit_NeoPixel.h>

#define PIN 1
#define NUM_PIX 24
Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_PIX, PIN, NEO_GRB + NEO_KHZ800);

void setup() 
{
  
randomSeed(analogRead(0));
  
strip.begin();
  
strip.show(); // Инициализация , все светодиоды выключены
}

void loop() 
{
  
towards(4, 30);

    
rgbFade(0, 0, 255, 5); // синий
    
rgbFade(0, 0, 255, 5); // синий
    
rgbFade(0, 0, 255, 5); // синий
 
   
runPix(10, 10);
  
  
colorWipe(strip.Color(0, 0, 255), 50); // Blue
  
  
theaterChase(strip.Color(0, 0, 255), 50); // Blue

//  rainbow(20);
//  rainbowCycle(20);
//  theaterChaseRainbow(50);
  
  
flame(255, 150); 
}

//бегущий пиксель
void runPix(uint8_t cicles, uint8_t wait) 
{
  
strip.setBrightness(255);
  for(
int c=0; c<cicles; c++)
  {  
   for(
int i=0; i<strip.numPixels(); i++)
   {
    
strip.setPixelColor(i, strip.Color(0,0,255));
    
strip.show(); 
    
strip.setPixelColor(i, strip.Color(0,0,0));
    
delay(wait);
   }
  }
}

//эффект огня/пламени
void flame(uint8_t cicles, uint8_t wait)
{
 
strip.setBrightness(255);
 for(
int i=0; i<cicles; i++)
  { 
   for(
int i=0; i<strip.numPixels(); i++)
   {
    
strip.setPixelColor(i, strip.Color(0, random(0, 45), random(150, 254) ));
   }
    
strip.setBrightness(random(151,254));
    
strip.show(); // This sends the updated pixel color to the hardware.
    
delay(random(wait));
 }
}  

// плавное наростание яркости любого цвета
void rgbFade(uint8_t red, uint8_t green, uint8_t blue, uint8_t wait) 
{
  
strip.setBrightness(255);
  for(
uint8_t b=0; b<255; b++) 
  {
     for(
uint8_t i=0; i<strip.numPixels(); i++) 
     {
        
strip.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
     }
     
strip.show();
     
delay(wait);
  }
delay(300);

  for(
uint8_t b=255; b > 0; b--) 
  {
     for(
uint8_t i = 0; i < strip.numPixels(); i++) 
     {
        
strip.setPixelColor(i, red * b/255, green * b/255, blue * b/255);
     }
     
strip.show();
     
delay(wait);
  }
   
strip.setBrightness(0);
   
strip.show();
  
delay(200);
}

// бегущие на встречу пиксели
void towards
( uint8_t cicles, uint8_t wait ) 
{
  for(
byte c=0; c<cicles; c++) 
  {
    for(
byte i=0; i<strip.numPixels(); i++) 
    {
      
strip.setPixelColor(i, strip.Color(0,0,255));
      
strip.setPixelColor(strip.numPixels()-i, strip.Color(0,0,255));
      
strip.show();
      
strip.setPixelColor(i, strip.Color(0,0,0));
      
strip.setPixelColor(strip.numPixels()-i, strip.Color(0,0,0));
     
delay(wait);
    } 
  }
}

// //заполнение ленты пиксель за пикселем
void colorWipe(uint32_t c, uint8_t wait) 
{
  
strip.setBrightness(255);
  for(
uint16_t i=0; i<strip.numPixels(); i++) 
  {
      
strip.setPixelColor(i, c);
      
strip.show();
      
delay(wait);
  }
}

//радуга
void rainbow(uint8_t wait) 
{
  
uint16_t i, j;
  
strip.setBrightness(255);
  for(
j=0; j<256; j++) {
    for(
i=0; i<strip.numPixels(); i++) {
      
strip.setPixelColor(i, Wheel((i+j) & 255));
    }
    
strip.show();
    
delay(wait);
  }
}

// Slightly different, this makes the rainbow equally distributed throughout
void rainbowCycle(uint8_t wait) 
{
  
uint16_t i, j;

strip.setBrightness(255);
  for(
j=0; j<256*5; j++) { // 5 cycles of all colors on wheel
    
for(i=0; i< strip.numPixels(); i++) {
      
strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255));
    }
    
strip.show();
    
delay(wait);
  }
}

//Theatre-style crawling lights.
void theaterChase(uint32_t c, uint8_t wait) 
{
 
strip.setBrightness(255); 
  for (
int j=0; j<10; j++) {  //do 10 cycles of chasing
    
for (int q=0; q < 3; q++) {
      for (
int i=0; i < strip.numPixels(); i=i+3) {
        
strip.setPixelColor(i+q, c);    //turn every third pixel on
      
}
      
strip.show();
     
      
delay(wait);
     
      for (
int i=0; i < strip.numPixels(); i=i+3) {
        
strip.setPixelColor(i+q, 0);        //turn every third pixel off
      
}
    }
  }
}

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait) 
{
strip.setBrightness(255);
  for (
int j=0; j < 256; j++) {     // cycle all 256 colors in the wheel
    
for (int q=0; q < 3; q++) {
        for (
int i=0; i < strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+q, Wheel( (i+j) % 255));    //turn every third pixel on
        
}
        
strip.show();
       
        
delay(wait);
       
        for (
int i=0; i < strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+q, 0);        //turn every third pixel off
        
}
    }
  }
}

// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) 
{
  
strip.setBrightness(255);
  
WheelPos = 255 - WheelPos;
  if(
WheelPos < 85) {
   return 
strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else if(
WheelPos < 170) {
    
WheelPos -= 85;
   return 
strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  } else {
   
WheelPos -= 170;
   return 
strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  }
} 
Как загрузить скетч в контроллер ATtiny85 среде Arduino IDE
1 - Отключить микроконтроллер Arduino Tiny от компьютера
2 - Нажать в IDE кнопку "Вгрузить" после чего в консоли появится информация, о том что у Вас есть
60 секунд, что бы подключить Digispark к USB.
3 - Подключаем Digispark ATtiny85 к USB компьютера
4 - Скетч начнет загружаться в контроллер Ардуино ATtiny85
5 - Если все прошло успешно, то можете проверить работоспособность Вашего скетча на ATtiny85

Источник: http://cyber-place.ru/showthread.php?t=2774
__________________
Все для arduino.
admin вне форума   Ответить с цитированием
Старый 03.04.2018, 00:55   #2
T_r_D
Старший Пользователь
 
Регистрация: 03.07.2015
Регион: 77, 97, 99, 177
Сообщений: 372
T_r_D is a jewel in the roughT_r_D is a jewel in the roughT_r_D is a jewel in the rough
По умолчанию

Хорошо вышло.
Много памяти ещё осталось в контроллере?
Там много места занимает бут дигиспарковский.

Хотя у меня получилось на нём сделать часы на двухстроковом дисплее с валкодером и кнопкой валкодера для настройки даты/время.
T_r_D вне форума   Ответить с цитированием
Старый 03.04.2018, 01:11   #3
admin
Administrator
 
Аватар для admin
 
Регистрация: 15.06.2005
Город: Москва
Регион: 77, 97, 99, 177
Машина: Lexus RX400h
Сообщений: 842
admin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of lightadmin is a glorious beacon of light
По умолчанию

Использует всего 54% памяти
Нажмите на изображение для увеличения
Название: Снимок экрана - 03.04.2018 - 00:07:36.png
Просмотров: 1927
Размер:	86.2 Кб
ID:	49497
__________________
Все для arduino.
admin вне форума   Ответить с цитированием
Старый 30.06.2021, 07:14   #4
jonikus81
Старший Пользователь
 
Аватар для jonikus81
 
Регистрация: 07.09.2015
Возраст: 45
Город: Алматы
Регион: Казахстан
Машина: MMC DELICA 94 (булка)
Сообщений: 209
jonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the roughjonikus81 is a jewel in the rough
По умолчанию

Добрый день. Для поворотников адресные ленты крайне слабы, при прямых лучах солнца их вообще не видно. Не появлялись ли более яркие адресные ленты?
jonikus81 вне форума   Ответить с цитированием
Ответ

Метки
arduino, attiny85, digispark, ардуино, динамические огни


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Часовой пояс GMT +4, время: 11:17.


Работает на vBulletin® версия 3.8.4.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot