Materiais:
- Arduino Uno;
- Ponte H dupla( L9110, L298n ou de transistores)
- Controle emissor IR( controle de TV, Rádio , DVD, Etc)
- Receptor IR;
- Resistor de 100 ohm para o receptor IR.
- 2 Motores, motorredutores ou servos de parabólica adaptado;
- 1 base para montar o conjunto.
O Receptor IR é responsável por receber os pulsos infra vermelhos codificados enviados pelo controle e convertê-los em sinal que possa ser lido e decodificado por um microcontrolador. Antes de fazer as ligações, atentar-se a pinagem do receptor IR. Existem alguns modelos e pinagens diferentes como na imagem abaixo:
Neste exemplo irei utilizar o modelo de pinagem do IS1U60, PIC12043S e SFH505A.
Também existem shields dedicados como este feito por mim mesmo na imagem abaixo:
Ponte H:
A ponte H é um esquema de transistores para controlar o sentido de giro de motores e fazer sua reversão. Para cada motor é necessário uma ponte. Abaixo o esquema de uma ponte H e exemplos de ponte H dupla feita com componentes discretos e um shield de Ponte H:
Caso o carro estiver com os movimentos invertidos, basta trocar os fios + com -.
Devemos ter uma certa atenção ao ligar os pinos 6,7,8 e 9 para que funcione semelhante a lógica abaixo:
0000= PARA
1111=NÃO VAMOS UTILIZAR
Ligaremos também o pino de saída do receptor IR no pino 13 do arduino e o resistor de 100ohm no pino de VCC do receptor IR.
Com relação a base ou chassis , existem algumas prontas na internet, no meu caso, utilizei uma placa de fenolite e colei os servos de parabólica adaptados na parte de trás. Neste caso removi o fim de curso do servo para que gire 3690 graus. Na frente coloquei um pequeno rodizio só para apoio.
Para o programa a seguir, precisaremos da biblioteca IRremote .
// Programa : Carro de Controle Controle Remoto IR
// Autor : Fernando Moreira
#include <IRremote.h>
int RECV_PIN = 13;
float armazenavalor;
int IN1 = 6;
int IN2 = 7;
int IN3 = 8; //PINOS DO ARDUINO UTILIZADOS PARA A PONTE H
int IN4 = 9;
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT); // //PINOS DEFINIDOS COMO SAÍDAS QUE SERÃO LIGADOS A PONTE H
pinMode(IN4, OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Inicializa o receptor IR
}
void loop()
{
if (irrecv.decode(&results))
{
Serial.print("Valor lido : ");
Serial.println(results.value, HEX);
armazenavalor = (results.value);
if (armazenavalor == 0x20DF02FD) //Verifica se a tecla AVANÇAR foi acionada
{
digitalWrite(IN1, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN4, LOW); //AVANÇAR
}
if (armazenavalor == 0x20DF827D) //Verifica se a tecla RÉ foi acionada
{
digitalWrite(IN1, LOW);
digitalWrite(IN3, LOW); //RÉ
digitalWrite(IN2, HIGH);
digitalWrite(IN4, HIGH);
}
if (armazenavalor == 0x20DFE01F) //Verifica se a tecla ESQUERDA foi acionada
{
digitalWrite(IN1, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN4, HIGH); //ESQUERDA
}
if (armazenavalor == 0x20DF609F) //Verifica se a tecla DIREITA foi acionada
{
digitalWrite(IN1, LOW);
digitalWrite(IN3, HIGH); //DIREITA
digitalWrite(IN2, HIGH);
digitalWrite(IN4, LOW);
}
if (armazenavalor == 0x20DF22DD) //Verifica se a tecla PARAR foi acionada
{
digitalWrite(IN1, LOW);
digitalWrite(IN3, LOW); //PARAR
digitalWrite(IN2, LOW);
digitalWrite(IN4, LOW);
}
irrecv.resume(); //Le o próximo valor
}
}
Após compilar e gravar o programa no Arduíno, deixaremos conectado via usb para customizar as teclas de acionamento.
Vamos abrir o monitor serial da IDE do arduino para verificar o que está sendo enviado por cada tecla do controle.
Os valores são impressos via serial e exibidos em hexadecimal :
Vamos abrir o monitor serial da IDE do arduino para verificar o que está sendo enviado por cada tecla do controle.
Os valores são impressos via serial e exibidos em hexadecimal :
Com esses
valores, podemos escolher qualquer tecla que for conveniente, anotar seu valor
e substituir na função if no programa ex:
digitalWrite(IN1, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN4, LOW); //AVANÇAR
Neste caso, a tecla com o valor 0x20DF02FD é responsável por fazer o carro avançar.
Fiz a seguinte
configuração:
Os valores podem ser diferentes de controle para controle. O ideal é ler os valores e substituir no programa conforme necessário.
Esse programa pode ser utilizado para controlar relés, LEDs e qualquer outro dispositivo ligado as portas digitais. Podemos acrescentar mais botões e modificar a lógica conforme a nossa imaginação permitir.