Tutorial de Arduino y Blender
Tutorial de Arduino y Blender
Tutorial de Arduino y Blender
https://robologs.net/2016/02/29/tutorial-de-arduino-y-blender/
1- Instalar Blender
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.
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.
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.
1 void setup()
2 { Serial.begin(9600);
3 }
4
5
6 void loop()
7 {
8 for(int i = 0; i < 100; i++)
{
9 Serial.print("&0.1"); Serial.print("\n");
10 delay(10);
11 }
12
13
14 for(int i = 0; i < 100; i++)
15 {
16 Serial.print("&-0.1"); Serial.print("\n");
17 delay(10);
18 }
}
19
20
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:
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.
1
2
3
4
5
6
7
8
9 import serial #Comunicacion Serial
1 import bge #Funciones propias de blender
0
1 #Abrimos el puerto serial
ser = serial.Serial("/dev/ttyUSB0", 9600)
1
1
2
#Guardamos el controlador que esta ejecutando este script
1 cont = bge.logic.getCurrentController()
3
1 #Buscamos el propietario del controlador (el cubo)
4 obj = cont.owner
1
5 a = ser.readline() #Leer hasta el final de linea \n
a = a.decode("ascii") #Decodificar la linea
1
6 if a[0] == "&" and len(a) >= 4:
1 a = a[1:] #Eliminamos el detector de errores
7 a = a[:-1] #Eliminamos el final de linea
1 obj.applyMovement([float(a),0,0], False) #Movemos el cubo
8
1
ser.close()
9
2
0
2
1
2
2
2
3
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.
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.