Índice:

Controle deslizante de câmera de rastreamento de objeto com eixo de rotação. 3D impresso e construído no controlador de motor DC RoboClaw e Arduino: 5 etapas (com imagens)
Controle deslizante de câmera de rastreamento de objeto com eixo de rotação. 3D impresso e construído no controlador de motor DC RoboClaw e Arduino: 5 etapas (com imagens)

Vídeo: Controle deslizante de câmera de rastreamento de objeto com eixo de rotação. 3D impresso e construído no controlador de motor DC RoboClaw e Arduino: 5 etapas (com imagens)

Vídeo: Controle deslizante de câmera de rastreamento de objeto com eixo de rotação. 3D impresso e construído no controlador de motor DC RoboClaw e Arduino: 5 etapas (com imagens)
Vídeo: After Effects: Workshop #17 | Câmera e Objetos 3D 2024, Novembro
Anonim
Image
Image
Hardware Design + Build + Impressão 3D
Hardware Design + Build + Impressão 3D

Projetos Fusion 360 »

Este projeto tem sido um dos meus favoritos desde que consegui combinar meu interesse em fazer vídeos com DIY. Sempre olhei e quis emular aquelas tomadas cinematográficas em filmes em que uma câmera se move em uma tela enquanto faz a panorâmica para rastrear o objeto. Isso adiciona um efeito de profundidade muito interessante a um vídeo 2D. Querendo replicar isso sem gastar milhares de dólares em equipamentos de Hollywood, decidi construir um controle deslizante de câmera sozinho.

Todo o projeto é construído em partes que você pode imprimir em 3D, e o código é executado na popular placa Arduino. Todos os arquivos do projeto, como os arquivos CAD e código, estão disponíveis para download abaixo.

Arquivos de impressão CAD / 3D disponíveis aqui

Arquivo de código do Arduino disponível aqui

O projeto gira em torno de 2 motores DC com engrenagens escovadas e do controlador do motor Micro Roboclaw Básico. Este controlador de motor pode transformar motores DC escovados em um tipo superior de servo com incrível precisão posicional, toneladas de torque e 360 graus completos de rotação. Mais sobre isso mais tarde.

Antes de continuar, assista ao tutorial em vídeo com link aqui primeiro. Esse tutorial lhe dará uma visão geral de como construir este projeto e este guia de instruções irá aprofundar em como eu construí este projeto.

Materiais-

  • 2 hastes roscadas m10 de 1 metro de comprimento usadas para conectar todas as peças
  • 8x porcas M10 para montar as peças nas hastes roscadas
  • 2 barras de aço lisas de 8 mm com 95 cm de comprimento para o controle deslizante deslizar
  • 4 rolamentos lm8uu para o controle deslizante deslizar suavemente nas hastes de aço
  • 4 porcas m3 de 10 mm de comprimento para montagem do motor
  • 2 x rolamentos de skate (22 mm de diâmetro externo, 8 mm de diâmetro interno) para o eixo de rotação
  • 1 rolamento de 15 mm para o lado intermediário
  • 1 parafuso m4 de 4 cm de comprimento com contraporca m4 para montagem do rolamento intermediário na parte impressa em 3d da polia.
  • Engrenagem de 20 dentes com 4mm de diâmetro interno para motor deslizante. A polia exata não é muito importante, pois seu motor DC deve ser engrenado para torque suficiente. Apenas certifique-se de que é o mesmo tom do seu cinto
  • Correia GT2 de 2 metros de comprimento. Novamente, você pode usar qualquer correia, desde que corresponda ao passo dos dentes de sua polia.

Eletrônicos

  • 2 * Motores DC com engrenagem com codificadores (um controla o movimento lateral, enquanto o outro controla o eixo de rotação). Aqui está o que usei. Mais sobre isso na parte Eletrônica do guia
  • Controlador de motor RoboClaw DC. (Eu usei o controlador 15Amp duplo, pois me permitiu controlar os dois motores com um controlador)
  • Qualquer Arduino. Eu usei o Arduino UNO
  • Bateria / fonte de alimentação. (Eu usei uma bateria LiPo de 7,4 V 2 células)
  • Tela (para exibir o menu. Qualquer tela compatível com U8G funcionará, usei esta tela OLED de 1,3 polegadas)
  • Codificador Rotatry (para opções de navegação e configuração no menu)
  • Botão físico (para acionar o movimento do controle deslizante)

Etapa 1: Hardware Design + Build + Impressão 3D

Eletrônicos
Eletrônicos

Em seguida, vamos passar para a eletrônica. A eletrônica é onde esse projeto tem muita flexibilidade.

Vamos começar com o núcleo deste projeto - os 2 motores DC com escova.

Escolhi motores DC escovados por alguns motivos.

  1. Os motores escovados são muito mais simples de conectar e operar em comparação com os motores de passo
  2. Os motores DC escovados são muito mais leves do que os motores DC, o que é especialmente importante para o motor de eixo rotacional, uma vez que esse motor está fisicamente se movendo lateralmente com a câmera e torná-lo o mais leve possível é importante para evitar tensão excessiva no motor deslizante da câmera principal.

Eu escolhi este motor DC específico. Este motor me deu um torque extremamente alto, necessário para mover uma carga de câmera tão pesada. Além disso, a alta engrenagem significava que o pico de RPM era lento, o que significava que eu poderia filmar movimentos mais lentos, e a alta engrenagem também levava a uma maior precisão posicional, já que uma rotação de 360 graus do eixo de saída significava 341,2 contagens do codificador do motor.

Isso nos leva ao controlador de movimento RoboClaw. O controlador de motor DC dual motor Roboclaw recebe instruções simples de seu Arduino por meio de comandos de código simples e faz todo o processamento pesado e entrega de energia para fazer seu motor funcionar como pretendido. O Arduino pode enviar sinais para o Roboclaw via PWM, voltagem analógica, serial simples ou serial de pacotes. O pacote serial é o melhor caminho a seguir, pois permite que você obtenha informações do Roboclaw que são necessárias para o rastreamento posicional. Vou mergulhar mais fundo na parte de software / programação do Roboclaw na próxima etapa (programação).

Em essência, o Roboclaw pode transformar um motor DC escovado com um codificador para ser mais parecido com um servo, graças à capacidade do RoboClaw de fazer controle posicional. No entanto, ao contrário de um servo tradicional, agora seu motor DC escovado tem muito mais torque, muito mais precisão posicional devido à alta engrenagem do motor e, o mais importante, seu motor DC pode girar em 360 graus continuamente, nenhum dos quais um servo tradicional não pode fazer.

A próxima parte da eletrônica é a tela. Para minha tela, escolhi este painel OLED por causa de seu tamanho e alto contraste. Este alto contraste e incrível torna a tela muito fácil de usar sob a luz direta do sol, ao mesmo tempo em que não fornece muita luz que pode interferir em uma possível foto escura. Esta tela pode ser facilmente trocada por outra tela compatível com U8G. A lista completa de telas compatíveis está disponível aqui. Na verdade, este projeto foi intencionalmente codificado em torno da biblioteca U8G para que construtores DIY como você tivessem mais flexibilidade em suas partes

As peças eletrônicas finais para este projeto foram o codificador giratório e o botão para iniciar o movimento do controle deslizante. O codificador permite que você navegue no menu da tela e configure todos os menus do controle deslizante com apenas um dial. O codificador rotativo não tem posição "final" como um potenciômetro tradicional, e isso é especialmente útil para ajustar as coordenadas xey do rastreamento do objeto na tela. O botão de pressão é usado exclusivamente para iniciar o movimento do controle deslizante sem ter que mexer com o codificador rotativo.

Etapa 3: Programando o controle deslizante da câmera

Programando o controle deslizante da câmera
Programando o controle deslizante da câmera
Programando o controle deslizante da câmera
Programando o controle deslizante da câmera

A codificação foi de longe o desafio mais difícil deste projeto. Veja, desde o início eu queria que o controle deslizante fosse controlável a partir de uma tela. Para tornar este projeto compatível com o máximo de telas possível, tive que usar a biblioteca U8Glib para o Arduino. Esta biblioteca tem suporte para mais de 32 telas. No entanto, a biblioteca U8Glib usou um loop de imagem para desenhar o menu na tela e isso entrou em conflito com a capacidade do Arduino de coletar simultaneamente informações sobre a posição da câmera que eram necessárias para a funcionalidade de cálculo do ângulo da câmera (isso é abordado nos próximos parágrafos) O U8Glib2 tem uma alternativa para o loop de imagem usando algo chamado de opção de buffer de página inteira, mas a biblioteca consumia muita memória e dificultava o ajuste do restante do código devido às restrições de memória do Arduino Uno. Isso significava que eu estava preso ao U8G e precisava contornar o problema, evitando que a tela fosse atualizada sempre que o controle deslizante estivesse em movimento e o Arduino precisasse coletar dados posicionais do Roboclaw. Eu também fui forçado a acionar o controle deslizante para começar a mover-se para fora do loop do menu, pois uma vez que entrei nos submenus, eu estaria dentro do loop de imagem e o controle deslizante não funcionaria como pretendido. Eu também contornei esse problema, tendo um botão físico separado acionando o movimento do controle deslizante.

A seguir, vamos falar sobre o elemento de rastreamento rotacional. Esta parte parece muito complexa para integrar, mas na verdade é bastante simples. A implementação para isso está na função ‘motor ()’ dentro do meu código Arduino. O primeiro passo é fazer uma grade bidimensional e decidir onde o objeto que você deseja rastrear será colocado. Com base nisso, você pode desenhar um triângulo até sua localização atual. Você pode obter sua localização atual a partir do valor do codificador do motor. Se desejar configurar a posição do objeto que está sendo rastreado em cm / mm, você precisará traduzir o valor do codificador para um valor em cm / mm. Isso pode ser feito simplesmente movendo o controle deslizante da câmera 1 cm e medindo o aumento no valor do codificador. Você pode inserir esse valor no início do código na variável encoder_mm.

Continuando, agora usaremos a função de tangente inversa para obter o ângulo que a câmera deve estar voltada para apontar para o seu objeto. A tangente inversa ocupa o lado oposto e adjacente do triângulo. O lado oposto do triângulo nunca muda, pois é a distância y do controle deslizante ao objeto. O lado adjacente do controle deslizante da câmera muda, no entanto. Este lado adjacente pode ser calculado tomando a posição x do objeto e subtraindo sua posição atual. Conforme o controle deslizante se move através de sua amplitude de movimento, ele continuará atualizando o Arduino no valor do codificador. O Arduino converterá repetidamente esse valor do codificador para um valor posicional cm / mm x e então calculará o comprimento do lado adjacente e, finalmente, calculará o ângulo que a câmera precisa estar voltada o tempo todo para apontar para o objeto.

Agora que nosso Arduino está processando dinamicamente o ângulo da câmera, podemos converter esse ângulo em um valor posicional para o qual o motor de rotação deve se mover. Isso nos leva ao maior recurso do RoboClaw para este projeto. Ao dar ao Roboclaw um valor de posição, ele pode essencialmente fazer um motor DC escovado se comportar como um servo. Exceto ao contrário de um servo, nosso motor tem muito mais torque, muito mais precisão e também pode girar 360 graus.

O código do Arduino para mover o Roboclaw para uma determinada posição é o seguinte:

roboclaw. SpeedAccelDeccelPositionM1 (endereço, 'velocidade', 'aceleração', 'desaceleração', 'posição que você deseja ir', 1);

Para ajustar o valor posicional do motor para corresponder ao ângulo da câmera, você precisará mover manualmente a placa da câmera 180 graus. Em seguida, veja o quanto o valor do codificador mudou ao mover a placa da câmera de 0 graus para 180 graus. Isso dá a você o alcance do seu codificador. Você pode inserir esse intervalo na função do motor que mapeia o ângulo da câmera do Arduino para um valor posicional. Isso também é comentado no código, portanto, deve ser fácil de encontrar *****

O RoboClaw também me deu a capacidade de ajustar outros fatores, como aceleração, desaceleração e valores PID. Isso me permitiu suavizar ainda mais o movimento do eixo de rotação, especialmente quando as mudanças de ângulo eram minúsculas e adicionaram solavancos sem alto valor de PID ‘D’. Você também pode ajustar automaticamente seus valores de PID por meio do aplicativo de desktop do Roboclaw.

Etapa 4: operar o controle deslizante da câmera

Operando o controle deslizante da câmera
Operando o controle deslizante da câmera

Agora chegamos à parte divertida, operando o controle deslizante. O menu possui 4 guias principais. A guia superior é dedicada ao controle de velocidade. A linha do meio do menu contém guias para configurar a posição X e Y do objeto rastreado em mm, e também configurar se queremos que o controle deslizante gire e rastreie nosso objeto ou apenas faça um simples movimento deslizante sem rotação. Torcer o codificador rotativo nos permite navegar pelas diferentes opções dos menus. Para configurar qualquer uma das opções, navegue até a opção e pressione o codificador rotativo. Uma vez pressionado, girar o codificador rotativo mudará o valor do submenu destacado em vez de percorrer o menu. Depois de atingir o valor desejado, você pode clicar no codificador rotativo novamente. Agora você está de volta ao menu principal e pode navegar entre as diferentes guias. Quando estiver pronto, basta pressionar o botão ir ao lado da tela e o controle deslizante fará seu trabalho!

Depois de usar o controle deslizante da câmera, certifique-se de que a câmera esteja na posição 'inicial': o lado do controle deslizante começou. A razão para isso é que o codificador do motor não é um codificador absoluto, o que significa que o Roboclaw / Arduino não consegue dizer onde está o codificador. Eles podem apenas dizer o quanto o codificador mudou desde a última vez em que foi ligado. Isso significa que quando você desligar o controle deslizante da câmera, o controle deslizante 'esquecerá' a posição do controle e redefinirá o codificador para 0. Portanto, se você desligar o controle deslizante do outro lado, ao ligá-lo, o controle deslizante tente mover-se além da borda e colidir com a parede do controle deslizante. Esse comportamento do codificador também é o motivo pelo qual a câmera redefine seu ângulo de rotação após cada movimento de slide da câmera. O eixo de rotação também está se protegendo de colidir com o fim de sua amplitude de movimento.

Você pode corrigir isso adicionando paradas finais e um procedimento de homing ao inicializar. Isso é o que as impressoras 3D usam.

Etapa 5: reflexões finais + melhorias futuras

Eu recomendo fortemente que cada construtor faça suas próprias versões deste controle deslizante em vez de construir exatamente o mesmo controle deslizante. Ajustar meu design permitirá que você construa seu controle deslizante de acordo com suas especificações exatas e, ao mesmo tempo, compreenderá melhor como a eletrônica e o código funcionam.

Eu tornei o código o mais legível e configurável possível para que você possa ajustar / calibrar as diferentes variáveis de código para as especificações do controle deslizante. O código também é totalmente construído em torno de funções, portanto, se você quiser copiar / ajustar / reescrever certos comportamentos do controle deslizante, não precisa fazer engenharia reversa e retrabalhar todo o código, mas apenas as partes que deseja editar.

Finalmente, se eu fiz uma versão 2.0, aqui estão algumas melhorias que eu faria

  1. Relação de engrenagem mais alta para o motor de eixo rotacional. Uma relação de engrenagem mais alta significa que posso fazer pequenos movimentos mais precisos. Isso é especialmente crítico quando a câmera está longe do seu objeto e o ângulo da câmera muda muito lentamente. Atualmente, meu motor não está com marcha muito alta e pode resultar em um movimento ligeiramente irregular quando o controle deslizante da câmera funciona muito devagar ou quando há muito pouca mudança de ângulo de rotação. Adicionar um alto valor de PID ‘D’ ajudou-me a me livrar disso, mas custou um pouco menor a precisão de rastreamento de objetos.
  2. Comprimento modular. Este é um objetivo rebuscado, mas eu adoraria que o controle deslizante da câmera fosse modular em comprimento, o que significa que você pode facilmente anexar trilhos mais longos para a câmera deslizar. Isso é bastante difícil, pois será necessário alinhar perfeitamente os dois trilhos e descobrir como fazer o sistema de correia funcionar. No entanto, seria uma atualização legal!
  3. Quadro-chave de movimento personalizado. Eu adoraria apresentar o conceito de movimentos de quadro-chave neste controle deslizante de câmera. Keyframing é uma técnica muito comumente usada na produção de vídeo e áudio. Isso permitiria movimentos não lineares da câmera em que a câmera vai para uma posição, espera, depois se move para outra posição em uma velocidade diferente, espera e depois vai para uma terceira posição, etc.
  4. Controle de Bluetooth / telefone sem fio. Seria muito legal ser capaz de configurar os parâmetros do controle deslizante da câmera sem fio e ser capaz de implantar o controle deslizante da câmera em locais de difícil acesso. O aplicativo de telefone também pode abrir oportunidades para integrar quadros-chave, conforme mencionado no último parágrafo.

É isso para este tutorial. Sinta-se à vontade para colocar quaisquer perguntas na seção de comentários abaixo.

Para mais tutoriais de conteúdo e eletrônica, você também pode verificar meu canal no YouTube aqui.

Recomendado: