Bluetooth матрица на адресных светодиодах | AlexGyver

Bluetooth матрица на адресных светодиодах | AlexGyver Машинки

Bluetooth матрица на адресных светодиодах | alexgyver

Прошивка постоянно совершенствуется, добавляются новые режимы и эффекты. Уже дошло до того, что в полном виде прошивка не помещается в Arduino NANO. Актуальная версия прошивки у вас точно не поместится, и нужно будет отключить ненужные “модули” в прошивке. Это может показаться сложным, но на деле нужно просто решить, какие режимы вам нужны, и в главной вкладке прошивки в строке ~60 есть список модулей. Их можно включать и выключать цифрой 0 (выкл) и 1 (вкл). Подробнее о памяти и модулях написано в статье о системе GyverMatrixOS.

Если хочется впихнуть ВСЕ возможности в свою матрицу, придётся купить Arduino MEGA, схема подключения будет такая же, нужно просто смотреть на названия пинов. Хочется дешевле? Версии прошивки GyverMatrixOS выше 1.7 оптимизированы для ESP8266 (она же NodeMCU и Wemos) и STM32 (Blue Pill). Для ESP8266 достаточно указать MCU_TYPE 1 и подключить по схеме. Для STM32 – MCU_TYPE 2 в настройках скетча. Подробные инструкции по загрузке прошивки ищите ниже.

Адресная светодиодная лента ардуино

Адресные ленты отличаются плотностью — от 30 до 144 светодиодов на метр, изготавливаются разном защитном исполнении: IP30, IP65, IP67, IP68. Все варианты исполнения, кроме IP30, могут применяться на улице в диапазоне температур от -25 до 80°C. Еще одна, более надежная лента — WS2813 отличается возможностью передавать сигналы дальше по цепочке даже через сгоревший чип.

Смотрите про коптеры:  FW статьи.

Видео, демонстрирующее работу проекта

918 просмотров

Загрузка кода программы в плату arduino

Сначала в Arduino IDE мы должны выбрать PORT, к которому подключена плата Arduino, а затем уже загружать программу в плату. После успешной загрузки программы в плату запомните номер порта, который будет использоваться для нашей последовательной связи.

После этого найдите script folder (папку со скриптами) библиотеки Blynk на вашем компьютере – она должна была создаться когда вы устанавливали библиотеку. В нашем случае эта папка располагается по адресу:

Как подключить адресную ленту к ардуино

Для этого занятия понадобится:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • лента WS2812B;
  • макетная плата;
  • 1 резистор от 100 до 500 Ом;
  • провода «папа-папа».

WS2812B светодиоды довольно энергоемкие, один светодиод потребляет до 60 мА при максимальной яркости. Для ленты со 100 диодами потребуется блок питания на 6 и более Ампер. Микроконтроллер Arduino и светодиодная лента могут быть подключены к разным источникам питания, но «земля» должна быть общая. Дело в том, что пин GND тоже участвует в управлении адресной лентой от платы Ардуино Уно.

Схема подключения адресной ленты 5V
Схема подключения адресной ленты 5 Вольт к Ардуино
WS2812BArduino UnoArduino NanoArduino Mega
GNDGNDGNDGND
5V5V5V5V
DO101010

Для работы с лентой используются три популярные библиотеки — FastLED, AdafruitNeoPixel и LightWS2812. Все библиотеки доступны для скачивания на нашем сайте. Работать с библиотеками FastLED и Adafruit NeoPixel просто, отличаются они в функциональности и объеме занимаемой памяти. После сборки этой простой схемы и установки библиотек, загрузите скетч для адресной светодиодной ленты.

Как проверить адресную ленту без ардуино

WS2812B светодиоды
При подключении обращайте внимание на направление стрелок

Многих интересует, как включить адресную ленту без Ардуино и проверить ее на работоспособность. Если просто подключить питание к ленте, то ничего не произойдет — проверить ленту без контроллера нельзя. Если задеть цифровой вход адресной ленты, то могут загореться несколько светодиодов из-за случайных помех, которые воспринимаются контроллерами ws2812b светодиодов, как команды.

Если под рукой нет платы Ардуино, то можно использовать для проверки специальный контроллер. В крайнем случае, просто потрогать цифровой провод, чтобы понять будут гореть светодиоды на ленте или нет. Другого надежного способа проверить работу ws2812b ленты нет, поэтому рассмотрим далее управление и программирование адресной светодиодной ленты на микроконтроллере Ардуино Нано или Уно.

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Шилд цветной светодиодной матрицы 8*5 (8*5 RGB LED Matrix shield) (купить на AliExpress – смог найти там только один похожий шилд и он не от компании Adafruit, но драйвер у него точно такой же какой рассматривается в статье).
  3. USB A/B кабель для Arduino Uno.
  4. Персональный компьютер или ноутбук

Объяснение программы для arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Пояснения к коду:

  1. нумерация светодиодов в ленте начинается с нуля, поэтому если мы хотим включить первый светодиод, то указывать надо «0».
Схема подключения адресной ленты 12 Вольт
Схема подключения адресной ленты 12 Вольт к Ардуино

Если у вас лента на 12 Вольт, то ее нужно подключать по схеме, размещенной выше. Резистор на цифровом пине защищает его от выгорания (если питание к ленте будет отключено, то она начнет питаться от цифрового пина, при этом пин может выгореть. Также не стоит подключать питание ленты к плате Ардуино, иначе может выгореть защитный диод на Ардуино или USB порт на компьютере (в худшем случае).

Принцип управления светодиодной матрицей с помощью arduino и приложения blynk

Используемая в нашем проекте светодиодная матрица 8*5 содержит 40 трехцветных светодиодов (RGB LEDs) с индивидуальной адресацией с помощью драйвера WS2812B. Она позволяет использовать 24-битное управление цветом, что позволяет реализовать 16.8 миллионов цветов на одном пикселе.

Управляется данная матрица по одному проводу. Как следует из даташита на светодиоды матрицы рабочее напряжение для них составляет от 4 до 6 В, при этом при напряжении 5 В и полной яркости всех трех цветов один такой светодиод потребляет ток примерно 50 mA.

Также матрица содержит защиту от неправильной полярности напряжения (Reverse-voltage protection) на внешних контактах подачи питания и кнопку сброса (Reset button), с помощью которой можно производить сброс платы Arduino. Также у нее есть контакт для внешней подачи питания для светодиодов, его можно использовать в случае когда мощности внутреннего источника питания не хватает.

Светодиодная лента ws2812b – переделка устройства управления

Я уже писал

обзор о данной светодиодной ленте

. Там эта лента была применена для новогодней подсветки окна. Мне понравились световые эффекты и лента не была демонтирована после новогодних праздников. В прошлом обзоре я описал схему управления данной лентой и разработанное конечное устройство. В этот раз я решил установить такую ленту на даче, чтобы обеспечить комфортный отдых и радость детишкам. В прошлый раз у меня не получилось сделать нормальное управление ик-пультом, в этот раз я улучшил устройство и решил поделится с читателями. К тому же, я давно не делился своими дачными поделками.

Характеристики ленты и ее тесты, можно посмотреть в прошлом моем обзоре. Единственное отличие: на этот раз я приобрел версию ip30 — не имеющую силиконового покрытия и предназначенную исключительно для монтажа внутри помещения.
Bluetooth матрица на адресных светодиодах | AlexGyver
Bluetooth матрица на адресных светодиодах | AlexGyver
Кратко напомню:
Сами светодиоды WS2812B представляют собой сборку из микросхемы и 3-х светодиодов (красный, синий и зеленый), благодаря специальному протоколу, микросхема принимает данные только для своей сборки, остальные данные передает дальше по цепочке. Благодаря этому, каждой отдельной сборке можно передать информацию о яркости ее каждого светодиода (красного, синего и зеленого) и получить нужный цвет.
Bluetooth матрица на адресных светодиодах | AlexGyver
Видим: линии отреза по контактам, собственно контакты с двух сторон: DIN — входные данные, DO — выходные данные, 5V — плюс питания, GND — минус питания, C1 — керамический конденсатор, ну и собственно сам светодиод припаянный 4-мя контактами. Направление передачи данных указано стрелочками.

Для ардуино разработана хорошая библиотека для данных сборок Adafruit_NeoPixel. Которая позволяет раскрашивать каждую сборку в свой цвет. Также у Adafruit есть библиотека для экранов из данных сборок и неплохие примеры использования. Есть и другие библиотеки для работы с данными лентами.

Здесь подробно рассмотрю устройство управления. Прошлое устройство управления эффектами было реализовано на Arduino Pro Mini и управлялось с телефона через bluetooth. Нареканий в работе устройства не было. Но хотелось более простого управления, например пульт ик, чтобы даже маленький ребенок мог спокойно создать комфортную для себя обстановку, да и просто побаловаться. Впрочем, самому тоже иногда удобнее взять пульт и включить или выключить, без телефона. Вид прошлой версии устройства:
Bluetooth матрица на адресных светодиодах | AlexGyver

Напомню, прошлый раз я предусмотрел ик-приемник в устройстве, однако для работы с WS2812B требуются отключенные прерывания контроллера. Если же в библиотеке отключить их запрет, то из-за большого количества мусора в эфире инфракрасного диапазона, контроллер ведет себя дергано, смотреть на такие эффекты не очень то и приятно. Проблему решил исправить кардинально: подключить второй контроллер, который будет заниматься только обработкой ик-сигналов и, при наличии реальных управляющих команд, сообщать об этом основному контроллеру, который, в свою очередь, будет менять режим. Управление по bluetooth было решено сохранить — пульт при наличии маленьких детей легко может быть утерян, а телефон, в большинстве случаев, находится рядом.

Мне понравилась идея использования разъема для наушников (3 вывода) для подачи питания на устройство управления и получения от него управляющего сигнала. Схема нового устройства (извиняюсь не сильно старался рисовать):
Bluetooth матрица на адресных светодиодах | AlexGyver

J1- аудиоразъем по которому подается питание на контроллер и сигнал на ленту, J2- Аппаратный Serial с питание и RESET.

Для фильтрации питания использованы конденсаторы: электролит на 470 мкФ и керамика на 100 нФ. В комментариях к прошлому обзору кто-то негодовал, что данный разъем не рассчитан на потребляемые 2А лентой. На самом деле питание приходит через этот разъем только для контроллера и обвязки, а это десятки миллиампер, с которыми вполне справиться данный разъем.

Для простоты повторения конструкции, а также потому, что имел определенный запас деталек, решил использовать dip-версии микросхем и иные элементы не для поверхностного монтажа. Согласен, что утомительно сверлить много отверстий в плате, но при наличии держателя для дримеля это совсем не долго, вот мой сверлильный агрегат:
Bluetooth матрица на адресных светодиодах | AlexGyver
Контроллеры выбраны следующие: ATmega328 (управление эффектами), ATtiny85 (ик-примник). Сейчас в большинстве устройств я использую sot и tqfp корпуса микросхем. Но тут вполне подошли по размерам и наличию dip-версии данных контроллеров (грубо говоря, просто остались запасы).

Печатную плату разработал в программе Sprint Layout и изготавливал технологией ЛУТ. Подробно, как я это делаю, описывал в одном из первых своих обзоров про шаровый кран. Так выглядит плата (фото вид):
Bluetooth матрица на адресных светодиодах | AlexGyver

Здесь кратко покажу в виде фотографий, для желающих повторить файл печатной платы.
Напечатал на китайской бумаге для термотрансфера и подготовил заготовку под плату (я сразу делал два устройства, так как размеры заготовки 7 на 10 см):
Bluetooth матрица на адресных светодиодах | AlexGyver
Процесс обработки утюгом:
Bluetooth матрица на адресных светодиодах | AlexGyver
Все готово для травления в хлорном железе:
Bluetooth матрица на адресных светодиодах | AlexGyver
После смывки тонера:
Bluetooth матрица на адресных светодиодах | AlexGyver
Разделяем близнецов с помощью дримеля:
Bluetooth матрица на адресных светодиодах | AlexGyver
Делил вот этим инструментом с насадкой типа отрезной диск, процесс немного пыльный, поэтому следует использовать средства индивидуальной защиты:
Bluetooth матрица на адресных светодиодах | AlexGyver
Мажем глицерином для лужения:
Bluetooth матрица на адресных светодиодах | AlexGyver
Лудить мне последнее время понравилось оплеткой для демонтажа компонентов намотанной на паяльник (особенно актуально для смд компонентов):
Bluetooth матрица на адресных светодиодах | AlexGyver
Результат лужения:
Bluetooth матрица на адресных светодиодах | AlexGyver
Производим монтаж элементов:
Bluetooth матрица на адресных светодиодах | AlexGyver
Флюс мне понравился под маркой KINGBO, из за отсутствия поршня и нестандартных размеров перелил его в обычный шприц:
Bluetooth матрица на адресных светодиодах | AlexGyver
Почти готово:
Bluetooth матрица на адресных светодиодах | AlexGyver
Обратная сторона до смывки флюса:
Bluetooth матрица на адресных светодиодах | AlexGyver
Как-то в одном из обзоров, я привел фотку тестов платы для освещения и подписал, что провода пока накиданы как попало, далее планируется их стянуть и нормально уложить, через некоторое время один из «внимательных» читателей в комментах к другому (чужому) обзору выложил эту фотку с пометкой, что я таким образом делаю монтаж. Пусть его укусит комарик совести, при чтении этих строчек — тестовая сборка и законченный монтаж — две большие разницы, так и тут это всего лишь промежуточная стадия.

Итоговые платы:
Bluetooth матрица на адресных светодиодах | AlexGyver
Bluetooth матрица на адресных светодиодах | AlexGyver

Отладка проходила с применением Arduino Nano, причем, я ее использовал и для программирования ATtiny85 и как прототип ATmega328. Для заливки программы в ATtiny85 использовалась такая схема подключения:
Bluetooth матрица на адресных светодиодах | AlexGyver
Вот так выглядел макет:
Bluetooth матрица на адресных светодиодах | AlexGyver

Для заливки программы в Arduino Nano требовалось только отключать конденсатор между выводами reset и gnd. Для визуального контроля работы ATtiny на ее вывод PB1 был подключен светодиод.

Перед началом всех действий требуется инициализировать ATtiny85 и прописать правильные фьюзы. Я использовал внутренний генератор на 8 МГц. Вот строчки из boards.txt:


###########################################################################

attiny85at8.name=ATtiny85 @ 8 MHz  (internal oscillator; BOD disabled)

# The following do NOT work...
# attiny85at8.upload.using=avrispv2
# attiny85at8.upload.using=Pololu USB AVR Programmer

# The following DO work (pick one)...
attiny85at8.upload.using=arduino:arduinoisp
# attiny85at8.upload.protocol=avrispv2
# attiny85at8.upload.using=pololu

attiny85at8.upload.maximum_size=8192

# Default clock (slowly rising power; long delay to clock; 8 MHz internal)
# Int. RC Osc. 8 MHz; Start-up time PWRDWN/RESET: 6 CK/14 CK   64 ms; [CKSEL=0010 SUT=10]; default value
# Brown-out detection disabled; [BODLEVEL=111]
# Preserve EEPROM memory through the Chip Erase cycle; [EESAVE=0]

attiny85at8.bootloader.low_fuses=0xE2
attiny85at8.bootloader.high_fuses=0xD7
attiny85at8.bootloader.extended_fuses=0xFF
attiny85at8.bootloader.path=empty
attiny85at8.bootloader.file=empty85at8.hex

attiny85at8.build.mcu=attiny85
attiny85at8.build.f_cpu=8000000L
attiny85at8.build.core=tiny
 
###########################################################################

Я опишу процесс сборки устройства по шагам:
На первом шаге я хотел добиться корректного поведения ATiny85 как приемника инфракрасных сигналов. Я не использовал библиотек, а считывал коды прямо с ножки контроллера. Для получения кодов применил модификацию библиотеки SoftwareSerial, позволяющей использовать только одну ножку контроллера для передачи данных. К этой ножке был прицеплен usb-ttl преобразователь, подключенный к компьютеру. Скетч получения кодов:


#include <SendOnlySoftwareSerial.h>  // See http://forum.arduino.cc/index.php?topic=112023.0
 
//SoftwareSerial Serial(1,0);      // Receive, Transmit (Receive not used)
SendOnlySoftwareSerial Serial1(0);   // Transmit serial on Trinket/Gemma pin GPIO #0/D0
 
// We need to use the 'raw' pin reading methods because timing is very important here 
// and the digitalRead() procedure is slower!
#define IRpin_PIN PINB // ATTiny85 had Port B pins
#define IRpin 4
 
#define MAXPULSE    5000  // the maximum pulse we'll listen for - 5 milliseconds 
#define NUMPULSES    50  // max IR pulse pairs to sample
#define RESOLUTION     2  // // time between IR measurements
 
// we will store up to 100 pulse pairs (this is -a lot-)
uint16_t pulses[NUMPULSES][2]; // pair is high and low pulse
uint16_t currentpulse = 0; // index for pulses we're storing
uint32_t irCode = 0;
 
void setup(void) {
  Serial1.begin(9600);
  Serial1.println("Ready to decode IR!");
  pinMode(IRpin, INPUT);   // Listen to IR receiver on Trinket/Gemma pin D2
}
 
void loop(void) {
  
  uint16_t numpulse=listenForIR(); // Wait for an IR Code
 
  // Process the pulses to get a single number representing code
  for (int i = 0; i < 32; i  ) {
    irCode=irCode<<1;
    if((pulses[i][0] * RESOLUTION)>0&&(pulses[i][0] * RESOLUTION)<500) {
      irCode|=0; 
    } else {
      irCode|=1;
    }
  }
  
  printcode();  // Print IR code to softwareserial
  
}
 
void printcode(void) {
  uint16_t half;
  half=irCode>>16;  // Get first 16 bits of code
  Serial1.print("0x");
  Serial1.print(half, HEX);  // Print upper 16 bits in hex
  Serial1.println(irCode & 0xFFFF, HEX); // print lower 16 bits in hex
}
 
uint16_t listenForIR() {  // IR receive code
  currentpulse = 0;
  while (1) {
   unsigned int highpulse, lowpulse;  // temporary storage timing
   highpulse = lowpulse = 0; // start out with no pulse length 
  
   while (IRpin_PIN & _BV(IRpin)) { // got a high pulse
      highpulse  ; 
      delayMicroseconds(RESOLUTION);
      if (((highpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
        return currentpulse; 
      }
   }
   pulses[currentpulse][0] = highpulse;
 
   while (! (IRpin_PIN & _BV(IRpin))) { // got a low pulse
      lowpulse  ; 
      delayMicroseconds(RESOLUTION);
      if (((lowpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
        return currentpulse; 
      }
   }
   pulses[currentpulse][1] = lowpulse;
   currentpulse  ;
  }
}

В результате, на все кнопки сформировалась соответствующая табличка:


1 0xC03FDA25
2 0xC03FE619
3 0xC03FEC13
4 0xC03FCC33
5 0xC03FC639
6 0xC03FDEA1
7 0xC03FC43B
8 0xC03FCE31
9 0xC03FD6A9
0 0xC03FD2AD
* 0xC03FD0AF
# 0xC03FD4AB
left 0xC03FC8B7
up 0xC03FD8A7
right 0xC03FF08F
down 0xC03FEA15
ok 0xC03FC0BF

Потом написал скетч обработки полученных кодов, при их получении ATtiny85 должна была выдавать на порт PB0 символы соответствующие нажатым клавишам. Проверка велась также с использованием usb-ttl преобразователя. Код готового устройства:


#include <SendOnlySoftwareSerial.h> 

#define IR_CODE_PIN PINB 
#define IR_PIN 4
#define LED_PIN 1
#define SERIAL_PIN 0
 
#define MAXPULSE    5000  // the maximum pulse we'll listen for - 5 milliseconds 
#define NUMPULSES    100  // max IR pulse pairs to sample
#define RESOLUTION     2  // time between IR measurements
 
uint16_t pulses[100][2];
uint16_t currentpulse = 0;
uint32_t irCode = 0;
SendOnlySoftwareSerial MySerial(SERIAL_PIN);
 
void setup() {
  MySerial.begin(9600);
  pinMode(IR_PIN, INPUT);
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
}
 
void loop() {
  irCode=listenForIR(); // Wait for an IR Code
  // Process the pulses to get our code
  for (byte i = 0; i < 32; i  ) {
    irCode=irCode<<1;
    if((pulses[i][0] * RESOLUTION)>0&&(pulses[i][0] * RESOLUTION)<500){
      irCode|=0;
    }else{
      irCode|=1;
    }
  }
  digitalWrite(LED_PIN, HIGH);
  switch(irCode){
      case 0xC03FDA25: MySerial.write('1');break;
      case 0xC03FE619: MySerial.write('2');break;
      case 0xC03FEC13: MySerial.write('3'); break;
      case 0xC03FCC33: MySerial.write('4'); break;
      case 0xC03FC639: MySerial.write('5'); break;
      case 0xC03FDEA1: MySerial.write('6'); break;
      case 0xC03FC43B: MySerial.write('7'); break;
      case 0xC03FCE31: MySerial.write('8'); break;
      case 0xC03FD6A9: MySerial.write('9'); break;
      case 0xC03FD2AD: MySerial.write('0'); break;

      case 0xC03FD0AF: MySerial.write('Z'); break;
      case 0xC03FD4AB: MySerial.write('T'); break;

      case 0xC03FC8B7: MySerial.write('L'); break;
      case 0xC03FD8A7: MySerial.write('U'); break;
      case 0xC03FF08F: MySerial.write('R'); break;
      case 0xC03FEA15: MySerial.write('D'); break;

      case 0xC03FC0BF: MySerial.write('P'); break;
  }
  delay(200);  
  digitalWrite(LED_PIN, LOW);
} // end loop
 
 
uint16_t listenForIR() {  // IR receive code
  currentpulse = 0;
  while (1) {
   unsigned int highpulse, lowpulse;  // temporary storage timing
   highpulse = lowpulse = 0; // start out with no pulse length 
   while (IR_CODE_PIN & _BV(IR_PIN)) { // got a high pulse
      highpulse  ; 
      delayMicroseconds(RESOLUTION);
      if (((highpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
        return currentpulse; 
      }
   }
   pulses[currentpulse][0] = highpulse;
   while (! (IR_CODE_PIN & _BV(IR_PIN))) { // got a low pulse
      lowpulse  ; 
      delayMicroseconds(RESOLUTION);
      if (((lowpulse >= MAXPULSE) && (currentpulse != 0))|| currentpulse == NUMPULSES) {
        return currentpulse; 
      }
   }
   pulses[currentpulse][1] = lowpulse;
   currentpulse  ;
  }
}

Далее можно было соединить PB0 ATtiny c одним из выводов ATmega328, которая будет реагировать на соответствующие символы. И переходить к формированию программы для основного контроллера. Проверку работоспособности связки контроллеров делал следующим кодом:


#include <SoftwareSerial.h>
SoftwareSerial mySerial(18, 19); // RX, TX

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() { // run over and over
  if (mySerial.available()) {
      char c = mySerial.read();
      digitalWrite(2, HIGH);
      delay(200);
      digitalWrite(2, LOW);
      if(c=='1') Serial.println("get 1");
      if(c=='2') Serial.println("get 2");
      if(c=='3') Serial.println("get 3");
      if(c=='4') Serial.println("get 4");
       while(mySerial.available()) mySerial.read();
  }
}

Итоговая программа, обеспечивающая работу конечного устройства (предупреждаю, что код очень сырой и полагаться на него нельзя, это большей частью для демонстрации возможностей платы, но никак не готовый код). Напомню, что мне пришлось переписать код формирования эффектов Adafruit_NeoPixel чтобы удалить из кода все искусственные задержки (delay) и привести программу к пошаговому контролю времени, для возможности оперативного управления эффектами. В данном случае, добавлена обработка инструкций ик-пульта. При этом, bluetooth переехал с программного сериал-порта на аппаратный.

Тестирование проводилось на коротком отрезке ленты, оставшейся с прошлых проектов:
Bluetooth матрица на адресных светодиодах | AlexGyver
Тесты показали адекватное поведение разработанного устройства и его стабильную работу в течении суток. Мелкая дочка тоже принимала участие в тестировании устройства. И даже оставила свой след зубов (знак качества) на экспериментальном пульте:
Bluetooth матрица на адресных светодиодах | AlexGyver
Данный след не влияет на качество работы пульта, благо у меня их несколько с распродажи 11.11.

Печатная плата делалась под тот же корпус, что и первая версия, поэтому осталось все это собрать в корпус. Планируется установить ленту на 2-м этаже дачного домика, обеспечив доступ детям к пульту.

В целом, могу сказать, что лента продаваемая данным продавцом, вполне качественная — нареканий в ее работе за прошедшие 3 месяца не было, могу смело рекомендовать к покупке.

На этом заканчиваю. Спасибо тем кто дочитал до конца, надеюсь кому-то информация окажется полезной! Если будет интересно, расскажу еще про новые «дачные разработки».

Видео работы ленты (из прошлого обзора, так как алгоритм не менялся):

Светодиодная лента ws2812b характеристики

  • Размер светодиода — 5 х 5 мм
  • Частота ШИМ — 400 Гц
  • Скорость передачи данных — 800 кГц
  • Размер данных — 24 бита на светодиод
  • Напряжение питания — 5 Вольт
  • Потребление при нулевой яркости — 1 мА на светодиод
  • Потребление при максимальной яркости — 60 мА на светодиод
  • Цветность: RGB, 256 оттенков на канал, 16 миллионов цветов
Характеристики WS2812B
Характеристики WS2812B адресной светодиодной ленты

Адресная светодиодная лента ws2812b — это вершина эволюции лент. Каждый светодиод в ленте состоит из обычного RGB светодиода и контроллера с тремя транзисторными выходами. Благодаря этому есть возможность управлять цветом любого светодиода и создавать потрясающие цветовые и световые эффекты. Именно поэтому устройство пользуется популярностью, несмотря на высокую стоимость.

Скетч. тестирование адресной ленты ws2812

#include <Adafruit_NeoPixel.h> // подключаем библиотеку#define PIN  10              // указываем пин для подключения ленты#define NUMPIXELS 3  // указываем количество светодиодов в ленте// создаем объект strip с нужными характеристикамиAdafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB   NEO_KHZ800);

voidsetup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

voidloop() {
   strip.setPixelColor(0, strip.Color(255, 0, 0));   // включаем красный цвет на 1 светодиоде
   strip.show();   // отправляем сигнал на лентуdelay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(1, strip.Color(0, 0, 255));   // включаем синий цвет на 2 светодиоде
   strip.show();   // отправляем сигнал на лентуdelay(500);
   strip.clear();   // выключаем все светодиоды

   strip.setPixelColor(2, strip.Color(255, 255, 255));   // включаем белый цвет на 3 светодиоде
   strip.show();   // отправляем сигнал на лентуdelay(500);
   strip.clear();   // выключаем все светодиоды

}

Скетч. управление адресной лентой ардуино

#include <Adafruit_NeoPixel.h> // подключаем библиотеку#define PIN  10              // указываем пин для подключения ленты#define NUMPIXELS 3  // указываем количество светодиодов в ленте// создаем объект strip с нужными характеристикамиAdafruit_NeoPixel strip (NUMPIXELS, PIN, NEO_GRB   NEO_KHZ800);

voidsetup() {
   strip.begin();                     // инициализируем ленту
   strip.setBrightness(50);  // указываем яркость светодиодов (максимум 255)
}

voidloop() {

   // поочередно включаем красный цветfor (int i = -1; i < NUMPIXELS; i  ) {
      strip.setPixelColor(i, strip.Color(255, 0, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем зеленый цветfor (int i = -1; i < NUMPIXELS; i  ) {
      strip.setPixelColor(i, strip.Color(0, 255, 0));
      strip.show();
      delay(100);
   }

   // поочередно включаем синий цветfor (int i = -1; i < NUMPIXELS; i  ) {
      strip.setPixelColor(i, strip.Color(0, 0, 255));
      strip.show();
      delay(100);
   }

}

Создание графического интерфейса пользователя (gui)

Откройте проект в приложении Blynk, в нем нажмите на значок “ ” – после этого вы получите доступ к виджетам (графическим элементам), которые вы можете использовать в своем проекте. В нашем случае нам будет нужен RGB Color Picker который назван как “zeRGBa”, как показано на следующем рисунке.

Создание нового проекта

Послу успешной установки и регистрации в приложении Blynk вы увидите на его главной странице кнопку “New Project” (новый проект). Нажмите ее и у вас в приложении откроется новое окно, в котором необходимо будет ввести такие параметры проекта как имя, плату и тип соединения. Для нашего проекта выберите плату “Arduino UNO”, тип соединения “USB” и нажмите на кнопку “Create” (создать).

После успешного создания проекта вам на электронную почту (с которой вы регистрировались в приложении) придет ваш идентификатор подлинности (Authenticate ID). Сохраните его – он нам пригодится в дальнейшем.

Тестирование работы проекта

Откройте приложение Blynk, в нем откройте GUI (графический интерфейс пользователя) и нажмите на кнопку Play. После этого вы можете выбрать любой цвет, который вы хотите отобразить на светодиодной матрице. Как показано в нашем случае, мы выбрали красный и синий цвет.

Аналогичным образом вы можете попробовать отображать и другие цвета.

Установка виджета

После перетаскивания (dragging) виджета в наш проект нам необходимо установить его параметры, которые будет необходимы для передачи значений цветов плате Arduino UNO.

 

Нажмите на ZeRGBa, после чего откроется экран с его настройками (ZeRGBa setting). Установите в нем Output option (настройка выхода) в положение “Merge”, а контакт “V2” установите в положение, показанное на следующем рисунке:

Оцените статью
Радиокоптер.ру
Добавить комментарий