Tutorial ESP32 17/55 - Controlando o Motor Servo usando ESP32 e Potenciômetro - Kit de Aprendizado IoT ESP32

Tutorial ESP32 17/55 - Controlando o Motor Servo usando ESP32 e Potenciômetro - Kit de Aprendizado IoT ESP32

Neste tutorial, vamos aprender como controlar um servo motor usando um microcontrolador ESP32 e um potenciômetro do kit de aprendizado IoT ESP32 da SunFounder. Ao final deste projeto, você será capaz de ajustar o ângulo do servo motor suavemente usando o potenciômetro, permitindo um controle preciso. Esta é uma ótima maneira de explorar as capacidades do ESP32 e como ele se conecta a motores.

À medida que mergulhamos nos detalhes, abordaremos os componentes de hardware necessários, as instruções de fiação e exemplos de código para colocar tudo em funcionamento. Para uma representação mais visual, não deixe de conferir o vídeo associado a este tutorial (no vídeo em 0:30).

Hardware Explicado

Os componentes principais para este projeto incluem o microcontrolador ESP32, um motor de passo (SG90) e um potenciômetro. O ESP32 é um microcontrolador poderoso que oferece Wi-Fi e Bluetooth integrados, tornando-o adequado para projetos de IoT. Ele é capaz de controlar vários dispositivos, incluindo motores, com alta precisão.

O motor servo SG90 é um componente amplamente utilizado que pode girar aproximadamente 270 graus. Ele opera com um sinal de modulação por largura de pulso (PWM), onde o ângulo de rotação é determinado pela largura do pulso enviado a ele. O potenciômetro atua como um resistor variável, permitindo ajustar a voltagem enviada ao ESP32, que por sua vez controla a posição do servo.

Detalhes da Ficha Técnica

Fabricante SG
Número da peça SG90
Tensão de lógica/IO 3,3 V (ESP32)
Tensão de alimentação 5 V
Corrente de saída (por canal) 1.2 A
Corrente de pico (por canal) 2,5 A
Orientação sobre a frequência de PWM 50 Hz
Limiares lógicos de entrada 0,2 V (baixo), 2,5 V (alto)
Queda de tensão / RDS(on)/ saturação 0,5 V
Limites térmicos 85 °C máx
Pacote Plástico
Notas / variantes Disponível em diferentes tipos de equipamentos

  • Certifique-se de que o servo esteja alimentado com uma tensão adequada (5V).
  • Conecte o terra do servo ao terra do ESP32 para uma referência comum.
  • Use sinais PWM apropriados para controlar a posição do servomotor.
  • Esteja ciente dos requisitos de corrente do servo; use uma fonte de alimentação externa, se necessário.
  • Verifique as designações de pinos corretas ao fazer a fiação para evitar reconfigurações incorretas.

Instruções de Fiação

ESP32-17-Sevo_motor-wiring

Para conectar o motor servo e o potenciômetro ao ESP32, comece ligando o fio de terra do servo (geralmente preto ou marrom) a um dos pinos de terra no ESP32. Em seguida, conecte o fio de potência (geralmente vermelho) do servo ao pino de 5V no ESP32. Por fim, conecte o fio de sinal (geralmente laranja ou branco) do servo ao pino25no ESP32.

Para o potenciômetro, conecte uma das extremidades ao pino de 3.3V no ESP32 e a outra extremidade ao terra. O pino do meio do potenciômetro deve ser conectado ao pino34no ESP32. Esta configuração permite que o ESP32 leia a saída de tensão variável do potenciômetro, que será usada para controlar a posição do servo.

Exemplos de Código e Passo a Passo

O seguinte trecho de código inicializa o servomotor e define os parâmetros para controlar seu movimento:

#include 

Servo myServo;
const int servoPin = 25;
const int minPulseWidth = 500; // 0.5 ms
const int maxPulseWidth = 2500; // 2.5 ms

void setup() {
  myServo.attach(servoPin, minPulseWidth, maxPulseWidth);
  myServo.setPeriodHertz(50); // Standard 50Hz servo
}

Neste código, incluímos oESP32Servobiblioteca e crie uma instância do servo com o nomemyServoDefinimos o número do pino para o servo e configuramos as larguras de pulso mínima e máxima que correspondem aos limites de ângulo do servo.

ESP32_servo_lib

Em seguida, vamos dar uma olhada no loop que move continuamente o servo para frente e para trás:

void loop() {
  for (int angle = 0; angle <= 180; angle++) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
  for (int angle = 180; angle >= 0; angle--) {
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);
    myServo.writeMicroseconds(pulseWidth);
    delay(15);
  }
}

Este loop altera gradualmente o ângulo de 0 a 180 graus e de volta.mapfunção para converter o ângulo na largura de pulso correspondente para o servomotor. Cada alteração é seguida por um curto atraso para permitir que o servomotor atinja sua nova posição suavemente.

Demonstração / O que Esperar

Uma vez que tudo esteja conectado e o código esteja carregado, você deve ver o motor de servo se movendo suavemente de 0 a 180 graus e de volta. Se você ajustar o potenciômetro, o servo deve refletir a nova posição com base na voltagem fornecida pelo potenciômetro. Tenha cuidado com a polaridade invertida ao conectar, pois isso pode danificar seus componentes (no vídeo às 3:45).

Marcação de Tempo do Vídeo

  • 00:00 Início
  • 1:56 O que é um motor servo
  • 5:00 Página de documentos
  • 6:33 Fiação para servo explicada
  • 7:45 Selecionando a porta COMP para ESP32 no Arduino IDE
  • 9:27 Código Arduino explicado
  • 14:31 Demonstração de controle de servos utilizando ESP32
  • 16:04 Alimentando servo diferente de 5V
  • 18:47 Controlando o servo sem o loop
  • 20:15 Controlando Servo com Potenciômetro
  • 21:37 Servo com código Arduino explicado

Imagens

ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-schematic
ESP32-17-Sevo_motor-wiring
ESP32-17-Sevo_motor-wiring
ESP32_servo_lib
ESP32_servo_lib
816-ESP32 Tutorial 17/55- Arduino code for controling servo motor
Idioma: C++
Copiado!

Arquivos📁

Folha de dados (pdf)

Outros arquivos