martes, 19 de marzo de 2013

Control de LED via IR

En este pequeño tutorial controlaremos un LED con un viejo mando infrarojo que tenía de un TDT roto. Además aprovecharemos el receptor IR del mismo.

Materiales.
-Arduino. (UNO en este caso. Pero vale cualquiera).
-Mando a distancia del TDT.
-Un led.
-Una resitencia de 220 oms. Como no tengo uso de 470. Podriamos montar 2 resistencias de 470 en paralero para dar 239 oms pero paso.
-Una protoboard.
-Cables.
-Una ficha de la luz.
-Ordenador.
-Cable USB para conectar el arduino.


A currar.

Parte física.

1 Conectamos el pin positivo y negativo de la arduino al los carriles de la protoboard.







2 Conectamos el receptor IR a la protoboard. Los sensores IR tienen 3 cables. Uno da corriente, otro es masa y el tercero es de datos. En mi caso el rojo en corriente. El pelado es masa y el blanco es datos.
Como están los cables deshilachados los conecto a una ficha. Esta ficha la conecto con los pelos de los cables de red a la protoboard.
Naranja: Corriente.
Naranja/blanco: masa.
Azul: Datos.

Pongo una resitencia de 470 oms (mejor 220) entre los 5,5 voltios de arduino y el cable de corriente del receptor IR.
Conecto el cable de datos a la protoboard y con ello el pin 3 de la placa.





3 Conectamos el led.

Pinchamos el led en la protoboard y al pin 4 del arduino pero le ponemos una resitencia de 470 oms ente los 5,5 y el positivo del led (pata larga), el negativo lo conectamos a masa.



Software.

Instalando una librería nuevo en arduino.

Descargamos la librería de este página
https://github.com/shirriff/Arduino-IRremote

Y la descomprimimos en la carpeta donde intalamos arduino y dentro de "libraries"

Ahora entramos en la carpeta IRremote y abrimos con el block de notas el archivo "remoteint.h"
En ese archivo cambiamos la linea que pone

#include <WProgram.h>


Por

#include <Arduino.h>



Esto es porque la librería se creo hace mucho. Antes del sistema moderno de arduino.


Conectamos arduino a nuestro puerto USB del PC. Y colocamos el siguiente código.

//incluimos la librería de IR
#include <IRremote.h>
#include <IRremoteInt.h>

//poner IR en marcha
int RECV_PIN = 3; //Definimos el pin donde tiene que esta el IR
IRrecv irrecv(RECV_PIN);
decode_results results;

//declaramos variable
int ValorIR=0; //declramos variable almacen valor ir

//Preparamos el setup
void setup()
{
Serial.begin(9600); //Ponemos el puerto serie a 9600
irrecv.enableIRIn(); // el receptor ir en marcha
}

//definimos una función llamada "leerIR" esto nos ayuda a que en el futuro podamos reutilizarla.
//no tiene parámetros de entra y devuelve un INT
int leerIR(){
if (irrecv.decode(&results)) { // si recibe señal IR
    int lectura = results.value; //Guarda el valor de la señal en la variable lectura
    irrecv.resume(); // Recive siguiente valor IR
    Serial.println(lectura);
    return lectura; //devuelve lectura
}
}
void loop() {

  
  ValorIR=leerIR(); //asignamos a esa variable el valor que devuelve lerIR
}

Lo cargamos en arduino, abrimos el monitor serial y al pulsar un botón del mando a distancia nos dará un número diferente para cada tecla que pulsemos.

En mi caso la tecla 1 del mando a distancia da el código -9691. La 2 el -3571. El botón de arriba me da el 28815 y de de enter el 18615.

Quiero que el led se encienda cuando yo presione enter y se apague cuando lo vuelva a presionar.

Asi que cargamos el siguiente código en nuestro arduino

//incluimos la librería de IR
#include <IRremote.h>
#include <IRremoteInt.h>

//poner IR en marcha
int RECV_PIN = 3; //Definimos el pin donde tiene que esta el IR
IRrecv irrecv(RECV_PIN);
decode_results results;

//declaramos contante
int pinLed=4;

//declaramos variable
int ValorIR=0; //declramos variable almacen valor ir
int estadoLed=0;
//Preparamos el setup
void setup()
{
Serial.begin(9600); //Ponemos el puerto serie a 9600
irrecv.enableIRIn(); // el receptor ir en marcha
pinMode(pinLed, OUTPUT); //definimos el pin del led como de salida
}

//definimos una función llamada "leerIR" esto nos ayuda a que en el futuro podamos reutilizarla.
//no tiene parámetros de entra y devuelve un INT
int leerIR(){
if (irrecv.decode(&results)) { // si recibe señal IR
    int lectura = results.value; //Guarda el valor de la señal en la variable lectura
    irrecv.resume(); // Recive siguiente valor IR
    Serial.println(lectura);
    return lectura; //devuelve lectura
}
}
void loop() {

  
  ValorIR=leerIR(); //asignamos a esa variable el valor que devuelve lerIR
  if (ValorIR==18615){ //comprobamos el codigo recibido
    if (estadoLed==0){ //comprobamos si el led está encendido
      digitalWrite(pinLed,HIGH); //lo encendemos
      estadoLed=1; //marcamos como que está encendido
    }
    else{ //si no está apgado es que esta endendico
      digitalWrite(pinLed,LOW); //lo apagamo
      estadoLed=0; //marcamos como apagado
    }
  }
}
Y el resultado es el siguiente.





Evidentemente encender y apagar un led no es una cosa que sea muy meritoria. Pero hemos visto como capturar una tecla de un mando IR. Ahora la imaginación al poder.
¿Un juego de luces led de arbol de navidad que cambiemos con el mando de la tele?
¿Un coche controlado por IR)
¿Encender una luz, o cafetera, o riego eléctrico con un mando añadiendo un rele?
Esa será la siguiente entrega.

Comenzar con arduino

Desde hace un mes me he metido en el mundo del arduino.

¿Pero que coño es el Arduino?


Arduino ONE.


Si leemos esto:
http://es.wikipedia.org/wiki/Arduino

Y luego esto:
http://arduino.cc/es/

No nos enteramos de una mierda.

Así que diremos que es una placa con un microcontrolador, que pines de entradas y salida, que podemos programar en un ordenador y que reaccione a eventos en el mundo real.

Y seguimos sin entender nada.

Asi que voy a poner un par de ejemplos.

-Programo el arduino y consigo que un led parpadee. Vaya tontería.
http://www.arduteka.com/2011/11/arduino-mi-primer-hola-mundo/ 

-Hago que un led parpadee al ritmo que le marco mediante un potenciómetro. Tontería también.
http://www.arduteka.com/2011/11/tutorial-arduino-0003-entrada-analogica-y-salida-pwm/

-Con un sensor de temperatura consigo saber la temperatura ambiental y enciendo unos led tipo termometro. Tontuna.

http://www.arduteka.com/2011/12/tutorial-arduino-0005-sensor-de-temperatura-ntc/

¿Entonces arduino solo vale para encender led?

NO. Eso son los primeros tutoriales que deberían hacerse para aprender en arduino. 
Luego todo se puede ampliar. 

Por ejemplo que cuando la temperatura de una habitación sea inferior a 20ºC envíe un correo electrónico a una persona y si esta contesta que encienda la calefacción.

Podemos definir un limite inferior de humedad de la tierra y que por debajo de esta se conecte un riego automático.

Podemos conectar un sensor de luminosidad y que cuando se ilumine mucho suba las persianas en invierno, porque hace frio y queremos que entre sol,o las baje en verano.

Podemos hace un robot centinela con web cam y sensor de caidas.

¿Necesito un UAV para espiar a mi vecino o controlar mis tierras?





cámaras térmicas baratas.Impresoras 3d. Fresadoras CNC caseras. Control de temperatura de panales de abeja desde una web. Cámaras de seguridad motorizadas y miles de cosas más con el único limite del ingenio y del dinero claro está.

Además es un hardware libre. Tu si te compras las piezas necesarias para hacerlo te puedes fabricar uno (que sale más barato que comprarla). Por eso existen copias con otros nombres como funduino, o versiones mejoradas para trabajos específicos como la DFrobot.

Vale. Esto mola  ¿Tengo que saber programación?


Sí. hay que tener nociones de programación míninas. Si no sabes que es declarar una variable, o un IF, o que es un bucle FOR, arduino no es para ti.

¿Y electrónica?

No. O por lo menos casi nada. Simplemente saber que es el voltaje (no le metas 220 a la placa), el amperaje y poco más. Y no hace falta soldar nada, a no ser que quieras para que los proyectos sean más finos. Todas las conexiones se realizan mediante cables de pin macho o hembra.

¡Hay  mil arduinos! ¿Cual compro?


Nos centraremos en tres.

Arduino Leonardo, UNO, o duemilanove.


Es el arduino de aprender. No es muy grande, no es muy pequeño y tiene 5 entradas analógicas y 13 salidas digitales. 
El leonardo es el mas moderno y admite teclado USB. Pero en ONE se encuentra barato.


Arduino MEGA, o DUE.


Más grande que el anterior. Más entradas analógicas, más puertos series, más conexiones digitales. Para proyectos grandes. Por ejemplo un coche que tenga dos motores (6 pines), mueva 2 servos (dos pines más), tenga u sensor de temperatura (1 pin), otro de luz (1 pin), dos sensores infrarojos para que no caiga (2 pines) dos sensores de ultrasonidos(2 pines), un laser (1 pin) conexion wifi (6 pines).......



Arduino Nano.




Casi el más pequeño de la familia. (casi) Igual a prestaciones que el Ardunio ONE Pero ocupando mucho menos. Ideal para proyectos finales donde requiramos poco espacio (un mando a distancia, un detector de metano....)




¿Entonces cual compro?


Ninguno. Si vas a empezar el arduino solo no vale de nada. Necesitas un kit para aprender que tenga botones, resistencias, placas, led, motores, pantallas..... Que se el pueda sacar jugo.

Yo compré este

Pero los hay mucho más económicos.


Ya lo tengo ¿Por donde empiezo?

hay mil millones de páginas de tutoriales básicos..
Para mi las mejores son las de 

arduteka:
http://www.arduteka.com/arduino-proyectos-para-principiantes/
Que también habla de componente electrónicos. Está muy bien explicado tanto el código como la parte de hardware.

y los oficiales de arduino.
http://arduino.cc/es/Tutorial/HomePage

Y un pequeño tutorial de la protoboard.
http://red-electronica.blogspot.com.es/2011/04/manual-de-protoboard.html

Parecen más difíciles de lo que realmente son. Aunque lo mejor es hacerlos cuando ya se tiene el arduino en la mano.