terça-feira, 31 de janeiro de 2017

Sense HAT - O magnetómetro

Um magnetómetro é um sensor usado para medir a a força e a direção de um campo magnético. É vulgarmente usado para determinar o norte geográfico (como uma bússola). O valor do campo magnético da Terra depende de local para local, sendo que os valores típicos à superfície terrestre se situam entre os 30µT e os 60µTÉ possível também usar um magnetómetro para detetar perturbações do campo magnético da Terra causadas pela presença de corpos magnéticos e metálicos (os scanners dos aeroportos usam-nos para detetar peças metálicas, por exemplo).

Tal como já tínhamos referido em posts anteriores, o Sense HAT tem um magnetómetro instalado no seu sensor de movimento, o IMU. Os dados que podemos recolher deste magnetómetro podem ser:
  1. O ângulo relativamente ao eixo yaw (ver post sobre giroscópio) que indica a direção do norte magnético;
  2. A intensidade e a direção do campo magnético segundo os eixos X, Y e Z em microteslas (µT).

De acordo com a documentação da API do Sense HAT, são estes os comandos que temos disponíveis para tirar partido do magnetómetro:

get_compass: Desativa o giroscópio e o acelerómetro e devolve a direção do norte geográfico em graus

from sense_hat import SenseHat

sense = SenseHat()
north = sense.get_compass()
print("North: %s" % north)

# alternatives
print(sense.compass)


get_compass_raw: Devolve a direção do campo magnético segundo os eixos X, Y e Z, assim como a intensidade do campo magnético em microteslas (µT)

from sense_hat import SenseHat

sense = SenseHat()
raw = sense.get_compass_raw()
print("x: {x}, y: {y}, z: {z}".format(**raw))

# alternatives
print(sense.compass_raw)
Recorrendo de novo à data sheet do IMU do Astro Pi, são os seguintes os eixos definidos para o magnetómetro:
Se atentarmos à posição do IMU no Sense HAT, podemos indicar os eixos relativamente à placa:
Para testar o magnetómetro, fizemos o seguinte programa..

...e os valores obtidos foram desastrosos!!! Campo magnético orientado na vertical, valores perto de 10µT...

Tornou-se clara a necessidade de calibração do magnetómetro. 

De acordo com o artigo Simple and Effective Magnetometer Calibration , a maioria dos magnetómetros raramente vem calibrada na altura da compra. Há razões para isso - mesmo que calibrados de fábrica, o processo de soldadura dos magnetómetros na placa de circuito impresso pode resultar facilmente na descalibração do aparelho; o processo de calibração na pós-montagem da placa elevaria os custos de venda.

O processo de calibração do Sense HAT está bem documentado no site do Raspberry Pi e basta seguir as instruções passo-a-passo. Falta saber se o Astro Pi que se encontra na ISS foi ele próprio sujeito a uma calibração prévia.

Depois de termos calibrado o nosso magnetómetro, os valores passaram a fazer muito mais sentido, com o campo magnético a ser detetado maioritariamente no plano (X-Y) - o Astro Pi estava em repouso sobre uma mesa - e a adquirir valores próximos dos 45µT. Por compreender ficou o valor obtido pela função get_compass que devolve um ângulo aproximadamente constante e que pouco varia quando rodamos a placa - esse ângulo está a ser medido relativamente a que referência? 

Uma observação evidente foi que qualquer pequeno íman perturba o campo magnético local, sendo que o magnetómetro é sensível à aproximação do monitor do computador, por exemplo. Sabendo que a Columbus está repleta de equipamento eletrónico, fica a questão sobre se será possível adquirir, através de um Astro Pi instalado na ISS, o valor do campo magnético terrestre com algum rigor. 


Sem comentários:

Enviar um comentário