Меню

Usb регулятора громкости для пк

Usb регулятора громкости для пк

USB регулятор громкости и кнопки управления

Автор: ntv
Опубликовано 03.08.2018
Создано при помощи КотоРед.

Всё началось с того, что моей компьютерной клавиатуре пришлось подписать амнистию и отправить на покой. В творческом процессе она не выдержала нагрева феном и скукожилась. Клавиатура примечательна тем, что имеет несколько мультимедийных кнопок и встроенный регулятор громкости (крутилочка). Ребята, это очень удобная и практичная штука.

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

Цель этой статьи – показать как просто и недорого собрать аналогичный регулятор.

Потребуется:
1. Микроконтроллер PIC16F1455 = 1 шт
2. Энкодер со встроенной кнопкой схожих габаритов = 1 шт
3. USB розетка или провод с USB вилкой в ПК = 1 шт
4. Конденсаторы 0,1 мкФ = 2 шт
5. Конденсатор 0,47 мкФ = 1 шт
6. Конденсатор 10 мкФ = 1 шт
7. Резисторы 4,7 кОм = 4 шт
8. Кнопки тактовые 17 мм = 4 шт
9. Ручка приборная 45 мм = 1 шт
10. Ножка приборная SF1406 = 4 шт

* Ссылки приведены для примера, у других продавцов может быть дешевле.

В минимальной конфигурации достаточно первых пяти пунктов (работа без кнопок).

Схема и плата примитивные.

Кнопки с функциями: «стоп», «назад», «вперёд», «воспроизведение-пауза».
Встроенная в энкодер кнопка отключает-включает звук (mute).

Кнопки автоматом работают со стандартными плеерами (вероятно и с альтернативными будет работать). Что интересно — регулятор работает в программе ТВ-тюнера Behold TV, регулируя громкость и переключая каналы.

Прошиваем микроконтроллер народным PicKit2 и наслаждаемся работой.

Устройство подключается по технологии Plug and Play (включи и играй, PnP) – это технология компании Microsoft, благодаря которой возможно автоматическое определение и настройка подключенного устройства. При подключении к ПК определяется как USB HID-совместимое устройство. Драйвера не нужны. Работа проверена в XP, W7, W10 – работает.

Источник



Настольный USB регулятор громкости для компьютера с энкодером

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

Код для Ардуино нуждается в использовании библиотек Adafruit Trinket, которые можно скачать здесь (потребуется конкретно библиотека «TrinketHidCombo»). Больше информации можно найти здесь. Код для Ардуино можно скачать здесь.

Шаг 1: Необходимые детали

  • Adafruit Pro Trinket, 5V, 16MHz (удостоверьтесь, что взяли версию на 5V, а не 3.3V)
  • Датчик угла поворота (на фото крутилка со стержнем в виде буквы D, но в зависимости от кнопки, ваша крутилка может отличаться)
  • Около 60см 5жильного кабеля. Сплющите и залудите концы кабеля как показано на картинке

Пять 15саниметровых отрезков термоусадки диаметром 3,5 — 4 см

Шаг 2: Припаиваем Trinket к крутилке

У крутилки есть 5 пинов — три с одной стороны и две с другой. Два пина на одной стороне связаны с кнопкой, они замыкаются, когда стержень крутилки зажат и будут служить для отключения звука. Эти пины не имеют полярности, и не имеет значения, каким образом вы припаяете к ним провода. Три пина на другой стороне — сигнальные. Если вы повернёте крутилку стороной с тремя пинами к себе, а стержень будет указывать вверх, то левый пин будет сигналом » A», средний — землей, правый – сигналом «B». Это отражено на прикреплённой картинке.

Соедините Trinket с крутилкой следующим образом:

  • Пин #0 на Trinket к сигналу «A» на крутилке.
  • Пин #1 на Trinket к одному из пинов кнопки на крутилке.
  • Пин #2 на Trinket к сигналу «B» на крутилке.
  • Пин 5V на другой пин кнопки на крутилке.
  • Пин GND на Trinket к земле на крутилке.

Перед спайкой удостоверьтесь, что термоусадка есть на каждом проводе и максимально полно закройте каждый провод после припайки. Основа будет заполнена свинцовой дробью и провода будут контактировать с металлом, поэтому их нужно изолировать максимально качественно.

Шаг 3: Программируем Trinket

Откройте ИДЕ Ардуино. Скачайте и установите библиотеки Adafruit Trinket, а также код для контроллера звука (ссылки в начале проекта). Установите тип платы на «Adafruit Trinket 16MHz», и Programmer на «USBtinyISP».

Читайте также:  Схема регулятора энергосберегающей лампы

Trinket должна быть в режиме Bootloader, иначе она не сможет принимать код. При первом подключении к USB порту компьютера, зелёный диод загорится, а красный будет мигать в течение 10 секунд, а затем погаснет. В этом 10секундном промежутке Trinket будет находиться в нужном режиме. Также можно ввести Trinket в режим Bootloader в любое время, просто нажав кнопку на той части Trinket, которая находится с противоположной стороны от USB порта.

Я обнаружил, что у ИДЕ Ардуино уходит больше 10 секунд на то, чтобы скомпилировать, проверить и отправить код на плату. Поэтому следите за зеленым прогрессбаром в нижней части окна ИДЕ и нажимайте кнопку на Trinket только тогда, когда он доходит до середины. В приложенном видео виден нужный нам прогрессбар. Когда он доходит примерно до середины, я нажимаю кнопку reset на Trinket.

Trinket будет принимать код только в тех случаях, когда прогрессбар дойдёт до конца, а 10 секундный промежуток еще не завершится. Если красный диод непрерывно горит перед тем, как выключится, значит код принимается. Если режим Bootloader закончился, а приём кода не начался, то вы увидите в ИДЕ Ардуино сообщение об ошибке на оранжевом фоне, просто повторите всё заново.

Шаг 4: Проверка крутилки

После того, как программирование завершено и Trinket перезагрузится, у вас появится возможность управлять громкостью звука при помощи крутилки. Вращение по часовой стрелке увеличит громкость, обратное вращение должно уменьшить громкость. Нажатие на кнопку крутилки должно выключить звук. Если вдруг окажется, что вращение вызывает обратный эффект, значит сигналы «A» и «B» на вашей крутилке имеют обратный порядок. Для решения проблемы вы можете поменять местами провода на крутилке. Либо поменяйте местами определение пинов (0 и 2) на строках 3 и 4 в коде Ардуино, а затем заново прошейте Trinket. В видео, прикреплённом выше, вы можете убедиться, что крутилка действительно управляет громкостью звука на компьютере.

Шаг 5: Печать корпуса на 3D принтере

Файл для 3D печати можно скачать здесь. Квадратный блок снаружи корпуса нужен для поддержки модели при печати. Все блоки поддержки легко отделяются, единственный сложный участок — это поддерживающий материал под мостиком, который будет служить для крепления Trinket. Для того чтобы убрать его, я использую комбинацию из отвёртки, угловых пинцетов и плоскогубцев. Важно убрать этот блок, или, по крайней мере, вытащить максимально возможную его часть, так как это пространство дальше будет заполняться свинцовой дробью.

Шаг 6: Прикручиваем электронику

Установите Trinket в корпус, закрутите шурупы. Вставьте крутилку через отверстие сверху, оденьте плоскую шайбу, гайку и крепко закрутите.

Все отверстия напечатаны на 3D принтере. Базовые размеры для винтов 2-56. Используйте два винта 2-56 x 1/4″ для крепления задней части платы. Если вы хотите пакет из 100 винтов, их можно приобрести здесь.

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

Шаг 7: Добавляем девайсу вес

Корпус заполним свинцовой дробью — это придаст веса и стабильности. У нас выйдет около 175 грамм. Это не даст нашему внешнему регулятору громкости скользить по столу, в то время как вы крутите кнопку.

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

Шаг 8: Изготовление и установка нижней крышки

Файл DXF для нижней крышки доступен на Thingiverse. Я вырезал его лазером из 3 мм акриловой пластины. Крышку можно прикрутить шурупами, либо просверлить в ней углубления и прикрутить винтами с плоской головкой. Завершите работу с крышкой наклеиванием четырёх резиновых ножек — это не даст девайсу скользить.

Читайте также:  Регулятор плавного запуска двигателя

Шаг 9: Завершающий

Насадите на штырь крутилки 38мм кнопку. Кнопку, которую использовал я, вы можете найти здесь. Помните, что моя кнопка подходит для штырька D-образной формы. Если вы будете использовать крутилку с плоским штырьком, покупайте кнопку, подходящую для вас.

Теперь вы можете подключить USB кабель и дать компьютеру около 15 секунд на то, чтобы обнаружить девайс. Теперь вы готовы управлять громкостью!

Источник

Подключение поворотного энкодера к компьютеру через USB

Давно хотел приспособить к ноуту регулятор громкости, сделанный из энкодера. Подключать этот регулятор нужно будет к USB, чтобы все было «по-взрослому» (да и по-другому никак внешнее устройство к ноуту не подключишь). Крутим энкодер влево — громкость должна уменьшаться, вправо — должна увеличиваться. Жмем вниз ручку энкодера — запускаем какую-нибудь полезную программу, или переключаемся на регулирование тембра.

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

image

Такие устройства — не редкость в совремеменных автомагнитолах и любых бытовых устройствах, пользовательский интерфейс которых обрабатывается микроконтроллером (а это почитай любая бытовая техника), и где нужна плавная регулировка или настройка. В энкодер часто встраивают и третий контакт, работающий как кнопка на ручке — когда утапливаем ручку энкодера вниз (вдоль оси), то эта кнопка срабатывает. Очень обогащает возможности интерфейса с пользователем — на одном энкодере можно построить всю систему управления электронным устройством (зато добавляется гемор программисту, но это уже мелочи). У меня как раз и был такой энкодер.

image

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

Чтобы заработал регулятор громкости, нужно решить, как минимум, три инженерные задачи:

Шаг 1. Создание низкоскоростного USB-устройства на макетке.
Шаг 2. Подключить к этому USB-устройству энкодер, добиться, чтобы микроконтроллер его отрабатывал, и передавал в компьютер информацию о вращении энкодера.
Шаг 3. Разобраться, как можно программно управлять регулятором громкости. Наверняка есть какое-нибудь мультимедиа-API, которое позволяет это делать. Программа минимум — нужно написать программку, которая будет принимать сигналы от USB-устройства и управлять громкостью. Неплохо бы, конечно, написать драйвер, но за это браться страшновато. Лучше оставим на потом.

Итак, опишу процесс создания регулятора по шагам. Подробности опускаю, иначе будет слишком скучно. Кому интересно, см. исходники [6] и документацию по ссылкам.

[Шаг 1. Создание низкоскоростного USB-устройства на макетке]

Этот шаг прошел, даже не начавшись — как-то слишком просто и банально. Тупо скачал пример проекта по ссылке [1]. Поправил файлик usbconfig.h — для понтов назвал мое устройство ENCODER DEMO, на большее фантазии не хватило. Проверил в Makefile тип проца (ATmega16), частоту кварца (16 МГц) — чтобы соответствовало моей макетке AVR-USB-MEGA16. Скомпилил проект в AVRStudio, прошил макетку, подключил к компьютеру — все завелось с полоборота, мое USB-устройство исправно заработало как виртуальный COM-порт — все в точности так, как написано в статье [1].

[Шаг 2. Подключить к USB-устройству энкодер]

Этот шаг у меня вызывал самые большие опасения, что все заработает как надо. Что энкодер подключу и смогу его читать — в этом я не сомневался. Были сомнения, что смогу его считывать качественно, когда в фоне работает ещё и обработка протокола USB — все-таки это задача для микроконтроллера не из легких (как впоследствии оказалось — волновался я совершенно напрасно).

Как обычно, начал рыться в Интернете в поисках готовых подпрограмм для чтения энкодера. Нашел очень быстро то, что нужно — именно для AVR, очень простой код на C [2], файлики encoder.c и encoder.h. Что ни говори, а open source крутая штука.

Читайте также:  Реле регулятора вентилятора ситроен с4

Приделал два индикационных светодиода — ЗЕЛЕНЫЙ и ЖЕЛТЫЙ — для обозначения направления вращения энкодера. Подключил энкодер для удобства прямо к разъему ISP, воспользовавшись тем, что сигналы MOSI, MISO и SCK — это всего лишь ножки PB5, PB6 и PB7 микроконтроллера ATmega16 (подключил туда фазы A и B, а также кнопку энкодера).

image

Поправил определения ножек, добавил код инициализации. Присоединил к проекту модуль encoder.c. Добавил в главный цикл main управление зеленым и желтым светодиодами, когда приходит инфа с энкодера. КРАСНЫЙ светодиод привязал к кнопке энкодера — когда её нажимаем, красный светодиод зажигается, отпускаем — гаснет. Скомпилировал, прошил — работает. Кручу ручку влево, и в такт щелчкам энкодера вспыхивает зеленый светодиод. Кручу ручку вправо — вспыхивает желтый светодиод. Несмотря на то, что чтение энкодера происходит методом поллинга, благодаря эффективному коду к чтению энкодеру НИКАКИХ нареканий даже при одновременной работе с библиотекой V-USB (респект, Pashgan!). Добавил вывод информации от энкодера в виртуальный COM-порт (крутим энкодер влево вывожу в консоль минусики ‘-‘, крутим вправо вывожу в консоль плюсики ‘+’). По таймеру каждые 10 мс вывожу состояние кнопки энкодера и индицирую её красным светодиодом (кнопка нажата — передаю символ ‘1’, отпущена — ‘0’). Все работает. Скукотища.

image

В заключение выкинул модули cmd.c, crc16.c, eepromutil.c, strval.c. Объем кода упал до 3 килобайт — отлично, теперь поместится и в память ATtiny45 (можно в будущем задействовать макетку AVR-USB-TINY45, она меньше по размерам и дешевле).

[Шаг 3. Разобраться, как можно программно управлять регулятором громкости]

Как обычно, прогуглил вопрос. Отсеял кучу мусора, и наконец выгреб жемчужину — [3]. Дальше дело техники. Достаю любимый детский конструктор — Visual Studio. Ни о чем не думая, визардом генерю dialog-based приложение. Бросаю на панель движок регулятора громкости, привязываю к нему переменную, добавляю обработчик положения движка. При старте приложения настраиваю движок на минимум 0 и максимум 65535 (чтобы соответствовало границам значения громкости, которым манипулируют библиотеки управления микшером). Считываю функцией mixerGetControlDetails текущее значение громкости, и ставлю движок регулятора в соответствующее положение. В обработчике положения движка все наоборот — читаю положение движка и функцией mixerSetControlDetails устанавливаю нужную громкость. Управление громкостью делаю в точности так, как написано в статье [3]. Проверил — работает.

Теперь осталось дело за малым — читать, что приходит с виртуального COM-порта (на нём у нас висит свежеиспеченное USB-устройство с энкодером). Если пришел минусик (-) то двигаем движок влево (уменьшаем громкость), плюсик (+), то двигаем движок вправо (увеличиваем громкость). Если приходят символы 0 и 1, то соответственно управляем состоянием чекбокса (просто для индикации — нажата кнопка энкодера, или нет). С COM-портом можно работать, как с обычным файлом (см. [4]). Инициализируем подключение к COM-порту как открытие файла (вызовом ::CreateFile) в блокирующем режиме. Запускаем отдельный поток, туда в бесконечный цикл добавляем чтение файла (блокирующим вызовом ::ReadFile) по одному символу, и этот символ анализируем. По тому, какой символ пришел, крутим движок слайдера в нужную сторону (громкость будет регулировать обработчик слайдера) или обновляем состояние чекбокса. Проверил — работает.

image

Вот и все, собственно. Дальше можно заниматься бесконечным (и, наверное, бесполезным) улучшательством. Сделать автоматический поиск нужного виртуального COM-порта (сейчас для упрощения имя COM-порта передается через командную строку). Переделать USB-устройство с CDC-класса на HID — это может упростить код USB-устройства, а также упростить программный поиск и открытие устройства на компьютере по VID и HID. Или написать вместо программы сервис (чтобы не надо было запускать отдельную программу). Или даже драйвер. Это очень интересно, но не умею (может, кто из хабравчан научит уму-разуму. ). Прикрутить к кнопке энкодера какое-нибудь действие. Ну и так далее до бесконечности.

Надеюсь, кому-нибудь мои изыскания пригодятся в собственных разработках. Если чего-нибудь упустил, буду рад выслушать замечания в комментариях.

Один грамотный человек собрал на микроконтроллере AVR регулятор громкости — USB HID устройство, эмулирующее стандартную мультимедийную клавиатуру (как предлагалось в комментариях). Такая клавиатура имеет возможность регулировать громкость без дополнительного программного обеспечения, всю необходимую работу выполняет драйвер операционной системы.

Источник

Adblock
detector