Paso 1: Hazlo
¿Qué es?
Convierte tu micro:bit en un registrador de datos autocontenido que registra las lecturas de temperatura máxima y mínima, y las almacena para que mantenga los datos incluso si las pilas se agotan o se desconecta la fuente de energía.
Es un programa de Python, pero no necesitas saber nada de Python para usarlo.
Qué aprenderás
- Cómo usar Python para leer y escribir datos a almacenamiento no volátil que se mantienen en tu micro:bit incluso cuando se desconecta de una fuente de energía
- Cómo manejar los errores en programas Python
- Cómo convertir variables numéricas a cadenas y viceversa
Lo que necesitas
- Un micro:bit
- pilas (opcionales)
Cómo usarlo
- Descarga el archivo de programa .hex y escríbelo en tu micro:bit.
- Si tienes pilas, conéctalas y deja tu micro:bit en algún sitio donde la temperatura cambie notablemente. Puedes probarlo dejándolo en el exterior, o metiéndolo unos minutos a la nevera.
- Agítalo para que muestre la temperatura actual.
- Pulsa el botón A para que muestre la temperatura mínima registrada.
- Pulsa el botón B para que muestre la temperatura máxima registrada.
- Toca GND y el pin 2 a la vez con tus dedos para reiniciar la temperatura máxima y mínima y ponerlas a la temperatura actual.
Paso 2: Prográmalo
1from microbit import *
2
3# function to read data file:
4def get_nv_data(name):
5 try:
6 with open(name) as f:
7 v = int(f.read())
8 except OSError:
9 v = temperature()
10 try:
11 with open(name, 'w') as f:
12 f.write(str(v))
13 except OSError:
14 display.scroll('Cannot create file %s' % name)
15
16 except ValueError:
17 display.scroll('invalid data in file %s' % name)
18 v = temperature()
19
20 return v
21
22# function to write data file:
23def set_nv_data(name, value):
24 try:
25 with open(name, 'w') as f:
26 f.write(str(value))
27 except OSError:
28 display.scroll('Cannot write to file %s' % name)
29
30min = get_nv_data('min.txt')
31max = get_nv_data('max.txt')
32
33while True:
34 currentTemp = temperature()
35 if currentTemp < min:
36 min = currentTemp
37 set_nv_data('min.txt', min)
38 if currentTemp > max:
39 max = currentTemp
40 set_nv_data('max.txt', max)
41 if accelerometer.was_gesture('shake'):
42 display.scroll(currentTemp)
43 if button_a.was_pressed():
44 display.scroll(get_nv_data('min.txt'))
45 if button_b.was_pressed():
46 display.scroll(get_nv_data('max.txt'))
47 if pin2.is_touched():
48 display.scroll('clearing data')
49 set_nv_data('min.txt', currentTemp)
50 set_nv_data('max.txt', currentTemp)
51
Cómo funciona
Este registrador de datos almacena sus lecturas incluso cuando la energía se desconecta de tu micro:bit. Lo hace almacenando las lecturas en almacenamiento no volátil. Esta es la memoria del ordenador que guarda su contenido cuando se apaga, al igual que tu micro:bit guarda un programa que has escrito cuando lo desenchufas del ordenador.
Almacena los datos en tu micro:bit en dos archivos de texto llamados min.txt
y max.txt
que el programa Python puede leer y actualizar.
El programa utiliza tres variables para rastrear y comparar la temperatura:
currentTemp
es la lectura de la temperatura actual del sensor de temperatura incorporado del micro:bitmax
es la temperatura máxima. Se le asigna un nuevo valor si la temperatura actual es mayor que (>) el valor actual demax
.min
es la temperatura mínima. Se le asigna un valor si la temperatura actual es menor que (<) el valor actual demin
.
Dos funciones, get_nv_data
y set_nv_data
, leen y escriben datos numéricos en los archivos de texto no volátiles. Estas funciones convierten los números a texto y viceversa:
int()
convierte una variable de texto (llamada también string) a una numeral (integer) para que podamos usarla con la temperatura actual.str()
convierte una variable numérica, como una lectura de temperatura, en una cadena de texto para que pueda guardarse en un archivo de texto.
Las funciones utilizan try
y except
para detectar errores al leer o escribir los archivos de datos. Si no hay un archivo de texto guardado con las temperaturas máximas y mínimas, por ejemplo cuando lo ejecutas por primera vez, establece las variables max
y min
como la temperatura actual.
La parte principal del programa se ejecuta dentro del bucle while True:
. Esto se comporta como el bloque forever en MakeCode.
Paso 3: Mejóralo
- El sensor de temperatura del micro:bit está dentro del procesador y suele dar lecturas de temperatura más altas que las del aire circundante. Mida la diferencia usando un termómetro normal y añada una compensación al programa restando la diferencia de la lectura de
temperature()
- Convierte el programa para registrar diferentes tipos de datos, como las fuerzas medidas por el acelerómetro.
- Añadir la funcionalidad de radio para también enviar datos a otro micro:bit en otra ubicación
This content is published under a Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) licence.