Простой скетч FastLED, который вылетает, когда светодиодная лента длинная, но не когда она короче

led led-strip

У меня есть довольно простой скетч, который вылетает, причем сильно (консоль Platform.io говорит «Отключено (читай: ошибка: [Errno 6] Устройство не настроено)»), и мне нужно выключить/включить питание Arduino, чтобы продолжить .

Скетч не аварийно завершает работу и, кажется, работает нормально, когда я использую меньшее количество светодиодов, но аварийно завершает работу через несколько секунд, когда я использую большее количество светодиодов. Похоже на странную аппаратную проблему, потому что скетч выглядит просто! Я добавил много Serial.print(ln), чтобы убедиться, что он делает то, что я думаю, и он делает... до сбоя!

Это будет работать вечно, но если я изменю cNumLeds с 60 на 160, произойдет сбой (а на моей светодиодной ленте 300 светодиодов, и я использую их все в других скетчах).

#include <Arduino.h>
#include <FastLED.h>

const uint16_t cDataPin = 15;
const uint16_t cNumLeds = 60;

CRGB leds[cNumLeds];

void setup() {
   Serial.begin(9600);
   FastLED.addLeds<WS2812B, cDataPin, GRB>(leds, cNumLeds).setCorrection(TypicalLEDStrip).setDither(true);
   FastLED.setBrightness(127);
   FastLED.clear();
   FastLED.show();
   FastLED.delay(100);
}

uint16_t offset = 0;
CRGB colors[] = {CRGB::White, CRGB::Red, CRGB::White, CRGB::Green, CRGB::White, CRGB::Black};
byte numColors = sizeof(colors)/sizeof(colors[0]);
uint32_t cycle = 75;

void loop() {
  EVERY_N_MILLISECONDS(cycle) {
    for (uint16_t i = 0; i < cNumLeds; i++) {
        leds[i] = colors[(i + offset) % numColors];
    }     
    offset = (1 + offset) % cNumLeds;  
  }
  FastLED.show();
}

Любые советы по отладке приветствуются! (И заранее извиняюсь за мой стиль C++, я убежденный программист на C и стараюсь не навредить C++)

, 👍0

Обсуждение

Как питаете светодиодную ленту? Похоже, либо ваш источник питания недостаточно силен, либо вы обеспечиваете питание через Arduino., @chrisl

Да, @chrisl, виновен в обвинении, питание от контакта 5V Arduino. Думаю, для этого и нужны лишние красный и черный провода на полоске :) Пора научиться паять, наверное., @PaulM

Но я запускал другие скетчи, гораздо более сложные, на всей 300-светодиодной ленте, поэтому не уверен, что понимаю, почему у этого скетча проблемы с питанием., @PaulM


1 ответ


1

питание от контакта 5V Arduino.

Не следует этого делать. При этом можно спалить стабилизатор напряжения или защитный диод (в зависимости от того, как вы подаете питание).

Когда вы потребляете больше тока от источника питания, чем он может обеспечить, сначала падает напряжение. Если напряжение упадет достаточно, Arduino отключится и перезагрузится, как только напряжение снова поднимется. Если вы продолжите потреблять столько энергии, вы можете испортить части источника питания (в данном случае Arduino). Иногда это обратимо, когда источник питания имеет какое-то аварийное отключение (например, регулятор напряжения подлинного Arduino Uno). В противном случае он будет уничтожен.

При управлении энергоемкими устройствами, такими как светодиодные ленты, вы должны подключать их линии питания напрямую к вашему источнику питания (при условии, что он имеет правильное напряжение). Таким образом, ток не должен проходить через Arduino. Также вам нужен блок питания, который может справиться с вашим пиковым током. Ленты RGB с драйверами WS2812 могут потреблять до 60 мА на светодиод (на белом при полной яркости). Таким образом, для полосы со 160 из них ток будет 60 мА * 160 = 9,6 А. Добавьте немного запаса мощности, и вам понадобится блок питания, который может обеспечить ток не менее 10 А.

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

Мы не видели ваши предыдущие наброски. Но скорее всего у вас был меньший ток, потому что вы не зажгли все светодиоды сразу и/или только на меньшей яркости. Потребляемый ток зависит от того, насколько ярким вы установите каждый светодиод (точнее, каждый цвет каждого светодиода, поскольку один светодиод RGB на самом деле представляет собой 3 светодиода красного, зеленого и синего цветов в одном корпусе). Таким образом, ваш ток был достаточно низким, чтобы не отключить питание от Arduino.

,

Ценю это @chrisl .... не то чтобы у меня были причины сомневаться в тебе, но я повторно запустил свой скетч с смехотворно низкой яркостью, и он работал вечно., @PaulM

@PaulM Ваше наблюдение подтверждает ответ., @the busybee