Управление светодиодом через usb

Обновлено: 05.07.2024

В этом эксперименте мы отправляем устройству команды, как ему светить.

Список деталей для эксперимента

Принципиальная схема

Схема на макетке

Скетч

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

В этой программе мы создаем объект класса String . Это встроенный класс, предназначенный для работы со строками, т.е. с текстом.

Не путайте его с типом данных string , который является просто массивом символов. String же позволяет использовать ряд методов для удобной работы со строками.

Мы знакомимся с новым видом циклов: цикл с условием while . В отличие от цикла со счетчиком for , цикл while(expression) выполняется до тех пор, пока логическое выражение expression истинно.

Метод available() объекта Serial возвращает количество байт, полученных через последовательный порт.

В данном эксперименте цикл while работает до тех пор, пока available() возвращает ненулевое значение, любое из которых приводится к true .

В этом примере символ мы получаем методом Serial.read() , который возвращает первый байт, пришедший на последовательный порт, или -1, если ничего не пришло.

Обратите внимание, что в if мы сравниваем не пришедший символ с 0 и 9, но их коды. Если пришел какой-то символ, который не является цифрой, мы не будем его добавлять к нашей строке message .

Объекты типа String позволяют производить конкатенацию, т.е. объединение строк. Это можно сделать так: message = message + incomingChar , но можно записать в сокращенной форме: message += incomingChar .

В этой программе мы дополняем if конструкцией else if . Это еще один условный оператор, который проверяется только в случае ложности выражения, данного первому оператору. Несколько else if могут следовать друг за другом, при этом каждое следующее условие будет проверяться только в случае невыполнения всех предыдущих. Если в конце разместить else , он выполнится только если ни одно из условий не выполнено.

Напомним, что последовательностью \n кодируется символ переноса строки. Если он был передан устройству, мы передаем полученные ранее символы как параметр для analogWrite() , которая включает светодиод.

Мы используем один из методов String , toInt() , который заставляет считать строку не набором цифр, но числом. Он возвращает значение типа long , при этом, если строка начинается с символа, не являющегося цифрой, будет возвращен 0. Если после цифр, идущих в начале строки, будут символы не-цифры, на них конверсия остновится.

Обратите внимание на выпадающее меню внизу монитора порта: чтобы наше устройство получало символ перевода строки, там должно быть выбрано «Новая строка (NL)»

Пустая строка обозначается так: "" . Опустошив ее, мы готовы собирать новую последовательность символов.

Вопросы для проверки себя

Какие объекты позволяют легко манипулировать текстовыми данными?

Что возвращают методы Serial.available() и Serial.read() ?

Каким образом можно организовать более сложное ветвление, чем if … else ?

Как можно привести текстовую строку, содержащую цифры, к числовому типу?

Задания для самостоятельного решения

Переделайте программу так, чтобы устройство распознавало текстовые команды, например, «on» и «off», и соответственно включало и выключало светодиод.

Вам может пригодиться один из методов String : toLowerCase(yourString) или toUpperCase(yourString) , которые возвращают переданную строку yourString , приведенную к нижнему или верхнему регистру соответственно.

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Noncommercial-Share Alike 4.0 International

image


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


Для подключения к USB используется AVR микроконтроллер AtTiny45 компании Atmel. Этот микроконтроллер не имеет аппаратного USB интерфейса, поэтому он реализуется программно, с помощью библиотеки V-USB от Objective Development. Также этот восьминогий таракан имеет встроенный ФАПЧ (PLL), что позволяет избавиться от кварца и обвязки, и освободить итак не многочисленные ноги, а самое главное настроить на нужную для USB тактовую частоту

16,5 МГц. Так же, ФАПЧ позволяет подстраивать эту частоту при необходимости, используя те же такты USB. Что, собственно, и делается при первом подключении устройства. После чего значение подстройки сохраняется в памяти EEPROM, и при следующем подключении выгружается из нее. Далее идет программный USB-стек, так что ресурсов у микроконтроллера остается не много. Tiny45 легко прошивается любым внутрисхемным программатором, я использовал USBasp.

image

void led_set( int isOn ) .
>
int led_get( void ) .
>
* This source code was highlighted with Source Code Highlighter .

class call_led [DllImport( "led.dll" )]
private static extern int led_get();
[DllImport( "led.dll" )]
private static extern void led_set( int isOn );

public static void Main()
led_set(0);
Console .WriteLine( "led is " , led_get());
>
>
* This source code was highlighted with Source Code Highlighter .

image
image
image

Данное устройство USB-LED-Fader позволяет управлять несколькими светодиодами (LED) через USB. Я использовал его для отображения статуса моего интернет-соединения, видео-рекордера (VDR) и предупреждения о малом значении свободного дискового пространства. Вы можете использовать его для своих целей и программ.

USB LED Fader

Управление LED происходит с использованием ШИМ (широтно-импульсной модуляцией). Если кратко то ШИМ позволяет не просто включать-выключать LED, а дает возможность устанавливать любую яркость LED. В устройстве предусмотрено некоторое количество "волновых форм" (т.е. различных эффектов для LED). Каждый LED может отображать несколько разновидностей форм синусоиды или пилы, без какого-либо взаимодействия с внешним устройством (хостом или компьютером).

Каждый LED может управляться отдельно и отображать свой световой эффект.

Вы можете назначить три разных режима световых форм для каждого LED. Первые два (0 и 1) - неизменяемые. Они периодически меняются, пока не будет назначено что-нибудь другое. Третий режим (2) отображается один раз; впоследствии устройство возвращается к периодическому отображению первых двух режимов.

Режим описывается тремя параметрами: световой эффект, продолжительность и количество повторений перед его переходом в следующий режим.

В данной версии USB LED Fader'а предусмотрено управление 4 -мя LED. Количество LED можно легко изменить от одного до восьми. Я не тестировал устройство с более чем 4-мя LED, но могу предположить, что могут возникнуть проблемы с нагрузкой на USB-порт.

Для сборки и работы устройства требуются три вещи: схема, прошивка для микроконтроллера ATmega8 и Linux-клиент командной строки.

Данный проект базируется на примере PowerSwitch от Objective Development. От Objective Development используется только USB-драйвер для микроконтроллеров Atmel AVR. В USB-драйвере от Objective Development реализована поддержка стандарта USB 1.1 (низкая скорость обмена данными) для использования с недорогими микроконтроллерами Atmel AVR, такими как ATtiny2313 и другими. Особенности и ограничения смотрите в файле "firmware/usbdrv/usbdrv.h".

Схема USB LED Fader

Установка ПО описана в документации к устройству (см. ниже файл).

Подсоедините устройство к USB порту компьютера. Все LED должны моргнуть, это означает, что устройство прошло инициализацию.

Используйте командную строку для ввода команд:

usb-led-fader status
usb-led-fader set <ledId> <waveId> <waveformId> <periodDuration> <repetitionCount>
usb-led-fader clear <ledId>
usb-led-fader reset
usb-led-fader show <waveformId>
usb-led-fader test

Команда set позволяет устанавливать требуемые параметры.

Параметры:
ledId: ID светодиода (0-n, зависит от количества LED, используемых в схеме).
waveId: ID режима (0-1: неизменяемые световые формы, 2: отмена режима).
waveformId: ID световой формы (0-31: яркость, 32-37: шаблоны). Для начала отображения шаблонов используется команда show
periodDuration: Время в сек/10 для одного повтора световой формы. Значение 0 используется для сброса.
repetitionCount: Количество повторов, перед переходом к следующему режиму. Значение 0 используется для бесконечного цикла повторения.

Примеры использования:

Получить статус всех LED. Команда:
usb-led-fader status
Вернет подобный результат:

Здесь, параметры curvalue, curpos, nextupd и updtime служат для отладки. Они не представляют какого-либо интереса для пользователя.

Пример: устанавливаем яркость для первого LED.

Устанавливаем яркость для первого светодиода

Команда: usb-led-fader set 0 0 15 10 1
Итак, LED под номер 0, режим 0, шаблон номер 15. В данном режиме LED будет оставаться 1 секунду, произойдет одно повторение, после чего устройство перейдет к следующему режиму. Но т.к. следующий режим мы не описали, то LED будет постоянно отсаваться в данном режиме.

Далее, установим второй режим для LED, который будет немного ярче:
Команда: usb-led-fader set 0 1 25 10 1
Это режим 1, для LED под номером 0. Шаблон 25 - это константа уровня яркости. После установки второго режима, будет происходить чередование между режимом 0 и 1, поскольку длительность и число повторений одинаковы. Различается только яркость свечения.

Устанавливаем третий режим для LED.
Команда: usb-led-fader set 0 2 36 20 5
Шаблон 35 - синусоидоподобный сигнал, начинается плавный fade-эффект.Один период fade-эффекта составляет 2 секунды, повторяется 5 раз. После отработки данного режима, устройство вернется к чередованию между режимом 0 и 1, а этот режим сбросится.

Установка нескольких режимов одной командой: usb-led-fader set 0 0 15 10 1 0 1 25 10 1 0 2 36 20 5
Первый LED сначала будет работать по шаблону синусоиды 5 раз, а затем перейдет к чередованию между первым и вторым режимом с двумя уровнями яркости, период - 1 сек.

Очистка первого LED.
Команда: usb-led-fader clear 0
Очищает все 3 режима для первого LED.

Сброс устройства.
Команда: usb-led-fader reset
Все LED один раз моргнут, информируя, что устройство сброшено и готово к работе.

Отображаем шаблон на экране.
Команда: usb-led-fader show 36
Данная команда отображает форму волны:

Помните, что данные отображаются согласно длительности шаблона. Если вы захотите отобразить яркость (формы 0-31), длительность будет 1, т.е. отобразится только одна строка.

Тестирование устройства.
Команда: usb-led-fader test
Данная команда посылает множество пакетов к устройству. Устройство возвращает их, а клиент смотрит различия между отосланными и принятыми данными.


Использование светодиодов в моддинге очень популярно, в связи с невысокой сложностью их подключения и неплохим получаемым визуальным эффектом от их применения. Именно по этой причине к вашему вниманию предлагается практический гайд по подключению светодиодов в компьютере. Данный гайд ориентирован на моддеров, которые только начинают применять светодиоды в своих моддинг-проектах и в нем я расскажу о трех самых популярных способах подключения питания к светодиодам, в зависимости от разъема: от 4-pin molex, от 3-pin или от USB.

Необходимое: Для выполнения этого гвайда по подключению светодиодов нам понадобятся следующие вещи:

  • Светодиоды. Тут все понятно, собственно их мы и будем подключать.)
  • Резисторы. Необходимы для снижения напряжения и силы тока от источника питания до величин, необходимых подключаемому светодиоду.
  • Разъемы. Ими светодиоды будут подключатся к источникам питания в компьютере.
  • Паяльник со всем необходимым для пайки.
  • Термоусадочная трубка. Понадобится для обеспечения аккуратного внешнего вида и безопасности спаянного соединения.
  • Мультиметр (тестер). Для проверки напряжений и целостности соединений.
  • Кусачки и/или лезвие. Для снятия изоляции и работы с проводами.

Как видно из списка приведенного выше, никаких сложных, дорогих или хитрых приспособлений нам для выполнения данного гвайда не понадобится. Да и сама операция по подключению светодиодов тоже не отличается особой сложностью. Перейдет к детальному описанию различных способов подключения светодиодов в компьютере. Подключение светодиода к разъему 4-pin molex4-pin molex является одним из самых распространенных разъемов питания в компьютере. Именно при помощи molex-разъемов подключалось раньше (да и сейчас в старых моделях) питание к жестким дискам и оптическим приводам. Также при помощи molex-разъемов подключается часть вентиляторов и большинство компьютерных аксессуаров, например панелей управления, ламп подсветки и тому подобных устройств. Как видно из его названия, 4-pin molex содержит в себе четыре контакта: +12 В (обычно это желтый провод), +5 В (обычно это красный провод), а так же два контакт земли (черные провода). Соответственно, при подключении светодиода к 4-pin molex у вас есть возможность выбрать куда именно подключать светодиоды, а именно к 12 или 5 вольтам.


В нашем случае я буду подключать четырехкристальный 10мм светодиод зеленого свечения, который работает от 3.2 вольт и потребляет 80 мА к источнику 12 вольт. Понадобится нам резистор с сопротивлением в 120 Ом. Сам разъем 4-pin molex можно либо купить отдельно, либо использовать разъем взятый из чего-то старого/ненужного устройства, например удлинителя, разветвителя или переходника.

Подключение светодиода к разъему 3-pin

Подключение светодиода к разъему USB

Читайте также: