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.
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
}

