Skip to content

Aktywność

Rejestrator temperatury max-min

Zaawansowany | Python | Czujnik temperatury, Piny, Przyciski, Wyświetlacz LED | Obsługa danych, Typy Danych, Wejście/Wyjście, Zmienne

Krok 1: Wykonaj to

Co to jest?

Zamień swój micro:bit w samodzielny rejestrator danych, który zapisuje odczyty maksymalne i minimalne temperatury i przechowuje je nawet jeśli baterie się wyczerpią lub odłączysz zasilanie.

To program w Pythonie, ale nie musisz rozumieć Pythona, aby użyć ten program.

Czego się nauczysz

  • Jak używać Pythona do odczytu i zapisu danych do nieulotnej pamięci, która pozostaje na Twoim micro:bicie nawet po odłączeniu zasilania
  • Jak obsługiwać błędy w programach w Pythonie
  • Jak konwertować zmienne numeryczne na łąńcuchy i na odwrót

Czego potrzebujesz

  • micro:bit
  • opcjonalny zestaw baterii

Jak go używać

  • Pobierz plik ,hex programu i wgraj go na swój micro:bit.
  • Jeśli masz pakiet baterii, dołącz go i pozostaw micro:bit tam, gdzie temperatura będzie się zmieniać. Można to przetestować, umieszczając płytkę na zewnątrz lub w lodówce i pozostawiając ją na kilka minut.
  • Wstrząśnij ją, aby pokazać aktualną temperaturę.
  • Naciśnij przycisk A, aby wyświetlić minimalną zarejestrowaną temperaturę.
  • Naciśnij przycisk B, aby wyświetlić maksymalną zarejestrowaną temperaturę.
  • Naciśnij jednocześnie GND i pin 2 palcami, aby zresetować maksymalną i minimalną temperaturę do bieżącej temperatury.

Krok 2: Zakoduj to

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

Jak to działa

Ten rejestrator danych przechowuje odczyty nawet wtedy, gdy zasilanie jest odłączone od Twojego micro:bita. Robi tak, przechowując odczyty w pamięci nieulotnej. To jest pamięć komputera, która utrzymuje zawartość po wyłączeniu zasilania, tak jak Twój micro:bit przechowuje program, który wgrałeś po odłączeniu go od komputera.

Przechowuje dane na Twoim micro:bicie w dwóch plikach tekstowych o nazwach min.txt i max.txt, które program w Pythonie może odczytywać i aktualizować.

Program używa trzech zmiennych do śledzenia i porównywania temperatury:

  • currentTemp to bieżący odczyt temperatury z wbudowanego czujnika temperatury micro:bit
  • max to maksymalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest większa niż (>) bieżąca wartość max.
  • min to minimalna temperatura. Zostaje przypisana jej nowa wartość, jeśli bieżąca temperatura jest mniejsza niż (<) bieżąca wartość min.

Dwie funkcje, get_nv_data i set_nv_data odczytują i zapisują dane numeryczne do nieulotnych plików tekstowych. Te funkcje konwertują liczby na tekst i na odwrót:

  • int() konwertuje tekst (nazywany również string) na zmienną liczbową (integer), którą możemy użyć do porównania z wartościa bieżącej temperatury.
  • str() konwertuje zmienną liczbową, jak odczyt temperatury, do łańcuch tekstowy, aby można go było zapisać w pliku tekstowym.

Funkcje używają try i except, aby wyłapać błędy odczytu lub zapisu plików danych. Jeśli nie ma pliku tekstowego zapisanego z maksymalną i minimalną temperaturą, na przykład podczas pierwszego uruchomienia, ustawia zmienne max i min jako bieżącą temperaturę.

Główna część programu działa wewnątrz pętli while True:. Zachowuje się podobnie jak blok na zawsze w MakeCode.

Krok 3: Ulepsz to

  • Czujniek temperatury w micro:bit jest umieszczony wewnątrz procesora i zwykle podaje nieco wyższe odczyty niż temparatura otaczającego powietrza. Zmierz różnicę za pomocą zwykłego termometru i dodaj przesunięcie do programu przez odjęcie różnicy od odczytu temperature()
  • Konwertuj program na logowanie różnych rodzajów danych, takich jak siły mierzone za pomocą akcelerometru.
  • Dodaj funkcję radia, aby wysyłać dane do innego micro:bita znajdującego się w innej lokalizacji.
Dowiedz się więcej o przechowywaniu danych w Pythonie