Componentes eletrônicos, Comunicações sem fio, Hobby, Luz, Microcontroladores, Projetos, Sensores, Tutorial

Tutorial de Arduino (Parte 8, Controle remoto IR), 2ª edição

Mais um tutorial de Arduino. Desta vez será explicado como controlar dispositivos com um controle remoto IR (infravermelho). O funcionamento do controle IR será assunto para outro post.

Segunda edição

Eu fiz uns testes e encontrei erros no códigos apresentados neste post. Esta segunda edição substitui os algoritmos com erros por outros que já foram testados e funcionam.

Ligações

Primeiro temos que ligar o módulo receptor no Arduino.

 

 

O pino ao lado do sinal “-” é o terra, o pino do meio é para os 5V e o pino ao lado do “S” é o que recebe o sinal IR. O pino do sinal deve ser ligado a uma entrada digital.

 

 

Aqui o receptor está ligado ao pino digital 7.
O controle remoto para enviar sinais IR.

Adicionando nova biblioteca

Antes de escrever o algoritmo, é necessário baixar uma biblioteca chamada “IRremote.h”. Na janela do Arduino, clique em “Tools(Ferramentas) -> Manage Libraries … (Gerenciar bibliotecas …)”

Este menu deve aparecer no lado esquerdo da janela do Arduino.
Escreva “IRremote” na barra acima de “Type” e a biblioteca IRremote.h é a primeira opção, clique em “INSTALL”.

Algoritmo e novos comandos

Este é o algoritmo que testa o controle remoto IR.

#include <IRremote.h>

#define IR_RECEIVE_PIN 7

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN);
}
void loop() {
  if (IrReceiver.decode()) {
    IrReceiver.resume();
    Serial.println(IrReceiver.decodedIRData.command);
  }
}

A tela serial deve aparecer como mostra abaixo. Deve aparecer um número diferente para cada botão apertado no controle remoto.

Os novos comandos. Este define o pino dos dados do receptor IR.

#define IR_RECEIVE_PIN 7

A inicialização do receptor.

IrReceiver.begin(IR_RECEIVE_PIN);

Verifica se está recebendo sinal IR (IrReceiver.decode()). Se sim, o Arduino lê os dados (IrReceiver.resume();) e imprime o valor decodificado (Serial.println(IrReceiver.decodedIRData.command);).

if (IrReceiver.decode()) {
    IrReceiver.resume();
    Serial.println(IrReceiver.decodedIRData.command);
  }

Alguns projetos

Este projeto controla um LED RGB e um buzzer com controle remoto IR. Aqui mostra o LED RGB e o buzzer ligados no Arduino.

O circuito completo. O terminal do receptor IR fica no mesmo pino do exemplo anterior.

Este é o algoritmo completo.

#include <IRremote.h>

#define IR_RECEIVE_PIN 7

int RGB_red=8;
int RGB_blue=9;
int RGB_green=10;
int buzzer=11;

void setup() {
  Serial.begin(9600);
  pinMode(RGB_red,OUTPUT);
  pinMode(RGB_blue,OUTPUT);
  pinMode(RGB_green,OUTPUT);
  IrReceiver.begin(IR_RECEIVE_PIN);
  digitalWrite(RGB_red,HIGH);
  digitalWrite(RGB_blue,HIGH);
  digitalWrite(RGB_green,HIGH);
}
void loop() {
  if (IrReceiver.decode()) {
    IrReceiver.resume();
    Serial.println(IrReceiver.decodedIRData.command);
  }
  if(IrReceiver.decodedIRData.command==22){ //Pressionou a tecla 1?
    digitalWrite(RGB_red,LOW);
    digitalWrite(RGB_blue,HIGH);
    digitalWrite(RGB_green,HIGH);
  }
  if(IrReceiver.decodedIRData.command==25){ //Pressionou a tecla 2?
    digitalWrite(RGB_red,HIGH);
    digitalWrite(RGB_blue,LOW);
    digitalWrite(RGB_green,HIGH);
  }
  if(IrReceiver.decodedIRData.command==13){ //Pressionou a tecla 3?
    digitalWrite(RGB_red,HIGH);
    digitalWrite(RGB_blue,HIGH);
    digitalWrite(RGB_green,LOW);
  }
  if(IrReceiver.decodedIRData.command==12){ //Pressionou a tecla 4?
    digitalWrite(RGB_red,LOW);
    digitalWrite(RGB_blue,HIGH);
    digitalWrite(RGB_green,LOW);
  }
  if(IrReceiver.decodedIRData.command==24){ //Pressionou a tecla 5?
    digitalWrite(RGB_red,HIGH);
    digitalWrite(RGB_blue,LOW);
    digitalWrite(RGB_green,LOW);
  }
  if(IrReceiver.decodedIRData.command==94){ //Pressionou a tecla 6?
    digitalWrite(RGB_red,LOW);
    digitalWrite(RGB_blue,LOW);
    digitalWrite(RGB_green,HIGH);
  }
  if(IrReceiver.decodedIRData.command==64){ //Liga o buzzer se pressionar a tecla //OK.
    digitalWrite(buzzer,HIGH);
  }else{                         //Se pressionar qualquer outra tecla, o buzzer //desliga.
    digitalWrite(buzzer,LOW);
  }
}

Apertando as teclas 1,2 ou 3, o LED acende em uma das cores primárias. Ao apertar 4, 5 ou 6 pode-se acender duas cores, outras teclas podem ser adicionadas. O próximo projeto é um braço robótico com três servomotores controlado por IR. Este é o braço montado.

Este é o algoritmo.

#include <Servo.h>
#include <IRremote.h>

#define IR_RECEIVE_PIN 7

Servo servobase;
Servo servotower;
Servo servohand;

void setup() {
  Serial.begin(9600);
  IrReceiver.begin(IR_RECEIVE_PIN);
  servobase.attach(9);
  servotower.attach(10);
  servohand.attach(6);
}

void loop() {
  if (IrReceiver.decode()) {
    IrReceiver.resume();
    Serial.println(IrReceiver.decodedIRData.command);
  }
  if(IrReceiver.decodedIRData.command==22){
    servobase.write(100);
  }
  if(IrReceiver.decodedIRData.command==12){
    servobase.write(10);
  }
  if(IrReceiver.decodedIRData.command==25){
    servotower.write(10);
  }
  if(IrReceiver.decodedIRData.command==24){
    servotower.write(100);
  }
  if(IrReceiver.decodedIRData.command==13){
    servohand.write(100);
  }
  if(IrReceiver.decodedIRData.command==94){
    servohand.write(10);
  }
}

Este vídeo mostra o braço robótico em funcionamento.

About Pedro Ney Stroski

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *