Siempre creciendo, siempre aprendiendo. Cultura Maker.

Ratio: 0 / 5

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

¡Hola, chicos!. ¡Pasad!. ¡Pasad!. ¡Hacía mucho que no veníais a visitarme!. ¡Poneos cómodos!.

Hoy quiero mostraros un pequeño montaje que se me ocurrió viendo un artículo de Leantec en el que hacían un pasador de diapositivas con un detector de ultrasonidos y una Arduino Leonardo. Como no encuentro por ninguna parte el único ejemplar de esta tarjeta que tengo, y los sensores de ultrasonidos son bastante más caros, se me ocurrió utilizar resistencias LDR (variables con la luz) en un montaje que tiene un enfoque distinto: un detector de barrido izquierda-derecha como el del vídeo, conectado a un programa en Processing (luego me enteré que los amigos de @JuegosRobotica habían lanzado este mismo reto en Twitter, pero eso es otra historia).

Montaje del circuito

Como veréis a continuación, el circuito es realmente simple. Éstos son los componentes que necesitaremos:

  • 2 diodos LED con sus correspondientes resistencias de 220 Ω conectadas en serie.
  • 2 células LDR estándar.
  • 2 potenciómetros de 10 kΩ.
  • 1 tarjeta Arduino (cualquiera vale, en mi caso yo estoy utilizando un modelo UNO).

El principio de funcionamiento es simple. Ya hemos explicado en otros artículos el montaje de resistencias variables como una LDR en divisor de tensión conectadas al convertidor A/D de nuestra querida Arduino. Como se ve en la imagen, en este caso utilizaremos las entradas A0 (LDR izquierda) y A1 (LDR derecha):

 

swipeEsquema

 

El motivo de utilizar potenciómetros es poder ajustar el funcionamiento de estos circuitos a distintas condiciones de luz. De hecho, la función de los diodos LED,(conectados a los pines 8 y 9) es ayudarnos a ajustar dichos potenciómetros. Cuando conectemos la alimentación de la tarjeta, sólo tendremos que ajustar la ruedecita de cada potenciómetro hasta justo el punto por debajo del cual el LED pasa de encendido a apagado. Así, cada sensor se disparará justo cuando pasemos la mano por encima, privándole de la cantidad de luz necesaria para llegar a la condición de disparo.

 

Os dejo también una vista del circuito montado en protoboard, por si os resulta útil:

 

swipeProtoboard

Programemos nuestra Arduino

Como ya os he dejado caer, el uso de una célula LDR como sensor analógico se ha tratado ya extensamente en otros artículos. Lo que vamos a hacer en este caso es utilizar dos, conectadas a los pines A0 y A1. El LED conectado al pin 8 mide el sensor de la izquierda, y el del pin 9 el de la derecha. El valor a partir del cual se activa el disparo del sensor es 800, aunque los más quisquillosos podéis cambiar este valor en el código a otro más adecuado a vuestros gustos.

Cuando uno de los sensores se dispara, escribirá un valor en el puerto Serie ("1" para izquierda, "2" para derecha) que indicará al programa en Processing qué tipo de barrido debe iniciar. Éste sería el código:

 

int sIzquierda,sDerecha;
int lIzquierda=8;
int lDerecha=9;
void setup() {

Serial.begin(9600);
pinMode(lIzquierda,OUTPUT);
pinMode(lDerecha,OUTPUT);
}

void loop() {

sIzquierda=analogRead(A0);
sDerecha=analogRead(A1);
if (sIzquierda>800){
  digitalWrite(lIzquierda,HIGH);
  Serial.write(1);
}else{
  digitalWrite(lIzquierda,LOW);
}
if (sDerecha>800){
  digitalWrite(lDerecha,HIGH);
  Serial.write(2);
}else{
  digitalWrite(lDerecha,LOW);
}

delay(100);
}

 

Programa en Processing

Confieso que esta vez tuve bastantes problemas para conseguir una aplicación que sobre el papel me parecía bastante simple. Processing está esperando que le llegue un valor por el puerto serie. Cuando llega un "1", debe iniciar un barrido de izquierda a derecha. Lo contrario corresponde al valor "2". Los problemas que tuve que resolver fueron dos principalmente: cuando se inicia un barrido, éste debe continuar hasta que acabe (es decir, si el sensor derecho se dispara, y después el izquierdo, el segundo debe ser ignorado si todavía se está iniciando el primer barrido). El segundo, que realizar UNA ÚNICA animación independiente del flujo de programa para cada barrido es incompatible con el proceso de funcionamiento básico del bucle draw() relacionado con las animaciones.

Éste es el resultado:

import processing.serial.*; 
 Serial myPort;
 int val;
 int posicion=-50;
 int velocidad=0;
 boolean moviendose=false;
 void setup(){
 //IMPRIME POR CONSOLA LA LISTA DE PUERTOS SERIE DETECTADOS
   print (Serial.list());
   //SI NO CONECTA A TU ARDUINO, VE CAMBIANDO EL VALOR 0 POR 1,2,3...
   myPort = new Serial(this, Serial.list()[0], 9600);
   size(800,600);
   fill (0,0,125);

 }
 void draw(){
   if (myPort.available()>0){
 val=myPort.read(); 
 println(val);
 if (val==1){
   if (!moviendose){
posicion=-50;
velocidad=10;
moviendose=true;
   }
myPort.clear();
 }
if (val==2){
   if (!moviendose){
posicion=width+50;
velocidad=-10;
moviendose=true;
   }
  myPort.clear();
 }
   }
   background (255,255,255);
   ellipse(posicion,width/2,50,50);
   if ((posicion>(width+50))||(posicion<(-50))){
     velocidad=0;
     moviendose=false;
 }
 posicion=posicion+velocidad;
 }

 

 

 Conclusión.

¡Qué!. ¿También queréis una conclusión?. ¡Que estamos en verano, hombre!. ¡Montajes sencillos pero eficaces, rápidos de montar!. ¡Eso es lo que queremos!. ¡No olvidéis dejarme vuestros comentarios aquí, en Twitter o en Facebook!. ¡Eso es todo por hoy!. ¡Sed felices!. ¡Siempre creciendo!. ¡Siempre aprendiendo!. ¡Cultura Maker!.

Comparte este post

Submit to FacebookSubmit to Google PlusSubmit to TwitterSubmit to LinkedInEnviar a Menéame

Comentarios   

0 #1 FirstHildred 14-10-2017 01:22
I see you don't monetize your blog, don't waste your traffic, you can earn extra bucks every month because you've got hi
quality content. If you want to know how to make extra money,
search for: Mrdalekjd methods for $$$
Citar

Escribir un comentario


Código de seguridad
Refescar

Mientras navegas por esta web, posiblemente interactuemos con tu equipo mediante el uso de cookies. La actual legislación de la UE (European Union) me obliga a informarte de ello, caminante. We use cookies to improve our website and your experience when using it. Cookies used for the essential operation of this site have already been set. To find out more about the cookies we use and how to delete them, see our privacy policy.

  I accept cookies from this site.
EU Cookie Directive Module Information