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 objetivo é ajustar a posição de 0° a 180° e utilizar LEDs para sinalizar em qual zona de operação o motor se encontra.
Mecânica do Sistema
O potenciômetro atua como um divisor de tensão, enviando um sinal analógico (0 a 1023) ao Arduino. Este valor é processado e convertido em um ângulo, que define a posição do servo via sinal PWM (Modulação por Largura de Pulso).
Funcionamento do Sistema
- Entrada Analógica: Leitura da resistência variável do potenciômetro no pino A0.
- Mapeamento de Dados: Conversão da escala de 10 bits (0-1023) para a escala angular (0-180°).
- Feedback Visual:
- LED Verde: Ativo entre 0° e 90° (Posição Inicial/Intermediária).
- LED Vermelho: Ativo entre 91° e 180° (Posição Extrema).
Materiais
- Arduino UNO & Protoboard
- Servo Motor SG90
- Potenciômetro 10kΩ
- LEDs (Verde e Vermelho)
- Resistores de 220Ω
Conexões Chave
- Potenciômetro: (VCC-5V/GND-GND) - Pino Analógico A0
- Servo Motor (Sinal):(VCC-5V/GND-GND) - Pino Digital 2
- LED Verde (Ânodo): Pino Digital 8
- LED Verde (Cátodo): GND com um resistor de 220Ω
- LED Vermelho (Ânodo): Pino Digital 10
- LED Vermelho (Cátodo): GND com um resistor de 220Ω
- VCC / GND: Barramentos de 5V e Terra
Protótipo em Operação
Lógica de Programação
Baixar Código (.INO)
#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
Servo s1;
int leituraPot = 0;
int angulo = 0;
void setup() {
Serial.begin(9600);
pinMode(LED_VD, OUTPUT);
pinMode(LED_VM, OUTPUT);
pinMode(POT, INPUT);
s1.attach(servo1);
}
void loop() {
leituraPot = analogRead(POT); // Lê de 0 a 1023
angulo = map(leituraPot, 0, 1023, 0, 180); // Mapeia para 0-180
s1.write(angulo); // Move o servo
Serial.print("Ângulo: ");
Serial.println(angulo);
if (angulo <= 90) {
digitalWrite(LED_VD, HIGH);
digitalWrite(LED_VM, LOW);
} else {
digitalWrite(LED_VM, HIGH);
digitalWrite(LED_VD, LOW);
}
delay(50);
}
Considerações sobre a Montagem
A maioria dos módulos de sensor IR possui um pequeno potenciômetro (trimmer) azul. Ele serve para ajustar a sensibilidade ou o alcance da detecção. Se o seu sensor estiver sempre detectando "obstáculo", tente girar o potenciômetro para calibrar a distância de acordo com a luz ambiente do laboratório.