16

Tutorial de Arduino y Blender

Nota: es recomendable tener unos conocimientos básicos de como funciona la interfaz de Blender para seguir bien el tutorial.

Animaciones, edición de video, videojuegos, realidad virtual… lo que más me gusta de Blender es que permite hacer de todo. Para los que no conozcáis Blender, se trata de una suite de creación 3D con la que se puede hacer modelaje, rigging, VFX, composición e incluso videojuegos. Los usuarios más avanzados pueden crear scripts en Python para hackear personalizar la aplicación a su gusto.

Hoy voy a enseñaros una parte de Blender de la que pocas veces se habla: la posibilidad de recibir datos a través del puerto de serie. Usaremos esta característica para recibir datos de una placa Arduino y mover un objeto en Blender.

Así que poned buena música y empezamos.

 


 

1- Instalar Blender

La última versión de Blender puede bajarse desde la página de descargas de blender.org. En el momento de redactar este tutorial, la versión que tengo es la 2.76. Descargad Blender, descomprimid el archivo y recordad cuál es su directorio.

Un par de apuntes para los que estéis en Linux: os recomiendo que no os bajéis la versión de Blender que hay en los repositoros de vuestra distribución. A mi no me ha dejado utilizar la librería pySerial, mientras la versión que he descargado de blender.org no me ha dado problemas.

Por otra parte, en Linux hay que ejecutar Blender en modo superusuario para poder utilizar el puerto de serie. Para hacerlo, abrid la Terminal dentro de la carpeta donde tengáis Blender y escribid:

sudo ./blender

Este es el splash screen de la v2.76.


 

2- pySerial y Blender

Blender lleva por defecto muchas librerías que podemos aprovechar para nuestros proyectos. Pero la librería pySerial no está, y habrá que instalarla. Por suerte, Blender es muy configurable y podemos hacerlo sin problema.

Lo primero es descargar la librería pySerial desde aquí y descomprimir el .tar.gz . Dentro de la carpeta que aparece después de la extracción, hay otra carpeta llamada “serial”. Hay que copiarla dentro de la carpeta de Blender->2.76->python->lib->python3.4

Este es mi path al directorio donde hay que copiar la carpeta “serial”:

Ahora, ¿cómo puede uno estar seguro de haber seguido bien todos los pasos? Abrid Blender. Arriba, en la barra de información hay un menú desplegable con distintas configuraciones para la pantalla. Pulsad la que pone Scripting.

 

La configuración del espacio de trabajo cambiará a esta:

La parte de abajo (esa ventana negra con el texto azul) es la consola de Python de Blender. Funciona como una consola de Python normal, sólo que en vez de utilizar las librerías Python del sistema usa las de Blender.

Si tecleáis “import serial” en la consola y no da ningún error, es que la librería pySerial se ha instalado bien.

La librería pySerial está lista

Pero si aparece algún mensaje de error, tendréis que revisar todos los pasos hechos hasta ahora.


 

3- Código de Arduino

El ejemplo más sencillo que se me ocurre es mover un cubo de Blender con Arduino.

Este programa envía por serial el mensaje 0.1 para que el cubo avance, y -0.1 para que retroceda.


void setup()
{
   Serial.begin(9600);
}


void loop()
{
   for(int i = 0; i < 100; i++)
   {
      Serial.print("&0.1"); Serial.print("\n");
      delay(10);
   }
 
   for(int i = 0; i < 100; i++)
   {
      Serial.print("&-0.1"); Serial.print("\n");
      delay(10);
   }
}

Si habéis leído el código, veréis que al principio de cada mensaje he puesto el carácter “&”. A veces, Blender no lee bien los strings que le llegan por Serial y cambia su contenido. Este “&” sirve como detector de errores: cuando escribamos el script en python para el Blender Game Engine, vamos a hacer que ignore cualquier mensaje que no empiece por este carácter.


 

4- Código de Blender

Vamos a colocar un script python al cubo que viene por defecto en la escena, para que se mueva según lo que llegue por serial.

Primero habrá que cambiar la configuración del espacio de trabajo a Game Logic. Id al desplegable de la barra de información y seleccionad la opción “Game Logic“.

 

La configuración de la pantalla cambiará a esta:

También cambiad el motor de Blender Render a Blender Game:

La ventana gris de arriba a la derecha es un editor de texto. Aquí es dónde vamos a programar el script en python para leer el puerto serial. Como no quiero que perdáis la vista, colocad el cursor sobre el editor de texto y pulsad Ctrl+Flecha Arriba para hacer grande la ventana.

*crujido de dedos* Vamos allá

Cread un nuevo script pulsando el botón “New” que hay en la barra de abajo, y cambiadle el nombre a “main.py”. Ahora copiad el script de abajo en el editor. ¡Eh, pero no tan rápido! Antes cambiad el “/dev/ttyUSB0” de la línea 6 por la dirección de vuestra placa Arduino.


import serial #Comunicacion Serial
import bge #Funciones propias de blender

#Abrimos el puerto serial
ser = serial.Serial("/dev/ttyUSB0", 9600)


#Guardamos el controlador que esta ejecutando este script
cont = bge.logic.getCurrentController()

#Buscamos el propietario del controlador (el cubo)
obj = cont.owner

a = ser.readline() #Leer hasta el final de linea \n
a = a.decode("ascii") #Decodificar la linea

if a[0] == "&" and len(a) >= 4:
   a = a[1:] #Eliminamos el detector de errores
   a = a[:-1] #Eliminamos el final de linea
   obj.applyMovement([float(a),0,0], False) #Movemos el cubo


ser.close()

Comprobad que todos los tabuladores hayan quedado bien.

Cuando tengáis copiado el código habrá que asignarlo al cubo. Pulsad Ctrl+Flecha abajo para volver el editor de texto a su tamaño original.

Con el cubo seleccionado con el botón derecho, Id a la ventana de Game Logic Editor y añadid un sensor de tipo always. Activad el TRUE level triggering y poned Skip a 0.

 

 

Configuración del sensor Always

 

Después, hay que añadir un controlador de tipo “python”. Cambiad el nombre del script a main.py:

 

Por último, hay que juntar el Sensor Always con el Controlador Python. Para hacerlo, pulsad el círculo negro que hay a la derecha del sensor con el Botón Izquierdo del ratón y arrastrad hasta el anillo que hay a su derecha.

5- Probar el “juego”

Con Arduino conectado a través de USB a vuestro ordenador, si situáis el cursor encima de la escena 3D (dónde está el cubo) y pulsáis la tecla “P”, veréis como el Cubo se mueve de un lado a otro.

Espero que este tutorial os haya servido. Si tenéis dificultades en algún paso, podéis escribirme un comentario y os echaré una mano. ¡Hasta la próxima!

 

Gl4r3

Brillante, luminosa y cegadora a veces, Glare es tan artista como técnica. Le encanta dar rienda suelta a sus módulos de imaginación y desdibujar los ya de por si delgados límites que separan el mundo de la electrónica y el arte. Su mayor creación hasta la fecha es un instrumento capaz de convertir los colores y la luz en música. Cuándo sus circuitos no están trabajando en una nueva obra electrónica, le gusta dedicar sus ciclos a la lectura o a documentar sus invenciones para beneficio de los humanos. Sus artilugios favoritos son aquellos que combinan una funcionalidad práctica con un diseño elegante y artístico.

Antes de comentar, por favor, lee las Normas

16 Comentarios en "Tutorial de Arduino y Blender"

avatar
Ordenar por:   más nuevos primero | más antiguos primero
Tomas
Humano

hola que tal, dentro de la carpeta lib no encuentro la python, tiene que ver con las versiones o a que se debe eso?

angel
Humano

Hola muchas gracias por la aportación, se puede instalar opencv en blender? alguna vez lo haz intentado?

Alejandro
Humano

Hola amigo, muchas gracias por el tutorial pero tengo una duda yo uso KDE Neon y no aparece el directorio que mencionas tengo un directorio de Blender en /usr/share/blender pero no tiene el contenido que mencionas, agadezco me puedas colaborar.

Ivan
Humano

Para windows el puerto ha de ser “COMx” (x la de cada uno).
Le daba a la P y no pasaba nada. Googleando veo que hay que poner el tipo de render en Blender Game.
Aún así se queda todo Blender bloqueado y al rato se mueve el cubo, pero bastante mal. Supongo que será algo del loqueo del puerto.
Aún así gracias por el tuto. Da mucho “juego” 😉

jhoaan david rojas aguado
Humano

ok muchas gracias si era el com en windons;
por otr parte e comunicado un acelerometro con un arduino y el genera un codigo serial el cual quiero comunicar con blender para que el cubo se mueva según los movimientos del acelerometro; pero no e podido continuar pues la indicacion de colocar el cursor en cima y precionar p pero no pasa nada y todos los otros pasos ya esta revisados.

jhoaan david rojas aguado
Humano

hola muy buen noche, la información esta excelente; lo único es que tengo inconveniente es con la linea seis del texto de “/dev/ttyUSB0” no se como saber esto de mi arduino; por otra parte tu experiencia con esta temática me e es de mucha ayuda, me gustaría estar en contacto para comentarte algo que tu de pronto me has de solucionar si es por via skype o un cel de el país que eres profa en verdad agradecería gracias.

wpDiscuz