Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);
Arduino Controle Remoto
Hoje vamos aprender a utilizar o controle Remoto Infra-Vermelho YK-001 com Arduino.
Com esta aplicação, podemos controlar ou comandar por exemplo, usando circuitos eletrônicos com Transistores MOS-FET, Darlington, acopladores ópticos ou relés, circuitos de potência para controlar lâmpadas ou pequenos motores, etc...

Usaremos a biblioteca de Infra-Vermelho IRremote, que pode ser baixada em: http://www.4shared.com/zip/FHHwmplA/IRremote_library.html
O controle remoto utilizado, será o YK-001 com 21 teclas, muito comum no ramo de trabalhos com o Arduino.
como podemos ver na figura acima, a cada tecla temos um código numérico associado, devemos respeitar este código, que será recebido pelo Arduino e na hora de utilizar uma determinada tecla do controle remoto verificar se é a tecla correta para poder acionar un driver de dispositivo.
Neste link temos um arquivo contendo os códigos das respectivas teclas em Hexadecimal
http://www.4shared.com/file/lZO81VuK/YK-001.html
Em termos de software, iremos desenvolver dois programas; um para identificar as teclas quando apertadas e nos retornar os códigos (serve também para verificar se o controle está OK).
O outro será para acionar 7 saídas no Arduino, como se fossem 7 relés ou um outro dispositivo; neste caso será feito o acendimento de um LED (para termos uma interação com o sistema).
O receptor utilizado: Receptor IR 38 KHz TSOP4838, ou equivalente (por exemplo: IRM-3638)
No link o DataSheet do componente:
http://www.4shared.com/office/5pjFusnm/A-1551.html
COMPONENTES:
1 x Arduino Duemilanove, UNO ou MEGA
1 x Bread-Board
7 x LEDs (cores diversa e tamanho de acordo com a preferência)
7 x resistores de 220 Ohm
1 x Receptor Infra-Vermelho TSOP4838 ou equivalente (por exemplo: IRM-3638)
1 x controle remoto YK-001 de 21 teclas
Fios e Cabos para as conexões
DIAGRAMAS:
Abaixo o esquema de ligação dos componentes;
Observar que o pino onde será ligado o sensor Infra-Vermelho no Arduino, é o pino 2
Pinos 3 a 9 serão conectados aos LEDs para acionamento quando pressionado uma tecla do controle remoto.
Observar a pinagem do seu receptor Infra-Vermelho para não ligar invertido!
 É uma boa prática colocar um resistor de 10 K Ohm entre o pino "out" e o VCC para fazer pull-up do sensor (fica a seu critério usar ou não).
SOFTWARE:
Abaixo os dois programas usados;
1 - Programa para verificação dos dados recebidos a partir do controle remoto no Arduino
http://www.4shared.com/file/MHTyXGBZ/INFRA_RED_3_ino.html
/*
################################################################################
#   Arquivo:            INFRA_RED_3                                             
#       Micro-processador:  Arduino UNO         
#   Linguagem:     Wiring / C /Processing /Fritzing / Arduino IDE          
#      
# Objetivo:           Scrolling LED dot Matrix
#            
# Funcionamento:     Recebe a informação do controle remoto e 
#                           mostra no console serial o código recebido
#                           
#   
#   Autor:              Marcelo Moraes 
#   Data:               11/08/12 
#   Local:              Sorocaba - SP 
#     
################################################################################
 Este exemplo é um código de domínio público.
 */
// inclui a biblioteca
#include <IRremote.h>
int RECV_PIN = 2; // define o pino do receptor infra vermelho
IRrecv irrecv(RECV_PIN);
decode_results results;
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // inicia o receptor infra vermelho
}
void loop() {
if (irrecv.decode(&results)) {
  Serial.println(results.value );
  irrecv.resume(); // recebe o próximo valor
}
}
// FIM DA COMPILAÇÃO
2 - acionamento de dispositivos remotamente
http://www.4shared.com/file/PwGKAHU9/INFRA_RED_4.html
/*
################################################################################
#   Arquivo:            INFRA_RED_4                                             
#       Micro-processador:  Arduino UNO         
#   Linguagem:     Wiring / C /Processing /Fritzing / Arduino IDE          
#      
# Objetivo:           Scrolling LED dot Matrix
#            
# Funcionamento:     Recebe a informação do controle remoto e 
#                           aciona os dispositivos de saída (LEDs)
#                           
#   
#   Autor:              Marcelo Moraes 
#   Data:               11/08/12 
#   Local:              Sorocaba - SP 
#     
################################################################################
 Este exemplo é um código de domínio público.
 */
// inclui bliblioteca para Infra-Vermelho
#include <IRremote.h>
// definição de pinos
int RECV_PIN = 2;
int Relay1_PIN = 3;
int Relay2_PIN = 4;
int Relay3_PIN = 5;
int Relay4_PIN = 6;
int Relay5_PIN = 7;
int Relay6_PIN = 8;
int Relay7_PIN = 9;
// definição de variáveis
IRrecv irrecv(RECV_PIN);
decode_results results;
// executado na inicialização do sistema
void setup()
{
  // definição de modo dos pinos
  pinMode(Relay1_PIN, OUTPUT);
  pinMode(Relay2_PIN, OUTPUT);
  pinMode(Relay3_PIN, OUTPUT);
  pinMode(Relay4_PIN, OUTPUT);
  pinMode(Relay5_PIN, OUTPUT);
  pinMode(Relay6_PIN, OUTPUT);
  pinMode(Relay7_PIN, OUTPUT);
  pinMode(6, OUTPUT);
  irrecv.enableIRIn(); // Inicialização do receptor Infra-vermelho
}
int on = 1;
// loop principal do programa
void loop() {
  if (irrecv.decode(&results)) {
    if (results.value == 16724175) { // YK-001 button 1
       {
        on = !on;
        digitalWrite(Relay1_PIN, on ? HIGH : LOW);
      }
     }
{
    if (results.value == 16718055) { // YK-001 button 2
       {
        on = !on;
        digitalWrite(Relay2_PIN, on ? HIGH : LOW);
      }
      }    
  {
    if (results.value == 16743045) { // YK-001 button 3
     {
        on = !on;
        digitalWrite(Relay3_PIN, on ? HIGH : LOW);
      }
     }    
  {
    if (results.value == 16716015) { // YK-001 button 4
     {
        on = !on;
        digitalWrite(Relay4_PIN, on ? HIGH : LOW);
      }
     }
   {
    if (results.value == 16726215) { // YK-001 button 5
       {
        on = !on;
        digitalWrite(Relay5_PIN, on ? HIGH : LOW);
      }
     }
   {     
    if (results.value == 16734885) { // YK-001 button 6
       {
        on = !on;
        digitalWrite(Relay6_PIN, on ? HIGH : LOW);
      }
     }
   {  
    if (results.value == 16728765) { // YK-001 button 7
       {
        on = !on;
        digitalWrite(Relay7_PIN, on ? HIGH : LOW);
      }
     }
{     
//
//
//  COLOQUE MAIS IFs COM VALORES A SEREM IDENTIFICADOS E PINOS DEINIDOS
//
//
    irrecv.resume(); // recebe o próximo valor
  }
}}}}}}}}
// FIM DA COMPILAÇÃO
Atualização de MARÇO / 2023
CÓDIGO ATUALIZADO PARA TRABALHAR COM NOVAS VERSÕES DA BIBLIOTECA IRremote.h
A instrução irrecv.decode(&results) não mais está em funcionamento....
Este novo código é preser usado com o controle remoto YK-001
/*
 * SimpleReceiver.cpp
 *
 * Demonstrates receiving NEC IR codes with IRrecv
 *
 *  Copyright (C) 2020-2021  Armin Joachimsmeyer
 *  armin.joachimsmeyer@gmail.com
 *
 *  This file is part of Arduino-IRremote https://github.com/Arduino-IRremote/Arduino-IRremote.
 *
 *  MIT License
 */
/*
 * Specify which protocol(s) should be used for decoding.
 * If no protocol is defined, all protocols are active.
 */
//#define DECODE_DENON
//#define DECODE_SHARP        // the same as DECODE_DENON
//#define DECODE_JVC
//#define DECODE_KASEIKYO
//#define DECODE_PANASONIC    // the same as DECODE_KASEIKYO
//#define DECODE_LG
//#define DECODE_NEC
//#define DECODE_SAMSUNG
//#define DECODE_SONY
//#define DECODE_RC5
//#define DECODE_RC6
//#define DECODE_BOSEWAVE
//#define DECODE_LEGO_PF
//#define DECODE_MAGIQUEST
//#define DECODE_WHYNTER
//#define DECODE_HASH         // special decoder for all protocols
#include <Arduino.h>
#include <IRremote.h>
#define IR_RECEIVE_PIN 2
#define LED_1 3
//int LED_1 = 3;
bool LED_1_FLAG = false;
int value = 0;
void setup() {
    pinMode(IR_RECEIVE_PIN, INPUT);
    pinMode(LED_1, OUTPUT);
    Serial.begin(9600);
    // Just to know which program is running on my Arduino
    Serial.println(F("INICIALIZANDO ...  " __DATE__ "\r\nUSando biblioteca versião " VERSION_IRREMOTE));
    /*
     * Start the receiver, enable feedback LED and take LED feedback pin from the internal boards definition
     */
    IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
}
void loop() {
    if(IrReceiver.decode()){
        //value = String(IrReceiver.decodedIRData.command, DEC).toInt();
        value = IrReceiver.decodedIRData.command;
        IrReceiver.resume();
        delay(100);
        //Serial.println("recebido: " + String(value));
        switch(value){
          case 69: Serial.print("Recebido valor: " + String(value) + "  POWER\r\n"); LED_1_FLAG = !LED_1_FLAG; break; 
          case 70: Serial.print("Recebido valor: " + String(value) + "  MODE\r\n"); break;
          case 71: Serial.print("Recebido valor: " + String(value) + "  MUTE\r\n"); break;
          case 68: Serial.print("Recebido valor: " + String(value) + "  BACKWARD\r\n"); break;
          case 64: Serial.print("Recebido valor: " + String(value) + "  FORWARD\r\n"); break;
          case 67: Serial.print("Recebido valor: " + String(value) + "  PLAY/PAUSE\r\n"); break;
          case 7: Serial.print("Recebido valor: " + String(value) + "  MINUS\r\n"); break;
          case 21: Serial.print("Recebido valor: " + String(value) + "  PLUS\r\n"); break;
          case 9: Serial.print("Recebido valor: " + String(value) + "  EQ\r\n"); break;
          case 22: Serial.print("Recebido valor: " + String(value) + "  0\r\n"); break;
          case 25: Serial.print("Recebido valor: " + String(value) + "  100+\r\n"); break;
          case 13: Serial.print("Recebido valor: " + String(value) + "  UNDO\r\n"); break;
          case 12: Serial.print("Recebido valor: " + String(value) + "  1\r\n"); break;
          case 24: Serial.print("Recebido valor: " + String(value) + "  2\r\n"); break;
          case 94: Serial.print("Recebido valor: " + String(value) + "  3\r\n"); break;
          case 8: Serial.print("Recebido valor: " + String(value) + "  4\r\n"); break;
          case 28: Serial.print("Recebido valor: " + String(value) + "  5\r\n"); break;
          case 90: Serial.print("Recebido valor: " + String(value) + "  6\r\n"); break;
          case 66: Serial.print("Recebido valor: " + String(value) + "  7\r\n"); break;
          case 82: Serial.print("Recebido valor: " + String(value) + "  8\r\n"); break;
          case 74: Serial.print("Recebido valor: " + String(value) + "  9\r\n"); break;
        }
        resetLEDs();
    }
}
void resetLEDs(){
  digitalWrite(LED_1, LED_1_FLAG);
} 
// FIM DA COMPILAÇÃO
OBS.: Estes sketches não funcionam bem com a versão 1.0 e 1.01 da IDE do Arduino, por favor utilizem a versão 0023 da IDE.
Provavelmente problema com a versão da biblioteca IRremote, que não foi detectado pela equipe de desenvovimento
Assistam ao vídeo!
TESTES E VÍDEOS:
Esse sketch é da própria biblioteca IRremote.
http://www.youtube.com/watch?v=eNw-_KqS2Pc
Então é isso!
Até o próximo projeto!
Dúvidas e sugestões enviem para: arduinobymyself@gmail.com





muito bom me ajudou bastante!! parabens
ResponderExcluirObrigado.
ExcluirDivulgo o blog para podermos divulgar conhecimento.
Hardware e Software livre para todos
Olá Marcelo!
ResponderExcluirEstou com problemas na biblioteca IRremote.
A miinha IDE é versão 1.0.2, e simplesmente nao compila.
Você tem alguma idéia de como resolver?
Grato
Alexandre
Tente baixar e instalar uma das bibliotecas abaixo.
ExcluirObservação: Nunca testei na versão1.0.2 da IDE do arduino, use preferencialmente a 0023.
http://www.4shared.com/zip/0aPw_ZJn/IRremote_library.html
http://www.4shared.com/zip/QVWV-fAT/IRremote.html
Olá, você têm os códigos das demais teclas deste controle, consegui apenas a 1,2,3,4,5,6,7 e 0(16738455) se puder repassar as demais agradeço.
ResponderExcluirGrato.
Elias
Olá
ResponderExcluirOs códigos estão na figura do blog que representa o controle remoto YK-001. É só conferir!
Abraço
Marcelo Moraes