Reflexión óptica

Aquí Thymio II se comporta como una máquina que mide la reflexión óptica de un papel. El montaje dispone de un brazo que le permite acercar o alejar un papel (de colores) de muestra con respecto al sensor de proximidad central delantero. Una pantalla se mueve en frente de uno de los sensores de proximidad laterales para brindar una distancia de referencia. El montaje se realizó utilizando las piezas del kit LEGO Technic 8069.

reflex-paper-maker-lr.jpg

El desplazamiento del papel de colores se logra con un brazo accionado por una de las ruedas de Thymio II. Esta es una secuencia de las posiciones:

sequence.jpg

La máquina se conecta al PC para recolectar los datos asociados al experimento:

setup-lr.jpg

La secuencia de medidas es la siguiente: primero, el papel de colores se acerca al sensor y luego se va alejando lentamente al tiempo que se toman las mediciones. Entre dos mediciones se cambia el papel y se señala con las flechas laterales. Este permite adicionar un número diferente para cada papel. En video:

El código que se utilizó en el video está enseguida. PRECAUCIÓN: Para compilar este código es necesario crear (a la derecha en el entorno Aseba Studio), un evento que se llama plot (gráfica) y tiene tres parámetros.

var Tampon0[4] = 0,0,0,0
var TamponPos0 = 0
var Tampon1[4] = 0,0,0,0
var TamponPos1 = 0
var data[3]
var paper = 0          # variable que ayuda a identificar el papel durante el análisis.
var record               # variable que define si se almacenan los datos o no.

onevent buttons        # cada vez que se verifica el estado de los botones:

  when button.forward==1 do    # avanzar en la medición
    motor.right.target=-100 
  end

  when button.center==1 do    # detenerse
    motor.right.target=0 
    record = 0
  end

  when button.backward==1 do    # retroceder rápidamente
    motor.right.target=400 
  end

  when button.left==1 do    # cambia la variable que identifica las muestras de papel
    paper = paper - 1
  end

  when button.right==1 do 
    paper = paper +1
  end

onevent prox
# almacenamos en data los 3 valores que nos interesan: sin_papel, referencia, medición.
  data[0]=paper                                                # referencia para el papel.
  Tampon0[TamponPos0] = prox.horizontal[4]  # referencia de la posición
  TamponPos0 = (TamponPos0 + 1) % 4
  data[1] = Tampon0[0] + Tampon0[1] + Tampon0[2] + Tampon0[3]
  Tampon1[TamponPos1] = prox.horizontal[2]  # medición
  TamponPos1 = (TamponPos1 + 1) % 4
  data[2] = Tampon1[0] + Tampon1[1] + Tampon1[2] + Tampon1[3]

  if record==1 then  # solamente al registrar
    emit plot data
  end

  when prox.horizontal[4]<1500 do    # si está muy cerca
      motor.right.target=0
  end

  when prox.horizontal[4]<1600 and motor.right.target<0 do  # si está cerca y se aleja, comienza a grabar.
    record = 1
  end

  when prox.horizontal[4]>3600 and motor.right.target<0 do # si está muy alejado se detiene.
    record = 0
    motor.right.target=0
  end

Para registrar los datos del experimento se utiliza Aseba Studio, pero para el análisis se recomienda otro programa como Excel o OpenOffice.

Para comenzar debes ejecutar Aseba Studio y abrir el puerto en el que se conectó Thymio II con asebaswitch. Esta aplicación le permite a varios programas acceder al mismo Thymo II. El comando en una terminal (Mac), en la carpeta bin de asebauniversal, es:

./asebaswitch "ser:device=/dev/cu.usbmodemXXX"

donde XXX es un número asignado por el Mac. Pueder revisar este número en Aseba Studio.

Luego es posible conectarse con Aseba Studio escogiendo Network (TCP) y como host localhost y puerto 33333.

Bajo estas condiciones, Aseba Studio estaría conectado a Thymio II, pero con asebaswitch entre los dos.

Luego, es posible guardar los eventos emitidos por Thymio II con el programa asebarec, y a través del comando:

./asebarec "tcp:localhost;port=33333" > monfichierlog.txt

En el archivo monfichierlog.txt se encuentran los datos como texto en el siguiente formato:

timestamp source message_id taille data[0] data[1] data[2] data[n]

Los datos enviados por el evento serán siempre las últimas cifras.

En el experimento del video se recuperaron los siguientes datos (monfichierlog.txt):

1309439074.659 1 0 3 1 5882 16306 
1309439074.722 1 0 3 1 5878 16302 
1309439074.785 1 0 3 1 5871 16301 
1309439074.849 1 0 3 1 5877 16302 
1309439074.912 1 0 3 1 5890 16307 
1309439074.975 1 0 3 1 5907 16312 
1309439075.039 1 0 3 1 5923 16317 
....
1309439115.768 1 0 3 1 14149 0 
1309439115.831 1 0 3 1 14152 0 
1309439115.893 1 0 3 1 14154 0 
1309439115.957 1 0 3 1 14154 0 
1309439116.020 1 0 3 1 14157 0 
1309439116.083 1 0 3 1 14170 0 
1309439116.147 1 0 3 1 14184 0 
1309439116.210 1 0 3 1 14193 0 
1309439116.273 1 0 3 1 14219 0 
1309439116.337 1 0 3 1 14235 0 
1309439141.989 1 0 3 2 5789 16283 
1309439142.052 1 0 3 2 5790 16279 
1309439142.115 1 0 3 2 5790 16279 
1309439142.179 1 0 3 2 5790 16280 
1309439142.242 1 0 3 2 5793 16281 
1309439142.305 1 0 3 2 5797 16281 
1309439142.369 1 0 3 2 5802 16277 
1309439142.432 1 0 3 2 5799 16271 
1309439142.495 1 0 3 2 5800 16268 
1309439142.559 1 0 3 2 5800 16266 
....

El archivo original completo se encuentra aquí.

Se puede observar que el tercer dígito de la derecha cambia al cambiar de papel, lo que le permite ordenar los datos.

Si los datos se manejan adecuadamente en un programa como Excel u OpenOffice, se pueden generar las siguientes gráficas:

reflex-papier-graph.png

La gráfica corresponde a la reflexión de los cuatro papeles siguientes:

papers-lr.jpg

Algunos detalles del montaje:

details.jpg
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License