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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2018, 23:12   #1
admin
Administrator
 
Аватар для admin
 
Регистрация: 15.06.2005
Город: Москва
Регион: 77, 97, 99, 177
Машина: Lexus RX400h
Сообщений: 832
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
Просмотров: 1325
Размер:	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_PIXPINNEO_GRB NEO_KHZ800);

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

void loop() 
{
  
towards(430);

    
rgbFade(002555); // синий
    
rgbFade(002555); // синий
    
rgbFade(002555); // синий
 
   
runPix(1010);
  
  
colorWipe(strip.Color(00255), 50); // Blue
  
  
theaterChase(strip.Color(00255), 50); // Blue

//  rainbow(20);
//  rainbowCycle(20);
//  theaterChaseRainbow(50);
  
  
flame(255150); 
}

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

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

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

  for(
uint8_t b=2550b--) 
  {
     for(
uint8_t i 0strip.numPixels(); i++) 
     {
        
strip.setPixelColor(ired b/255green b/255blue b/255);
     }
     
strip.show();
     
delay(wait);
  }
   
strip.setBrightness(0);
   
strip.show();
  
delay(200);
}

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

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

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

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

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

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

//Theatre-style crawling lights with rainbow effect
void theaterChaseRainbow(uint8_t wait
{
strip.setBrightness(255);
  for (
int j=0256j++) {     // cycle all 256 colors in the wheel
    
for (int q=03q++) {
        for (
int i=0strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+qWheel( (i+j) % 255));    //turn every third pixel on
        
}
        
strip.show();
       
        
delay(wait);
       
        for (
int i=0strip.numPixels(); i=i+3) {
          
strip.setPixelColor(i+q0);        //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 30WheelPos 3);
  } else if(
WheelPos 170) {
    
WheelPos -= 85;
   return 
strip.Color(0WheelPos 3255 WheelPos 3);
  } else {
   
WheelPos -= 170;
   return 
strip.Color(WheelPos 3255 WheelPos 30);
  }

Как загрузить скетч в контроллер 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
Сообщений: 832
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
Просмотров: 1202
Размер:	86.2 Кб
ID:	49497
__________________
Все для arduino.
admin вне форума   Ответить с цитированием
Старый 30.06.2021, 07:14   #4
jonikus81
Старший Пользователь
 
Аватар для jonikus81
 
Регистрация: 07.09.2015
Возраст: 43
Город: Алматы
Регион: Казахстан
Машина: 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, время: 13:41.


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