Interfaz de programación

Interfaz de programación

Esta página describe los alcances y las capacidades de de Thymio II en términos de su programación. Aquí se listan las diferentes variables y funciones qué se pueden usar y que componentes del robot afectan. Este documento se refiere a la versión 3 del firmware que aún no se ha publicado.

Librería estándar

Thymio II incorpora la librería de librería estándar de funciones nativas de Aseba.

Botones

Thymio II cuenta con 5 botones capacitivos, 4 flechas y un botón central. Su estado (1 = activado, 0 = desactivado) se puede consultar en las siguientes variables:

  • button.backward : flecha atrás
  • button.left : flecha izquierda
  • button.center : botón central
  • button.forward : flecha adelante
  • button.right : flecha derecha

Thymio II actualiza estas variables a una frecuencia de 20 Hz1, y genera el evento buttons después de cada actualización. Además, cuando se activa o desactiva alguno de estos botones, se genera un evento con el mismo nombre.

Sensores de proximidad

Horizontales

Thymio II cuenta con 7 sensores de proximidad en su periferia. Los valores medidos se almacenan en el vector prox.horizontal, así:

  • prox.horizontal[0] : frente, izquierda
  • prox.horizontal[1] : frente medio-izquierda
  • prox.horizontal[2] : frente medio
  • prox.horizontal[3] : frente medio derecha
  • prox.horizontal[4] : frente derecha
  • prox.horizontal[5] : atrás izquierda
  • prox.horizontal[6] : atrás derecha

Los valores de cada sensor varían entre 0 (no hay objetos cerca al sensor) y varios miles (cuando hay un objeto muy cerca al robot). Thymio actualiza las variables a una frecuencia de 10 Hz, y genera el evento prox después de cada actualización.

Inferiores (piso)

Thymio II tiene 2 sensores en la parte inferior, dirigidos hacia el suelo. Como están ubicados en la parte delantera, estos sensores se pueden utilizar para rastrear una linea trazada sobre el suelo. Los valores de estos sensores se guardan en tres vectores:

  • prox.ground.ambiant :Intensidad de la luz ambiental del suelo. Varia entre 0 (oscuro) y 1023 (máxima intensidad)
  • prox.ground.reflected : Cantidad de luz percibida por el sensor mientras el sensor emite luz infrarroja. Sus valores pueden estar entre 0 (oscuro) y 1023 (máxima intensidad de de luz).
  • prox.ground.delta : Diferencia entre la luz reflejada y la luz ambiental. Este valor se relaciona con la distancia y el color del suelo.

Para cada vector, el valor en la posición 0 corresponde al sensor izquierdo y la posición 1 corresponde al sensor derecho. Al igual que ocurre con los sensores de proximidad, estos valores se actualizan a una frecuencia de 10 Hz.

Acelerómetros

Thymio dispone de un acelerómetro tri-axial (en tres ejes) y sus valores se almacenan en el vector acc:

  • acc[0] : eje-x (de derecha a izquierda. Positivo hacia la izquierda)
  • acc[1] : eje-y (de adelante hacia atrás. Positivo hacia atrás)
  • acc[2] : eje-z (de arriba hacia abajo. Positivo hacia abajo)

Los valores almacenados en el vector varían entre -32 y 32. El valor 23 corresponde a la aceleración de la gravedad, es decir 9.8 m/s^2. Estos valores se actualizan a una frecuencia de 16 Hz, y genera el evento acc después de cada actualización. El evento adicional tap se genera cuando se detecta un impacto.

Sensor de temperatura

La variable temperature guarda el valor de la temperatura actual en décimas de grados Celsius. Esta medida se actualiza cada segundo, generando el evento temperature.

LEDs

Thymio tiene varios LEDs distribuidos alrededor de su cuerpo. Algunos están directamente vinculados al funcionamiento de un sensor, pero una vez sean manipulados desde el código, el programador toma el control y se pierde el vínculo.

Las funciones nativas permiten controlar los LEDs. Los valores de intensidad de los LEDs varían entre 0 (apagado) y 32 (máxima intensidad).

Arreglo circular de LEDs

8 LEDs amarillos forman una circunferencia en la parte superior del robot, alrededor de los botones.

Activación por defecto: refleja los valores de los acelerómetros. Todos los LEDs están apagados cuando el robot se encuentra en posición horizontal; si se inclina, un solo LED se ilumina, indicando la dirección del punto más bajo y su intensidad es proporcional al ángulo de inclinación.

  • leds.circle(led 0, led 1, led 2, led 3, led 4, led 5, led 6, led 7) donde led 0 establece la intensidad del LED ubicado en el frente del robot. Los demás LEDs se enumeran en el sentido de las manecillas del reloj.

Los LEDs RGB

Existen dos LEDs RGB en la parte superior del robot que se controlan al mismo tiempo. Estos son los que indican los comportamientos del robot. Hay otros dos en la parte inferior que se pueden controlar independientemente.

Activación por defecto: Apagados en modo ASEBA.

  • leds.top(rojo, verde, azul) establece la intensidad de los LEDs superiores.
  • leds.bottom.left(rojo, verde, azul) establece la intensidad del LED inferior izquierdo.
  • leds.bottom.right(rojo, verde, azul) establece la intensidad del LED inferior derecho.

Los LEDs de los sensores de proximidad

Cada sensor de proximidad está acompañado de un LED rojo instalado justo al lado (El sensor del frente tiene dos LEDs asociados, uno a cada lado).

Activación por defecto: encendido cuando hay un objeto cerca al sensor asociado. Su intensidad es proporcional a la distancia del objeto.

  • leds.prox.h(led 1, led 2, led 3, led 4, led 5, led 6, led 7, led 8) controla los LEDs de los sensores horizontales de adelante y de atrás. led 1 a led 6 corresponden a los LEDs del frente, de izquierda a derecha, mientras que led 7 y led 8 corresponden a los LEDs izquierdo y derecho de la parte de atrás.
  • leds.prox.v(led 1, led 2) controla los LEDs asociados con los sensores izquierdo y derecho de la parte inferior.

LEDs de los botones

Cuatro LEDs rojos se ubican entre los botones.

Activación por defecto: Para cada botón flecha, un LED se enciende cuando es presionado. Cuando se presiona el botón del centro, los cuatro LEDs se encienden simultáneamente.

  • leds.buttons(led 1, led 2, led 3, led 4) controlan estos 4 LEDs, donde led 1 corresponde al LED frontal; los demás se enumeran en sentido horario.

El LED del receptor infrarrojo

Es un LED rojo ubicado cerca al receptor infrarrojo para el control-remoto.

Activación por defecto: Titila cuando el robot recibe un código RC5..

  • leds.rc(led) controla este LED.

Los LEDs del sensor de temperatura

Estos dos LEDs (uno rojo y uno azul) se encuentran cerca al sensor de temperatura.

Activación por defecto: Rojo si la temperatura es mayor que 28°C. Rojo y azul si está entre 28° y 15°. Azul si la temperatura es menor que 15°.

  • leds.temperature(rojo, azul) controla estos leds.

El LED del micrófono

Es un LED azul ubicado cerca al micrófono.
Activación por defecto: apagado.

  • leds.sound(led) controla este LED.

Otros LEDs

Existen otros LEDs que el usuario no puede controlar:

  • 3 LEDs verdes que indican la carga de la batería.
  • Un LED azul y uno rojo en la parte posterior del robot que indican el estado de carga.
  • Un LED rojo en la parte posterior que indica el estado de la tarjeta SD.

Motores

Puedes controlar la velocidad de las ruedas modificando los valores de las siguientes variables:

  • motor.left.target: velocidad requerida para la rueda izquierda.
  • motor.right.target: velocidad requerida para la rueda derecha.

Las velocidad reales de las ruedas pueden se consultadas en las siguientes variables:

  • motor.left.speed: velocidad real de la rueda izquierda.
  • motor.left.speed : velocidad real de la rueda derecha.

Los valores van desde -500 hasta 500. Un valor de 500 corresponde a una velocidad aproximada de 20 cm/s. Puedes leer el valor de los comandos de los motores en las variables motor.left.pwm y motor.right.pwm.

Detección de la intensidad de sonido.

Thymio puede detectar si la intensidad del sonido ambiental es mayor que un determinado valor y generar un evento.

La variable mic.intensity muestra la intensidad actual medida por el micrófono, mientras que la variable mic.threshold el valor límite para la emisión del evento. Si mic.intensity es mayor que mic.threshold, entonces se genera el evento mic.

Grabar y reproducir sonidos

Puedes reproducir los sonidos sintéticos del sistema. Además, si dispones de una tarjeta micro-SD con formato FAT, puedes grabar y reproducir tus propios sonidos. Los archivos se guardan en la tarjeta, en formato wav, de 8-bit sin signo, a 8 kHz. Cuando Thymio termina de reproducir un sonido solicitado a trabes de ASEBA, se genera el evento sound.finished. El evento no se desencadena si la reproducción es interrumpida o si se reproduce un sonido diferente.

Sonido sintético

La función nativa sound.freq reproduce una frecuencia dada en Hz y para durante un tiempo dado en 1/60 de segundo. Si la duración es 0, el sonido se reproduce indefinidamente, mientras que un duración de -1 detiene la reproducción.

Modificación de la onda primaria

Un sonido sintético se produce mediante el muestreo de una onda primaria (triangular por defecto). La función sound.wave sirve para definir tu propia onda. Esta función toma como entrada una serie de 142 muestras, con valores entre -128 y 127, que representan la onda en la frecuencia especificada en sound.freq. Como Thymio reproduce los sonidos a una frecuencia fija de 7812.5 Hz, las muestras se reproducen a una frecuencia de 7812.5/142 = ~55 Hz. Si reproduces sonidos de frecuencias mayores, se saltaran muestras de la serie.

Grabación

Puedes grabar sonidos usando la función nativa sound.record. Esta toma como parámetro un consecutivo de archivo, comprendido entre 0 y 32767. Los archivos se almacenan en la tarjeta micro-SD bajo el nombre rX.wav, donde X es el parámetro de entrada. Para detener una grabación, utiliza como parámetro de entrada, en la misma función, el valor -1.

Reproducción

Puedes reproducir sonidos grabados en la tarjeta SD usando la función nativa sound.replay con parámetro de entrada X que representa el consecutivo del archivo (entre 0 y 32767). Los archivos se graban bajo el nombre rX.wav, donde X representa el consecutivo. Para detener una reproducción, utiliza como parámetro de entrada, en la misma función, el valor -1.

Duración (desde la versión de firmware 11)

Puede recuperar la duración de un sonido grabado usando la función nativa de sound.duration(x,duration). Su primer parámetro, x, es un número del 0 al 32767 que es el índice del archivo Rx.wav de la tarjeta SD. El resultado en 1/10 de segundos se pone en la variable duration como segundo parámetro.

Crea tus propios sonidos usando un PC

Puedes crear tus propios sonidos desde tu PC. Puedes utilizar la aplicación Audacity, versión 1.3, que está disponible para varios sistemas operativos. Estos son los pasos para crear un sonido compatible con Thymio:

  • Cuando Audacity ha comenzado, cambia la frecuencia del proyecto (project rate) de 44100 Hz (por defecto) a 8000 Hz. Esta opción se encuentra en la parte inferior izquierda de la ventana.
  • Graba tu sonido con el botón rojo que encuentras en la parte superior izquierda. Detén la grabación con el botón de parada (stop).
  • Selecciona la opción Export… que se encuentra en el menú File
  • Asigna un nombre al archivo, por ejemplo p0.wav.
  • Como formato, selecciona: other uncompressed files.
  • En options, selecciona WAV (Microsoft) como encabezado (header y como Encoding (codificador), selecciona Unsigned 8 bit PCM.
  • Asegurate que los metadatos del archivo no estan valorados.
  • Guarda o copia el archivo en la tarjeta micro-SD.

Para hacer una prueba rápida, puedes guardar el archivo como s0.wav. Thymio reproducirá este sonido al comenzar.

Aqui puede encontrar un video che muestra como hacer.

Reproduce tus propios sonidos

Puedes reproducir tus propios sonidos usando la función nativa sound.play y un consecutivo de archivo (entre 0 y 32767) como parámetro de entrada. El archivo debe estar guardado en la tarjeta micro-SD bajo el nombre pX.wav, donde X es el parámetro de entrada. Para detener una reproducción utiliza -1 como parámetro de entrada para la misma función.

Te invitamos a visitar nuestra librería de sonidos para que los descargues y te diviertas programando a Thymio II.

Sonidos del sistema

Puedes reproducir los sonidos del sistema usando la función nativa sound.system y un consecutivo de archivo (entre 0 y 32767) como parámetro de entrada. Algunos sonidos forman parte del firmware (ver detalles más abajo), pero puedes sobre-escribirlos o agregar nuevos sonidos usando una tarjeta SD. Si es el caso, debes guardar los archivos bajo el nombre sX.wav donde X es el parámetro de entrada. Para detener una reproducción utiliza -1 como parámetro de entrada para la misma función.

Librería de sonidos del sistema

Los siguientes sonidos están disponibles:

parámetro descripción
-1 detener la reproducción de un sonido
0 sonido de inicio
1 sonido de apagado (no es reconfigurable)
2 sonido asociado a los botones flecha
3 sonido asociado al botón central
4 Sonido detección de caída libre ("miedoso")
5 Sonido detección de impacto
6 Objetivo alcanzado ("amistoso")
7 Objetivo detectado ("amistoso")

Si quieres desactivar los sonidos del sistema, puedes descargar este archivo y descomprimirlo en una memoria Micro-SD. Su contenido son archivos vacíos.

Control remoto

Thymio dispone de un receptor infrarrojo compatible con el protocolo RC5 para controles remoto. Thymio genera el evento rc5 cada vez que recibe un código RC5 y actualiza las variables rc5.address y rc5.command.

Temporizadores

Thymio provee 2 temporizadores programables. Las respectivas duraciones se especifican en el vector timer.period:

  • timer.period[0]: duración en milisegundos (ms) del temporizador 0.
  • timer.period[1]: duración en milisegundos (ms) del temporizador 1.

Cuando el tiempo expira, se generan los eventos timer0 y/o timer1, respectivamente.

Ejecutar programas desde la tarjeta micro-SD.

Thymio puede cargar programas desde una tarjeta micro-SD. Cuando el robot se inicializa, carga el archivo vmcode.abo desde la tarjeta SD (si está disponible). Este archivo debe cumplir con las especificaciones AS 001 (solo en inglés).

Eventos locales

Evento Descripción Frecuencia (Hz) Resultado
button.backward El botón flecha atrás cambió de estado después de la acción button.backward
button.left El botón flecha izquierda cambió de estado después de la acción button.left
button.center El botón central cambió de estado después de la acción button.center
button.forward El botón flecha adelante cambió de estado después de la acción button.forward
button.right El botón flecha derecha cambió de estado después de la acción button.right
buttons Actualización de los valores de los botones 50 buttons.backward, buttons.left, buttons.center, buttons.forward, buttons.right
prox Lectura de sensores de proximidad 10 prox.horizontal[0-7], prox.ground.ambiant[0-1], prox.ground.reflected[0-1] y prox.ground.delta[0-1]
tap Impacto detectado después del impacto acc[0-2]
acc the accelerometer was read 16 acc[0-2]
mic Intensidad del sonido ambiental superó el valor límite cuando se cumpla la condición mic.intensity
sound.finished Fin de la reproducción de un sonido usando ASEBA al finalizar el sonido
temperature Lectura del sensor de temperatura 1 temperature
rc5 Receptor infrarrojo recibe un código RC5 al recibir la señal rc5.address y rc5.command
motor Se ejecuta el PID 100 motor.left/right.speed, motor.left/right.pwm
timer0 Temporizador 0 termina definido por el usuario
timer1 Temporizador 0 termina definido por el usuario
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License