Calliope mini - Spaß durch Programmieren

Entwicklungsumgebungen

Wohlfühlanzeiger

Ziel: Natürlich gibt es keinen Anzeiger für ein gutes Gefühl. Man kann sich nur anzeigen lassen, ob die äußeren Bedingungen günstig sind, so dass man sich wohl fühlen kann. Zu den messbaren Bedingungen gehören: Alle drei Werte sollen auf dem LCD-Display angezeigt werden.

Der Sensor

Zum Einsatz kommt der Calliope CO2-Sensor, den man z.B. im Calliope Shop bestellen kann. Die großen Löcher an dern Rändern haben keine elektrische Funktion, sondern passen prima auf Legosteine. Nicht schlecht!

Der Sensor wird über den I2C-Bus angeschlossen (A0). Da man an diesem Bus viele Geräte hintereinader schalten kann, hat der Sensor zwei Anschlüsse davon. Der eine geht zum Calliope mini und an dem anderen kann z.B. das OLED-Display angeschlossen werden. Nicht schlecht!

Der Sensor liefert für alle drei Werte sofort konkrete Zahlen. Die Temperatur wird in °C ausgegeben, die relative Luftfeuchtigkeit in Prozent und der CO2-Gehalt der Luft in ppm (part per Million, 1 Millionstel, 10-6 ).

Bei der Temperatur weiß jeder selber, wie groß sie sein muss, damit man sich wohlfühlt. Die relative Luftfeuchtigekt sollte zwischen 40% und 60% liegen. Aber auch das ist rein subjektiv.

Beim CO2-Gehalt merkt man nicht so schnell, dass er Ursache von Unwohlsein ist. Je höher er ist, um so schneller wird man müde, bekommt Kopfschmerzen und hat Konzentrationsschwierigkeiten. Die eigene Erfahrung sagt, dass alles, was zwischen 400 ppm und 1000 ppm liegt, okay ist. Je weiter der Wert über 1000 ppm liegt, um so unwohler fühlt man sich, im Zimmer ist schlechte Luft.

Da hilft nur Lüften.

CO2-Gehalt messen und anzeigen

Zuerst muss der Sensor in Make Code ähnlich wie das OLED-Display eingebunden werden. Das geht über:

Fortgeschritten..., Erweiterungen...

Falls der Sensor nicht erscheint, muss ganz oben (Projekt-URL suchen oder eingeben...) diese Adresse eingegeben werden:

https://github.com/calliope-edu/CO2-Sensor-SCD40

Dann erscheint der Sensor unter dem Funk-Eintrag.

Hat man zusätzlich noch das OLED-Display angeschlossen und eingebunden, kann man das kurze Programm laufen lassen. Da die Messung des CO2-Gehalts der Luft einige Energie kostet, wird im Sensor die Messung nur aller 5 Sekunden durchgeführt, das Programm fragt den Wert aller 6 Sekunden ab.
Auf dem Display sieht man übrigends aller 5 Sekunden ein Flackern der Helligkeit. Das ist der Moment, wo der Senor die Messung durchführt und die Spannung um etwa 0,3 V sinkt.

Das Ergebnis auf dem Display ist ernüchternd. In der ersten Zeile werden Zahlen um Zahlen aneinandergereiht. Hier ist für eine sinnvolle Anzeige noch etwas zu tun.

Anschlss des Displays

Vor jeder neuen Anzeige muss der Cursor auf dem Display wieder an die Stelle gesetzt werden, an der die Information erscheinen soll. Damit erreicht man, dass der CO2-Wert immer in der 3. Zeile (Zeile 2!) am Anfang neu geschrieben wird. Wenn man das Display vorher löschen würde, flackert die Anzeige.

Aber auch diese Programmversion funktioniert noch nicht richtig. Zu Beginn werden dreistellige Werte ordentlich dargestellt. Der Wechsel zu vierstelligen Werten funktioniert auch (die Luft wird schlechter). Wird die Luft dann wieder besser und der CO2-Wert sinkt auf unter 1000, wird die letzte Stelle nicht gelöscht und die Anzeige ist verwirrend.
Programm

Displays

Das Problem kann man lösen, indem man bei einem dreistelligen Anzeigewert vor die Zahl ein Leerzeichen setzt.

Anschlss des Displays

Will man es richtig schön machen, setzt man vor die Zahl noch CO2 und hinter die Zahl die Einheit. Dann wissen die Experten sofort, worum es geht.

Anschlss des Displays

Luftfeuchtigkeit und Temperatur messen und anzeigen

Nun sollte alles weitere kein Problem sein. Der Cursor wird auf die Zeile 4 gesetzt, der Wert für die Luftfeuchtigkeit wird mit dem Prozentzeichen verbunden und angezeigt. Das Ergebnis sieht man auf dem Bild: damit kann man nichts anfangen.

Was ist die Ursache? Der Luftfeuchtigkeitswert wird mit einer sehr großen Anzahl an Nachkommastellen ausgegeben. Das ist sicher nicht sinnvoll, denn so genau kann und will niemand messen. Aber es ist so.

Anschlss des Displays

Die Anzeige der Luftfeuchtigkeit reicht mit einer Kommastelle aus. Leider gibt es dafür keinen Block. Es gibt nur Runden. Damit werden aber immer alle Kommastellen weggerundet.

Für eine Kommastelle muss man folgendes machen:
  1. Der Wert für die Feuchtigkeit wird mit 10 multipliziert.
  2. Dieses Ergebnis wird gerundet (alle Kommastellen entfallen)
  3. Dieses Ergebnis wird wieder durch 10 geteilt.
Ersetzt man die 10 z.B. durch eine 100, erhält man eine Zahl mit zwei Nachkommastellen. Anschlss des Displays

Anschlss des Displays

Sieht das nicht perfekt aus? Irrtum!

Ist die Nachkommastelle eine 0, wird diese von der Anzeige automatisch unterdrückt. Damit verkürzt sich die Zeile um ein Zeichen und das alte Prozentzeichen bleibt noch stehen. Zwei Prozentzeichen! Das geht nicht!

Anschlss des Displays

Vor der Anzeige muss geprüft werden, ob die Zahl als Nachkommastelle eine 0 hat. Ist das der Fall, kann man in der Anzeige die ansonsten unterdrückte ,0 mit anzeigen.

Anschlss des Displays

Die Temperaturanzeige baut man genau so in das Programm mit ein. Das Bild zeigt die Werte vom 31.7.2022 in Eilenburg (Sachsen) draußen.

Damit die Temperaturanzeige alle möglichen Temperaturen richtig anzeigt, müssen noch folgende Werte berücksichtigt werden:

  • negative zweistellige Werte
  • negative einstellige Werte
  • 0°C
  • positive einstellige Werte

Erst wenn das alles mit eingebaut wurde, hat man eine ansprechende Anzeige.

Anschlss des Displays

Warten ist immer noch doof

Wie an anderen Stellen auch erwähnt, ist der Wartebefehl in der Programmierung unüblich. Während der Calliope mini wartet, ist er zu nichts anderen fähig. Deshalb sollte er vermieden werden. Mir ist auch kein Beispiel bekannt, wo er nicht durch andere Befehle ersetzt werden kann. Im konkreten Fall wartet das Programm 6 Sekunden. Diese Warterei lässt sich mit dem Einsatz des Zeitgebers vermeiden.

Der Zeitgeber ist eine Uhr, die mit dem Start des Calliopemini zu laufen beginnt und durch nichts beeinflusst werden kann. In anderen Umgebungen lässt sich der Zeitgeber durch einen Befehl zurücksetzen, in Make Code geht das nicht. Der Zeitgeber lässt sich aber während eines Programs immer wieder abfragen.

Damit lässt sich im dauerhaft-Block folgendes realisieren:

  1. In einer Variablen dauer wird gespeichert, nach wieviel Sekunden ein Ereignis aufgerufen werden soll, hier also 6.
  2. In einer Variablen zeit wird die Zeit vom Zeitgeber gespeichert, zu der das Ereignis zuletzt aufgerufen wurde.
  3. Wenn der Inhalt der Variablen zeit + der Inhalt von dauer größer sind als der Inhalt des Zeitgebers, wird der Inhalt des Zeitgebers in der Variablen zeit gespeichert und das Ereignis oder eine Funktion aufgerufen.

Display

Hinweis: Der Calliope mini speichert Variable als vorzeichenbehaftete 32-Bit-Zahl. Damit hat die Variable zeit eine obere Grenze. Wenn an die Zeit in Millisekunden speichert und die Anzeige viele Tage laufen soll, kann diese Grenze erreicht werden. Deshalb wird die Zeit in Sekunden verarbeitet.

zurück