Controlamos o foco ou uma pitada de C # e STM32 para uma webcam

Tudo começou muito engraçado. Duas webcams do fabricante Logitech (modelo C525) foram conectadas ao meu computador. Câmeras muito boas, mas como se viu depois, com drivers de qualidade muito duvidosa. De fato, este não é apenas um problema deste fabricante. Seu utilitário de configuração substitui o sistema, mas nem suspeita que o computador possa ter mais de uma câmera deste modelo. Como resultado, quando você abre a janela de configurações para diferentes câmeras do OBS Studio, o foco sempre muda para uma. A bagunça.


Ao mesmo tempo, ele brincou muito com a captura e transmissão de câmeras no VLC. Com a interface dele, aprendi sobre o DirectShow . Decidi me desenvolver em C #, apesar da falta de experiência (não consideraremos laboratórios na universidade). Literalmente à noite, esbocei o TrackBars para todas as câmeras encontradas e, felizmente, não havia limite. Joguei o utilitário em um par de blogueiros de vídeo conhecidos para uso em fluxos.



Em seguida, eles receberam uma solicitação para expandir a funcionalidade. Adicione ajuste de balanço de branco. Por que não deixar o usuário escolher os parâmetros necessários? Para cada câmera separadamente. A partir deste momento, apareceram guias. O primeiro é geral, com parâmetros selecionados e uma guia para cada webcam detectada.



É verdade que nem todos os parâmetros são suportados pela câmera. Apenas 3 estados: não disponível, somente ajuste manual, ajuste manual e automático. Também é automático, mas não me lembro de obtê-lo em nenhum dispositivo. Consequentemente, algumas linhas estão desativadas. Para câmeras de laptop, por exemplo, metade da lista associada às configurações de captura não está disponível. Mas a correção já está lá.


Durante a implementação da "interface com guias", o pensamento veio à minha mente: anexar um codificador. Nas câmeras SLR, girar o anel de foco é muito conveniente. Mas eles não entregaram para webcams. Portanto, os bebês STM32F070 foram conectados ao projeto. Estes são os menores chips com suporte para USB 2.0. Já existe um bom artigo no Habr sobre o Custom HID , para que você possa pular a descrição detalhada deste item. O layout do dispositivo é extremamente simples. Nenhuma tubulação é necessária para este microcontrolador. Só que agora ele não sabe como iniciar o gerador embutido no PLL, portanto é necessário quartzo. Dos elementos de controle, além do codificador, existem 4 botões. Um deles está embutido no codificador. Estes são agora muito comuns. Sobre a nomeação de cada um será um pouco mais tarde.



Para depurar o software, duas instâncias do dispositivo HID foram soldadas. Mas eles são montados quase em uma tábua de pão. Estes são realmente lenços para o quadro de anúncios II. Em vão, ao conectá-los, não adicionei imediatamente uma porta USB e um estabilizador linear. Pareceria menos fazenda coletiva (não). No dispositivo acabado, está planejado colocar o cachecol no suporte da câmera em um tripé. Claro, impresso em uma impressora 3D. Para que apenas um fio leve à câmera, você também pode colocar um hub USB no mesmo local. Por exemplo, FE1.1s não é muito maior que STM32. Mas honestos 480 megabits. Em geral, a implementação do ferro ainda é uma questão em aberto.


Aqueles que desejam repetir podem baixar a fonte do repositório . O custo de um pedaço de ferro pelos componentes é condicionalmente de 100 rublos, dos quais 55 o microcontrolador "come". No meu caso, o quartzo custa 20 megahertz, mas é "o que estava nas caixas". Mude a denominação, mas reconfigure o sistema de relógio para que o módulo USB seja adequado a tudo.



Agora sobre a nomeação de botões de hardware. O codificador embutido retorna o parâmetro para o modo automático, se possível. A rotação se traduz em manual. Como o usuário pode ajustar vários parâmetros, é necessário alternar entre eles. O botão S1 é responsável por percorrer os parâmetros e, em S2 e S3, você pode atribuir parâmetros específicos para não se distrair com a janela do programa, verificando o parâmetro selecionado.


A indicação é usada para identificar dispositivos. Na guia da câmera, você pode vincular o dispositivo HID a uma câmera específica. O LED acende quando selecionado na lista suspensa. O diagrama fornece um LED com dois cristais em uma caixa, mas todos os seus recursos não são utilizados. Partiu para o futuro.


Cada dispositivo HID possui seu próprio número de série, que é transmitido via USB. É ele quem é exibido na lista. A singularidade dos números é garantida pelo identificador do próprio microcontrolador. Esta é a data de produção e seu lugar no prato. Um método muito engraçado de formação. Embora não o número de série esteja armazenado no arquivo INI, mas o caminho para o dispositivo (contém VID, PID e GUID). Todas as configurações são legíveis, para que o arquivo possa ser editado com o bloco de notas. Mas porque


A lâmina da câmera é uma coisa desagradável. OBS Studio, por exemplo, deixa o último quadro. Às vezes você não percebe imediatamente um colapso. Então, um aviso de capacete. Em geral, o processamento de conectar novos e reconectar dispositivos existentes foi a tarefa mais difícil. As webcams e a HID. Basicamente o primeiro. Afetado pela falta de experiência em programação em C #. Seria necessário ler algum tipo de livro ... Quantas transmissões passaram enquanto ainda funcionava ... O processo foi transmitido no YouTube, onde os espectadores eram periodicamente solicitados tanto pelo código quanto pela funcionalidade do aplicativo. É muito conveniente Mente coletiva.


Então, por causa dos drivers oblíquos, esses ofícios aparecem. É claro que, com o tempo, ele será atualizado e depurado, para que haja um link para o repositório .

Source: https://habr.com/ru/post/pt463595/


All Articles