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
Lista completa de produtos
comprarVespa
Micro Servo DS-S006
Potenciômetro 10kΩ
Mini Protoboard 170 Pontos - Preta
Cabo USB Micro B 80cm
Jumpers Macho-Fêmea x40 Unidades
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.
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.
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.
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.
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.