Skip to content

Atividade

Registador de temperaturas máximas e mínimas

Avançado | Python | Botões, Ecrã LED, Pins, Sensor de temperatura | Entrada/Saída, Gestão de dados, Tipo de dados, Variáveis

Passo 1: Faz tu mesmo

O que é isto?

Converte o teu micro:bit numa máquina registadora independente que regista leituras de temperaturas máximas e mínimas, e grava-as de maneira a ficar com os dados guardados mesmo se fica sem pilhas ou se o desligas da eletricidade

É um programa em Python, mas não tens de saber nada de Python para o usar.

O que é que vais aprender

  • Como usar Python para ler e escrever dados num armazenamento volátil que se mantem no teu micro:bit mesmo quando a energia é desligada
  • Como gerir erros em programas Python
  • Como converter variáveis numéricas em strings e vice-versa

Do que é que precisas

  • Um micro:bit
  • suporte de pilhas opcional

Como usá-lo

  • Faz download do ficheiro .hex e descarrega-o no teu micro:bit.
  • Se tiveres um suporte de pilhas, liga-o e deixa o micro:bit num sitio onde haja variações de temperatura. Podes testá-lo pondo-o por uns minutos do lado de fora ou mesmo dentro de um frigorífico.
  • Abana-o para mostrar a temperatura atual.
  • Carrega no botão A para mostrar a temperatura mínima registada.
  • Carrega no botão B para mostrar a temperatura máxima registada.
  • Carrega nos pins GND e 2 ao mesmo tempo com os teus dedos para reiniciar a leitura das temperaturas máxima e mínimas atuais.

Passo 2: Cria o teu código

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from microbit import *

# function to read data file:
def get_nv_data(name):
    try:
        with open(name) as f:
            v = int(f.read())
    except OSError:
        v = temperature()
        try:
            with open(name, 'w') as f:
               f.write(str(v))
        except OSError:
            display.scroll('Cannot create file %s' % name)

    except ValueError:
        display.scroll('invalid data in file %s' % name)
        v = temperature()

    return v

# function to write data file:
def set_nv_data(name, value):
    try:
        with open(name, 'w') as f:
            f.write(str(value))
    except OSError:
        display.scroll('Cannot write to file %s' % name)

min = get_nv_data('min.txt')
max = get_nv_data('max.txt')

while True:
    currentTemp = temperature()
    if currentTemp < min:
        min = currentTemp
        set_nv_data('min.txt', min)
    if currentTemp > max:
        max = currentTemp
        set_nv_data('max.txt', max)
    if accelerometer.was_gesture('shake'):
        display.scroll(currentTemp)
    if button_a.was_pressed():
        display.scroll(get_nv_data('min.txt'))
    if button_b.was_pressed():
        display.scroll(get_nv_data('max.txt'))
    if pin2.is_touched():
        display.scroll('clearing data')
        set_nv_data('min.txt', currentTemp)
        set_nv_data('max.txt', currentTemp)

Como é que funciona

Esta máquina registadora grava as leituras mesmo se a energia for desligada do teu micro:bit. Isto acontece porque as leituras são guardadas num armazenamento volátil. Esta é a memória do computador que guarda os conteúdo quando a energia é desligada, a mesma que o micro:bit usa quando guarda o programa que fica registado na última vez que o desligaste do computador.

Os dados ficam gravados no teu micro:bit em dois ficheiros de texto chamados min.txt e max-txt, que o programa Python consegue ler e atualizar.

O programa usa três variáveis para registar e comparar a temperatura:

  • currentTemp é a leitura da temperatura atual do sensor de temperatura
  • max é a temperatura máxima. Um novo valor é atribuido se a temperatura atual foi maior que (>) o valor atual de max.
  • min é a temperatura mínima. Atribui-se-lhe um novo valor se a temperatura atual for mais baixa que (<) o valor atual de min.

Duas funções, get_nv_data e set_nv_data, ler e escrever dados para o ficheiros de texto não voláteis Estas funções convertem números em texto e vice-versa:

  • int() converte texto (também chamado string) numa variável númerica (integral) que podemos usar para comparar com a temperatura atual.
  • str() converte uma variável numérica, como a leitura de temperatura, num string de texto que pode ser guardado como ficheiro de texto.

As funções usam tentativa e excepto para detectar erros ao ler ou escrever ficheiros de dados. Se não existem ficheiros gravados com temperaturas mínimas e máximas, quando ligas pela primeira vez, por exemplo, ele estabelecer as variáveis max e min como temperatura atual.

A parte principal do programa corre dentro do loop while True: (enquanto Verdadeiro). É equivalente ao bloco forever (para sempre) no MakeCode.

Passo 3: Melhora-o

  • O sensor de temperatura encontra-se dentro do processador do micro:bit e costuma dar leituras de temperatura mais altas do que as do ar circundante. Usa um termómetro normal para ver a diferença de temeperaturas e compensa os valores subtraindo o valor da leitura temperature()
  • Converte o programa para registar diferentes tipos de dados, como a medida de força do acelerómetro.
  • Usa a função rádio para enviar também dados para outro micro:bit noutra localização.
Aprende mais sobre armazenamento de dados em Python