Archivos para febrero, 2014

En la tercera parte vimos la instalación de un receptor infrarrojo para controlar nuestro robot mediante IR, utilizando cualquier control remoto existente en casa. Además, escribimos el código correspondiente para cargar a nuestra placa Arduino que nos permite desplazar el robot en las cuatro direcciones.

Ahora, en la cuarta parte, veremos otra manera de controlar a nuestro robot. Cuando construimos robots autónomos, uno de los desafíos más importantes es la habilidad de adaptarse al mundo que lo rodea. Si no incorporamos sentidos a nuestro dispositivo, sólo tendremos un juguete a control remoto, donde la inteligencia y la captación del ambiente están en nuestras manos. Comenzaremos instalando un sensor muy sencillo, que le permitirá a nuestro robot buscar y seguir una llama.

Sensor de Llama

 
Este módulo es sensible a la llama y la radiación. También puede detectar una fuente de luz ordinaria con una longitud de onda de 760nm – 1100nm. La distancia de detección llega hasta 100cm.
Puede ser utilizado como alarma o en los robots de lucha contra incendios.

• Detecta una llama o una fuente de luz con una longitud de onda de 1100nm-760nm.
• Distancia de detección: hasta 100cm.
• Ángulo de detección: 60 grados (sensible al espectro de la llama).
• Circuito integrado LM393 para otorgar mayor precisión y estabilidad en la detección.
• Rango de detección ajustable.
• Tensión de alimentación: 3.3V – 5V.
• Indicador de encendido e indicador de salida digital activa.

Nuestro Robot
Luego de haber completado exitosamente las tres etapas anteriores, nuestro robot se encuentra listo para recorrer el mundo y no sólo recibir nuestras órdenes, sino también adaptarse al medio que lo rodea. A continuación llevaremos a cabo la instalación de toda la electrónica necesaria para que esto ocurra.

La instalación del sensor de llama es muy sencilla y no requiere de componentes adicionales además de los incluidos en el módulo. Luego construiremos un pequeño “beeper” (con unos pocos componentes externos) que se activará en presencia de llama.

En primer lugar, procederemos a instalar el sensor de llama en la parrilla delantera de nuestro robot, como se observa en la siguiente imagen:

 
Luego de haber instalado correctamente nuestro sensor procederemos a realizar las conexiones correspondientes, para lo cual, simplemente debemos conectar los pines de alimentación y la salida digital “D0”.
Ahora procedemos a conectarlo en Ardumoto (que a su vez se encuentra conectado a la placa Arduino UNO R3) conectando los pines de alimentación a los pines 5V y GND respectivamente. Luego conectaremos el pin “D0” del sensor de llama al pin 5 de la placa Arduino.

Ahora, como se mencionó anteriormente, construiremos un pequeño “beeper” que se activará cuando nuestro robot encuentre una llama, y permanecerá activo hasta que la misma desaparezca.

 
Lista de Componentes
1 Buzzer Piezoeléctrico 12V [con oscilador]
1 Transistor 2SC1815
1 Resistencia 10KΩ 0.25W

El circuito, además de ser sencillo, es muy pequeño y puede construirse sobre el cuerpo del buzzer, como se muestra en la siguiente imagen:

 
La conexión de nuestro “beeper” es muy sencilla. La línea de alimentación (cables rojo y negro) se conectará en la bornera de entrada del módulo regulador de voltaje “switching” (ver Construyendo Nuestro Propio Robot Desde Cero – Parte 2), de manera que el “beeper” reciba toda la tensión disponible en las baterías. La línea de activación (cable verde) se conectará al pin 6 de la placa Arduino, como se observa en la siguiente imagen:

 
Llegado este punto, ya tenemos instalada toda la electrónica necesaria para que nuestro robot sea capaz de detectar y seguir una llama. Finalmente, procederemos a escribir el código para nuestro robot.

#define    PWM_A        3
#define    PWM_B        11
#define    DIR_A        12
#define    DIR_B        13
#define	   FIRE_PIN     5
#define    BEEP_PIN     6

bool search;

void rotateright()
{
	digitalWrite(DIR_A, HIGH);
	digitalWrite(DIR_B, LOW);
	analogWrite(PWM_A, 150);
	analogWrite(PWM_B, 150);
}

void forward()
{
	digitalWrite(DIR_A, HIGH);
	digitalWrite(DIR_B, HIGH);
	analogWrite(PWM_A, 255);
	analogWrite(PWM_B, 255);
}

void setup()
{
	pinMode(FIRE_PIN, INPUT);
	pinMode(BEEP_PIN, OUTPUT);
	
	digitalWrite(BEEP_PIN, LOW);
	search = true;
}
 
void loop()
{
	if(search)
	{
		//giro continuo a derecha
		rotateright();
		search = false;
	}
	
	if(digitalRead(FIRE_PIN) == LOW)
	{
		//avanzar
		forward();
		digitalWrite(BEEP_PIN, HIGH);
		
		while(digitalRead(FIRE_PIN) == LOW);
		
		digitalWrite(BEEP_PIN, LOW);
		search = true;
	}
}