Home / Italian Posts / Raspberry Pi Sense HAT

Raspberry Pi Sense HAT

La Scheda di Espansione Sense HAT

(fonte La Scienza con il Raspberry pi – Marco Casolino)

Una delle caratteristiche più interessanti del Raspberry – che lo differenzia da un semplice computer low-cost – è che può essere collegato a una serie di sensori e attuatori tramite le porte digitali (GPIO, General Purpose Input/Output) di cui è dotato e con cui può interagire con il mondo esterno. Considerato il rapporto prezzo/prestazioni e semplicità di utilizzo il Sense hat è tra migliori schede di espansione disponibili. Il Sense hat è dotato di una serie di sensori: temperatura, pressione, accelerometro/giroscopio, campo magnetico e umidità, nonché un display multicolori a 64 canali e un piccolo joystick con cui è possibile interagire senza tastiera per impartire semplici comandi. Questa scheda – che si innesta sul connettore GPIO – è stata sviluppata per effettuare varie dimostrazioni pratiche a bordo della stazione spaziale nell’occasione del volo dell’astronauta inglese Tim Peak nel 2015 e successivamente da altri astronauti tra cui Paolo Nespoli e Luca Parmitano (qui il concorso Astro Pi dell’ESA al riguardo).

Nella immagine seguente viene mostrata la scheda montata su di una unità Raspberry pi.

Sensori di Temperature, Pressione ed Umidità

Il Sense HAT ha uno sensore di temperatura integrato, che ritorna la temperatura in gradi Celsius. Il Sense HAT ha un sensore di umidità che ritorna l’umidità relativa in percentuale, usa i dati del sensore di temperatura per fornire un valore corretto. Sulla scheda c’è integrato anche un sensore barometrico che ritorna un valore di pressione espresso in millibar.

Giroscopio, Accelerometro e Magnetometro

Nel Sense HAT, vi è incorporato un piccolo sensore giroscopico a cui possono essere chiesti i valori delle rotazioni sugli assi di beccheggio, rollio e imbardata, sempre tramite Python. Il risultato sono valori che vengono restituiti come angoli tra 0 e 360 gradi. La figura sotto mostra gli assi in questione.

Nel Sense Hat sono integrati anche un sensore di accelerazione ed un sensore di campo magnetico. L’accelerometro è a tre assi : x, y, z e può essere utilizzato sia per stabilire l’orientazione della scheda sfruttando l’accelerazione di gravità g, sia per misurare l’accelerazione alla quale viene sottoposta la scheda. Anche il magnetometro è a tre assi e fornisce l’indicazione espressa in μT.

Alimentare il Raspberry con una Batteria

Se con il Raspberry pi – equipaggiato con Sense Hat – si vuole effettuare la registrazione di dati in movimento, ad esempio accelerazione ed orientamento, o anche pressione e temperatura, mentre la scheda è sottoposta ad un movimento, è necessario provvedere ad una alimentazione a batteria.
Noi abbiamo utilizzato la scheda mostrata nella immagine seguente che comprende anche una batteria al litio, la batteria ci assicura una autonomia di 1 – 2 ore.

L’immagine sotto mostra lo stack completo : unità a batteria, Raspberry pi e Sense Hat, posizionato all’interno di un contenitore.

Software per il Logging dei Dati

Per controllare la RPi Sense Hat è necessario installare delle librerie python, come descritto nella documentazione ufficiale e per farlo usa il tool “apt-get” come descritto di seguito.
Il primo passo è, come sempre consigliato, un aggiornamento dei pacchetti presenti sulla tua distribuzione:

sudo apt-get update

al termine potrai eseguire l’installazione delle librerie specifiche:

sudo apt-get install sense-hat

Quello riportato sotto è il codice Python per l’acquisizione dei dati dal Sense HAT e per il logging su file. L’acquisizione è effettuata ad intervalli di tempo regolari.

#!/usr/bin/python

from sense_hat import SenseHat, ACTION_PRESSED, ACTION_HELD, ACTION_RELEASED
from datetime import datetime
from csv import writer
import time
import sys

sense = SenseHat()
sense.set_imu_config(True, True, True)  # accelerometer, magnetometer , gyroscope
sense.clear()

logging = False

def get_sense_data():
  sense_data = []
  temperature = round(sense.get_temperature(),2)
  pressure = round(sense.get_pressure(),2)
  humidity = round(sense.get_humidity(),2)
  sense_data.append(temperature)
  sense_data.append(pressure)
  sense_data.append(humidity)
  
  mag = sense.get_compass_raw()
  mag_x = round(mag["x"],2)
  mag_y = round(mag["y"],2)
  mag_z = round(mag["z"],2)
  sense_data.append(mag_x)
  sense_data.append(mag_y)
  sense_data.append(mag_z)

  acc = sense.get_accelerometer_raw()
  acc_x = round(acc["x"],3)
  acc_y = round(acc["y"],3)
  acc_z = round(acc["z"],3)
  sense_data.append(acc_x)
  sense_data.append(acc_y)
  sense_data.append(acc_z)
  
  gyro = sense.get_orientation()
  pitch = round(gyro["pitch"],2)
  roll = round(gyro["roll"],2)
  yaw = round(gyro["yaw"],2)
  sense_data.append(pitch)
  sense_data.append(roll)
  sense_data.append(yaw)  
  
  sense_data.append(datetime.now())
  
  return sense_data

def pushed_up(event):
  global logging, timestart
  if event.action == ACTION_PRESSED:
    print("START")
    logging = True

def pushed_down(event):
  global logging
  if event.action != ACTION_PRESSED:
    print("STOP")
    logging = False

sense.stick.direction_up = pushed_up
sense.stick.direction_down = pushed_down

timestamp = datetime.now()
timestart = datetime.now()
delay = 100 #milliseconds

with open('data.csv', 'w', newline='') as f:
  data_writer = writer(f)
  data_writer.writerow(['temp','pres','hum',
                        'mag_x','mag_y','mag_z',
                        'acc_x','acc_y','acc_z',
                        'pitch','roll','yaw',
                        'datetime','elapsed'])    
    
  while True:
    if logging:  
      data = get_sense_data()
      dt = data[-1] - timestamp
      elapsed = data[-1] - timestart
      if int(dt.total_seconds()*1000) > delay:
        #print(round(elapsed.total_seconds()*1000))
        data.append(round(elapsed.total_seconds()*1000))
        data_writer.writerow(data)
        timestamp = datetime.now()

Esperimenti

Caduta Libera

Un semplice esperimento è quello di riprodurre – in piccolo – la condizione di microgravità che si viene a creare durante una caduta libera (free fall). Si tratta di attivare il logging e lasciare cadere la scheda da qualche metro di altezza, curando ovviamente che l’arresto della caduta sia opportunamente attutito.
I parametri che ci interessano sono le accelerazioni. Il grafico presentato sotto mostra i valori della accelerazione misurati dal Sense HAT durante la caduta. Il parametro che ci interessa è l’accelerazione lungo l’azze Z : prima della caduta il valore corrisponde a g = 9.81 m/s2, durante la caduta si azzera come atteso, nel momento dell’impatto si notano i contraccolpi dovuti all’urto e successivamente il valore si attesta nuovamente sul valore g.

Misura del Campo Geomagnetico

Il sensore del campo magnetico integrato nel Sense HAT non ha grandissima precisione, però ci permette comunque di valutare direzione ed intensità del campo geomagnetico con buona approssimazione. La prova consiste nel leggere il valore del sensore per qualche secondo, in modo da raccogliere un buon numero di dati e fare successivamente la media dei valori.
I valori ottenuti sono i seguenti :

Mag X = -19,35 μT
Mag Y = -21,71 μT
Mag Z = 7,59 μT

Conoscendo le componenti secondo i tre assi si può ricavare la direzione e l’intensità del vettore. L’intensità, calcolata componendo vettorialmente le tre componenti, ha il valore 30 μT, vicino al valore atteso per il campo geomagnetico alla nostra latitudine.

Orientazione nello Spazio

La scheda Sense HAT è dotato di una unità IMU (Inertial Measurement Unit). La parte principale della IMU è il sensore giroscopico. Questo sensore è in grado di darci l’orientazione della scheda, espressa come angolo di rotazione rispetto ai tre assi di rollio, beccheggio ed imbardata. L’angolo può essere espresso in gradi o radianti. Come è facile capire questo tipo di sensore è di vitale importanza sugli aeromobile e nei veicoli spaziali.
Per dimostrarne il funzionamento abbiamo registrato i dati forniti dal giroscopio durante il movimento della scheda, il risultato è mostrato nel grafico sotto. Si vede come il range dei valori va da 0° a 360°.

Se ti è piaciuto questo articolo puoi condividerlo sui “social” Facebook, Twitter o LinkedIn con i pulsanti presenti sotto. In questo modo ci puoi aiutare ! Grazie !

Donazioni

Se vuoi contribuire allo sviluppo di questo sito ed allo sviluppo di nuove attività sperimentali puoi fare una donazione, Grazie !

Check Also

Cristalli Liquidi e Modulazione Elettro-Ottica

Introduzione I cristalli liquidi sono una classe di composti organici con particolari proprietà liquido-cristalline, scoperte nel 1888 dal botanico austriaco Friedrich Reinitzer. Reinitzer si …