Utilización mando infrarrojos III: Control servomotor

En esta ocasión, pasaremos a controlar un servomotor con nuestro mando y sensor de infrarrojos. Además, incorporaremos de forma auxiliar dos LEDs para conseguir un mayor atractivo al proyecto.

Ver Utilización mando infrarrojos I: Lectura código y ejemplo para una introducción y entender la lectura de los códigos del mando.

Primero, realizaremos el circuito, teniendo en cuenta los componentes a utilizar:

  • LED azul, junto con su resistencia de 220Ω
  • LED verde, junto con su resistencia de 220Ω
  • Servomotor
  • Sensor de infrarrojos junto con una resistencia de 220Ω
  • Protoboard – BreadBoard
  • Cables

(un poco engorroso el dibujo, pero no hemos encontrado otra posibilidad. Si se trabaja paso por paso no es complicado)

En cuanto al sketch, es el siguiente:

#include <WProgram.h>

#include <NECIRrcv.h> //Librería del protocolo NEC

#include <Servo.h> // Librería del servo

#define IRPIN 8 // Pin del receptor IR

#define verde 13

#define azul 12


NECIRrcv ir(IRPIN);


/*INFORMACION LECTURAS

power = 3125149440;  //Código correspondiente al boton POWER del mando a distancia

uno = 4077715200; //Código correspondiente al botón 1 del mando a distancia

dos = 3877175040; //Código correspondiente al botón 2 del mando a distancia

tres = 2707357440; //Código correspondiente al botón 3 del mando a distancia

mas = 4127850240;

menos = 3927310080;

*/


Servo servo;


void setup()

{

  servo.attach (6);

  pinMode (verde, OUTPUT);

  pinMode (azul, OUTPUT);

  //Serial.begin(9600); //Iniciamos comunicación serie

  ir.begin(); //Iniciamos la recepción IR

  

}


void loop()

{

  unsigned long ircode; //Variable que contendrá el código decimal del botón pulsado

  while (ir.available()) 

  {

    ircode = ir.read(); //Leemos el código del botón pulsado

    

     switch (ircode){

       

       case 3125149440: //power

       digitalWrite (verde, LOW);

       digitalWrite (azul, LOW);

       servo.write (90);

       break;

       

       case 4077715200: // uno

       digitalWrite (verde, LOW);

       digitalWrite (azul, LOW);

       servo.write (60);

       delay (500);

       servo.write (120);

       delay (500);

       servo.write (60);

       delay (500);

       servo.write (120);

       break;

       

       case 3877175040: // dos

       digitalWrite (verde, HIGH);

       digitalWrite (azul, HIGH);

       servo.write (90);

       break;

       

       case 2707357440:  // tres

       digitalWrite (azul,LOW);

       digitalWrite (verde, LOW);

       delay(500);

       digitalWrite (verde, HIGH);

       delay(500);

       digitalWrite (verde, LOW);

       delay(500);

       digitalWrite (verde, HIGH);

       delay(500);

       digitalWrite (verde, LOW);

       delay(500);

       digitalWrite (verde, HIGH);

       delay(500);

       digitalWrite (verde, LOW);

       delay(500);

       digitalWrite (verde, HIGH);

       delay(500);

       digitalWrite (verde, LOW);

       break;

       

       case 4127850240: // más

       digitalWrite (verde, LOW);

       digitalWrite (azul, HIGH);

       servo.write (170);

       break;

       

       case 3927310080: // menos

       digitalWrite (verde, HIGH);

       digitalWrite (azul, LOW);

       servo.write (15);

       break; 

    

      default: //cualquier botón pulsado

      digitalWrite (azul, LOW);

      digitalWrite (verde, LOW);   

     }

  }

}


En cuanto a la declaración y uso de los LEDs, es recomendable echarle un vistazo a Diodo LED. Introducción y ejemplos, mientras que para el servomotor consultar Servomotor. Introducción y ejemplos.

Observamos el bloque switch. Un bloque switch es una forma más compacta de escribir un «if else». Está compuesto por secciones («case») y, opcionalmente se utiliza una sección «default». Si al comprobar el valor que se encuentra dentro del paréntesis, éste coincide con uno de los case, se ejecutarán las instrucciones del interior del mismo, finalizando dichas instrucciones con un «break». El «default» se ejecutará cuando no coincida con ningún «case». Éste se colocará en última instancia y solo podrá haber uno.

Hay que tener en cuenta que el valor que se comprueba en el «case» debe ser  de valor entero (en el caso de la programación para Arduino, aunque en otros lenguajes de programación sí que es posible comparar otro tipo de datos).

Además, si se ejecuta un «case» (el primero que aparezca escrito en el sketch), no es posible que se ejecute otro «case», aunque cumpla la condición.

Finalmente, el resultado obtenido se muestra en el siguiente vídeo:

Y esto es todo. No dudéis en comentar y en preguntar cualquier duda.

Gracias por la atención.

I.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.