- PVSM.RU - https://www.pvsm.ru -
Итак, дорогие друзья, начну слегка из далека. Решил заказать с eBay из Америки не дорого отладочную платку STMF4-DISCOVERY, долго ждал, хотел побаловаться с контроллером F4 серии, но через месяц на почте меня ждал облом. Вместо вкусной платки пришла натуральная хрень — RGB полоса на базе контроллера WS2801. Полоса водонепроницаемая с коннекторами и адресуемыми светодиодами по отдельности, но обо всем по порядку!
Первым делом надо попробовать её в деле! Приступим!
Какие же варианты применения можно найти это дурной штуке? Не много посмотрев интернет, были определены следующие варианты использования полосы:
Таким образом, для нашего простого тестового проекта выберем вариант, который будет отлично отрабатываться на столе и потратим на решение задачи не сильно много времени и средств.
Итак, целью будет: создание полосы-информера, отображающей загрузку процессора либо любое другое значение.
Для решения поставленной задачи нам понадобится:
В качестве контроллера нашел у себя в столе Arduino Nano, которую давно не доходили руки использовать под что-нибудь ценное. Помимо платки, там же обнаружилась макетка и с воткнутыми проводниками, а значит можно творить.
Судя по описанию продавца центы, она построена на контроллерах WS2801, управляемых по SPI или I2C, на выбор разработчика. Интересной особенностью данной ленты являются RGB диоды и отдельно управляемые микросхемы драйверы. Управляются они последовательность посылок, по количеству сегментов полосы. Временная диаграмма управления приставлена ниже:
Как видно из рисунка, одна микросхема ожидает три байта яркости каждого канала. Если данные передаются без пауз, то каждая микросхема после захвата посылки начинает выдавать на выход последовательность для следующего приемника.
Распиновка написана на самой ленте и в описании, так что тут ничего сложного:
Подключим напрямую нашу ленту к контроллеру на макетной плате, как показано на рисунке:
В качестве итогового штриха закрепим изолентой концы ленты, чтобы получилось кольцо.
Написать свою реализацию протокола управления для полосы не сложно, но так как у нас в целях было потратить не много времени, обратимся к готовой библиотеке управления различными полосками FastLED [1], которая портирована на множество контроллеров и и поддерживает различные драйверы светодиодов в лентах.
Аппаратная часть должна соответствовать следующим требованиям:
Первое требование очень важное, потому что красивые эффекты не должны блокировать программу, т.е. сразу после получения данных из порта команда должна быть обработана и поведение должно измениться. Таким образом использование функции delay на заданное время исключено, она будет использоваться только для выставления задержки в 1 мс после того как вся лента была заполнена
Протокол управления лентой включает в себя следующие команды:
SET MODE %dn | Установить режим работы |
SET COLOR %dn | Установить основной цвет |
SET VALUE %dn | Установить значение от 0 до 1000 |
В качестве ответом возвращаются Эхо-строки команд начинающиеся с символов ">> ", например:
>> SET VALUE 673
Объект ленты настраивается в функции setup, приведу ее ниже:
void setup() {
Serial.begin(115200);
// Тип контроллера, номер пина данных, номер пина синхр., тип развертки, массив значений и его длина
FastLED.addLeds<WS2801, DATA_PIN, CLOCK_PIN, RGB>(leds, NUM_LEDS);
}
Для примера приведу реализацию неблокирующей функции отрисовки змейки:
void runner(CRGB color, int period, uint8_t s) {
static int pos = 0; /* Текущее положение ползунка */
static long last = millis();
if(millis() - last > period) { // Реализация временной задержки
last = millis();
clear_led();
if(pos < NUM_LEDS - s) { // Реализация
for(uint8_t j = 0; j < s; ++j) {
leds[pos + j] = color;
}
FastLED.show();
++pos;
} else {
pos = 0;
}
}
}
Режимы работы реализуем следующие:
Чтобы не долго мучиться быстро можно на клепать программу управления на C#, которая реализует протокол:
Программа реализует описанный выше протокол управления и возможность с заданным периодом отправлять значение загруженности процессора и заполненности оперативной памяти (текущая скорость сети в планах).
Итак, все это хозяйство надо проверить, для чего воспользуемся бесплатной утилитой проверки процессора Hot CPU Tester 4.3 [2], состав тестов специально урезал, чтобы видно было «живое» изменение эффектов ленты. Перечень тестов изображен на рисунке:
Результаты тестирования и процесс функционирования информера можно посмотреть на видео:
Исходный код:
LEDInformer.rar [3]
Применять данное устройство планирую либо в машине, либо для украшения внутренностей High Tower компа своего, чтобы красиво разными цветами показывать что с ним происходит!
Автор: smashrod
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/53588
Ссылки в тексте:
[1] FastLED: http://fastled.io/
[2] Hot CPU Tester 4.3: http://www.overclockers.ru/softnews/22942/Hot_CPU_Tester_4.3_-_kompleksnyj_test_stabilnosti_sistemy_a_nuzhen_li_on.html
[3] LEDInformer.rar: http://bukin.su/habr/led/LEDInformer.rar
[4] Источник: http://habrahabr.ru/post/210360/
Нажмите здесь для печати.