Arduino UNO R4 - Servo Motor

Este tutorial ensina você a controlar um servo motor usando um Arduino UNO R4. Especificamente, vamos aprender:

Arduino UNO R4 Servo Motor

Sobre o Servo Motor

Um servo motor é um componente que pode girar seu eixo, normalmente de 0 grau a 180 graus. Ele é usado para controlar o ângulo de um objeto.

Pinagem

Este exemplo usa um servo motor com três pinos:

  • Pino VCC: conecte o fio vermelho ao VCC (5 volts).
  • Pino GND: conecte o fio preto ou marrom ao GND (0 volts).
  • Pino de sinal: conecte o fio amarelo ou laranja para receber o sinal de controle PWM de um pino do Arduino UNO R4.
Servo Motor Pinout

Diagrama de Ligação

Às vezes, você pode ver diagramas de ligação na internet mostrando a conexão entre o pino VCC de um servo motor e o pino 5V da placa Arduino UNO R4. O melhor é evitar esse método, pois ele pode danificar a placa Arduino UNO R4.

The wiring diagram between Arduino UNO R4 Servo Motor

This image is created using Fritzing. Click to enlarge image

Para proteger sua placa Arduino UNO R4, o melhor é usar uma fonte de alimentação externa para o servo motor. O diagrama de ligação abaixo mostra como conectar o servo motor a uma fonte de energia externa.

The wiring diagram between Arduino UNO R4 servo motor external power supply

This image is created using Fritzing. Click to enlarge image

Veja A melhor forma de alimentar o Arduino Uno R4 e outros componentes.

Certifique-se de conectar o GND (terra) da fonte de alimentação externa ao GND da placa Arduino UNO R4. Esse passo é muito importante para que tudo funcione corretamente.

Como Programar um Servo Motor

  • Inclua a biblioteca:
#include <Servo.h>
  • Crie um objeto Servo:
Servo servo;

Se você controla vários servo motores, basta declarar objetos Servo adicionais.

Servo servo1; Servo servo2;
  • Conecte o pino de controle do Arduino UNO R4 ao pino de sinal do servo motor, por exemplo o pino 9.
servo.attach(9);
  • Por fim, gire o servo motor para o ângulo que você precisa, como 90 graus.
servo.write(90);

Código Arduino UNO R4

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-servo-motor */ #include <Servo.h> Servo servo; // Initialize a Servo object to manage a servo void setup() { servo.attach(9); // Connects the servo on pin 9 to the servo object servo.write(0); // Moves the servo to 0 degrees immediately upon startup } void loop() { for (int pos = 0; pos <= 180; pos += 1) { // Gradually move the servo from 0 to 180 degrees servo.write(pos); // Set servo position to 'pos' degrees delay(10); // Delay 10ms to allow the servo to reach the new position } for (int pos = 180; pos >= 0; pos -= 1) { // Gradually move the servo from 180 back to 0 degrees servo.write(pos); // Set servo position to 'pos' degrees delay(10); // Delay 10ms to allow the servo to reach the new position } }

Passos Rápidos

Siga estas instruções passo a passo:

  • Se esta é a primeira vez que você usa o Arduino Uno R4 WiFi/Minima, consulte o tutorial sobre como configurar o ambiente para Arduino Uno R4 WiFi/Minima na Arduino IDE.
  • Ligue os componentes de acordo com o diagrama fornecido.
  • Conecte a placa Arduino Uno R4 ao seu computador usando um cabo USB.
  • Abra a Arduino IDE no seu computador.
  • Selecione a placa Arduino Uno R4 apropriada (por exemplo, Arduino Uno R4 WiFi) e a porta COM.
  • Cole o código acima na Arduino IDE.
  • Clique no botão Upload na Arduino IDE para enviar o código ao Arduino UNO R4.
Arduino IDE - How to Upload Code
  • Veja o que acontece: o servo motor gira devagar de 0 a 180 graus e depois volta devagar de 180 a 0 grau.

Explicação do Código

Você pode ver a explicação nos comentários do código Arduino acima.

Como Controlar a Velocidade do Servo Motor

Usar as funções map() e millis() nos permite ajustar suavemente a velocidade de um servo motor, enquanto outro código continua rodando sem interrupções.

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-servo-motor */ #include <Servo.h> Servo servo; #define MOVING_TIME 3000 // Duration for the servo to move from startAngle to stopAngle unsigned long moveStartTime; // Timestamp when the servo starts moving int startAngle = 30; // Initial angle in degrees int stopAngle = 90; // Final angle in degrees void setup() { servo.attach(9); // Attach the servo on pin 9 to the servo object moveStartTime = millis(); // Initialize timer at the start of setup() // Additional initialization code can be added here } void loop() { unsigned long progress = millis() - moveStartTime; // Calculate elapsed time since start if (progress <= MOVING_TIME) { // During the defined MOVING_TIME period long angle = map(progress, 0, MOVING_TIME, startList and stopAngle); // Calculate intermediate servo angle servo.write(angle); // Set servo position to calculated angle } // Additional repetitive code can be added here }

Vídeo

O vídeo de demonstração abaixo usa o código a seguir:

/* * Este código de Arduino UNO R4 foi desenvolvido por pt.newbiely.com * Este código de Arduino UNO R4 é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-servo-motor */ #include <Servo.h> #define SERVO_PIN 9 #define TRIG_PIN 8 #define ECHO_PIN 7 #define INTERVAL_TIME 3000 #define DISTANCE_THRESHOLD 10 Servo myservo; unsigned long lastCloseTime = 0; float distance = 0.0; float ultrasonicMeasure() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); unsigned long duration_us = pulseIn(ECHO_PIN, HIGH, 30000UL); if (duration_us == 0) return 9999.0; float distance_cm = duration_us * 0.034f / 2.0f; return distance_cm; } void setup() { Serial.begin(115200); myservo.attach(SERVO_PIN); myservo.write(0); pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); } void loop() { distance = ultrasonicMeasure(); Serial.print("Distance: "); Serial.print(distance); Serial.println("cm"); if(distance < DISTANCE_THRESHOLD){ myservo.write(90); lastCloseTime = millis(); } else{ if(millis() - lastCloseTime >= INTERVAL_TIME){ myservo.write(0); } } }

※ 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!