Neste tutorial, vamos aprender como controlar um servo motor usando um comando IR e um Arduino. Os servo motores são amplamente usados em vários projetos, incluindo robótica, automação e veículos controlados remotamente. Ao integrar um sensor IR com uma placa Arduino, podemos receber comandos de um comando IR e usá-los para controlar a posição ou a velocidade do servo motor.
Controlar um servo motor com um comando IR abre um mundo de possibilidades. Pode usá-lo para construir um braço robótico controlado remotamente, criar um mecanismo pan-tilt para uma câmara, ou até construir um carro controlado remotamente. As possibilidades são infinitas!
Antes de entrarmos nos detalhes, vamos ver os componentes que vai precisar para este projeto.
Componentes Necessários
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Abaixo encontra os componentes necessários para este projeto. Se já tiver um comando IR, então não precisará do Kit Receptor de Comando IR, apenas do Módulo Receptor IR. No entanto, nem todos os comandos IR serão adequados. Por outro lado, se comprar ou já tiver o Kit, não precisará do Módulo Receptor IR, pois ele faz parte do Kit.

Arduino Uno

Conjunto de Fios Dupont

Breadboard

Cabo USB para Arduino UNO

Módulo Receptor IR

Kit Receptor de Comando IR

Servo

Arduino IDE
Ligação dos Componentes
Nesta secção vamos ligar os componentes ao Arduino. A imagem abaixo mostra a ligação completa. Começamos pela alimentação da breadboard.

Ligação da Breadboard
Primeiro, ligue o pino marcado Ground (GND) no Arduino com um fio preto ou azul ao rail de terra da breadboard (marcado com uma linha azul). Depois, ligue o pino marcado 5V (Power) no Arduino com um fio vermelho ao rail de alimentação da breadboard (marcado com uma linha vermelha).

Ligação do Sensor IR
Começamos pelo fio de sinal para ligar o sensor IR. Encontre o pino marcado S ou Signal no módulo do sensor IR e ligue-o com um fio amarelo ao pino 8 do Arduino.
De seguida ligamos a alimentação. Normalmente, o positivo é o pino do meio no módulo do sensor IR. Use um fio vermelho para ligar esse pino ao rail de alimentação positivo da breadboard. Finalmente, ligue o terceiro pino restante do módulo do sensor IR ao rail de alimentação negativo da breadboard.

Ligação do Servo Motor
O último componente a ligar é o servo motor. Primeiro, ligue o fio castanho do servo motor ao rail de alimentação negativo da breadboard com um fio castanho ou preto. Depois, ligue o fio vermelho do servo ao rail de alimentação positivo; preferencialmente com um fio vermelho.

Finalmente, ligue o fio de sinal laranja do servo ao pino 9 na placa Arduino.

Depois de terminar a ligação dos componentes, é melhor verificar novamente se tudo está corretamente ligado. Tenha especial cuidado com as ligações de alimentação. Não queremos um curto-circuito.
De seguida, vou mostrar-lhe o código necessário.
Escrevendo o código Arduino
Abaixo encontra o código completo para uma visão geral. Ele permite rodar o servo para a esquerda ou direita em passos de 10 graus ao pressionar o botão NEXT ou PREV no comando. Vamos dividir este código em partes e explicar a sua função.
#include <IRremote.hpp>
#include <Servo.h>
#define IR_RECEIVE_PIN 8
#define SERVO_PIN 9
Servo servo;
const int range = 780;
const int mid = 1600;
int pos = 90;
int speed = 10;
void rotate(int angle) {
angle = map(angle, 0, 180, mid - range, mid + range);
servo.writeMicroseconds(angle);
}
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
servo.attach(SERVO_PIN);
rotate(pos);
}
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Definições
Primeiro incluímos duas bibliotecas. A IRremote biblioteca, que é necessária para entender os comandos que o comando IR envia. E a Servo biblioteca, que nos ajuda a controlar o servo.
#include <IRremote.hpp> #include <Servo.h>
Depois definimos constantes, IR_RECEIVE_PIN e SERVO_PIN que especificam quais os pinos do Arduino usados para ler o sinal IR e para controlar o servo.
#define IR_RECEIVE_PIN 8 #define SERVO_PIN 9
Depois definimos o objeto servo e duas constantes (range e mid), que ajustam o intervalo de movimento do servo, e mid define a posição central do servo. Além disso, declaramos duas variáveis (pos, speed) que descrevem a posição atual do servo e a velocidade (ou passos de ângulo) com que ele roda.
Servo servo; const int range = 780; const int mid = 1600; int pos = 90; int speed = 10;
Rodar o servo
Para rodar o servo para um ângulo específico, definimos uma função especial rotate(). Essencialmente, ela mapeia o ângulo dado, que deve estar entre 0 e 180 graus, para o comprimento de pulso correspondente necessário para controlar o servo.
void rotate(int angle) {
angle = map(angle, 0, 180, mid - range, mid + range);
servo.writeMicroseconds(angle);
}
Para mais detalhes veja o nosso tutorial sobre as diferenças entre continuous and positional servos. Preste especial atenção à secção que explica como ajustar finamente o seu servo.
Setup
Na função setup(), simplesmente informamos as bibliotecas do receptor IR e do Servo quais pinos são usados para o receptor IR e para o controlo do servo. Além disso, rodamos o servo para a posição de 90 graus. Note que assumimos aqui o servo posicional comum.
void setup() {
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
servo.attach(SERVO_PIN);
rotate(pos);
}
Loop principal
Finalmente, implementamos a função loop() que corre continuamente.
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Começamos por esperar por um sinal do receptor IR chamando IrReceiver.decode(). Se recebermos um comando, decodificamo-lo via IrReceiver.decodedIRData.command.
Dependendo do valor do comando, aumentamos a posição, mas não mais que 180 graus, ou diminuímos a posição, mas não menos que 0 graus. É para isso que servem as funções min() e max() .
Qual valor de comando corresponde a qual tecla no comando IR dependerá do comando que estiver a usar ! Veja o nosso tutorial sobre How to use an IR receiver and remote with Arduino para aprender a identificar os códigos de comando do seu comando. No meu caso, 8 corresponde ao botão de faixa seguinte e 2 ao botão de faixa anterior no meu comando.
Finalmente, rodamos o servo para a posição usando rotate(pos) e informamos o receptor IR para procurar um novo comando via IrReceiver.resume().
Dicas
Note que pode aumentar o ângulo de passo ou a velocidade com que o servo se move entre posições aumentando ou diminuindo o valor da variável speed . Pode até fazer isso usando o comando, adicionando dois comandos mais para reagir, por exemplo:
void loop() {
if (IrReceiver.decode()) {
uint16_t command = IrReceiver.decodedIRData.command;
if (command == 31) { // VOL+
speed = min(speed + 1, 90);
} else if (command == 23) { // VOL-
speed = max(speed - 1, 1);
} else if (command == 8) { // NEXT
pos = min(pos + speed, 180);
} else if (command == 2) { // PREV
pos = max(pos - speed, 10);
}
rotate(pos);
IrReceiver.resume();
}
}
Aqui uso os botões de volume no meu comando para controlar a velocidade. Como antes, os códigos de comando para o seu comando podem ser diferentes e terá de ajustar o código em conformidade.
Aplicações
Braço Robótico
Use o servo motor para controlar o movimento de um braço robótico. O braço pode ser programado para realizar várias tarefas como apanhar objetos, movê-los, ou até jogar jogos.
Controlo de Estores
Automatize a abertura e fecho de estores usando o servo motor e o comando IR. Isto permite controlar a quantidade de luz solar que entra numa divisão com apenas um botão.
Alimentador de Animais
Crie um alimentador automático para animais que distribua comida em horários específicos usando o servo motor. Use o comando IR para ativar manualmente o processo de alimentação, se necessário.
Sistema de Rega de Plantas
Construa um sistema de rega que use o servo motor para controlar o fluxo de água. Use o comando IR para ativar o sistema e regar as suas plantas remotamente.
Fecho Inteligente de Porta
Construa um sistema de fecho inteligente que use o servo motor para trancar e destrancar a porta. Use o comando IR para controlar remotamente o fecho ou configure um teclado para acesso seguro.
Iluminação Ambiente
Crie um sistema de iluminação ambiente que use o servo motor para ajustar o brilho ou a cor das luzes. Use o comando IR para mudar as configurações de iluminação e criar diferentes atmosferas.
Cortinas Automatizadas
Controle a abertura e fecho das cortinas usando o servo motor e o comando IR. Isto permite ajustar facilmente a quantidade de luz que entra numa divisão ou criar privacidade.
Robô Limpa Aquário
Construa um robô limpa aquário que use o servo motor para se mover e limpar o tanque. Use o comando IR para controlar os seus movimentos e padrões de limpeza.
Instalação de Arte Interativa
Crie uma instalação de arte interativa que use o servo motor para controlar partes móveis ou esculturas. Use o comando IR para ativar diferentes movimentos e envolver os espectadores.
Conclusões
Neste tutorial, aprendemos como controlar um servo motor usando um comando IR. Seguindo os passos descritos neste guia, pode facilmente implementar esta funcionalidade nos seus próprios projetos.
Começámos por reunir os componentes necessários, incluindo um Arduino Uno, um conjunto de fios Dupont, uma breadboard, um módulo receptor IR, um kit receptor de comando IR e o Arduino IDE. Estes componentes são essenciais para construir o circuito.
De seguida, ligámos os componentes. Ligámos a breadboard ao Arduino Uno, garantindo que todas as ligações estavam corretas. Depois, ligámos o sensor IR à breadboard e o servo motor ao Arduino Uno. Estas ligações permitem que o Arduino receba sinais do comando IR e controle o servo motor em conformidade.
Depois de completar a configuração do hardware, passámos a escrever o código Arduino. Definimos as variáveis e bibliotecas necessárias, e depois implementámos o código para rodar o servo motor com base nos sinais recebidos do comando IR. Também configurámos a posição inicial do servo na função setup e verificámos continuamente os sinais do comando IR no loop principal.
Finalmente, fornecemos algumas dicas para melhorar o controlo do seu servo motor com um comando IR. Estas dicas incluem usar diferentes botões no comando para ativar diferentes movimentos do servo, ajustar a velocidade do servo e incorporar outros sensores ou módulos no seu projeto.
Em conclusão, controlar um servo motor com um comando IR abre uma vasta gama de possibilidades para os seus projetos Arduino. Quer queira construir um braço robótico, um gimbal para câmara, ou qualquer outro projeto que exija controlo preciso do motor, este tutorial deu-lhe o conhecimento necessário para começar.
Se tiver mais perguntas ou precisar de esclarecimentos sobre algum dos passos descritos neste tutorial, consulte a secção de Perguntas Frequentes abaixo. Boas criações!
Perguntas Frequentes
Aqui estão algumas perguntas comuns relacionadas com o controlo de um servo motor com um comando IR:
P: Posso usar qualquer comando IR com este projeto?
R: Sim, pode usar qualquer comando IR desde que seja compatível com o Arduino. A maioria dos comandos IR usa o protocolo NEC, que é suportado pela biblioteca IR do Arduino. No entanto, se tiver um tipo diferente de comando IR, poderá precisar de modificar o código em conformidade. Muito provavelmente terá de ajustar o código aos códigos de comando do seu comando. Para detalhes veja here.
P: Como encontro os códigos dos botões do meu comando IR?
R: Para encontrar os códigos dos botões do seu comando IR, pode usar o IRrecvDumpV2 example sketch fornecido pela biblioteca IR do Arduino. Alternativamente, siga o nosso tutorial.
Carregue o sketch no seu Arduino, abra o Monitor Serial e pressione os botões do seu comando. Os códigos serão exibidos no Monitor Serial. Pode então usar esses códigos no seu código Arduino para mapear os botões a movimentos específicos do servo motor.
P: Posso controlar vários servo motores com um único comando IR?
R: Sim, pode controlar vários servo motores com um único comando IR. Terá de ligar cada servo motor a um pino separado no Arduino e modificar o código para controlar cada servo motor independentemente. Pode atribuir diferentes botões no comando IR para controlar diferentes servo motores.
P: Como ajusto o intervalo de movimento do servo motor?
R: O intervalo de movimento do servo motor pode ser ajustado modificando os valores nas funções servo.attach() e servo.write() no código Arduino. A função servo.attach() define o intervalo de movimento do servo motor, enquanto a função servo.write() especifica o ângulo para o qual o servo motor deve mover-se. Para métodos alternativos, veja o nosso tutorial sobre continuous and positional servos.
P: Posso usar um microcontrolador diferente do Arduino?
R: Sim, pode usar um microcontrolador diferente do Arduino desde que suporte as bibliotecas necessárias e tenha pinos digitais suficientes para ligar o servo motor e o receptor IR. O código fornecido neste tutorial é específico para Arduino, mas pode adaptá-lo para funcionar com outros microcontroladores.
P: Posso usar um tipo diferente de motor em vez de um servo motor?
R: Não, este projeto específico foi desenhado para controlar servo motores. Os servo motores têm controlo de posição incorporado, o que os torna ideais para esta aplicação. Se quiser controlar um tipo diferente de motor, precisará de um circuito e código diferentes.
P: Posso controlar a velocidade do servo motor?
R: Depende. Para servos contínuos ou de 360 graus pode controlar a velocidade e direção (mas não a posição). Para servos posicionais, que foram usados neste tutorial, não pode controlar diretamente a velocidade, mas pode alterar os passos de ângulo, o que altera a velocidade de certa forma, mas resulta num movimento irregular.
P: Existem precauções de segurança que devo tomar ao trabalhar com servo motores?
R: Sim, ao trabalhar com servo motores, certifique-se de fornecer energia suficiente aos servo motores e evite sobrecarregá-los. Além disso, tenha cuidado com as partes móveis e evite tocá-las enquanto o motor estiver em funcionamento.
Espero que estas perguntas frequentes tenham ajudado a esclarecer quaisquer dúvidas que possa ter tido. Se tiver mais perguntas, sinta-se à vontade para perguntar na secção de comentários abaixo.
Links
Finalmente, uma seleção de links para material relacionado que pode achar útil.
- How to Control a 360 Degree Servo Motor with Arduino
- How to Drive Servo Motors Using ESP32
- How to Control Servo Motors with Arduino (3 Examples)
- Control 360-degree Servo Motor Using ESP32
- Positional versus Continuous Servos
- Controlling Servo Motor with IR Remote
- Servo Motor Control with Remote
- Controlling a Servo with IR | Using an Infrared Library
- Controlling Servo Motor With Ir Remote Using Arduino
- Controlling Servo Motor Using IR Remote Control

