Betretungsdetektor Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Grundsätzliche Überlegungen == Für dieses Beispiel sind folgende Ideen wichtig: * Was sind Ereignisse und welche gibt es beim micro:bit? * Wie funkti…“
 
Keine Bearbeitungszusammenfassung
 
Zeile 2: Zeile 2:
Für dieses Beispiel sind folgende Ideen wichtig:
Für dieses Beispiel sind folgende Ideen wichtig:
* Was sind [[Ereignisse]] und welche gibt es beim micro:bit?
* Was sind [[Ereignisse]] und welche gibt es beim micro:bit?
* Wie funktionieren [[Alternativen|Abfragen]] und wie können dort Vergleiche verwendet werden?
* Wie funktionieren [[Bedingte_Anweisungen|Abfragen]] und wie können damit Vergleiche verwendet werden?
* Wie kann ich die Magnetfeldstärke mit Hilfe des im BBC micro:bit eingebauten Sensores abfragen?
* Wie kann ich die Magnetfeldstärke mit Hilfe des im BBC micro:bit eingebauten Sensores abfragen?
* Wie kann ich mit Hilfe eines Browsers der "WebUSB" beherscht mir direkt und live Daten am PC anschauen?
* Wie kann ich mit Hilfe eines Browsers der "WebUSB" beherscht mir direkt und live Daten am PC anschauen?

Aktuelle Version vom 18. Januar 2022, 15:38 Uhr

Grundsätzliche Überlegungen

Für dieses Beispiel sind folgende Ideen wichtig:

  • Was sind Ereignisse und welche gibt es beim micro:bit?
  • Wie funktionieren Abfragen und wie können damit Vergleiche verwendet werden?
  • Wie kann ich die Magnetfeldstärke mit Hilfe des im BBC micro:bit eingebauten Sensores abfragen?
  • Wie kann ich mit Hilfe eines Browsers der "WebUSB" beherscht mir direkt und live Daten am PC anschauen?

Tipps und Tricks

Beim Starten des Programms, was müssen wir alles festlegen?
Denke immer daran: Sicherheit geht vor - alle Variablen initialisieren, d.h. auf einen vernünftigen Startwert setzen.
Was man natürlich auch braucht, ist eine Variable, mit der man sich merken kann, wieviele Türöffnungen es gegeben hat, also wie oft der Wert der Magnetfeldstärke stark geschwankt ist.<spoiler text="Hinweis">Diese sollte man zu Beginn und auch beim Zurücksetzen des Spiels („Reset“) auf Null setzen.</spoiler>
Die wichtigste Überlegung bei diesem Projekt ist, wie man verhindert, dass sobald die Türe geöffnet wird, dauerhaft und sehr schnell hochgezählt wird.
Das würde passieren, wenn man nur abfragt wie zB „Wenn die Magnetfeldstärke unter dem Schwellwert ist, zähle um eins hoch“. Wie kann man das verhindern?<spoiler>Man muss sich merken, ob man, wenn die Magnetfeldstärke fällt, schon einmal gezählt hat, in dem man eine Variable auf einen bestimmten Wert setzt (zB „Setze GeradeOffen auf Wahr“) und diesen dann immer abfragt, bevor man den Zähler erhöht. Diesen Merker muss man immer dann löschen, wenn die Türe wieder zu geht, also die Magnetfeldstärke nicht mehr unter dem Schwellwert ist (zB „Setze GeradeOffen auf Falsch“)</spoiler>
Schlussendlich braucht man noch eine Möglichkeit zum Anzeigen der bisherigen „Öffnungen“
Also wenn zB ein bestimmter Knopf gedrückt wird, soll die Variable mit der man die Öffnungen mitzählt ausgegeben werden.
Was vielleicht auch nicht schaden kann ist eine Möglichkeit, den Zähler zwischendurch auch wieder auf „0“ zurücksetzen zu können
Für den Fall, dass man das Zimmer doch noch selber betreten muss oder ähnliches.<spoiler>zB wenn man A und B gleichzeitig drückt, wird der Zähler auf 0 gesetzt, gleich wie am Anfang.</spoiler>

Komplettlösungen

Beim Starten des Programms, was müssen wir alles festlegen?
Wir sollten die wichten Variablen auf Null setzen. Vielleicht auch je nach belieben auch einen Text oder ein Symbol ausgeben um anzuzeigen, dass der Detektor "scharf" ist. <spoiler text="Lösung">

AnzahlÖffnungen = 0 GeradeOffen = false </spoiler>

Wie können wir ein Zurücksetzen und Neustarten des Detektors mit den Tasten A und B bewerkstelligen?
Eigenlich ist das ja das gleiche, wie wenn man den BBC micro:bit einschaltet und er startet ... <spoiler text="Lösung">

input.onButtonPressed(Button.AB, function () { AnzahlÖffnungen = 0 GeradeOffen = false }) </spoiler>

Und was muss passieren, wenn der Detektor läuft?
Wenn das Programm läuft, muss nur noch dauerhaft getestet werden, ob die Magnetfeldstärke und einen bestimmten Schwellwert fällt. Dann merken wir uns, dass die Tür gerade offen ist und zählen die Variable um eins nach oben. Nicht vergessen, wenn die Magnetfeldstärke nicht mehr unter dem Schwellwert ist muss man den Merker, dass sie offen ist wieder löschen.<spoiler text="Lösung">

basic.forever(function () { if (input.magneticForce(Dimension.Strength) < 150) { if (GeradeOffen == false) { GeradeOffen = true AnzahlÖffnungen += 1 } } else { GeradeOffen = false } }) </spoiler>

Wenn wir nun wieder nach Hause kommen und wissen wollen wie oft die Tür geöffnet wurde.
Da nehmen wir am einfachsten eine der beiden Tasten und zeigen den Wert der Zählvariable an. <spoiler text="Lösung">

input.onButtonPressed(Button.A, function () { basic.showString("" + (AnzahlÖffnungen)) }) </spoiler>