Código de Pesquisa

Lição 18/31: Usando Servo Motor com o Kit Arduino da SunFounder

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

Servo-wiring_bb
Servo-pot_wiring

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

Imagens

SG90_servo_motor-1
SG90_servo_motor-1
SG90 servo
SG90 servo
Servo-pot_wiring
Servo-pot_wiring
Servo-wiring_bb
Servo-wiring_bb
914-Lesson 18/31: Controlling servo motor (sweep)
Idioma: C++
/*
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
  }
}
915-Lesson 18/31: Controlling servo motor (knob)
Idioma: C++
/*
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
}

Arquivos📁

Bibliotecas do Arduino (zip)