Control de Arduino con mando infrarojos
#1
Saludos miles. 
 Hoy voy a hacer un megatruño del hiperespacio que necesito para poder controlar las farolas, iluminación de edificios, lucecitas diversas, efectos especiales y botón de autodestrucción.
 
 Ahora algo más comprensible para aquellos que no sufran de una fuerte enfermedad mental como yo... ble ble ble Lengua
 Quiero manejar las lusesitas de la maqueta y otros efectos, externos a lo que es el tren en si mesmo.
 Podríamos tirar de cable, interruptores y sistema tradisional, pero el "franquestein" que hay en mi no se daría por satisfecho. Así que me he decidido por controlar un grupo de relés por medio de un ARDUINO MEGA 2560. Este tiene mas de 50 salidas digitales, lo que es suficiente para liarla parda en la maqueta.
 Material:
- Arduino Mega.
- Placas de relés.
- Receptor IR.
- Mando a distancia "cualquiera" (veremos que hay que leer algunos codigos para que la cosa funcione)
- Protoboard.
- Cablesillos diversos para montar el lio.
- Resistencia de 220 ohmios o de 330 .... o similar, no hay que ser pejilguero.
- Cerveza.
   

 También hará falta alguna librería nueva para el arduino, ya que sino no curra el mando. Esta librería seria la Libreria del protocolo NEC
que se puede bajar aqui:
.zip   NECIRrcv.zip (Tamaño: 4.31 KB / Descargas: 6)
 La version que uso de skratch de arduino es la 1.8.5
Responder
#2
Lo primero es añadir la librería al sketch de arduino. Si no sabes, ¡aaay! dioses de Roma... no voy a explicártelo aquí. Te recomiendo que empieces algún tutorial en youtube para aprender unas bases de la plaquita dichosa (como todos.... pero verás que hay mucho por ahí y es fácil de aprender)
 Lo primero es conectar el receptor de INFRAROJOS. Hay ya shields, escudos o placas que ya tienen preparado el receptor IR. Yo uso unos que puedes comprar en cualquier tienda de electrónica y valen un peo (no es que sean caquita, es que valen poco=peo)
 Aquí os pongo un ejemplo de tres de ellos que valen 0,50 peos.
   
 He puesto las patillas que tienen (3) con su conexión. Esta sería. el negativo al negativo de la protoboard. El positivo, por medio de una resistencia de 330 ohmios, al positivo de protoboard. Y la de out a la salida numero 8 de arduino. 
     
 Ahora haré un dibujo acorde con mi edad mental y mis recursos artísticos. 
       
Responder
#3
Y ahora añadimos el programa al sketch de arduino.
   


 Aquí el código en rojo:


// Sketch para controlar 14 reles con un

// mando a distancia IR con protocolo NEC

#include <Arduino.h>
#include <NECIRrcv.h> //Libreria del protocolo NEC
#define IRPIN 8
// Pin del receptor IR

NECIRrcv ir(IRPIN);
int pupete = 14; //pin de otra ventana
int rojo = 12;  //Pin del color ROJO del led RGB
int verde = 15; //Pin del color VERDE del led RGB
int azul = 10; //Pin del color AZUL del led RGB
int amarillo = 9; // pin nuevo
int ninoni = 16; //pin mando st
int fuxia = 7;  //Pin del numero 5  del mando
int morado = 6;  //Pin del numero 6  del mando
int gris = 5;  //Pin del numero 7  del mando
int negro = 4;  //Pin del numero 8  del mando
int huevo = 3;  //Pin del numero 9  del mando
int chufa = 2;  //Pin del numero 0  del mando
int gru = 17; //pin del numero abajo del mando
int kakel = 18; // pin del mando vol-



boolean estadopupete = false;
boolean estadorojo = false;
boolean estadoverde = false;
boolean estadoazul = false;
boolean estadoamarillo = false;
boolean estadopower = false;
boolean estadoninoni = false;
boolean estadofuxia = false;
boolean estadomorado = false;
boolean estadogris = false;
boolean estadonegro = false;
boolean estadohuevo = false;
boolean estadochufa = false;
boolean estadogru = false;
boolean estadokakel = false;


long power = 0xFF00BF00;  //Codigo correspondiente al boton POWER del mando a distancia
long butpupete =0xF20DBF00;// codigo boton eq
long butrojo = 0xEF10BF00; //Codigo correspondiente al boton 1 del mando a distancia
long butverde = 0xEE11BF00; //Codigo correspondiente al boton 2 del mando a distancia
long butazul = 0xED12BF00; //Codigo correspondiente al boton 3 del mando a distancia
long butamarillo = 0xEB14BF00; // codigo boton 4
long butninoni = 0xF10EBF00; // codigo boton st
long butfuxia = 0xEA15BF00; // codigo boton 5
long butmorado = 0xE916BF00; // codigo boton 6
long butgris = 0xE718BF00; // codigo boton 7
long butnegro = 0xE619BF00; // codigo boton 8
long buthuevo = 0xE51ABF00; // codigo boton 9
long butchufa = 0xF30CBF00; // codigo boton 0
long butstop = 0xFD02BF00; // codigo boton stop
long butgru = 0xF708BF00; // codigo boton abajo
long butkakel = 0xF50ABF00; // codigo boton vol-



void setup()
{
  Serial.begin(9600); //Iniciamos comunicacion serie
  Serial.println("NEC IR code reception") ;
  ir.begin(); //Iniciamos la recepcion IR
  pinMode(pupete, OUTPUT);
  pinMode(rojo, OUTPUT);
  pinMode(verde,OUTPUT);
  pinMode(azul, OUTPUT);
  pinMode(amarillo,OUTPUT);
  pinMode(ninoni,OUTPUT);
  pinMode(fuxia,OUTPUT);
  pinMode(morado,OUTPUT);
  pinMode(gris,OUTPUT);
  pinMode(negro,OUTPUT);
  pinMode(huevo,OUTPUT);
  pinMode(chufa,OUTPUT);
  pinMode(gru,OUTPUT);
  pinMode(kakel,OUTPUT);
}

void loop()
{
  unsigned long ircode; //Variable que contendra el codigo decimal del boton pulsado
 
  while (ir.available())
  {
    ircode = ir.read(); //Leemos el codigo del boton pulsado
     Serial.print("got code: 0x") ;
    Serial.println(ircode,HEX) ;
     if (ircode == power) //Si el boton de power... apagamos el led
     {
       delay (50);//Invertimos todos los estados
     estadopupete = !estadopupete;
     estadorojo = !estadorojo;
     estadoverde = !estadoverde;
     estadoazul = !estadoazul;
     estadoamarillo = !estadoamarillo;
     estadoninoni = !estadoninoni;
     estadofuxia = !estadofuxia;
     estadomorado = !estadomorado;
     estadogris = !estadogris;
     estadonegro = !estadonegro;
     estadohuevo = !estadohuevo;
     estadochufa = !estadochufa;
     estadogru = !estadogru;
     estadokakel = !estadokakel;

       digitalWrite(pupete, estadopupete);
       digitalWrite(rojo, estadorojo);
       digitalWrite(verde, estadoverde);
       digitalWrite(azul, estadoazul);
       digitalWrite(amarillo, estadoamarillo);
       digitalWrite(ninoni, estadoninoni);
       digitalWrite(fuxia, estadofuxia);
       digitalWrite(morado, estadomorado);
       digitalWrite(gris, estadogris);
       digitalWrite(negro, estadonegro);
       digitalWrite(huevo, estadohuevo);
       digitalWrite(chufa, estadochufa);
       digitalWrite(gru, estadogru);
       digitalWrite(kakel, estadokakel);
     }
     else if (ircode == butpupete){
     delay(100);
     estadopupete = !estadopupete;
     digitalWrite(pupete,estadopupete);
     }
     else if (ircode == butrojo){
     delay(100);
     estadorojo = !estadorojo;
     digitalWrite(rojo,estadorojo);
     }

     else if (ircode == butverde){
       delay (100);
     estadoverde = !estadoverde;
     digitalWrite(verde,estadoverde);
     }
     else if (ircode == butazul){
      delay (100);
      estadoazul = !estadoazul;
      digitalWrite(azul,estadoazul);
     }
     else if (ircode == butamarillo){
       delay (100);
       estadoamarillo = !estadoamarillo;
       digitalWrite(amarillo,estadoamarillo);
     }
     else if (ircode == butninoni){
     delay(100);
     estadoninoni = !estadoninoni;
     digitalWrite(ninoni,estadoninoni);
     }
      else if (ircode == butfuxia){
     delay(100);
     estadofuxia = !estadofuxia;
     digitalWrite(fuxia,estadofuxia);
     }
      else if (ircode == butmorado){
     delay(100);
     estadomorado = !estadomorado;
     digitalWrite(morado,estadomorado);
     }
     else if (ircode == butgris){
     delay(100);
     estadogris = !estadogris;
     digitalWrite(gris,estadogris);
     }
      else if (ircode == butnegro){
     delay(100);
     estadonegro = !estadonegro;
     digitalWrite(negro,estadonegro);
     }
      else if (ircode == buthuevo){
     delay(100);
     estadohuevo = !estadohuevo;
     digitalWrite(huevo,estadohuevo);
     }
      else if (ircode == butchufa){
     delay(100);
     estadochufa = !estadochufa;
     digitalWrite(chufa,estadochufa);
     }
     else if (ircode == butgru){
     delay(100);
     estadogru = !estadogru;
     digitalWrite(gru,estadogru);
     }
     else if (ircode == butkakel){
     delay(100);
     estadokakel = !estadokakel;
     digitalWrite(kakel,estadokakel);
     }
      else if (ircode ==butstop){
        delay(1000);
       digitalWrite(pupete, LOW);
       digitalWrite(rojo, LOW);
       digitalWrite(verde, LOW);
       digitalWrite(azul, LOW);
       digitalWrite(amarillo, LOW);
       digitalWrite(ninoni, LOW);
       digitalWrite(fuxia, LOW);
       digitalWrite(morado, LOW);
       digitalWrite(gris, LOW);
       digitalWrite(negro, LOW);
       digitalWrite(huevo, LOW);
       digitalWrite(chufa, LOW);
       digitalWrite(gru, LOW);
       digitalWrite(kakel, LOW);
      }
  }
}


Tomaaaaaaa cognazooooooo.
   
Responder
#4
Bueno.... Si tienes la librería bien instalada y lo que es el receptor de IR instalado, conecta tu arduino al pc y carga el programa. Cuando lo tengas ya cargado y ejecutándose, pon en marcha el monitor serial.
 Ahí podrás ver el codigo del mando a distancia que vas a usar.
   
 Ahora sustituye el codigo de tu mando en el programa de arduino... en color verde
long power = 0xFF00BF00;  //Codigo correspondiente al boton POWER del mando a distancia
long butpupete =0xF20DBF00;// codigo boton eq

 Los códigos escritos en el programa corresponden a MI mando, y como no te lo dejo, no olvides mirar los valores del tuyo y ponerlos...jejejeje

Ahora toda usar los módulos de relés. Estos son de 8 y 4 relés. 
   
 
 Es importante insistir en : ¡¡¡ ATENCIÓN A TODO LO QUE CONECTAMOS A ARDUINO!!!
 Arduino funciona muy bien si no superas el medio amperio en momentos puntuales. Por eso es conveniente que aquellos escudos, placas o circuitos que podamos alimentar de manera externa; lo hagamos.
 Los módulos que están en la fotografía tienen dos terminales llamados Vcc y GND. Estos los conectaremos a una fuente externa y lo único que SÍ compartirán con la placa arduino es GND o tierra o masa o negativo.
   

 Recuerda, Cable negro= Masa= Negativo..... Cable Rojo=Positivo= Vcc
 Cuando están todos los relés excitados (Mmmmmm) Sonrojado El consumo se dispara, ¡¡Señora!!
   

 Por eso es tan importante alimentar toooodo lo que se pueda desde fuera. Yo tengo el consumo de arduino a 110 mA estable y, hala, a funcionar por horas sin peligro.
Responder
#5
Ahora toca enchufar cada una de las entradas de la placa de rele con el correspondiente pin de arduino. los señalados en el programa... (en color verde, figura...)

int pupete = 14; //pin de otra ventana
int rojo =
12;  //Pin del color ROJO del led RGB

Así en todas las que vayas a usar.  Y te quedara una maraña de cables tal que esta....jejejejeje.
   
 Y así queda... en crudo.
https://www.dropbox.com/s/m05r5jauma0ki1...0.mp4?dl=0
Responder
#6
Lo próximo hacerle una caja con la impresora.... con forma de almacén...
Responder
#7
Muy buena idea y excepcionalmente explicada. Muchas gracias por compartirlo con el foro.

SaluNdos

Enviado desde mi SM-J530F mediante Tapatalk
Responder


Posibles temas similares...
Tema Autor Respuestas Vistas Último mensaje
  Proyecto de pupitre para control simple DCC Kris Kelvin 37 6,720 08-09-2024, 12:43
Último mensaje: Kris Kelvin
  Mando Wlan de la Z21 tigrin 2 1,992 03-08-2022, 07:34
Último mensaje: jositoxtr
  Cable para el mando de MULTIMAUS JoseraGR1 2 2,114 30-05-2022, 16:57
Último mensaje: JoseraGR1
  Rocrail-arduino miguel 12 7,151 27-03-2021, 11:58
Último mensaje: miguel
  Segundo mando Multimaus leptrain 7 8,228 12-06-2019, 06:10
Último mensaje: leptrain
  decoder para desvíos fleischmann con arduino Pontedeume 3000 26 35,771 01-02-2019, 18:54
Último mensaje: Pecetero
  Novato Arduino y servos ray269 8 14,419 22-01-2019, 19:17
Último mensaje: Pochy
  Control de semáforos en digital con z21 quisn 4 8,937 25-09-2018, 20:19
Último mensaje: quisn
  Panel de control decoder TT-F9152 FLEISHMANN ray269 1 4,285 05-04-2018, 21:56
Último mensaje: s5jar
  Puente giratorio fleishmann 9152 con arduino ray269 10 14,376 07-03-2018, 07:49
Último mensaje: ray269

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)