Lição 18/31: Usando Servo Motor com o Kit Arduino da SunFounder
Os servomotores são os cavalos de batalha de inúmeros projetos de robótica e controle remoto, fornecendo controle angular preciso para tudo, desde mecanismos de direção até braços robóticos. Este guia, baseado na Lição 18 do curso do Kit Arduino da SunFounder, vai te guiar pelos fundamentos do uso de um servomotor com um Arduino. Você aprenderá como conectar o hardware e controlar a posição do motor usando dois métodos diferentes: um movimento simples de varredura e uma posição controlada por botão. O conhecimento que você adquirir aqui é altamente prático e pode ser aplicado a uma ampla gama de projetos, incluindo:
- Construir um braço robótico que possa agarrar e mover objetos com precisão.
- Criar um carro ou barco controlado remotamente com um servo para direção.
- Desenvolver um rastreador solar que siga o sol para maximizar a coleta de energia.
- Construir um suporte de câmera com movimento panorâmico e de inclinação para vigilância ou fotografia.
- Automatizar as superfícies de controle de um modelo de avião, como o leme ou os ailerons.


Visão Geral do Hardware
Antes de mergulhar no código, é essencial entender o próprio servomotor. Como demonstrado no vídeo, um servomotor não gira continuamente como um motor DC padrão. Em vez disso, ele gira para uma posição angular específica, tipicamente entre 0 e 180 graus. Isso o torna ideal para aplicações que exigem movimento preciso. O vídeo destaca vários exemplos, desde dirigir um carro de controle remoto até controlar as articulações complexas de um braço robótico (no vídeo em 00:06).
Os servos vêm em vários tamanhos, com o tamanho físico e a classificação de torque determinando seu preço e aplicação. Um micro servo pequeno é perfeito para modelos leves, enquanto um servo maior e mais potente é necessário para tarefas mais pesadas, como dirigir um "carro muito potente ou grosso" (no vídeo em 01:59).
A maioria dos servos de hobby tem três fios alojados em um conector padrão. O vídeo explica uma escolha de design inteligente: o fio do meio é sempre o fio de alimentação (VCC), tipicamente 5V. Isso é um recurso de segurança que protege o dispositivo de polaridade incorreta se o conector for plugado ao contrário (no vídeo em 03:27). Os outros dois fios são para terra (GND) e o sinal de controle.
Guia de Conexão
Conectar o servo ao seu Arduino é simples. O vídeo fornece uma demonstração clara das conexões (no vídeo em 04:48). Os três pinos no conector do servo são conectados ao Arduino da seguinte forma:
- Fio de Sinal (frequentemente laranja ou amarelo): Conecte-o a um pino PWM digital no Arduino. O exemplo usa o pino 9.
- Fio de Alimentação (frequentemente vermelho): Conecte-o ao pino 5V no Arduino.
- Fio de Terra (frequentemente marrom ou preto): Conecte-o a um dos pinos GND no Arduino.
No vídeo, o apresentador usa fios jumper DuPont macho-macho para conectar o conector fêmea no servo aos cabeçalhos de pinos do Arduino (no vídeo em 05:23).
Programa 1: Controlando o Servomotor (Varredura)
Este primeiro programa é o exemplo clássico de "varredura". Ele é projetado para demonstrar a gama completa de movimento do servo, movendo-o para frente e para trás entre 0 e 180 graus. Esta é uma ótima maneira de verificar se sua conexão está correta e ver seu servo em ação. O vídeo demonstra o upload deste código e observa o servo varrendo para frente e para trás (no vídeo em 09:21).
Para controlar o servo, o código primeiro inclui a biblioteca embutida Servo.h, que simplifica o processo de gerar os sinais de controle necessários. Você então cria um objeto servo e dá a ele um nome, como myservo. Na função setup(), você anexa este objeto a um pino específico usando myservo.attach(9), informando ao Arduino que o fio de sinal do servo está conectado ao pino 9.
A mágica acontece na função loop(), que usa dois loops for para mover o servo. O primeiro loop incrementa uma variável de posição pos de 0 a 180, movendo o servo um grau por vez. O segundo loop faz o oposto, decrementando pos de 180 de volta a 0. A parte crucial é o delay(15) no final de cada iteração do loop. Esta pausa dá ao servo tempo suficiente para se mover fisicamente para a nova posição antes que o próximo comando seja enviado. Sem este atraso, o servo não seria capaz de acompanhar e travaria ou tremeria (no vídeo em 12:31).
Este exemplo é perfeito para aprender, mas em uma aplicação real, você provavelmente vai querer definir o servo para um ângulo específico. Como mostrado no vídeo, você pode modificar o código substituindo os loops for por um único comando como myservo.write(90) para mover o servo para 90 graus e mantê-lo lá (no vídeo em 10:09).
Programa 2: Controlando o Servomotor (Botão)
Este segundo programa leva o controle do servo um passo adiante ao introduzir um potenciômetro (um botão) para fornecer controle manual em tempo real sobre a posição do servo. Esta é uma maneira fantástica de entender como a entrada analógica pode ser traduzida em movimento físico preciso.
Este programa se baseia no anterior adicionando um potenciômetro. Um potenciômetro é um resistor variável que atua como um divisor de tensão analógico. Quando você gira o botão, ele altera a tensão no seu pino de saída. O Arduino lê essa tensão usando um conversor analógico-digital (ADC) em um de seus pinos analógicos, convertendo-a em um valor entre 0 e 1023.
A chave para este programa é a função map(). Essa função escala um número de uma faixa para outra. Neste caso, ela é usada para traduzir o valor bruto do potenciômetro (0 a 1023) para um valor adequado ao servo (0 a 180 graus). O código lê o valor do potenciômetro com analogRead(potpin), escala-o usando map(val, 0, 1023, 0, 180) e, em seguida, envia esse valor escalado ao servo com myservo.write(val). Isso cria um vínculo direto em que girar o botão até o ponto médio posicionará o servo em 90 graus, e assim por diante.
Esse método de controle é altamente intuitivo e é a base para muitas interfaces homem-máquina, desde controles remotos simples até controladores robóticos complexos.
Demonstração ao Vivo do Projeto
O vídeo fornece uma demonstração ao vivo de ambos os programas em ação. Para o programa de varredura, você pode ver o braço do servo movendo-se suavemente de 0 a 180 graus e vice-versa. O apresentador também mostra como ajustar o tamanho do passo no loop for (por exemplo, de 1 grau para 20 graus) e o tempo de atraso altera o comportamento do servo, tornando o movimento mais rápido, porém menos suave (no vídeo em 11:19).
Para o programa do botão, a demonstração mostra como girar o potenciômetro controla diretamente a posição do servo em tempo real. Esse feedback visual é excelente para entender a relação entre a entrada analógica e a saída física.
Capítulos
- [00:00] Introdução aos Servomotores
- [01:07] Aplicações dos Servomotores
- [02:57] Anatomia de um Servomotor
- [04:48] Conectando o Servo ao Arduino
- [06:06] Explorando o Código de Exemplo Sweep
- [09:21] Demonstrando o Programa Sweep
- [10:04] Definindo um Ângulo Personalizado do Servo
- [11:19] Modificando a Velocidade e o Tamanho do Passo do Sweep
- [13:15] Exemplo de Outro Servomotor
/*
Lesson 18/31: Controlling servo motor (sweep)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create Servo object to control a servo
// twelve Servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the Servo object
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(15); // waits 15 ms for the servo to reach the position
}
}
/*
Lesson 18/31: Controlling servo motor (knob)
Get this code and watch video Download and resource page https://robojax.com/RJT601
YouTube video https://www.youtube.com/watch?v=KAt1WUWpHLQ
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(val); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
}
Common Course Links
Common Course Files
Coisas que você pode precisar
-
AmazonasSunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
Amazonas
-
Amazonas
-
Amazonas
-
Amazonas
Recursos e referências
-
DocumentaçãoDocumentação para o Kit de Aprendizado 3 em 1 IoT/Carro Inteligente/SunFounderdocs.sunfounder.com
-
Externo
Arquivos📁
Bibliotecas do Arduino (zip)
-
Código fonte do kit de aprendizado Smart Car 3 em 1 da SunFounder
3in1-kit-main-v2.zip12.80 MB