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. 


segunda-feira, 30 de janeiro de 2017

Sense HAT - O acelerómetro

Tal como indicámos em artigo anterior, o Sense HAT tem incluído um IMU que comporta um acelerómetro.

Há que compreender o que é medido pelo acelerómetro. Em primeiro lugar, o acelerómetro do Astro Pi  é um acelerómetro 3D, isto é, apresenta o valor da aceleração relativamente a 3 eixos: X, Y e Z. De acordo com a data sheet do IMU LSM9DS1, o que encontramos no Sense HAT, a direção de cada um dos eixos é a seguinte:

Se atentarmos à posição do IMU no Sense HAT, podemos indicar os eixos relativamente à placa:

Nem sempre é fácil interpretar os valores obtidos a partir de um acelerómetro. Isto porque um acelerómetro mede aceleração própria, isto é, a aceleração é medida em relação a outro sistema em queda livre. Matematicamente, isto é o mesmo que dizer que o acelerómetro mede não o valor da aceleração, a, mas outra grandeza, a', dada por:


Por isso, caso deixemos o acelerómetro em repouso numa mesa, com a face superior virada para cima, ele medirá:


Como o eixo Z do IMU usado tem o sentido de baixo para cima, contrário à direção da aceleração gravítica, o valor medido será positivo e igual ao valor da aceleração gravítica.

Caso o corpo se encontre em queda livre, sem rotação, o valor registado pelo acelerómetro será:


Mais sobre este assunto pode ser encontrado nos seguintes artigos: Experimentos com Acelerômetro de Tablets e Smartphones e Um passeio sobre a noção de aceleração.

Quanto à unidade da aceleração, no Sistema Internacional, é m/s2. No entanto, é possível também usar a unidade g que corresponde à aceleração devida à força gravítica da Terra sobre os corpos na superfície terrestre. 1 g corresponde ao valor 9,806 m/s2. Será esta a unidade de medida do acelerómetro do Sense HAT.

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

get_accelerometer: Desativa o magentómetro e o giroscópio e obtém a orientação apenas através do acelerómetro. Os calores obtidos corresponderão a ângulos de orientação relativamente aos eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
accel_only = sense.get_accelerometer()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**accel_only))

# alternatives
print(sense.accel)
print(sense.accelerometer)


get_accelerometer_raw: Devolve o valor da aceleração (em g) segundo os eixos X, Y e Z.

from sense_hat import SenseHat

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

# alternatives
print(sense.accel_raw)
print(sense.accelerometer_raw)

Façamos um programa muito simples:


Observando os valores obtidos e, de acordo com o que estudámos, podemos já responder às seguintes questões:
  1. Porque é que, em repouso sobre uma mesa, o valor da aceleração segundo o eixo Z indicado pelo acelerómetro é positivo (indicando para cima) e não negativo (indicando para baixo)?
  2. Porque é que, em repouso na ISS, o acelerómetro indica geralmente valores próximo de zero em todos os eixos?
Apesar do valor lido pelo acelerómetro num Astro Pi em repouso na ISS ser geralmente próximo de zero, há uma situação em que tal não acontece. Na verdade, mesmo nas altitudes a que a ISS gravita existe sempre alguma atmosfera, responsável por uma pequena mas contínua perda de altura. Por isso, uma ou duas vezes por mês, a ISS está sujeita a um "reboost", uma correção de órbita. Esta alteração do movimento deve ser possível de identificar com o acelerómetro do Astro Pi. Este assunto está bastante bem explicado no documento Astro Pi Worksheet

Ainda sobre a aceleração na ISS, vale a pena ver o vídeo realizado pelo Comandante Jeff Williams:



Sense HAT - O giroscópio

O giroscópio é um sensor que usa a força gravítica para indicar qual a posição de um objeto  no espaço. É o sensor que permite identificar se rodamos um smartphone sobre o seu eixo para apresentar a imagem na vertical ou na horizontal, por exemplo.

O Astro Pi tem um giroscópio inserido num sensor de movimento: o IMU (Inertial Measurement Unit) ST LSM9DS1 (ver data sheet). Neste sensor estão contidos 3 sensores diferentes:
  • Um acelerómetro 3D que pode ser usado para detetar  se a ISS foi sujeita a um impulso para retificar a sua órbita;
  • Um giroscópio 3D, que devolve a orientação do Astro Pi (e, consequentemente, da própria ISS);
  • Um magnetómetro 3D que pode ser usado como uma bússola e encontrar a direção do Norte.


Antes de mais, há que representar a orientação de um objeto. Tal é feito através de 3 eixos em torno dos quais o objeto pode rodar. Se soubermos qual o grau de rotação relativamente a cada um desses eixos, podemos saber para onde está esse objeto a apontar.

Os eixos usados para determinar a orientação são, usando a nomenclatura inglesa, os seguintes:

  • Pitch (o ângulo que um avião faz relativamente ao chão quando descola);
  •  Roll (o movimento de um parafuso a enroscar numa parede vertical);

  • Yaw (o movimento de um peão num chão).

Este vídeo ilustra a variação destes três eixos tomando como exemplo um avião.

Apliquemos agora o que aprendemos à placa do Sense HAT:
O guia que estamos a explorar disponibiliza uma aplicação para melhor compreender o conceito de orientação. Para a usar, precisamos de ter o nosso Raspeberry Pi ligado à internet, de forma a poder fazer o download do software. Depois, há que inserir na janela Terminal os seguintes comandos:
sudo apt-get install python3-pip
sudo pip-3.2 install pi3d
git clone git://github.com/astro-pi/apollo-soyuz
cd apollo-soyuz
sudo ./soyuz.py
E...UAU!!! Eis que no monitor aparece a imagem 3D do módulo Apollo Soyuz  (usado nos anos 70 para transportar astronautas até à superfície da lua) cuja orientação definimos através da orientação do nosso próprio Astro Pi, que alteramos com a mão a nosso bel-prazer! Muito parecida com a experiência de controlarmos a posição de um objeto no ecrã da televisão através do comando de uma consola de jogos! Para sair da aplicação, basta usar a tecla ESC do teclado.
De acordo com a documentação da API do Sense HAT, são estes os comandos que temos disponíveis para tirar partido do giroscópio:
set_imu_config: Ativa e desativa o giroscópio, acelerómtero e/ou magnetómetro
from sense_hat import SenseHat

sense = SenseHat()
sense.set_imu_config(False, True, False)  # gyroscope only


get_gyroscope: Chama a função set_imu_config para desativar o magnetómetro e o acelerómetro


from sense_hat import SenseHat

sense = SenseHat()
gyro_only = sense.get_gyroscope()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**gyro_only))

# alternatives
print(sense.gyro)
print(sense.gyroscope)

get_orientation_radians: Devolve a orientação em radianos de acordo com os eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
orientation_rad = sense.get_orientation_radians()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation_rad))

# alternatives
print(sense.orientation_radians)

get_orientation_degrees: Devolve a orientação em radianos de acordo com os eixos pitch, roll e yaw.

from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation_degrees()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

get_orientation: Chama a função get_orientation_degrees

from sense_hat import SenseHat

sense = SenseHat()
orientation = sense.get_orientation()
print("p: {pitch}, r: {roll}, y: {yaw}".format(**orientation))

# alternatives
print(sense.orientation)


get_gyroscope_raw: Devolve a os valores x, y e z que representam a intensidade da rotação em radianos por segundo.

from sense_hat import SenseHat

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

# alternatives
print(sense.gyro_raw)
print(sense.gyroscope_raw)
Vamos então experimentar...
Comecemos por fazer o seguinte pequeno programa:
No monitor, o programa devolve os seguintes dados:
É geralmente interessante poder trabalhar com cada um dos eixos separadamente; o número de
casas decimais também pode ser ajustado de forma a tornar a leitura mais clara:
Finalmente, é altura de fazer uma medida contínua da orientação do Astro Pi à medida que o
orientamos no espaço com a nossa mão:
Faz vários movimentos com o Astro Pi e observa os valores dos ângulos para cada um dos eixos.
Como esperas que variem cada um desses ângulos quando o Astro Pi estiver em repouso
relativamente à ISS que orbita a Terra?

domingo, 29 de janeiro de 2017

A questão da medida da temperatura com o sense HAT

As primeiras medidas da temperatura com o Astro Pi revelaram desde logo valores exagerados. Não será necessário um termómetro para perceber que, em pleno inverno, uma sala sem aquecimento não está a 28ºC.

Por isso, fomos investigar...

De acordo com o Guia Astro Pi,fornecido pela RaspBerry Pi, o Sense HAT  pode medir temperaturas entre os -40ºC e os 120ºC. O Sense HAT tem dois sensores de temperatura - um incluido no sensor de humidade, outro no sensor de pressão. Podemos escolher a qual destes sensores recorremos ao medir a temperatura fazendo temp = sense.get_temperature_from_humidity() ou temp = sense.get_temperature_from_pressure(), respetivamente. De acordo com as nossas experiências, ao fazer temp = sense.get_temperature(), estamos a fazer a medida a partir do sensor de humidade, sendo indiferente usar este comando ou o sense.get_temperature_from_humidity().

Até aqui...tudo OK - o problema está no valor das medidas de temperatura obtidas. Na verdade, os sensores de de pressão e humidade estão montados na placa do Sense HAT e, devido à sua localização, é impossível ignorar o calor do processador (CPU) e dos restantes componentes eletrónicos, responsável pelo aumento de temperatura no local dos sensores. Devido á sua localização na placa, ainda assim, o sensor de humidade é menos afetado pelo calor do processador da placa.

Fizemos algumas medidas a partir dos sensores de pressão e humidade. Mais importante, pedimos ajuda (obrigado Nuno!) para conseguir medir a temperatura do CPU do Raspberry e criámos um programa que, ao ser corrido, guardava num ficheiro csv 20 valores (medidos segundo a segundo) da humidade, da temperatura medida a partir do sensor de pressão (Temp_P), temperatura medida a partir do sensor de humidade (Temp_H), temperatura obtida através do comando sense.get_temperature() (Temp_V) e temperatura do CPU (Temp_CPU):


Fizemos várias experiências fazendo correr o programa anterior em ambiente com diferentes temperaturas. Medimos a temperatura ambiente com um termómetro digital (com apenas dois algarismos significativos) e tentámos que a temperatura fosse estável durante a experiência. Depois, em Excel, fizemos a média de cada 20 valores medidos. Apresentamos os valores mais significativos:


Da análise dos resultados obtidos...não conseguimos uma relação coerente entre os valores da temperatura ambiente e os valores medidos pelos sensores! Podem ser apontadas algumas falhas à nossa experimentação:

  • O valor da temperatura ambiente podia ser feita através de um sensor ligado ao Raspberry, ainda que afastado da placa. Isso permitiria um valor mais preciso da temperatura ambiente;
  • A variação da temperatura ambiente foi feita deslocando o Raspberry para ambientes diferentes - os 11ºC foram obtidos à janela, ao ao ar livre; as temperaturas mais altas foram criadas com recurso a um ventilador - o facto de nas várias experiências o Raspberry estar ora assente numa superfície, ora no ar, aliado ao facto de o movimento do ar - e portanto o arrefecimento do CPU - ter caraterísticas diferentes nas várias experiências, cria demasiadas variáveis para que consigamos uma relação adequada entre o valor dos sensores e o valor da temperatura ambiente.

Uma discussão muito interessante sobre o tema pode ser encontrada no fórum do Raspberry Pi. Neste fórum, há um utilizador que afirma que a estabilização na medida das temperaturas é lenta, cerca de 15 minutos. Se assim for, esta é mais uma razão para a incoerência que observámos nas nossas medidas.

Ainda recorrendo à informação disponibilizada no fórum, há utilizadores que avançam para possíveis algoritmos que, de acordo com o que afirmam, conseguem ajustar (ainda que com algum erro) os valores dos sensores aos valores da temperatura ambiente:


Como facilmente se depreende, tal algoritmo não encontra correspondência para os valores que obtivemos. Outros utilizadores do fórum também não revêm os valores obtidos no algoritmo proposto, pelo que me parece que as condições (ambientais, de acondicionamento do Astro Pi) em que são feitas as experiências são determinantes para os valores medidos. É possível encontrar no fórum quem afirme conseguir uma relação linear entre a variação da temperatura e a variação medida pelo Raspberry Pi, mas mantendo o Raspberry Pi sempre estático na mesma posição.

Na ISS, o Raspberry Pi estará de facto estático, mas numa caixa de alumínio - será que a condução térmica para o exterior é suficientemente boa para não criar efeito de estufa? E, devido às condições gravíticas, qual será o efeito da ausência de convecção?

Todas estas questões permitem concluir que nos será muito difícil, com as condições experimentais que temos, usar com aproximação satisfatória os sensores de temperatura no desafio Astro Pi. Mas valeu o caminho para o concluir!

domingo, 15 de janeiro de 2017

Recolhendo dados do Astro Pi - temperatura, humidade e pressão. Um exemplo

No seguimento das aprendizagens relativas à recolha de valores de temperatura, pressão e humidade a partir dos sensores do Sense HAT, o Ricardo realizou um programa bastante interessante em que, para além de indicar o valor das referidas grandezas na matriz de LED, altera a cor de fundo da matriz de verde para vermelho caso esses valores se afastem do intervalo pré-estabelecido como ideal para suporte de vida. Excelente trabalho, Ricardo!

Criando ficheiros csv a partir dos dados obtidos pelo Sense HAT

Um ficheiro csv (Comma-separated values) é um arquivo de texto de formato pré-definido que ordena dados que podem ser lidos a partir de um editor de texto ou de uma folha de cálculo. Um ficheiro csv contém um determinado número de linhas, cada uma delas contituída por colunas separadas geralmente por vírgulas.

Para aprender a criar ficheiros csv em Python recorremos ao site Python For Beginners (porque "beginners" é o que nós somos...).

Em Python, não é necessário importar nenhuma livraria para ler ou criar ficheiros.

O primeiro passo é criar um objeto do tipo ficheiro, usando a função open(). Eis a sintaxe:

file_object = open("filename", "mode")

file_object: objeto que representa o ficheiro a criar ou a abrir;
filename: nome do ficheiro a criar ou abrir e a terminação do tipo de ficheiro que se pretende - se queremos um ficheiro csv devemos fazer "Datafile.csv", por exemplo. No raspberry pi, é possível aceder ao ficheiro a partir do gestor de ficheiros;
mode: modo como o ficheiro será usado. Caso se omita este valor, será usado o modo "r" por defeito. Os modos que podem ser usados são os seguintes:
  • "r": abertura do ficheiro apenas para leitura;
  • "w": abertura de ficheiro apenas para escrita (se o ficheiro já contiver dados, estes serão apagados);
  • "a": abre o ficheiro para acrescentar dados aos já existentes (appending);
  • "r+": abre o ficheiro para leitura e escrita.

As funções mais comuns para quem lida com ficheiros são file.write() e file.read().

Como o nosso objetivo é criar um ficheiro, é a função file.write() aquela a que recorremos. Depois de introduzirmos todos os dados no ficheiro, é necessário usar a função file.close() pois, de outra forma, o programa não assumirá como encerrada a introdução dos dados e não será possível aceder ao ficheiro a partir de outro programa. Um exemplo de criação de ficheiro de texto:


O conjunto de carateres "\n" (escape character), tem como função a introdução de um carater mudança de linha.

E agora? Seremos capazes de interpretar todo o código da atividade 2.2 da aula 3 proposta pela Ciência Viva


Recolhendo dados do Astro Pi - temperatura, humidade e pressão

O objetivo da competição Astro Pi é recolher dados do meio ambiente e tratá-los, testando uma hipótese ou atuando de acordo com os dados obtidos.

Os sensores por onde será mais fácil para os alunos começar a recolha de dados são os sensores de temperatura, humidade e pressão, por serem estas grandezas valores escalares.

Para explorar estes sensores vamos recorrer à terceira aula disponibilizada pela Ciência Viva, programa Esero, realizando todos os exercícios até à página 10 do referido documento:



NOTA: detetámos uma gralha na página 9, na última linha do primeiro programa proposto nessa página, a mensagem "humidity" deve estar entre aspas, de forma a escrever na matriz de LED essa palavra. Para apresentar o valor da variável humidity, há que fazer:


A recolha de dados através do Sense HAT não se revela difícil, bastando para isso usar os comandos associados à recolha de dados dos sensores:


Relativamente à temperatura, os valores obtidos revelaram-se demasiado altos, o que poderá estar relacionado com o facto de estarmos a medir a temperatura junto ao equipamento, aquecido pelo processador e restantes componentes eletrónicos. Este é um problema sobre o qual nos vamos ter de debruçar mais tarde.

Quanto à humidade, grandeza fundamental para detetar a presença de cientistas no módulo Columbus - a missão primária sugerida pela ESA - fizemos alguns ensaios, registámos os valores num ficheiro csv (este tipo de ficheiro merecerá post posterior) seguindo tarefas indicadas no documento da Ciência Viva e obtivemos os seguintes resultados para três situações distintas - connosco fora do alcance do sensor; próximos do sensor; respirando para cima do sensor:


Agora há que explorar os dados...quando respiramos para cima do sensor, é evidente a alteração da humidade, mas os cientistas da ISS não estarão a respirar mesmo para cima do raspberry pi...será que o sistema de suporte de vida não reagirá suficientemente rápido para inverter o aumento de humidade gerado pela presença de cientistas? Como podemos relacionar a humidade com a temperatura (já que a humidade relativa depende da temperatura ambiente? Com o tamanho da Columbus será possível que a presença de uma pessoa no seu interior altere a humidade local? Tanto em que pensar...Bom trabalho!

O emulador do Sense HAT da Trinket

O estarmos dependentes do raspberry pi e do Sense HAT tem algumas desvantagens: em primeiro lugar, não temos equipamento suficiente para que todos os elementos da equipa o tenham disponível para treinar de forma autónoma, essencial num projeto desta natureza; em segundo lugar, a verdade é que toda a montagem do raspberry pi aos periféricos leva o seu tempo e por vezes é pouco prático para um teste rápido (não conseguimos ainda ter um conjunto monitor-rato-teclado dedicado ao raspberry pi...).

Assim, é uma enorme ajuda ter acesso a um bom emulador do Sense HAT que corra em PC. O emulador Trinket, desenvolvido pela Fundação Raspberry Pi em parceria com a empresa Trinket, uma sartup dos Estados Unidos, é uma ferramenta gratuita que permite simular um raspberry pi com Sense HAT diretamente num qualquer browser, sem necessidade de instalar programas.

Este emulador permite ainda que mais pessoas e mais escolas participem em futuras competições Astro PI, podendo desenvolver trabalho ainda antes de ter o equipamento do projeto. 




sábado, 14 de janeiro de 2017

Explorando a matriz de LED do Sense HAT

O sense HAT (HAT é o acrónimo de Hardware Attached on Topé uma placa suplementar para o Raspberry Pi criado especialmente para o desafio Astro Pi. Enquanto equipa concorrente ao desafio, tivemos o privilégio de ter acesso a um sense HAT, mas é possível comprar uma destas placas por cerca de £25 em lojas especializadas, como a RS.

A placa Sense HAT
A placa Sense HAT está equipada com uma matriz de LED RGB 8x8, um joystick de 5 pontos e ainda os seguintes sensores: giroscópio, acelerómetro, magnetómetro, temperatura, pressão e humidade.

Para realizar programas em Python que explorem as potencialidades do Sense HAT, há que recorrer à livraria SenseHat, iniciando o programa com as seguintes linhas:


A livraria SenseHat permite-nos usar uma série de comandos úteis para dominar a placa Sense HAT. A ESA disponibiliza um bom resumo dos comandos disponíveis: 


São várias as estratégias de exploração do Sense HAT. A ESA tem publicada uma série de documentação muito interessante que pode ser explorada quer individualmente pelos alunos, quer em sala de aula. A documentação, em inglês, pode ser encontrada no site do raspberry pi.

A Ciência Viva, através do programa Esero, disponibilizou também um bom documento em português para explorar os comandos associados à matriz de LED:



Este documento é um ótimo exercício para iniciar os trabalhos com o Sense HAT, apresentando tarefas com dificuldade crescente e apelativas. É também uma boa forma de exercitar a programação Python e, como bónus, permite, através do uso dos LED RGB (red, green, blue), uma reflexão sobre a luz e a cor.

Despedimo-nos com um pequeno vídeo de um divertido exercício de programação da matriz de LED que fizemos - quem não reconhece o creeper do Minecraft?

terça-feira, 10 de janeiro de 2017

O Kit Astro Pi

O desafio Astro Pi 2017 passa por três fases distintas:


  • Fase 1 – Registo e submissão do projeto;
  • Fase 2 – Descoberta do kit Astro Pi, missões de design das experências e programação;
  • Fase 3 – Selecção das melhores experiências para serem utilizadas na ISS.

Às equipas selecionadas na primeira fase, é disponibilizado um kit Astro Pi que contém um raspberry pi, um sense hat (falaremos dele em post posterior), duas câmaras (uma normal, outra de infravermelhos). Contém ainda um carregador, um cartão de memória e um adaptador HDMI-VGA para permitir a ligação a monitores com entradas HDMI:

O kit Astro Pi

A disponibilização deste material é preciosa não só para a concretização do projeto, como para permitir aos alunos o contacto com equipamento de eletrónica a que não têm acesso no dia-a-dia. A riqueza deste projeto passa muito por aí - abrir horizontes a nível científico e tecnológico!



Primeiros passos em Python

São muitas as formas de aprender a programar (seja Python, seja outro tipo de linguagem). E, evidentemente, não é preciso um raspberry pi para o fazer. Neste projeto, no entanto, o objetivo é mesmo programar um raspberry pi, pelo que nos concentraremos nisso.

O inconveniente do raspberry pi é que nem sempre está disponível (no nosso clube temos dois que vão sendo emprestados semanalmente aos alunos, mas não dá para todos em simultâneo) e, estando, obriga à ligação do monitor e do rato e do teclado...por vezes, para treino, é mais simples usar simuladores que correm diretamente no PC (falaremos deles em post posterior).

O Ciência Viva, através do programa Esero, disponibilizou três boas aulas para introdução à programação em Python.

A primeira das aulas concentra-se apenas na programação Python. Caso não se tenha um raspberry, pode executar-se a aula num PC com o Python instalado.

É um bom exercício para um primeiro contacto com o raspberry pi e para começar a compreender a estrutura de um programa em Python, assim como a lógica do uso de livrarias. Os alunos não conseguiram cumprir esta aula em 90 minutos, mas cumpriram as tarefas sem dificuldades de maior.

Deixo o material disponibilizado pelo Ciência Viva:


Desafio 1 - Aprender a programar em Python!

Assim muito rapidamente: tirando o Cláudio e o Ricardo, que já tinham por iniciativa própria explorado um pouco sobre programação, nenhum de nós tinha escrito uma única linha de código!

O Astro Pi tem por objetivo programar um raspberry pi em linguagem Python e sem termos algumas bases de programação nessa linguagem, pouco há que possamos fazer.

Para nos ajudar, pedimos ajuda ao engenheiro Nuno Nunes, programador na empresa Densare, que se propôs a apadrinhar a nossa equipa ajudando-nos com a linguagem de programação.

Em dezembro, o eng. Nuno Nunes veio ter connosco à escola e tivemos oportunidade de ter uma sessão de formação para introdução à linguagem Python e de esclarecer algumas dúvidas. 

Foi ainda criado um fórum para partilharmos dúvidas e informações. Obrigado pelo apoio!

Sessão de formação em Python

Na nossa escola, tudo começou...

Na nossa escola, tudo começou no clube de robótica.

Somos uma equipa de alunos que frequentam o clube de robótica da Escola Secundária D. João II, em Setúbal. Numa sessão do clube, em novembro, a professora Ana Carneirinho apresentou-nos os objetivos do projeto, o trabalho a desenvolver, as datas mais importantes para cumprimento de tarefas.

Um grupo de dez alunos mostrou-se interessado em participar no projeto e cada um de nós enviou para a professora um pequeno texto sobre o motivo porque gostaríamos de pertencer à equipa Astro Pi. E as principais razões apontadas foram as seguintes:
  • O facto de ser um desafio e uma oportunidade de trabalhar em verdadeiro ambiente de projeto;
  • Por ser uma oportunidade de desenvolver competências a nível da programação e eletrónica, imprescindíveis para alunos que querem seguir a área da engenharia;
  • Porque saber mais sobre o espaço e a tecnologia a bordo da ISS é uma forma de alargar o conhecimento científico dos alunos;
  • É a primeira vez que os alunos participam numa competição europeia - é uma forma de saber o que se faz em escolas de outros países e até entrar em contacto com alunos de outras nacionalidades.
O nome da equipa foi escolhido por nós - o nome da nossa cidade escrito ao contrário.

E foi com entusiasmo que recebemos a notícia de que tínhamos sido selecionados para participar no desafio europeu!

A equipa Labutes Pi