Arduino продолжает рушиться

У меня есть Arduino с подключенным к нему WS2812, работающий от USB на моем компьютере, и я пытаюсь запустить следующий код:

#include <FastLED.h>

#define NUM_LEDS 144
#define DATA_PIN 6
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.show();
}

void loop() {
  for(int dot = 0; dot < NUM_LEDS; dot++) { 
    fill_solid(leds, NUM_LEDS, CRGB::Red);
    leds[dot] = CRGB::Black;
    leds[dot] = CRGB::Blue;
    FastLED.show();
    leds[dot] = CRGB::Red;
    delay(30);
  }
}

void setAll() {

  FastLED.show();
}

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

По какой-то причине он получает X количество светодиодов, а затем выходит из строя. Под сбоями я подразумеваю, что Arduino отключается от компьютера, но Arduino остается включенным, а светодиодная лента все еще включена.

Есть какие-нибудь идеи? Это настоящий Uno, и я могу запускать любой из примеров FastLED или NeoPixel часами подряд без проблем

, 👍0

Обсуждение

Вы проверили объем памяти?, @Mikael Patel

Я не уверен на 100%, как мне это сделать, но когда я загружаю код, он говорит, что он занимает X байт, что, если я помню, составляло около 25%. Кроме того, я могу бросить на него любой из сложных примеров FastLED и запустить их без каких-либо проблем, @K20GH

Вы проверили требования к питанию? Схема?, @Mikael Patel

Светодиоды требуют 5 В и питаются от контакта ардуино 5 В. Это очень простая установка. Grd к контакту grd, данные к контакту 6 и ток до 5 В, @K20GH

X количество светодиодов время 60 мА > USB Amax., @Mikael Patel

Это дубликат [Arduino продолжает падать](http://stackoverflow.com/questions/41451525/arduino-keeps-crashing/) в переполнении стека. Там уже есть ответ (и ОП сказал в чате, что проблема была в мощности: http://chat.stackoverflow.com/transcript/message/34924703#34924703 ). Я закрываю это как дубликат., @Nick Gammon

Пожалуйста, не размещайте один и тот же вопрос на разных сайтах Stack Exchange. См. [Разрешена ли перекрестная публикация вопроса на нескольких сайтах Stack Exchange, если вопрос посвящен теме каждого сайта?](http://meta.stackexchange.com/questions/64068/)., @Nick Gammon

Я голосую за то, чтобы закрыть этот вопрос как не по теме, потому что он был перекрестно отправлен в Stack Overflow. Кроме того, это проблема питания, а не проблема Arduino., @Nick Gammon

Я собираюсь добавить к этому кое-что еще. Это может быть проблема с питанием, но это также разрешение Arduino. В FastLED есть настройка мощности, которая может быть использована для управления мощностью светодиодов. Порт USB3 выдает максимум 900 мАч, поэтому установка следующего кода настраивает команды, посылаемые светодиодам, на масштабирование таким образом, чтобы они не использовали больше параметра мощности, заданного `FastLED.setMaxPowerInVoltsAndMilliamps(5900);`, @K20GH


2 ответа


2

Из вашего вопроса следует, что питание Arduino осуществляется через USB-порт. Как вы говорите, Arduino "исчезает" с компьютера, когда вы зажигаете слишком много светодиодов.

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

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

Это иллюстрирует следующее изображение с этой веб-страницы:

(Примечание: На этом рисунке вывод 6 был выбран для связи со светодиодной лентой. Ваше конкретное приложение (программа или скетч) может использовать другой контакт. Кроме того, обратите внимание, что источник питания на рисунке подключен только для питания светодиодной ленты. Arduino все еще нуждается в питании.)

,

Вы правы только для приведенного выше примера. Я вполне могу сделать всю полосу белой при 100% яркости или запустить любой из примеров FastLED или Neopixel без проблем., @K20GH

Сейчас я пытаюсь сделать это с помощью блока питания 5 В, однако я даже не могу включить светодиоды (даже если зажечь только 1 светодиод). Светодиод 5V идет к моему блоку питания 5V+, GRD и Данные к моему arduino, @K20GH

То, что вы говорите, звучит правильно. Если вы используете 2 источника питания, убедитесь, что их заземление подключено. Я добавлю ссылку на веб-страницу LED strip how to в свой ответ, чтобы помочь., @st2000


2

См.раздел Включение неопикселей.

Каждый отдельный неопиксель потребляет до 60 миллиампер при максимальной яркости белого (красный + зеленый + синий).

Итак, у вас есть 144 светодиода.

#define NUM_LEDS 144

Это означает, что вам нужно включить 8,64 ампера для их питания!

144 * 0.060 = 8.64

(Это наихудший сценарий, но вам, вероятно, следует предусмотреть как минимум 2 усилителя).

Как указывает st2000, интерфейс USB обеспечит 500 мА (0,5 ампера). Таким образом, вам, возможно, не хватает 8 ампер. Вам нужно питать неопиксели независимо, а не через Arduino.

Запитывая их через Arduino, они сливают ток из USB-порта так сильно, что срабатывает защита от перегрузки по току.

,

См.Мой комментарий выше. Ваш ответ теоретически верен, но учитывая, что я могу осветить всю полосу белым цветом и яркостью 100% и запустить любой FastLED без проблем, это опровергнет вашу теорию о потреблении энергии, @K20GH

Я измерил свою 24-пиксельную полоску, используя ваш скетч, и это заняло 388 мА. Экстраполируя на 144 пикселя, вы получаете 144/24 * 388, что составляет 2,328 ампера. Вы просто не можете получить это от своего USB-блока питания! Я отмечаю, что вы признаете [здесь](http://chat.stackoverflow.com/transcript/message/34924703#34924703) что "Хорошо, что власть определенно была проблемой", так что, возможно, вы можете проголосовать за ответы здесь, которые так сказали, и принять один из них., @Nick Gammon