INTRODUCCIÓN
La Sense Hat es una tarjeta del tipo HAT creada por Raspberry específicamente para el proyecto Astro Pi, dotando a la Raspberry Pi de funciones adicionales como la medición de la temperatura, humedad, presión atmosférica, sensores de orientación (3 ejes), acelerómetro, pantalla led de 8×8 y un pequeño joystick.
El proyecto consistente en enviar 2 Raspberry Pi a la Estación Espacial Internacional (ISS), con la intención de que el astronauta británico Tim Peake pudiera realizar varias pruebas con ellas, tuvo previamente una fase de concurso/desafio dirigido a alumnos de enseñanza secundaria de Reino Unido, los cuales debían de desarrollar programas de ciencias que pudieran ser puestos a prueba posteriormente en la ISS, decidiendo premiar a los 7 mejores.
COMPRA E INSTALACIÓN
La tarjeta puede comprarse a través de varias vías, siendo relativamente fácil de comprar a través de webs especializadas en la venta de componentes para Raspberry , su coste varía entre 65 y 75 euros.
Su instalación es sencilla, basta con orientarla correctamente, y conectarla al puerto GPIO de la Raspberry II o III, siempre con la Raspberry Pi apagada y desconectada de la corriente.
Una vez conectada, para que nuestra Raspberry Pi pueda comunicarse con el nuevo módulo tendremos que instalar el software necesario:
sudo apt-get update
sudo apt-get install sense-hat
sudo pip-3.2 install pillow
Tras lo cual será necesario reiniciar el sistema para que los cambios tomen efecto.
reboot
PUESTA EN MARCHA, Y PRUEBA DE DISTINTAS FUNCIONALIDADES
Pantalla LED: La primera prueba que podemos hacer es la de mostrar algún texto a través de su pantalla LED para lo que podemos crear un script python como el siguiente:
nano astrospace.py
se nos abrirá el programa de edición de texto nano, e introduciremos el siguiente contenido:
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message(«Hola»)
Tras lo cual guardaremos los cambios con CTRL + X , pulsando y posteriormente para confirmar la grabación de los cambios.
Para probar el resultado:
python astrospace.py
En el programa anterior podemos cambiar la velocidad con la que se desplaza el texto horizontalmente, su color, y el color de fondo con los siguientes parámetros:
scroll_speed -> por defecto 0.1 , como mayor sea el número menor será la velocidad
text_colour -> se compone de una combinación de rojo, verde y azul que podemos combinar, informado de 0 a 255 cada uno de ellos, por ejemplo [255,255,255] sería para rojo+verde+azul, lo que daría lugar al color blanco. Para que el texto fuera de color rojo elegiríamos [255,0,0].
back_colour -> para informar el color de fondo de la pantalla, por defecto negro, de igual que ocurre que con text_colour se compone de una combinación de los 3 colores básicos (rojo, verde y azul), informándose la intensidad de cada uno de ellos con un valor que entre 0 y 255.
Ejemplo de script python mostrando en el LED un texto mostrado con una velocidad inferior a la estandard, y color rojo sobre fondo azul:
from sense_hat import SenseHat
sense = SenseHat()
sense.show_message(«Prueba de LED», scroll_speed=0.05, text_colour=[255,0,0], back_colour=[0,0,255])
Dentro del manejo de cadenas de texto, otras funciones disponibles son:
sense.flip_h() para rotar horizontalmente el texto
sense.flip_v() para rotar verticalmente el texto
sense.set_rotation(n), donde n es un número de grados (0, 90,180 o 270)
Otra opción que tenemos disponible es la de encender uno o varios pixeles de diferentes colores, o incluso representar una figura en 8×8, todo ello podemos hacerlo utilizando la función sense.set_pixel(), a continuación acompaño un ejemplo:
from sense_hat import SenseHat
sense = SenseHat()
sense.set_pixel(3, 4, [255, 0, 0])
Al ejecutar el script se encenderá un pixel de color rojo aproximadamente en el centro de la matriz led, concretamente en la columna 4 y en la fila 5. La diferencia entre los parámetros informados y el número de columna y fila se debe a que sense.set_pixel numera los leds de 0 a 7, de izquierda a derecha y de arriba a abajo.
Si lo que queremos es representar una figura, una forma más eficiente que nos ahorrará la introducción de muchísimo código es la siguiente:
Asignar cada color a una variable, como por ejemplo:
n = [0, 0, 0, 0]
r = [255, 0, 0]
a = [0, 255, 0]
v = [0, 0, 255]
Asignar una matriz de valores a otra variable:
matriz = [
n,n,n,n,n,n,n,n,
n,r,r,r,r,r,n,n,
r,r,v,r,v,r,r,n,
r,r,r,r,r,r,r,n,
n,r,r,r,r,r,n,n,
n,n,r,n,r,n,n,n,
n,r,n,n,n,r,n,n,
n,n,n,n,n,n,n,n,
]
(Si observamos la matriz podremos observar que nos hemos limitado a dar un valor a cada led, considerando la pantalla una cuadrícula de 8×8.)
Y trasladarlo a un pequeño programa como podría ser el siguiente:
from sense_hat import SenseHat import time sense = SenseHat() n = [0, 0, 0] r = [255, 0, 0] a = [0, 255, 0] v = [0, 0, 255] matriz = [ n,n,n,n,n,n,n,n, n,r,r,r,r,r,n,n, r,r,v,r,v,r,r,n, r,r,r,r,r,r,r,n, n,r,r,r,r,r,n,n, n,n,r,n,r,n,n,n, n,r,n,n,n,r,n,n, n,n,n,n,n,n,n,n ] rotacion = [90, 0, 90, 180, 270, 0]
sense.set_pixels(matriz)
for x in rotacion:
sense.set_rotation(x)
time.sleep(1)
Al ejecutarlo nos encontraremos con una figura que seguro que a más de uno trae recuerdos 🙂 rotando en distintas direcciones.
Otra funcionalidad importante del Sense Hat es la medición de varios valores meteorológicos como son: Humedad, Temperatura y Presión Atmosférica.
Para obtener dichos valores contamos con las siguientes funciones:
sense.get_temperature() para temperatura en grados centígrados
sense.get_pressure() para presión en milibares
sense.get_humidity() para humedad en tanto por cien %
Iré ampliando las instrucciones durante los próximos días. En la siguiente versión explicaré como funcionan sus sensores de campo magnético, posición y aceleración (g)
Os adjunto el video oficial del dispositivo y la misión.