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!