Metronom Loesung: Unterschied zwischen den Versionen

Aus microbit - Das Schulbuch
Wechseln zu: Navigation, Suche
(Komplettlösungen)
 
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Grundsätzliche Überlegungen ==
 
== Grundsätzliche Überlegungen ==
Der Boden selbst hat einen gewissen elektrischen Widerstand, der von der Menge an Wasser und Nährstoffen abhängt. Es wirkt wie ein variabler Widerstand in einer elektronischen Schaltung. Das Wasser ist nicht leitend, der Nährstoffgehalt ist leitend. Die Kombination von Wasser- und Bodennährstoffen verleiht dem Boden eine gewisse Leitfähigkeit. Je mehr Wasser also zusammen mit den Nährstoffen vorhanden ist, desto weniger elektrischen Widerstand wird der Boden haben.
+
Bei diesem Beispiel dreht sich alles um die Variable Tempo. Sie ist schon vorgefertigt und unter dem Abschnitt Musik zu finden. Ihr Wert wird in bpm (= beats per minute) angegeben und kann jederzeit abgerufen und verändert werden.
  
 
== Hilfestellungen und Lösung zum Metronom ==
 
== Hilfestellungen und Lösung zum Metronom ==
;Feuchtigkeit messen
+
;"ändern auf" und "ändern um"
:Zu Beginn steuern wir den Pin P1 an und geben dort einen Strom aus.
+
:Wichtig ist die Unterscheidung zwischen "ändern auf" und "ändern um".
:Um die Feuchtigkeit der Erde mit dem mirco:bit messen zu können, lesen wir die Spannung an Pin P0 aus.
+
:"ändern auf" setzt das Tempo auf einen bestimmten Wert. <spoiler text="Block"><pre id="pre01">
:Der Wert dieses Pins liegt zwischen 0 (kein Strom) und 1023 (maximaler Strom) und kann als Variable abgebildet werden.
+
music.setTempo(100)
: Gib der Variable einen sinnvollen Namen, wie zum Beispiel Feuchtigkeit.
 
:Der Wert dieser Variable kann als Graph auf der LED Matrix ausgegeben werden.
 
:Mit dem Befehl "plot bar graph" können Werte von Variablen grafisch dargestellt werden.
 
  
:'''Versuch'''
+
</pre>
:Setze die Nägel in trockene Erde. Es sollen nun die meisten LEDs abschalten.
+
</spoiler>
:Setze die Nägel in feuchte Erde Nun sollten die meisten LEDs angehen.
+
:"ändern um" verändert das Tempo um einen bestimmten Wert. Das funktioniert sowohl mit positiven als auch negativen Zahlen. <spoiler text="Block"><pre id="pre01">
 +
input.onButtonPressed(Button.A, function () {
 +
    music.changeTempoBy(-5)
 +
})
  
  
 +
</pre>
 +
</spoiler>
  
;Sensordaten und Werte
+
;Dauerhafte Audio- und LED-Ausgabe
:Bisher haben wir nur eine ungefähre Vorstellung davon, was der Sensorwert ist. Ergänzen wir, dass der aktuelle Messwert nur anzeigt wird, wenn die Taste A gedrückt wird.
+
:Damit das Tempo zeitgleich mit dem Abspielen der Töne dargestellt wird, sind zwei Blöcke "dauerhaft" nötig. <spoiler text="Block"><pre id="pre01">
 +
basic.forever(function () {
 +
    basic.showNumber(music.tempo())
 +
})
 +
basic.forever(function () {
 +
    music.playTone(262, music.beat(BeatFraction.Sixteenth))
 +
    music.rest(music.beat(BeatFraction.Whole))
 +
})
  
:'''Versuch'''
+
</pre>
:Setze die Nägel in die trockene Erde, drücke A und notieren den Wert. Der Wert sollte im Bereich von 250 liegen.
+
</spoiler>
:Setze die Nägel in die feuchte Erde, drücke A und notieren den Wert. Der Wert sollte im Bereich von 1000 liegen.
 
  
 +
== Komplettlösungen ==
 +
<pre id="01">
 +
input.onButtonPressed(Button.A, function () {
 +
    music.changeTempoBy(-5)
 +
})
 +
input.onButtonPressed(Button.B, function () {
 +
    music.changeTempoBy(5)
 +
})
 +
music.setTempo(100)
 +
basic.forever(function () {
 +
    music.playTone(262, music.beat(BeatFraction.Sixteenth))
 +
    music.rest(music.beat(BeatFraction.Whole))
 +
})
 +
basic.forever(function () {
 +
    basic.showNumber(music.tempo())
 +
})
 +
 +
 +
</pre>
  
 +
* Eine mögliche [https://makecode.microbit.org/_3seJTFAWYJzC Lösung]
  
;Verschwende keine Energie
 
:Wir möchten, dass die Batterien lange Zeit halten und daher können wir den Code optimieren. Unser Feuchtigkeitssensor soll nicht zu viel Energie verbrauchen.
 
:Wenn wir den Stromkreis direkt an den 3V Pin anschließen. Wird diese Messenheit dauerhaft mit Strom versorgt.
 
:Stattdessen können wir den Stromkreis mit Pin 3 (P1) verbinden und diesen Pin nur während der Messung einschalten. Dies spart Strom und vermeidet außerdem Korrosion an den Erdsonden (in unserem Fall Nägel).
 
:Wir können auch die Helligkeit des Bildschirms senken, um den Energieverbrauch der LEDs zu senken.
 
:Die Bodenfeuchtigkeit ändert sich sehr langsam, so dass wir sie nicht ständig messen müssen. Mit einer Pause von ca. 5 Sekunden kann zusätzlich Energie gespart werden.
 
  
 +
[[Metronom|Zurück zur Aufgabe]]
  
== Komplettlösungen ==
+
<htmlet>makecode_embed</htmlet>
[[Datei:pflanzwächteraufbau.jpg|right|500px|border|Pflanzenwächter]]
 
Wenn der micro:bit mit Strom versorgt ist zeigt der mit der LED Matrix die Feuchtigkeit der Erde. Wenn die Taste A gedrückt wird, wird der Wert als Zahl ausgegeben. Den Pflanzenwächter in Aktion siehst du in diesem Video https://youtu.be/S8NppVT_paw.
 
Eine mögliche Lösung könnte so aussehen. <spoiler text="Lösung">[[Datei: Loesung_pflanzenwaechter.PNG |border|800px|eine mögliche Lösung]]</spoiler>
 

Aktuelle Version vom 13. März 2022, 18:33 Uhr

Grundsätzliche Überlegungen

Bei diesem Beispiel dreht sich alles um die Variable Tempo. Sie ist schon vorgefertigt und unter dem Abschnitt Musik zu finden. Ihr Wert wird in bpm (= beats per minute) angegeben und kann jederzeit abgerufen und verändert werden.

Hilfestellungen und Lösung zum Metronom

"ändern auf" und "ändern um"
Wichtig ist die Unterscheidung zwischen "ändern auf" und "ändern um".
"ändern auf" setzt das Tempo auf einen bestimmten Wert. Block
"ändern um" verändert das Tempo um einen bestimmten Wert. Das funktioniert sowohl mit positiven als auch negativen Zahlen. Block


Dauerhafte Audio- und LED-Ausgabe
Damit das Tempo zeitgleich mit dem Abspielen der Töne dargestellt wird, sind zwei Blöcke "dauerhaft" nötig. Block


Komplettlösungen

input.onButtonPressed(Button.A, function () {
    music.changeTempoBy(-5)
})
input.onButtonPressed(Button.B, function () {
    music.changeTempoBy(5)
})
music.setTempo(100)
basic.forever(function () {
    music.playTone(262, music.beat(BeatFraction.Sixteenth))
    music.rest(music.beat(BeatFraction.Whole))
})
basic.forever(function () {
    basic.showNumber(music.tempo())
})



Zurück zur Aufgabe