Movimentando servo motor com Controle RemotoIR
Componentes Necessários:
Arduino Uno (ou similar)
Servo Motor (como SG90)
Módulo Receptor IR
Controle Remoto IR
Fios jumpers
Protoboard
Esquema de Ligação:
Servo:
Fio Vermelho → 5V
Fio Marrom → GND
Fio Amarelo/Laranja → Pino 9
Receptor IR:
VCC → 5V
GND → GND
OUT → Pino 11
Código Arduino:
#include <IRremote.h> #include <Servo.h> // Definições dos pinos #define IR_RECEIVE_PIN 11 #define SERVO_PIN 9 // Definições dos botões do controle IR (valores podem variar) // Você precisa descobrir os códigos do seu controle #define BUTTON_1 0xFFA25D // Exemplo - substitua pelo código real #define BUTTON_2 0xFF629D // Exemplo - substitua pelo código real // Cria objetos Servo meuServo; IRrecv irrecv(IR_RECEIVE_PIN); decode_results resultados; // Variáveis de controle int posicaoAtual = 90; // Posição inicial (centro) int incremento = 10; // Quantos graus mover por comando void setup() { Serial.begin(9600); // Inicializa o servo meuServo.attach(SERVO_PIN); meuServo.write(posicaoAtual); // Inicializa o receptor IR irrecv.enableIRIn(); Serial.println("Sistema iniciado. Aguardando comandos IR..."); Serial.println("Use os botões 1 e 2 do controle para mover o servo"); } void loop() { // Verifica se recebeu sinal IR if (irrecv.decode(&resultados)) { // Exibe o código recebido no monitor serial (para debug) Serial.print("Código recebido: 0x"); Serial.println(resultados.value, HEX); // Processa os comandos switch(resultados.value) { case BUTTON_1: moverServoDireita(); break; case BUTTON_2: moverServoEsquerda(); break; default: Serial.println("Botão não configurado"); break; } // Prepara para receber próximo comando irrecv.resume(); delay(200); // Debounce } } void moverServoDireita() { if (posicaoAtual < 180) { posicaoAtual += incremento; if (posicaoAtual > 180) posicaoAtual = 180; meuServo.write(posicaoAtual); Serial.print("Movendo para direita: "); Serial.println(posicaoAtual); } else { Serial.println("Limite máximo atingido (180°)"); } } void moverServoEsquerda() { if (posicaoAtual > 0) { posicaoAtual -= incremento; if (posicaoAtual < 0) posicaoAtual = 0; meuServo.write(posicaoAtual); Serial.print("Movendo para esquerda: "); Serial.println(posicaoAtual); } else { Serial.println("Limite mínimo atingido (0°)"); } }
Como Descobrir os Códigos do Seu Controle:
Antes de usar o código, você precisa descobrir os códigos hexadecimais dos botões do seu controle. Use este programa:
#include <IRremote.h> // Biblioteca IRemoteint RECV_PIN = 11; // Arduino pino D11 conectado no Receptor IRIRrecv irrecv(RECV_PIN); // criando a instânciadecode_results results; // declarando os resultadosvoid setup(){Serial.begin(9600); // Monitor velocidade 9600 bpsirrecv.enableIRIn(); // Inicializa a recepção de códigos}void loop(){if (irrecv.decode(&results)) // se algum código for recebido{Serial.println(results.value, HEX); // imprime o HEX Codeirrecv.resume(); // reinicializa o receptordelay(10); // atraso de 10 ms}}
Passos:
Carregue este código no Arduino
Abra o Monitor Serial
Aperte os botões 1 e 2 do seu controle
Anote os códigos hexadecimais que aparecem
Substitua
BUTTON_1
eBUTTON_2
no código principal pelos valores reais
Bibliotecas Necessárias:
Instale estas bibliotecas através do Gerenciador de Bibliotecas do Arduino IDE:
IRremote by Arduino-IRremote
Servo (já vem com Arduino IDE)
Funcionalidades:
✅ Movimento suave do servo com botões 1 e 2
✅ Limites de 0° a 180° para proteger o servo
✅ Feedback serial para debug
✅ Debounce para evitar múltiplas leituras
Dicas:
Ajuste o
incremento
para mudar a velocidade do movimentoVerifique a voltagem do servo (alguns precisam de fonte externa)
Teste os códigos do seu controle específico
O sistema está pronto para uso! Aperte o botão 1 para mover para um lado e botão 2 para o outro lado.
Comentários
Postar um comentário