Esta página irá ensinar como fazer um carrinho controlado por controle remoto emissor de infravermelho (controle de televisão, dvd, recptor de parabólica, controle de rádio de carro, etc). Para isso será necessário o seguinte material:
-Arduino (no caso utilizei o UNO)
-7 Resistores 330 Ω
-2 Capacitores 100 nF
-1 Ponte H dupla: CI L298N
-2 Motores com caixa de redução
-1 Receptor de infravermelho de 3 terminais
-1 Protoboard
-4 Leds alto brilho
-4 Leds amarelos
-2 Leds vermelhos
-1 Receptor infravermelho
-1 Bateria 9V (para alimentar o arduino)
-1 Suporte para 6 pilhas AA
-6 Pilhas AA
-Fios
O esquemático da ligação segue abaixo:
O fundo do carrinho foi feito seguindo o seguinte modelo:
O vídeo mostrando o resultado do projeto está mostrado abaixo:
#include <IRremote.h>
#include <IRremoteInt.h>
int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;
#define BT_1 0xFF18E7 //Botao 1 - Cima
#define BT_2 0xFF4AB5 //Botao 2 - Baixo
#define BT_3 0xFF5AA5 //Botao 3 - Direita
#define BT_4 0xFF10EF //Botao 4 - Esquerda
#define BT_5 0xFF38C7 //Botao 5 - Para
#define BT_6 0xFFA25D //Botao 6 - Acende Farol
#define MOTOR1_Enable 5 //Enable Motor 1
#define MOTOR1_1 2 //Pino 1 Motor 1
#define MOTOR1_2 3 //Pino 2 Motor 1
#define MOTOR2_1 4 //Pino 1 Motor 2
#define MOTOR2_2 7 //Pino 2 Motor 2
#define MOTOR2_Enable 6 //Enable Motor 2
#define LUZ_VERMELHA 9 //Saída Luz Vermelha
#define LUZ_SETA_DIREITA 10 //Saída Luz Seta Direita
#define LUZ_SETA_ESQUERDA 11 //Saída Luz Seta Esquerda
#define LUZ_BRANCA_RE 12 //Saída Luz Re
#define LUZ_BRANCA_FRENTE 13 //Saída Luz Branca Farol
int MOTOR1_1State = LOW; //Estado atual do MOTOR1_1
int MOTOR1_2State = LOW; //Estado atual do MOTOR1_2
int MOTOR2_1State = LOW; //Estado atual do MOTOR2_1
int MOTOR2_2State = LOW; //Estado atual do MOTOR2_2
int FAROL_State = LOW; //Estado atual do FAROL
long bt = 0; //Ultimo botao precionado
long penultimo = 0; //Penultimo botao precionado
unsigned long startMilis = 0; //Contado para blink sem delay
int value = LOW; // último valor do LED da SETA
long previousMillis = 0; // último momento que o LED foi atualizado
long interval = 400; // tempo de transição entre estados do pisca da seta (milisegundos)
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(MOTOR1_1, OUTPUT);
pinMode(MOTOR1_2, OUTPUT);
pinMode(MOTOR1_Enable, OUTPUT);
pinMode(MOTOR2_1, OUTPUT);
pinMode(MOTOR2_2, OUTPUT);
pinMode(MOTOR2_Enable, OUTPUT);
pinMode(LUZ_VERMELHA, OUTPUT);
pinMode(LUZ_SETA_DIREITA, OUTPUT);
pinMode(LUZ_SETA_ESQUERDA, OUTPUT);
pinMode(LUZ_BRANCA_RE, OUTPUT);
pinMode(LUZ_BRANCA_FRENTE, OUTPUT);
//Motor Ativo no Inicio
digitalWrite(MOTOR1_Enable,HIGH);
digitalWrite(MOTOR2_Enable,HIGH);
}
void loop() {
if (irrecv.decode(&results)) {
irrecv.resume();
Serial.println(results.value, HEX); //Aqui voce descobre qual o botao do seu controle
//Apenas para filtrar os botoes apertados, no meu caso para filtrar outros controles =)
if(results.value == BT_1 || results.value == BT_2 || results.value == BT_3 || results.value == BT_4 || results.value == BT_5 || results.value==BT_6)
{
startMilis = millis(); //Apertou um botao, reseta o contador
bt = results.value; //Salva ultimo botao apertado
if(bt==BT_1)
mod(1);
else if(bt==BT_2)
mod(2);
else if(bt==BT_3)
{
if(penultimo==BT_1)
mod(3);
else if(penultimo==BT_2)
mod(4);
else
mod(5);
}
else if(bt==BT_4)
{
if(penultimo==BT_1)
mod(6);
else if(penultimo==BT_2)
mod(7);
else
mod(8);
}
else if(bt==BT_5)
mod(9);
else
mod(10);
}
}
if(bt==BT_3)
{
if (millis() - previousMillis > interval)
{
previousMillis = millis(); // lembre-se do último tempo que piscamos o LED
value=!value;
digitalWrite(LUZ_SETA_DIREITA, value);
}
}
else if(bt==BT_4)
{
if (millis() - previousMillis > interval)
{
previousMillis = millis(); // lembre-se do último tempo que piscamos o LED
value=!value;
digitalWrite(LUZ_SETA_ESQUERDA, value);
}
}
}
void mod(int x)
{
unsigned long currentMillis = millis();
if(x == 1)
{
//Mod 1, Anda para Frente
digitalWrite(MOTOR1_Enable,HIGH);
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_DIREITA,LOW);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
digitalWrite(LUZ_BRANCA_RE,LOW);
penultimo=BT_1;
MOTOR1_1State = LOW;
MOTOR1_2State = HIGH;
MOTOR2_1State = LOW;
MOTOR2_2State = HIGH;
}
if(x == 2)
{
//Mod 2, Anda para Traz
digitalWrite(MOTOR1_Enable,HIGH);
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_DIREITA,LOW);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
digitalWrite(LUZ_BRANCA_RE,HIGH);
penultimo=BT_2;
MOTOR1_1State = HIGH;
MOTOR1_2State = LOW;
MOTOR2_1State = HIGH;
MOTOR2_2State = LOW;
}
if(x == 3)
{
//Mod 3, Anda para Frente e Direita
analogWrite(MOTOR1_Enable, 90); //Corresponde a 35% do ciclo
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
MOTOR1_1State = LOW;
MOTOR1_2State = HIGH;
MOTOR2_1State = LOW;
MOTOR2_2State = HIGH;
}
if(x == 4)
{
//Mod 4, Anda para Traz e Direita
analogWrite(MOTOR1_Enable, 90); //Corresponde a 35% do ciclo
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
MOTOR1_1State = HIGH;
MOTOR1_2State = LOW;
MOTOR2_1State = HIGH;
MOTOR2_2State = LOW;
}
if(x == 5)
{
//Mod 5, Gira sobre o eixo no sentido horário
digitalWrite(MOTOR1_Enable, HIGH);
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
MOTOR1_1State = HIGH;
MOTOR1_2State = LOW;
MOTOR2_1State = LOW;
MOTOR2_2State = HIGH;
}
if(x == 6)
{
//Mod 6, Anda para Frente e Esquerda
digitalWrite(MOTOR1_Enable, HIGH);
analogWrite(MOTOR2_Enable,90); //Corresponde a 35% do ciclo
digitalWrite(LUZ_SETA_DIREITA,LOW);
MOTOR1_1State = LOW;
MOTOR1_2State = HIGH;
MOTOR2_1State = LOW;
MOTOR2_2State = HIGH;
}
if(x == 7)
{
//Mod 7, Anda para Traz e Esquerda
digitalWrite(MOTOR1_Enable, HIGH);
analogWrite(MOTOR2_Enable,90); //Corresponde a 35% do ciclo
digitalWrite(LUZ_SETA_DIREITA,LOW);
MOTOR1_1State = HIGH;
MOTOR1_2State = LOW;
MOTOR2_1State = HIGH;
MOTOR2_2State = LOW;
}
if(x == 8)
{
//Mod 8, Gira sobre o eixo no sentido anti-horário
digitalWrite(MOTOR1_Enable, HIGH);
digitalWrite(MOTOR2_Enable,HIGH);
digitalWrite(LUZ_SETA_DIREITA,LOW);
MOTOR1_1State = LOW;
MOTOR1_2State = HIGH;
MOTOR2_1State = HIGH;
MOTOR2_2State = LOW;
}
if(x == 9)
{
//Mod 9, Para
penultimo=BT_5;
digitalWrite(LUZ_BRANCA_RE,LOW);
digitalWrite(LUZ_SETA_DIREITA,LOW);
digitalWrite(LUZ_SETA_ESQUERDA,LOW);
MOTOR1_1State = LOW;
MOTOR1_2State = LOW;
MOTOR2_1State = LOW;
MOTOR2_2State = LOW;
}
if(x == 10)
{
//Mod 10, Acende Farol
FAROL_State=!FAROL_State;
digitalWrite(LUZ_VERMELHA,FAROL_State);
digitalWrite(LUZ_BRANCA_FRENTE,FAROL_State);
}
digitalWrite(MOTOR1_1, MOTOR1_1State);
digitalWrite(MOTOR1_2, MOTOR1_2State);
digitalWrite(MOTOR2_1, MOTOR2_1State);
digitalWrite(MOTOR2_2, MOTOR2_2State);
}

