Arduino - MG996R

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

Hardware Necessário

1×Arduino Uno R3
1×Cabo USB 2.0 tipo A/B (para PC com USB-A)
1×Cabo USB 2.0 tipo C/B (para PC com USB-C)
1×Servo Motor MG996R
1×Fios Jumper
1×(Recomendado) Shield com Bornes de Parafuso para Arduino Uno
1×(Recomendado) Sensors/Servo Expansion Shield for Arduino Uno
1×(Recomendado) Shield de Protoboard para Arduino Uno
1×(Recomendado) Case para Arduino Uno
1×(Recomendado) Placa Base de Prototipagem e Kit de Protoboard para Arduino Uno

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgação: Alguns dos links desta seção são links de afiliado da Amazon. Podemos receber uma comissão pelas compras feitas por meio desses links, sem custo adicional para você. Agradecemos o seu apoio.

Buy Note: For controlling multiple servo motors, use the PCA9685 16 Channel PWM Servo Driver Module to save MCU pins and simplify wiring.

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 controle preciso da posição angular. Para informações básicas sobre servo motores, consulte o tutorial Arduino - Servo Motor.

Pinagem

O servo motor MG996R usado neste exemplo tem 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 Arduino.
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 Arduino. Em vez disso, precisamos usar uma fonte de alimentação externa para o servo motor MG996R.

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

This image is created using Fritzing. Click to enlarge image

Código Arduino

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-mg996r */ #include <Servo.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

  • Conecte o Arduino ao PC usando o cabo USB
  • Abra a Arduino IDE, 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 Arduino
Arduino IDE - Como Carregar o Código
  • Veja o resultado: o servo motor gira devagar de 0 até 180° e depois gira devagar de volta de 180° até 0°

Explicação do Código

Leia a explicação linha por linha nos comentários 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 Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino/arduino-mg996r */ #include <Servo.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!