Construa um Carro Robô 4WD Controlado por IR com Arduino
Componentes e Materiais
| Componente | Quantidade |
|---|---|
| Kit Módulo Sensor IR Receptor Controle Remoto Wireless (WINGONEER) | 1 |
| Driver de Motor Dual H-Bridge L298N (SainSmart) | 1 |
| Kit Chassi Carro Robô 4WD | 1 |
| Arduino UNO | 1 |
Ferramentas Necessárias
- Ferro de Solda (genérico)
Sobre o Projeto
Encontrei o design original no Instructables e construí uma versão dele. O original era um veículo de esteira e este é 4WD. O ajuste no design original está na configuração do IR. O design original sofria com feedback quando os motores estavam rodando, o que interferia com o receptor IR. Os motores agiam como geradores onde os fios de terra se encontravam. Mudei os pinos e atribuições para o IR.
Monte a base do carro usando as instruções fornecidas se estiver usando o kit rover SAINSMART.
Receptor IR
int pino_receptor = 4; // Conecte o pino de saída 4 no controlador ao pino Y do receptor IR
int vcc = 5; // Conecte o pino de saída 5 no controlador ao VCC do receptor IR
int gnd = 6; // Conecte o pino de saída 6 no controlador ao GND do receptor IR
Módulo Driver de Motor L298N
// Motor A
int enA = 8;
int in1 = 12;
int in2 = 11;
// Motor B
int enB = 7;
int in3 = 10;
int in4 = 9;
GND do módulo L298N para GND do controlador
Módulo L298N para Motores
// Conjunto Motor A lado direito
Conecte o lado "+" (Vermelho) dos motores na Saída 4
Conecte o lado "-" (Preto) dos motores na Saída 3
// Conjunto Motor B lado esquerdo
Conecte o lado "+" (Vermelho) dos motores na Saída 2
Conecte o lado "-" (Preto) dos motores na Saída 1
Conecte bateria ao módulo driver L298N "+" (Vermelho) no VCC e "-" (Preto) no GND
Diagrama Completo
Código
Controle Remoto IR Carro (C/C++)
#include <IRremote.h>
char comando;
int pino_receptor = 4; // Pino de saída do receptor IR no pino 4
int vcc = 5; // VCC para sensor IR
int gnd = 6; // GND para sensor IR
int led_status = 13;
IRrecv irrecv(pino_receptor);
decode_results results;
// Pinos do controlador de motor
// Motor A
int enA = 8;
int in1 = 12;
int in2 = 11;
// Motor B
int enB = 7;
int in3 = 10;
int in4 = 9;
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(led_status, OUTPUT);
digitalWrite(led_status, LOW);
// Define todos os pinos de controle do motor como saídas
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
pinMode(vcc, OUTPUT);
pinMode(gnd, OUTPUT);
// Inicializa pino VCC em HIGH
digitalWrite(vcc, HIGH);
}
void loop() {
if (irrecv.decode(&results)) {
digitalWrite(led_status, LOW);
irrecv.resume();
if (results.value == 0xFF18E7) { // Botão 2 - frente
Serial.println("Botao 2");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
else if (results.value == 0xFF10EF) { // Botão 4 - virar esquerda
Serial.println("Botao 4");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
else if (results.value == 0xFF30CF) { // Botão 1 - girar direita
Serial.println("Botao Girar Direita");
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
analogWrite(enB, 100);
}
else if (results.value == 0xFF5AA5) { // Botão 6 - virar direita
Serial.println("Botao Girar Esquerda");
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
else if (results.value == 0xFF7A85) { // Botão 3 - girar direita (motor A ré, motor B frente)
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
analogWrite(enA, 100);
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
else if (results.value == 0xFF4AB5) { // Botão 8 - ré
Serial.println("Botao 8");
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
analogWrite(enB, 100);
}
else if (results.value == 0xFF38C7) { // Botão 5 - parar
Serial.println("Botao 5");
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
analogWrite(enA, 100);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(enB, 100);
}
}
}
Esquemático
Processo de manufatura
- Circuitos de Controle: Fundamentos, Aplicações e Melhores Práticas
- Construtores em C#: Tipos, Exemplos e Padrões Avançados
- Construa um Controle Remoto Universal Profissional para Raspberry Pi com LIRC
- Sistema Automatizado de Enchimento e Monitoramento de Piscina
- Sistema Remoto de Monitoramento de Frequência Cardíaca com Alertas AWS IoT
- Controle seu Raspberry Pi com Controle Remoto IR Reaproveitado: Desligamento e Reinicialização via LIRC
- Vulnerabilidade enteliBUS da Delta Controls: Controle Remoto de Sistemas Prediais Exposto
- Monitoramento na Nuvem: Sistema de Controle Remoto para Gestão de Ativos em Tempo Real
- 5 Principais Benefícios do Controle Remoto de Produção para a Indústria Moderna
- Domine o Controle Remoto de Guindaste Ponte: Aumente Segurança e Eficiência no Armazém