Управление Фокусом Или Щепотка C# И Stm32 Для Веб-Камеры

Все началось довольно забавно.

У меня к компьютеру были подключены две веб-камеры от производителя Logitech (модель C525).

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

На самом деле это проблема не только этого производителя.

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

В результате при вызове окна настроек разных камер из OBS Studio фокус всегда менялся на одну.

Беспорядок.

В свое время я много игрался с захватом и трансляцией камер в VLC. Из его интерфейса я узнал о ДиректШоу .

Я решил развиваться на C#, несмотря на отсутствие опыта (лаборатории в университете не будем считать).

Буквально вечером я набросал TrackBars для всех обнаруженных камер и счастью не было предела.

Отправил утилиту паре знакомых видеоблогеров для использования на стримах.



Управление фокусом или щепотка C# и STM32 для веб-камеры

Далее поступил запрос на расширение функционала.

Добавьте регулировку баланса белого.

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

С этого момента появились вкладки.

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



Управление фокусом или щепотка C# и STM32 для веб-камеры

Правда, не все параметры поддерживаются камерой.

Всего 3 состояния: недоступно, только ручная регулировка, ручная и автоматическая регулировка.

Еще есть только автоматический, но я не помню, чтобы он получал такое с какого-либо устройства.

Соответственно, некоторые линии отключены.

Для камер ноутбуков, например, недоступна половина списка, связанного с настройками захвата.

Но уже есть поправка.

При реализации «интерфейса вкладок» пришла в голову идея: прикрепить энкодер.

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

Но на веб-камеры это не довели.

Так к проекту присоединился маленький STM32F070. Это самые маленькие чипы с поддержкой USB 2.0. На хабе уже есть хороший статья о пользовательском HID , поэтому вы можете пропустить подробное описание этого товара.

Схема устройства предельно проста.

Для этого микроконтроллера не требуется проводка.

Только он не знает, как запустить встроенный генератор на ФАПЧ, поэтому необходим кварц.

Из элементов управления, помимо энкодера, имеются 4 кнопки.

Один из них встроен в кодер.

Сейчас они очень распространены.

О назначении каждого из них будет сказано чуть позже.



Управление фокусом или щепотка C# и STM32 для веб-камеры

Для отладки программного обеспечения два экземпляра HID-устройства были спаяны вместе.

Но они были собраны практически на макетной плате.

На самом деле это шарфы Pinboard II. Жалко, что при их подключении я сразу не добавил USB-порт и линейный стабилизатор.

Это выглядело бы менее колхозно (нет).

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

Разумеется, распечатанные на 3D-принтере.

Чтобы к камере шел только один провод, туда же можно разместить USB-хаб.

Например, FE1.1s ненамного больше STM32. Зато честные 480 Мегабит. В общем, аппаратная реализация пока остается открытым вопросом.

Желающие повторить могут скачать исходники с сайта репозиторий .

Стоимость аппаратуры по компонентам примерно 100 рублей, 55 из которых потребляет микроконтроллер.

В моем случае стоит кварц на 20 мегагерц, но это «то, что было в закромах».

Измените значение, но перенастройте систему тактирования, чтобы USB-модуль все устраивал.



Управление фокусом или щепотка C# и STM32 для веб-камеры

Теперь о назначении аппаратных кнопок.

Встроенный в энкодер параметр возвращается в автоматический режим, если это возможно.

Вращение переходит в ручное.

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

Кнопка S1 отвечает за перебор параметров, а на S2 и S3 можно назначить конкретные, чтобы не отвлекаться на окно программы во время проверки выбранного параметра.

Индикация служит для идентификации устройств.

На вкладке камеры вы можете назначить HID-устройство конкретной камере.

Светодиод загорается при выборе из раскрывающегося списка.

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

Ушёл на будущее.

Каждое HID-устройство имеет свой уникальный серийный номер, который передается через USB. Именно он отображается в списке.

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

Это дата производства и ее место на тарелке.

Очень забавный метод формирования.

Хотя в INI-файле хранится вовсе не серийный номер, а путь к устройству (содержит VID, PID и GUID).

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

Но почему.

Отваливание камеры – это вообще неприятная вещь.

OBS Studio, например, оставляет последний кадр.

Иногда даже не сразу замечаешь поломку.

Итак, уведомления на шлеме.

В общем, самой сложной задачей было подключение новых и переподключение существующих устройств.

И веб-камеры, и HID. В основном первый.

Сказалось отсутствие опыта программирования на C#.

Надо бы книгу прочитать.

Сколько стримов прошло, прежде чем оно наконец заработало.

Процесс транслировался на YouTube, где зрители периодически давали подсказки как по коду, так и по функционалу приложения.

Это очень удобно.

Коллективный разум.

Вот так появляются такие поделки из-за косых водителей.

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

Теги: #Компьютерное оборудование #stm32 #Работа с видео #веб-камера #C++ #usb hid

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.