top of page

Explorando o Controle de Servo com Potenciômetro e LEDs Indicadores

Neste exercício, vamos explorar o controle de um servo motor utilizando um potenciômetro, com um sistema de feedback visual baseado em LEDs para indicar a posição do servo. O potenciômetro será usado para ajustar a posição do servo de 0° a 180°, e LEDs verde e vermelho irão acender dependendo da posição do servo, oferecendo uma interação clara e eficiente entre o usuário e o sistema.

Mecânica do Sistema

O potenciômetro funciona como um dispositivo de entrada analógica, permitindo que o usuário ajuste a resistência e, com isso, a leitura analógica variando entre 0 e 1023. Esse valor é convertido para um ângulo entre 0° e 180°, determinando a posição do servo motor. O servo motor, por sua vez, é controlado por meio de um sinal PWM, fazendo-o girar conforme o ângulo desejado.

LEDs como Indicadores de Estado

  • LED Verde (LED_VD): Quando a posição do servo for menor ou igual a 90 graus, o LED verde será aceso, indicando que o servo está em uma posição inicial ou intermediária.

  • LED Vermelho (LED_VM): Quando a posição do servo for maior que 90 graus, o LED vermelho será aceso, indicando que o servo alcançou uma posição mais extrema (próxima de 180 graus).

 

​Este sistema oferece um feedback visual claro sobre a posição do servo, facilitando a compreensão do movimento.​

Como Funciona o Sistema

O potenciômetro é conectado a um pino analógico do Arduino, onde o valor lido vai de 0 a 1023. Esse valor é mapeado para um intervalo de 0 a 180, que será enviado ao servo motor, controlando sua posição. Durante esse processo, o sistema monitora continuamente a posição do servo e aciona os LEDs conforme a posição atual do servo:

  • Se o servo estiver em uma posição de 0° a 90° (ou seja, no intervalo mais baixo), o LED verde é aceso, e o LED vermelho é apagado.

  • Se o servo estiver em uma posição acima de 90° até 180°, o LED verde é apagado, e o LED vermelho é aceso.

Componentes

  • Arduino UNO

  • Protoboard

  • Jumpers

  • Led Verde

  • Led Vermelho

  • Resistor 220Ω para cada LED

  • Potenciômetro

  • Servo Motor

Conexões

Potenciômetro:

  • VCC (pino de alimentação) -> Conectar ao pino 5V do Arduino.

  • GND (pino de terra) -> Conectar ao pino GND do Arduino.

  • Saída Analógica (pino do meio) -> Conectar ao pino A0 do Arduino.

LED Verde:

  • O ânodo (perna longa) do LED vai para o pino 8 do Arduino.

  • O cátodo (perna curta) vai para o GND, com um resistor de 220Ω em série para limitar a corrente.

 

LED Vermelho:

  • O ânodo (perna longa) do LED vai para o pino 10 do Arduino.

  • O cátodo (perna curta) vai para o GND, com um resistor de 220Ω em série para limitar a corrente.

 

Servo Motor:

  • O pino de controle do servo vai para o pino 2 do Arduino.

  • O VCC e GND do servo devem ser conectados ao 5V e GND do Arduino, respectivamente

Sobre o Código:

Leitura do Potenciômetro: O valor do potenciômetro é lido através do pino analógico A0. Esse valor é convertido de um intervalo de 0 a 1023 para um intervalo de 0 a 180, correspondente ao ângulo do servo.

 

Controle do Servo: O servo é controlado pela função s1.write(angulo), movendo o servo para a posição correspondente ao valor do potenciômetro.

Controle dos LEDs: O estado dos LEDs é alterado conforme o valor do ângulo do servo.

Esse sistema proporciona uma forma simples de controlar um servo motor e visualizar a posição do servo através de LEDs indicadores. É uma excelente forma de integrar sensores e componentes eletrônicos para criar interações mais complexas em projetos de robótica e automação.

Diagrama

micro servo

Programa

#include <Servo.h>  // Biblioteca para controlar o servo motor

 

// Definição dos pinos

#define servo1 2   // Pino do servo motor

#define LED_VD 8   // LED verde (indica início)

#define LED_VM 10  // LED vermelho (indica final)

#define POT A0     // Pino do potenciômetro

 

// Declaração do objeto Servo

Servo s1;

 

int leituraPot = 0;  // Variável para armazenar a leitura do potenciômetro

int angulo = 0;      // Variável para o ângulo do servo

 

void setup() {

  Serial.begin(9600);  // Inicializa a comunicação serial

  pinMode(LED_VD, OUTPUT);   // Define o LED verde como saída

  pinMode(LED_VM, OUTPUT);   // Define o LED vermelho como saída

  pinMode(POT, INPUT);       // Define o potenciômetro como entrada

  s1.attach(servo1);         // Associa o servo motor ao pino definido

}

 

void loop() {

  leituraPot = analogRead(POT);  // Lê o valor do potenciômetro (0 a 1023)

  angulo = map(leituraPot, 0, 1023, 0, 180); // Converte para ângulo (0 a 180)

 

  s1.write(angulo);  // Move o servo para o ângulo correspondente

  Serial.print("Ângulo: ");

  Serial.println(angulo);  // Mostra o ângulo no Monitor Serial

 

  // Se o ângulo for menor que 90 graus

  if (angulo <= 90) {

    digitalWrite(LED_VD, HIGH);  // Acende o LED verde

    digitalWrite(LED_VM, LOW);   // Apaga o LED vermelho

  }

  // Se o ângulo for maior que 90 graus

  else {

    digitalWrite(LED_VM, HIGH);  // Acende o LED vermelho

    digitalWrite(LED_VD, LOW);   // Apaga o LED verde

  }

 

  delay(50);  // Pequeno atraso para evitar leituras rápidas demais

}

bottom of page