ESP32 - MG996R

Neste tutorial, vamos aprender a usar o servo motor de alto torque MG996R com o ESP32.

Sobre o Servo Motor

O servo motor MG996R é um servo motor de alto torque capaz de levantar até 15kg de peso. O motor pode girar seu braço de 0° a 180°, oferecendo um controle preciso da posição angular. Para informações básicas sobre servo motores, consulte o tutorial ESP32 - Servo Motor.

Pinagem

O servo motor MG996R usado neste exemplo possui três pinos:

  • Pino VCC: (normalmente vermelho) deve ser conectado ao VCC (4.8V – 7.2V)
  • Pino GND: (normalmente preto ou marrom) deve ser conectado ao GND (0V)
  • Pino de sinal: (normalmente amarelo ou laranja) recebe o sinal de controle PWM de um pino do ESP32.
Pinagem do Servo Motor MG996R

Diagrama de Ligação

Como o MG996R é um servo motor de alto torque, ele consome muita energia. Não devemos alimentar este motor pelo pino 5v do ESP32. Em vez disso, precisamos usar uma fonte de alimentação externa para o servo motor MG996R.

Diagrama de Ligação do Servo Motor MG996R com ESP32

This image is created using Fritzing. Click to enlarge image

Se você não sabe como alimentar o ESP32 e outros componentes, veja as instruções no tutorial a seguir: Como alimentar o ESP32.

Código ESP32

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-mg996r */ #include <ESP32Servo.h> Servo servo; // create servo object to control a servo void setup() { servo.attach(9); // attaches the servo on pin 9 to the servo objectư servo.write(0); // rotate slowly servo to 0 degrees immediately } void loop() { for (int angle = 0; angle <= 180; angle += 1) { // rotate slowly from 0 degrees to 180 degrees, one by one degree // in steps of 1 degree servo.write(angle); // control servo to go to position in variable 'angle' delay(10); // waits 10ms for the servo to reach the position } for (int angle = 180; angle >= 0; angle -= 1) { // rotate from 180 degrees to 0 degrees, one by one degree servo.write(angle); // control servo to go to position in variable 'angle' delay(10); // waits 10ms for the servo to reach the position } }

Passos Rápidos

  • Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para o ESP32 na Arduino IDE.
  • Faça a ligação conforme a imagem acima.
  • Conecte a placa ESP32 ao seu PC por meio de um cabo USB Type-C
  • Abra a Arduino IDE no seu PC.
  • Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
  • Clique no ícone Libraries na barra esquerda da Arduino IDE.
  • Digite ESP32Servo na caixa de pesquisa e procure a biblioteca de servo de Kevin Harrington,John K. Bennett.
  • Clique no botão Install para instalar a biblioteca de servo motor para o ESP32.
Biblioteca de servo motor para ESP32
  • Conecte o ESP32 ao PC por meio do cabo USB
  • Abra a Arduino IDE e selecione a placa e a porta corretas
  • Copie o código acima e abra-o na Arduino IDE
  • Clique no botão Upload na Arduino IDE para carregar o código no ESP32
Arduino IDE - Como Carregar o Código
  • Veja o resultado: o servo motor gira lentamente de 0 a 180° e depois gira lentamente de volta de 180° até 0°

Explicação do Código

Leia a explicação linha por linha nas linhas de comentário do código!

Como Controlar a Velocidade do Servo Motor

Usando as funções map() e millis(), podemos controlar a velocidade do servo motor de forma suave, sem bloquear o restante do código

/* * Este código de ESP32 foi desenvolvido por pt.newbiely.com * Este código de ESP32 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/esp32/esp32-mg996r */ #include <ESP32Servo.h> Servo myServo; unsigned long MOVING_TIME = 3000; // moving time is 3 seconds unsigned long moveStartTime; int startAngle = 30; // 30° int stopAngle = 90; // 90° void setup() { myServo.attach(9); moveStartTime = millis(); // start moving // TODO: other code } void loop() { unsigned long progress = millis() - moveStartTime; if (progress <= MOVING_TIME) { long angle = map(progress, 0, MOVING_TIME, startAngle, stopAngle); myServo.write(angle); } // TODO: other code }

Vídeo

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!