Controle de Servos com a Vespa




Introdução

Você recebeu a sua Vespa e quer saber como usá-la? Não se preocupe, estamos aqui para ajudá-lo nestes primeiros passos e para mostrar como usar as funções básicas da biblioteca desenvolvida para ela.

Neste tutorial você verá como fazer o controle de servomotores pela Vespa, o comportamento de cada função de controle da biblioteca da Vespa, e como isso pode ser aplicado na prática.

Lista de Materiais

Controle Automático

Neste primeiro projeto, iremos fazer um controle automático da posição do eixo do servomotor usando as funções da biblioteca da Vespa, onde o eixo irá do seu limite mínimo até o seu limite máximo e vice-versa repetidamente.

Circuito

Para este primeiro projeto, apenas conecte o servo ao pino S1 da Vespa, conforme mostrado na imagem abaixo. A conexão pode ser direta, apenas atente-se à polaridade.

circuito-eletrico
Circuito Elétrico

Código

Para o controle do servomotor, usaremos a biblioteca da Vespa, portanto, para instalá-la, siga os passos do tutorial Primeiros Passos com a Vespa.

Como um primeiro controle simples do servo, faremos com que ele mova o seu eixo de 0 a 180° e depois de 180 a 0°. Para isso, carregue o código a seguir na sua Vespa.

Entendendo o Código

O código se inicia com a inclusão da biblioteca "RoboCore_Vespa" e, em seguida, é criado o objeto servo como instância "VespaServo" da biblioteca, que será utilizado para o controle do servomotor.

Para finalizar as declarações globais do código, temos a declaração das constantes ANGULO_MAXIMO e ANGULO_MINIMO, que armazenam, respectivamente, o ângulo máximo (180°) e o ângulo mínimo (0°) de movimentação do servo.

Já nas configurações do código (função void setup()), além de iniciar a comunicação com o monitor serial em 115200 bps, também "conectamos" o objeto servo ao pino S1 (GPIO 26 do ESP32) através da função attach(), que é chamada no código pelo comando servo.attach(VESPA_SERVO_S1). O parâmetro VESPA_SERVO_S1 é uma definição interna da biblioteca, que atrela esta "palavra" ao GPIO 26 do ESP32. Para encerrar as configurações do código, o servo é acionado para o seu ângulo central (90°) pela função write(), que é chamada no código pelo comando servo.write(90).

Já na repetição do código, o servo é controlado para se mover no sentido anti-horário de 0 a 180° por um laço for, onde, a cada repetição, o ângulo do servo é atualizado pelo comando servo.write(i) de acordo com o valor da variável i criada para o laço. Em seguida, é feito basicamente o mesmo novamente, porém, no segundo laço for, o motor é movido no sentido horário de 180 a 0°.

O Que Deve Acontecer

Após carregar o código para a Vespa, você verá que o eixo do servo começará a se mover em ambos os sentidos até seus limites máximo e mínimo, como no GIF abaixo. Se abrir o monitor serial com a velocidade 115200 bps, você também verá a atualização do ângulo que está sendo usado para controlar o servo.

Resultado Final

Controle Manual

Agora que já entendemos o básico de como controlar servomotores pela Vespa, porque não realizar um controle manual do eixo do servo para replicar o eixo de um potenciômetro? Afinal, eles possuem limites de giro similares, então seria possível ter uma grande precisão no posicionamento do eixo do servo.

Circuito

Para este projeto, monte o circuito a seguir.

circuito-eletrico
Circuito Elétrico

Código

Com o circuito montado, carregue o código a seguir para a sua Vespa para controlar o movimento do eixo do servo pelo potenciômetro, basicamente replicando-o.

Entendendo o Código

Este código se inicia basicamente idêntico ao do projeto anterior, porém com a declaração de algumas variáveis adicionais, sendo elas PINO_POTENCIOMETRO, que armazena o número do GPIO do pino VP conectado ao potenciômetro do circuito; LEITURA_MAXIMA, que armazena o valor máximo da leitura analógica do ESP32; e LEITURA_MINIMA, que armazena o valor mínimo da leitura analógica do ESP32.

Na configuração do código (função void setup()), além das mesmas configurações feitas no projeto anterior, configuramos o pino VP do ESP32, conectado ao potenciômetro do circuito, como uma entrada da placa.

Já na repetição do código (função void loop()), declaramos a variável leitura_analogica para armazenar a leitura analógica do pino VP e, em seguida, é declarada a variável angulo_mapeado que recebe o ângulo mapeado de acordo com o retorno da função map(). Esta última função leva em conta os valores das variáveis leitura_analogica, LEITURA_MINIMA, LEITURA_MAXIMA, ANGULO_MINIMO e ANGULO_MAXIMO para calcular um valor resultante entre 0 e 180º, já que a leitura analógica do potenciômetro retorna um valor entre 0 e 4095. Com o ângulo mapeado, a posição do eixo do servo é atualizado com o valor armazenado na variável angulo_mapeado.

O Que Deve Acontecer

Após carregar o código para a placa, mova o eixo do potenciômetro e note que o eixo do servo irá se mover junto, tentando replicar a movimentação do potenciômetro. Juntamente com isso, se quiser, você pode monitorar o mapeamento da leitura do potenciômetro pelo monitor serial em 115200 bps.

Resultado Final

Indo Além

Os códigos deste tutorial são apenas demonstrações do uso das funções da biblioteca da Vespa para o controle de servomotores, porém é possível implementar diversas funcionalidades com este controle simples de servomotores, por exemplo, para o controle de braços robóticos, como mostramos no tutorial Controle Web de Braço Robótico com a Vespa.

Além disso, também temos diversos outros tutoriais demonstrando todas as funcionalidades da Vespa.

Conclusão

Neste tutorial vimos as funções de controle de servomotores da biblioteca da Vespa e como usá-las para o controle de servos.

Avatar