Sonnenuhr Lösung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Wechseln zu: Navigation, Suche
(Befehle und Aufbau des Programmes)
 
(100 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Grundsätzliche Überlegungen ==
 
== Grundsätzliche Überlegungen ==
* Die Voraussetzung für unser Programm ist die Erkenntnis bzw. das Verständnis, dass die Erde sich in 24 Stunden einmal um sich selbst dreht, also um 360 Grad.
+
* Die Voraussetzung für unser Programm ist die Erkenntnis bzw. das Verständnis, dass sich die Erde in 24 Stunden einmal um sich selbst dreht, also um 360 Grad.
 
* Daraus leitet sich die Rotation von 15 Grad pro Stunde und weiter die Drehung um 1 Grad alle 4 Minuten ab.
 
* Daraus leitet sich die Rotation von 15 Grad pro Stunde und weiter die Drehung um 1 Grad alle 4 Minuten ab.
  
== Kalibrieren des Compass-Sensors - Wichtig nach jedem Hochladen des Programmes auf den Micro:Bit!!! ==
+
== Vor dem Programmstart ==
* Zunächst erscheint auf dem Micro:Bit folgender Text in als Laufschrift: DRAW A CIRCLE
+
* '''Fixierung und senkrechte Ausrichtung des Wattestäbchens''' [[Datei:Startbild1.jpg|right|210px|border|Micro:Bit mit Wattestäbchen]]
* Nun durch Neigen in alle Richtungen einen Kreis auf der 5x LED Matrix zeichnen.
+
: Das Wattestäbchen soll möglichst fest im Loch an PIN 2 stecken.
* Jetzt ist der Kompass-Sensor startbereit und das Programm wird gestartet.
+
:  Es soll möglichst senkrecht ausgerichtet sein.  
  
== Tipps und Tricks ==
+
* '''Kalibrieren des Kompass-Sensors''' Nach jedem Hochladen des Programmes auf den micro:bit!!!
; Was muss beim Starten des Programms festgelegt werden?[[Datei: Startbild1.jpg|border|right|300px|Unser Startbildschirm]]
+
:  Zunächst erscheint auf dem micro:mit folgender Text als Laufschrift: DRAW A CIRCLE
: Wir weisen allen [[Variablen]] den Startwert 0 zu. <spoiler>Wir haben vier Variablen, die wir alle auf '''0''' setzen: RICHTUNG, STUNDE, MINUTE und SOMMERZEIT.
+
: Nun durch Neigen in alle Richtungen einen Kreis auf der 5x5 LED Matrix zeichnen.
: ALs Startbild wird eine Sonnenuhr gezeigt, damit man weiß, dass das Programm läuft. Du könntst aber auch ein anderes Startbild gestalten!
+
: Jetzt ist der Kompass-Sensor startbereit und das Programm wird gestartet.
  
; Was soll passieren, wenn zB die Taste A gedrückt wird?
+
== Verwendung der elektronischen Sonnenuhr ==
: Zur Erinnerung: Jakob will ja, dass bei A für ihn gezählt wird!
+
; Was muss beim Starten des Programms festgelegt werden?[[Datei: Wattestaebchen.jpg|border|right|210px|Unser Startbildschirm]]
: Zur Sicherheit müssen wir aufpassen, ob nicht gerade für Lea gezählt wird. Dafür brauchen wir den Merker für gerade für Lea gezählt wird.
+
* Wir weisen allen [[Variablen]] den Startwert 0 zu. <spoiler>Wir haben vier Variablen, die wir alle auf '''0''' setzen: RICHTUNG, STUNDE, MINUTE und SOMMERZEIT.</spoiler>
: OK, wir zählen nicht für Lea. Nun kann das Drücken von A zwei Bedeutungen haben. Weißt du welche? <spoiler>Wenn das Zählen noch nicht läuft, soll gestartet werden. Wenn wir schon zählen, soll gestoppt werden.</spoiler>
+
* Als Startbild wird eine stilisierte Sonnenuhr gezeigt, damit man weiß, dass das Programm läuft. Du könntest aber auch ein anderes Startbild gestalten!
: Wenn wir schon für Jakob zählen, hören wir damit auf und merken uns das.
+
* Durch Drücken den Tasten A und B kann die Sommerzeit (Taste A) und Winterzeit (Taste B) eingestellt werden.
: Wenn nicht, merken wir uns, dass ab jetzt für Jakob gezählt wird!
 
: (Beim Drücken von B passiert eigentlich das gleiche. Es sind nur die Rollen vertauscht. Formuliere es richtig um?)
 
  
; Wenn nun geputzt wird, und der Micro&#58;bit merkt, dass er dabei geschüttelt wird ...
+
; Nun wollen wir die elektronische Sonnenuhr zum Einsatz bringen:
: Was müssen wir prüfen, '''bevor''' wir einen Putzzähler erhöhen können? <spoiler>Richtig: für wen wir eigentlich zählen, muss mit einer [[Alternativen|Abfrage]] unterschieden werden</spoiler>
+
* Wir richten den micro:bit durch Drehen so aus,dass der Schatten des
: Wenn wir für Jakob zählen, erhöhen wir seinen Zähler um eins.
+
: Wattestächens genau auf die mittlere LED-Reihe fällt. (Siehe Bild rechts)
: Sonst, wenn wir für Lea zählen, erhöhen wir ihren Zähler.
+
* Jetzt ermittelt der micro:bit mit dem Kompasss-Sensor die Drehung (Grade).
: Und falls wir für niemanden zählen erhöhen wir gar nichts ... :)
+
* Er berechnet daraus die Uhrzeit und zeigt diese an. [[Datei: Sommer_Winter.jpg|border|right|200px|Unser Startbildschirm]]
 
+
* Zuerst die Stunden angezeigt dann als Trennung ein Bindestrich.
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
+
* Sommerzeit: Bindesrich mit einem Punkt links oben
: Ist überhaupt schon etwas gezählt worden? Für beide? Wie können wir das überprüfen?
+
* Winterzeit: Bindesrich mit einem Punkt rechts oben
: Wenn ja, hat Jakob mehr geputzt als Lea? Dann haben wir einen Gewinner und wir sollten das Ergebnis verkünden!
+
* Dann werden die Minuten angezeigt.
: Sonst, hat vielleicht Lea mehr geputzt als Jakob? Auch hier haben wir eine Gewinnerin!
+
* Nach einer Pause erfolgt die nächste Programmschleife.
: Sonst? Ja, was könnte noch sein? <spoiler>Beide haben gleich viel geputzt: unentschieden!</spoiler>
 
: Wenn das Ergebnis gezeigt wurde, könnte es sein, dass die beiden vielleicht nochmal probieren wollen. Was müssen wir dafür noch berücksichtigen? <spoiler>Dass alle Variablen, wie beim Programmstart wieder zurückgesetzt werden, sonst würde einfach bei der bisherigen Anzahl von Schrubbungen weitergezählt werden! Außerdem könnten wir auch wieder unsere Startgrafik anzeigen</spoiler>
 
  
 
== Flussdiagramme ==
 
== Flussdiagramme ==
 
Könnten bei Bedarf auch noch hier als Zwischenteil eingebaut werden.
 
Könnten bei Bedarf auch noch hier als Zwischenteil eingebaut werden.
  
== Komplettlösungen ==
+
== Befehle und Aufbau des Programmes ==
 
; Beim Starten des Programms, was müssen wir alles festlegen?
 
; Beim Starten des Programms, was müssen wir alles festlegen?
: Eine mögliche Lösung für den Start? <spoiler text="Lösung">[[Datei:Morgenritual - Beim Start.png|border|350px|Was passieren könnte, wenn das Programm startet]]</spoiler>
+
: Eine mögliche Lösung für den Start? <spoiler text="Lösung">
; Wenn die Taste A gedrückt wird, können verschiedene Dinge passieren, je nachdem was das Programm gerade macht!
+
<pre id="pre01">
: Wenn wir auch einige Sicherheitsabfragen einbauen, kann eine Lösung so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - A gedrückt.png|border|500px|Was passieren könnte, wenn A gedrückt wird]]</spoiler>
+
let Richtung = 0
; Wenn die Taste B gedrückt wird, sollte etwas ähnliches geschehen wie beim Drücken von A, nur mit vertauschten Rollen!
+
let Stunde = 0
: Das sieht zB so aus: <spoiler text="Lösung">[[Datei:Morgenritual - B gedrückt.png|border|500px|Was passieren könnte, wenn B gedrückt wird]]</spoiler>
+
let Minute = 0
; Wenn nun ein Schrubben (Schütteln) erkannt wird ...
+
let Sommerzeit = 0
: ... teilen wir das wie folgt richtig zu: <spoiler text="Lösung">[[Datei:Morgenritual - Wenn geschüttelt.png|border|500px|Was passieren könnte, wenn das Programm startet]]</spoiler>
+
basic.showLeds(`
; Wenn die Tasten A und B gleichzeitig gedrückt werden, soll ja angezeigt werden, wer gewonnen hat. Was müssen wir dazu (der Reihe nach) wissen?
+
    . . # . .
: Der Programmteil könnte zB so aussehen: <spoiler text="Lösung">[[Datei:Morgenritual - AB gedrückt.png|border|800px|Was passieren könnte, wenn die Tasten A und B gleichzeitig gedrückt werden]]</spoiler>
+
    . . # . .
 +
    . . # . .
 +
    # . # . #
 +
    . # # # .
 +
    `)
 +
basic.pause(100)
 +
 
 +
 
 +
</pre>
 +
</spoiler>
 +
; Umschaltung Sommerzeit - Winterzeit:
 +
: Taste A:Sommerzeit (Variable Sommerzeit = 1) Taste B: Winterzeit (Variable Sommerzeit = 0) <spoiler text="Lösung">
 +
<pre id="pre01">
 +
let Sommerzeit = 0
 +
input.onButtonPressed(Button.A, function () {
 +
    Sommerzeit = 1
 +
    basic.showString("SZ")
 +
})
 +
input.onButtonPressed(Button.B, function () {
 +
    Sommerzeit = 0
 +
    basic.showString("WZ")
 +
})
 +
 
 +
</pre>
 +
</spoiler>
 +
; Kompass-Sensor auslesen und den Wert der Variablen RICHTUNG zuweisen, daraus Zeit berechnen.
 +
: Die Stunden erhält man, indem man die Grade durch 15 dividiert (Die Erde dreht sich pro Stunde um 15 Grad weiter).
 +
: Den Rest der Division multipliziert man mit 4 und erhält so die Minuten (alle 4 Minuten dreht sich die Erde um 1 Grad). <spoiler text="Lösung">[[Datei:SU_Zeit_berechnen.jpg|border|600px|Kompass-Sensor auslesen und Zeit berechnen]]</spoiler>
 +
; Korrektur der Zeit, da micro&#58;bit um 180 Grad gedreht verwendet wird.
 +
: Wenn Sonne im Süden steht, fällt der Schatten nach Norden, dann wird 0 Grad angezeigt
 +
: Es ist aber dann 12 Uhr, daher Korrektur um 12 Stunden. <spoiler text="Lösung">[[Datei:SUZeitkorrektur.jpg|border|300px|Korrektur der Zit um 12 Stunden]]</spoiler>
 +
; Anzeige der Zeit in Stunden und Minuten
 +
: Danach kurze Pause. <spoiler text="Lösung">[[Datei:SU Zeitanzeige.jpg|border|300px|Anzeige der Uhrzeit in Stunden und Minuten]]</spoiler>
 +
; Gesamtes Programm <spoiler text="Lösung">
 +
<pre id="pre01">
 +
input.onButtonPressed(Button.A, function () {
 +
    Sommerzeit = 1
 +
    basic.showString("SZ")
 +
})
 +
input.onButtonPressed(Button.B, function () {
 +
    Sommerzeit = 0
 +
    basic.showString("WZ")
 +
})
 +
let Sommerzeit = 0
 +
let Richtung = 0
 +
let Stunde = 0
 +
let Minute = 0
 +
Sommerzeit = 0
 +
basic.showLeds(`
 +
    . . # . .
 +
    . . # . .
 +
    . . # . .
 +
    # . # . #
 +
    . # # # .
 +
    `)
 +
basic.pause(100)
 +
basic.forever(function () {   
 +
    Richtung = input.compassHeading()           
 +
    Stunde = Math.idiv(Richtung, 15)             
 +
    Minute = Richtung % 15 * 4                   
 +
    if (Stunde < 12) {
 +
        Stunde += 12
 +
    } else {
 +
        Stunde += -12
 +
    }                       
 +
    if (Sommerzeit == 1) {
 +
        Stunde += 1
 +
    }
 +
    basic.showNumber(Stunde)
 +
    basic.pause(200)                                   
 +
    if (Sommerzeit == 1) {                                       
 +
        basic.showLeds(`
 +
            # . . . .
 +
            . . . . .
 +
            . # # # .
 +
            . . . . .
 +
            . . . . .
 +
            `)
 +
    } else {                                       
 +
        basic.showLeds(`
 +
            . . . . #
 +
            . . . . .
 +
            . # # # .
 +
            . . . . .
 +
            . . . . .
 +
            `)
 +
    }
 +
    basic.pause(100)
 +
    // Anzeige Minuten
 +
    basic.showNumber(Minute)
 +
    // 2 Sekunden Pause
 +
    basic.pause(2000)
 +
})
 +
 
 +
 
 +
 
 +
 
 +
 
 +
</pre>
 +
</spoiler>
 +
 
 +
 
 +
 
 +
<htmlet>makecode_embed</htmlet>

Aktuelle Version vom 12. Dezember 2021, 11:30 Uhr

Grundsätzliche Überlegungen

  • Die Voraussetzung für unser Programm ist die Erkenntnis bzw. das Verständnis, dass sich die Erde in 24 Stunden einmal um sich selbst dreht, also um 360 Grad.
  • Daraus leitet sich die Rotation von 15 Grad pro Stunde und weiter die Drehung um 1 Grad alle 4 Minuten ab.

Vor dem Programmstart

  • Fixierung und senkrechte Ausrichtung des Wattestäbchens
    Micro:Bit mit Wattestäbchen
Das Wattestäbchen soll möglichst fest im Loch an PIN 2 stecken.
Es soll möglichst senkrecht ausgerichtet sein.
  • Kalibrieren des Kompass-Sensors Nach jedem Hochladen des Programmes auf den micro:bit!!!
Zunächst erscheint auf dem micro:mit folgender Text als Laufschrift: DRAW A CIRCLE
Nun durch Neigen in alle Richtungen einen Kreis auf der 5x5 LED Matrix zeichnen.
Jetzt ist der Kompass-Sensor startbereit und das Programm wird gestartet.

Verwendung der elektronischen Sonnenuhr

Was muss beim Starten des Programms festgelegt werden?
Unser Startbildschirm
  • Als Startbild wird eine stilisierte Sonnenuhr gezeigt, damit man weiß, dass das Programm läuft. Du könntest aber auch ein anderes Startbild gestalten!
  • Durch Drücken den Tasten A und B kann die Sommerzeit (Taste A) und Winterzeit (Taste B) eingestellt werden.
Nun wollen wir die elektronische Sonnenuhr zum Einsatz bringen
  • Wir richten den micro:bit durch Drehen so aus,dass der Schatten des
Wattestächens genau auf die mittlere LED-Reihe fällt. (Siehe Bild rechts)
  • Jetzt ermittelt der micro:bit mit dem Kompasss-Sensor die Drehung (Grade).
  • Er berechnet daraus die Uhrzeit und zeigt diese an.
    Unser Startbildschirm
  • Zuerst die Stunden angezeigt dann als Trennung ein Bindestrich.
  • Sommerzeit: Bindesrich mit einem Punkt links oben
  • Winterzeit: Bindesrich mit einem Punkt rechts oben
  • Dann werden die Minuten angezeigt.
  • Nach einer Pause erfolgt die nächste Programmschleife.

Flussdiagramme

Könnten bei Bedarf auch noch hier als Zwischenteil eingebaut werden.

Befehle und Aufbau des Programmes

Beim Starten des Programms, was müssen wir alles festlegen?
Eine mögliche Lösung für den Start? Lösung
Umschaltung Sommerzeit - Winterzeit
Taste A:Sommerzeit (Variable Sommerzeit = 1) Taste B: Winterzeit (Variable Sommerzeit = 0) Lösung
Kompass-Sensor auslesen und den Wert der Variablen RICHTUNG zuweisen, daraus Zeit berechnen.
Die Stunden erhält man, indem man die Grade durch 15 dividiert (Die Erde dreht sich pro Stunde um 15 Grad weiter).
Den Rest der Division multipliziert man mit 4 und erhält so die Minuten (alle 4 Minuten dreht sich die Erde um 1 Grad). Lösung
Korrektur der Zeit, da micro:bit um 180 Grad gedreht verwendet wird.
Wenn Sonne im Süden steht, fällt der Schatten nach Norden, dann wird 0 Grad angezeigt
Es ist aber dann 12 Uhr, daher Korrektur um 12 Stunden. Lösung
Anzeige der Zeit in Stunden und Minuten
Danach kurze Pause. Lösung
Gesamtes Programm Lösung