цифровая электроника
вычислительная техника
встраиваемые системы

 

Рождественский венок на Arduino и Adafruit NeoPixel своими руками

Автор: Mike(admin) от 22-12-2017, 17:25

В такие праздники как Новый год и Рождество принято украшать помещения и наряжать различные предметы всякими светящимися устройствами. Самым классическим вариантом в данном случае является гирлянда. Но энтузиасты и радиолюбители могут пойти дальше этих шаблонов и сделать к празднику какую-нибудь свою светящуюся штуку.


Рождественский венок на Arduino и Adafruit NeoPixel

В данном очень простом проекте показано, как самостоятельно сделать простое светящееся кольцо (рождественский венок) на основе Arduino и Adafruit NeoPixel 1/4 – 60.


Здесь используется компактная плата Arduino Nano, которая подключается к светодиодному кольцу Adafruit NeoPixel 1/4 – 60, содержащему шестьдесят RGB-светодиодов с индивидуальной адресацией. Светодиоды соединены в неразрывную цепь, то есть выход одного компонента соединен со входом другого. Это позволяет использовать лишь одну линию микроконтроллера для управления всей цепочки светодиодов, сформированной в кольцо. Драйвер внутри каждого светодиода имеет постоянный ток 18 мА, поэтому цвет будет очень насыщенный и постоянный, даже если напряжение изменится, при этом никаких внешних дроссельных резисторов не потребуется. Это позволяет немного уменьшить размеры конструкции.


Подключение Arduino к светодиодному кольцу очень простое. Контакт 5V на кольце присоединяем к 5V на плате Arduino. То же самое делаем с выводами Gnd. Для управления светодиодами подключаем шестую линию ввода/вывода Arduino (PIN 6) к линии DIN кольца. Не трогайте линию DOUT, она нужна для подключения другого кольца или отдельных светодиодов в цепь. Схема подключения показана ниже.


Рождественский венок на Arduino и Adafruit NeoPixel своими руками

Далее приведен код (скетч) для управления светодиодным кольцом посредством Arduino.



#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
 #include <avr/power.h>
#endif

// Какой контакт на Arduino подключен к NeoPixels?
// В случае с Trinket или Gemma мы лучше заменить это на 1
#define PIN 6

// Сколько NeoPixels подключено к Arduino?
#define NUMPIXELS      60

// Когда мы настраиваем библиотеку NeoPixel, мы указываем, сколько пикселей и какой вывод использовать для отправки сигналов.
// Обратите внимание, что для старых лент NeoPixel вам может понадобиться изменить третий параметр
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN);

int myPixels[] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60};
int delayval1 = 100; // delay for a 1/10th of a second
int delayval2 = 5000; // delay for 5 seconds

void setup() {

  pixels.begin();
  pixels.show(); // Это инициализирует библиотеку NeoPixel
}

void loop() {
  
  // Для набора NeoPixels первый NeoPixel равен 0, второй - 1, вплоть до полного количества пикселей минус один

  for(int i = 0; i < NUMPIXELS; i++){

    // pixels.Color принимает значения RGB, от 0,0,0 до 255,255,255
    pixels.setPixelColor(i, pixels.Color(255,0,0)); // Умеренно ярко-зеленый цвет
    pixels.show(); // Это отправляет обновленную информацию о цвете пикселя на кольцо
    delay(delayval1); // Задержка в течение определенного периода времени (в миллисекундах
  }
    for(int i = NUMPIXELS-1; i >= 0; i--){

    // pixels.Color принимает значения RGB, от 0,0,0 до 255,255,255
    pixels.setPixelColor(i, pixels.Color(0,150,0)); // Умеренно ярко-зеленый цвет
    pixels.show(); // Это отправляет обновленную информацию о цвете пикселя на кольцо
    delay(delayval1);
  }
     // Делаем каждый пятый светодиод красного цвета, чтобы сформировать Холли на венке, остальная часть венка остается зеленой
     for (int i = 0; i < pixels.numPixels(); i += 5){
      
      pixels.setPixelColor(i, 255, 0, 0);  
      pixels.show();  
  }      
      delay(delayval2);// пауза в течение 5 секунд
      
// Теперь этот светодиод становится синим, а затем снова красным и все повторяется.
  for(uint16_t pos = 0; pos < 12; pos++) {
    pixels.setPixelColor(myPixels[pos], 0, 0, 255);
    pixels.show();
    delay(delayval1);  
  }

    for(uint16_t pos = 0; pos < 12; pos++) {
    pixels.setPixelColor(myPixels[pos], 255, 0, 0);
    pixels.show();
    delay(delayval1);  
  }

    for(uint16_t pos = 0; pos < 12; pos++) {
    pixels.setPixelColor(myPixels[pos], 0, 0, 255);
    pixels.show();
    delay(delayval1);  
  }

    for(uint16_t pos = 0; pos < 12; pos++) {
    pixels.setPixelColor(myPixels[pos], 255, 0, 0);
    pixels.show();
    delay(delayval1);  
  }
  delay(delayval2);
}



Теги: Arduino, светодиоды




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

Комментарии:

Оставить комментарий