• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar
  • Skip to secondary sidebar
  • Skip to footer

У Павла!

  • Контроллеры
    • Arduino
      • Приборы
      • Музыка
      • Проекты Arduino
      • Уроки Arduino
      • Игры на Arduino
      • Роботы на Ардуино
      • FLProg
    • Одноплатные ПК
      • Orange pi
      • Raspberry pi
        • Raspberry pi pico
        • Raspberry pi server
        • Проекты Raspberry pi
    • ESP
      • ESP8266
        • NodeMCU
      • ESP32
      • M5stack
    • Другие контроллеры
      • STM32
  • Умный дом
    • Home Assistant
      • Автоматизации
    • Tuya
    • Bluetooth
    • ESPHome
    • Frigate
    • Telegram
    • Яндекс
  • ЧПУ
  • 3d печать
  • Об авторе

Снежинка на arduino и светодиодной ленте ws2812

24 декабря, 2018

 

 

Нам понадобится для реализации данного проекта:

Arduino nano: http://ali.pub/1x1jri

Светодиодная лента ws2812b: http://ali.pub/2wm1h4

Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.

 

Для начала нужно скачать чертеж снежинки распечатать на принтере и вырезать ее. Ну по крайней мере я сделал так, чтоб использовать вырезанную снежинку как шаблон.

Сам шаблон можно скачать отсюда:

 

Материал для снежинки я использовал пену, которой упаковывают например посылки из китая, данный материал я показываю  в видео.

 

 

Так я взял светодиодную ленту разрезал ее на 6 частей по 7 светодиодов. и наклеил их на двухсторонний скотч на снежинку таким образом:

Проводами от витой пары соединил концы ленты последовательно по схеме:

 

Питания на 41 светодиод с данными эффектами хватает от самой ардуино, не знаю правда на долго ли, но поработав 30 минут ни какие элементы в ардуино не начали греться.

Сама программа с эфектами представлена ниже, лучше скачивать скетч по ссылке с яндекс диска.



#include <Adafruit_NeoPixel.h>

uint32_t buff[48];
uint8_t  mode[]  { 0,1,2,3,4,5,0,1,6,7,2,3,8,9 };


#define PIN 2 // Пин на который цепляются светодиоды

int ray_number = 6; // Число лучей

int ray_pixel  = 7; //число светодиодов в одном луче



int max_br     = ray_pixel*2;
int step_br    = 256/ray_pixel;

int TM = 50, DX = 2;

Adafruit_NeoPixel strip = Adafruit_NeoPixel(ray_pixel*ray_number, PIN, NEO_GRB + NEO_KHZ800);


void setup() {
// Скорость и глубина эффекта исходя из числа пикселей в луче   
  if( ray_pixel >= 8 ){
    TM = 50;
    DX = 2;
  }
  else if( ray_pixel > 6 ){
    TM = 60;
    DX = 2;
  }
  else {
    TM = 70;
    DX = 3;
  }
  
  strip.begin();
  strip.show(); 
}

void loop() {
   for( int i=0; i<14; i++ ){
       for( int j=0; j<6; j++){
          Mode1(TM,j,i);
          delay(200);
//          Mode1(70,j,i);
//          delay(300);
       } 
   }
}

/*
 * Эффект от центра
 */
void Mode1(uint16_t wait, uint8_t pair, uint8_t dir){
   for( int i1=0; i1<ray_pixel; i1++ ){
    
      for( int i2=0; i2<ray_pixel; i2++ ){
          SetStarColor1(ray_pixel-i2, 0, pair, dir);
      }

      SetStarColor1(ray_pixel-i1,15, pair, dir);
      for( int i2=0; i2<i1; i2++ ){
          SetStarColor1(ray_pixel-i2, 16-(i1-i2)*DX, pair, dir);
      }
     
      strip.show();
      delay(wait);
   }
   for( int i1=0; i1<ray_pixel; i1++ ){
      for( int i2=0; i2<ray_pixel; i2++ ){
         int c = 16-(i1-(i2-8))*2;
         if( c < 0 )c = 0;
         SetStarColor1(ray_pixel-i2,c, pair, dir);
      }

      strip.show();
      delay(wait);
   }
}


/**
 * Разгорание одного пиксела на каждом луче 
 */
void SetStarColor1( uint8_t n, uint8_t br, uint8_t pair, uint8_t dir ){
   if( n > ray_pixel )return;
   if( br > 15 )br=15;
   uint8_t r=0, g=0, b=0;
   if( br < 8 ){
      switch( pair ){
        case 0 :
        case 3 :
           r = br*32;
           break;
        case 1 :
        case 4 :
           g = br*32;
           break;
        case 2 :
        case 5 :
           b = br*32;
           break;
      }
   }
   else {
      switch( pair ){
         case 0 :
            r = 255;
            g = (br-8)*32;
            break;
         case 1 :
            g = 255;
            b = (br-8)*32;
            break;
         case 2 :
            b = 255;
            r = (br-8)*32;
            break;
         case 3 :
            r = 255;
            b = (br-8)*32;
            break;
         case 4 :
            g = 255;
            r = (br-8)*32;
            break;
         case 5 :
            b = 255;
            g = (br-8)*32;
            break;
      }
   }
   switch( dir ){
       case 1:
          for( int i=0; i<6; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b)); 
          break;   
       case 2:
          for( int i=0; i<6; i++ )
             if( i%2 )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b)); 
             else strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));
          break;    
       case 3:
          for( int i=0; i<6; i++ )
             if( i%2 )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));
             else strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b)); 
          break;    
       case 4:
          for( int i=0; i<3; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=3; i<6; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b)); 
          break;   
       case 5:
          for( int i=0; i<1; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=1; i<4; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b)); 
          for( int i=4; i<6; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));    
          break;   
       case 6:
          for( int i=0; i<2; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=2; i<5; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b)); 
          for( int i=5; i<6; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));    
          break;   
       case 7:
          for( int i=0; i<3; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=3; i<6; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b)); 
          break;   
       case 8:
          for( int i=0; i<1; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=1; i<4; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b)); 
          for( int i=4; i<6; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
          break;   
       case 9:
          for( int i=0; i<2; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
          for( int i=2; i<5; i++ )strip.setPixelColor((ray_pixel-n)+i*ray_pixel, strip.Color(r,g,b)); 
          for( int i=5; i<6; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
          break;   
       default:
          for( int i=0; i<6; i++ )strip.setPixelColor(n-1+i*ray_pixel, strip.Color(r,g,b));    
      }
 
}

скачать скетч можно здесь: https://yadi.sk/d/cd6L-oyuGQYhFA

в этом скетче главные две строчки:

int ray_number = 6; // Число лучей

int ray_pixel = 7; //число светодиодов в одном луче

их нужно изменять в зависимости от количества  отрезков светодиодной ленты и количества светодиодов на одном отрезке.

 

Демонстрация работы данной снежинки находится в видео:

Primary Sidebar

Поиск

Новые записи

  • Автоматизация перезагрузки устройства по команде Ping.
  • Разблокирование и добавление шлюза Xiaomi gateway 3 в Home Assistant для управления Bluetooth устройствами из экосистемы Xiaomi Home (mihome)
  • Интеграция для локального управления (без интернета) ик пультом Tuya работающим по wifi из Home Assistant
  • Транслируем показания с Уличного Bluetooth Датчика температуры по BTHome на дисплей датчика температуры XIaomi LYWSD03MMC
  • Заставляем Bluetooth датчики температуры tuya и xiaomi отправлять данные по Zigbee в Home Assistant.

Официальный YouTube Канал M5Stack:

Подписывайтесь на Телеграм канал

https://t.me/ypavla

Подписаться на YouTube!

Secondary Sidebar




Подписывайтесь на Telegram Канал!

У Павла!

Footer

Copyright_У Павла! © 2025 ·