Un juego de colorines y sensores de infrarrojo… claro… con PINGÜINO. – OPEN HARDWARE / SOFTWARE / MIND
Menú Close

Un juego de colorines y sensores de infrarrojo… claro… con PINGÜINO.

Hola buenos días… hoy cumplo con una de las promesas y proyectos de mi tintero… un juego con detección de infrarrojos en los 360grados… con 4 sectores y uno adicional arriba.

Básicamente se compone de 5 sensores de infrarrojo que detectan cualquier obstáculo a menos de 30 centímetros, y lo traduce en un color diferente dependiendo de donde provenga el objeto… por ejemplo si ponemos un objeto o interceptamos el as del norte… el cubo cambiaría a rojo… si incidimos desde arriba cambiaría a blanco… y si incidimos desde cualquier otro lado, el cubo cambiaría de color.

Un ejemplo fotográfico de lo que he realizado… aunque no es un cubo en cuanto pueda conseguir un tooper que se adecue a las dimensiones… lo clono.

Un vídeo al respecto para que se entienda un poco más.

El circuito es fácil.

Los cuatro sensores infrarrojos se conectan en las 4 entradas analógicas 13, 14, 15 y 16, y las salidas digitales se conectan en los puertos 0, 1 y 2.

NOTA a mi: PONER CIRCUITO… 🙂

Un poco de código para condimentar y listo.

[sourcecode language=»py»]
// Infrared sensors and RGB pinguino.walii.es
/** Vamos a tomar dos lecturas de cada infrarrojo, guardando la anterior en proxSenlast
para asi comparar luego cual es la diferencia, y si esta es mayor al diferencial es que
un objeto se interpuso en dicho sensor. Y ordena encender el color correspondiente.
**/
#define 18f4550
unsigned  int i;
// aqui configuramos cuanta es la diferencia de valores
unsigned int diferencial=20;
unsigned int finalproxSen;
unsigned int proxSenlast;
unsigned int proxSen1;
unsigned int finalproxSen1;
unsigned int proxSenlast1;
unsigned int proxSen2;
unsigned int finalproxSen2;
unsigned int proxSenlast2;
unsigned int proxSen3;
unsigned int finalproxSen3;
unsigned int proxSenlast3;
unsigned int proxSen4;
unsigned int finalproxSen4;
unsigned int proxSenlast4;
unsigned int proxSen;

void setup()
{
for (i=0;i<4;i++)     {
pinMode(i,OUTPUT);
digitalWrite(i,LOW);
}
Serial.begin(9600); //opcional
}

void loop()
{
//tomamos la primer lectura
proxSen=analogRead(13);
proxSen1=analogRead(14);
proxSen2=analogRead(15);
proxSen3=analogRead(16);
proxSen4=analogRead(17);
//si desean pueden excluir del codigo lo referente al serial.
//yo uso para debug.
/**
if (Serial.available())
{
Serial.print("\n\r");
Serial.print("Distancia en digital: ");
Serial.print("\n\r");
Serial.print(proxSen,DEC);
Serial.print("\n\r");
Serial.print(proxSen1,DEC);
Serial.print("\n\r");
Serial.print(proxSen2,DEC);
Serial.print("\n\r");
Serial.print(proxSen3,DEC);
Serial.print("\n\r");
Serial.print(proxSen4,DEC);
Serial.print("\n\r");
}
**/
//guardamos la lectura en "LAST" y esperamos 10 milisegundos
// para volver a leer la puerta
proxSenlast=proxSen;
delay(10);
proxSen=analogRead(13);
proxSenlast1=proxSen1;
delay(10);
proxSen1=analogRead(14);
proxSenlast2=proxSen2;
delay(10);
proxSen2=analogRead(15);
proxSenlast3=proxSen3;
delay(10);
proxSen3=analogRead(16);
proxSenlast4=proxSen4;
delay(10);
proxSen4=analogRead(17);

//restamos los valores obtenidos y obtenemos el diferencial en cada caso
if (proxSen>=proxSenlast) {
finalproxSen=proxSen-proxSenlast;
}else{
finalproxSen=proxSenlast-proxSen;
}
if (proxSen1>=proxSenlast1) {
finalproxSen1=proxSen1-proxSenlast1;
}else{
finalproxSen1=proxSenlast1-proxSen1;
}
if (proxSen2>=proxSenlast2) {
finalproxSen2=proxSen2-proxSenlast2;
}else{
finalproxSen2=proxSenlast2-proxSen2;
}
if (proxSen3>=proxSenlast3) {
finalproxSen3=proxSen3-proxSenlast3;
}else{
finalproxSen3=proxSenlast3-proxSen3;
}
if (proxSen4>=proxSenlast4) {
finalproxSen4=proxSen4-proxSenlast4;
}else{
finalproxSen4=proxSenlast4-proxSen4;
}

//Con el diferencia u la lectura sabemos si un objeto se interpuso.
if(finalproxSen>diferencial) {
digitalWrite(0,HIGH);
digitalWrite(1,HIGH);
digitalWrite(2,HIGH);
};
if(finalproxSen1>diferencial) {
digitalWrite(0,LOW);
digitalWrite(1,HIGH);
digitalWrite(2,LOW);
};
if(finalproxSen2>diferencial) {
digitalWrite(0,LOW);
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
};
if(finalproxSen3>diferencial) {
digitalWrite(0,HIGH);
digitalWrite(1,LOW);
digitalWrite(2,HIGH);
};
if(finalproxSen4>diferencial) {
digitalWrite(0,HIGH);
digitalWrite(1,LOW);
digitalWrite(2,LOW);
};
}
[/sourcecode]

Aquí el invento por dentro.

Izquierda los 3 leds RGB con tres transistores para descargar de trabajo al PIC, y a la derecha el cacharo con los sensores infrarrojos.

aquí se pueden observar los sensores infrarrojos.

En cuanto pueda os subo los circuitos, porque siempre es bueno tener circuito de sensores y fase de potencia RGB

Related Posts

6 Comments

  1. germanol

    Interesante, me interesa en cuanto puedas colocas el circuito.
    Pregunta se puede incrementar la distancia de recepciòn lo tienes a 30 cm
    Saludos desde Venezuela

  2. walterleonardo

    HOla… deberías buscar en la web… los diferentes post… ya que aparecen varios ejemplos de como hacer un sensor infrarrojo…
    y lo que he realizado en este ejemplo son 5 sensores infrarrojos con sus emisores…
    aqui en el ejemplo de este post puedes ver un sensor de proximidad con infrarrojos… y si necesitas mas distancia lo tienes que hacer con un sensor ultrasónico… los infrarrojos solo llegan a 30 o 45 cm… existen unos de potencia y ampliados con lentes… pero yo no podía gastar tanto dinero.

    saludos.

  3. Maribel

    Hola, me interesa tu proyecto me parece muy bueno estoy intentando hacerlo pero no soy nueva en esto y no tengo mucha experiencia, me gustaría preguntarte si tienes el diagrama o si me pudes decir como van conectados los transistores que mencionas y de que medida son.

    Saludos desde México

  4. Maribel

    Hola, me interesa tu proyecto me parece muy bueno estoy intentando hacerlo pero soy nueva en esto y no tengo mucha experiencia, me gustaría preguntarte si tienes el diagrama o si me pudes decir como van conectados los transistores que mencionas y de que medida son.
    Saludos desde México

  5. walterleonardo

    HOla gracias por tu comentario…
    los transistores son bc548… y van conectados entre el negativo del led y el negativo de la fuente… convirtiendose en un switch… cuando es excitada su base… deja pasar corriente entre colector y emisor… encendiendo el led… mas que nada lo he realizado para tener mas LEDs,,, no solo uno, por eso he puesto 3 leds RGB… para que la salida del PIC no se resiente lleva este transistor…. pero si lo haces con un led de cada color… no necesitas el transistor…solo una resistencia de entre 220 y 470 ohms (dependiendo del color para mantener el brillo controlado, para que el rojo no ilumine mas que el verde)…

    cualquier cosa me dices… pero en principio obvia los transistores y hazlo con solo resistencias. Siempre se pueden simplificar.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

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