Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

Sense HAT - Teil 1

In diesem Abschnitt werden wir uns mit dem Sense-HAT (Hardware attached on top) beschäftigen. Einer Zusatzplatine, die eine 8x8 LED-Anzeige besitzt und dazu noch sechs Sensoren:

  • Barometer
  • Beschleunigungssensor
  • Feuchtigkeitsmesser
  • Gyroskop
  • Magnetometer und
  • Thermometer.

Bevor man sich ein solches Teil im Internet bestellt, kann man mit einem Simulationsprogramm die Möglichkeiten dieses Boards antesten.

Sense-HAT Simulation unter Windows

Über die URL https://trinket.io/sense-hat gelangt man direkt auf die Seite des Sense-HAT Simulationsprogramms der Fa. trinket. Es wird sowohl der Python-Code zur Ansteuerung der einzelnen Sensoren gezeigt, als auch das Ergebnis auf dem Sense-HAT, sofern man die Messwerte über die 8x8 LED-Anzeige ausgibt.

Sense-HAT Simulation unter Linux

  1. Arbeitet man mit der neuesten Linux-Version, dann findet man das Simulationsprogramm im Hauptmenü unter Anwendungen - Entwicklung - Sense HAT Emulator.
  2. Aktualisiert man ein bereits vorhandenes Betriebssystem mit
  • sudo apt-get update
  • sudo apt-get dist-upgrade

muss anschließend der Sense HAT Emulator separat installiert werden. Dies erfolgt über

  • sudo apt-get install -y python-sense-emu python3-sense-emu python-sense-emu-doc

Nach dem Start des Programms meldet sich der Sense HAT Emulator Bildschirm.

Unter File - Open example können aus drei Untermenüs:

  • Simple
  • Intermediate und
  • Advanced

verschiedene Programme ausgewählt und getestet werden. Da der Quellcode zu jedem der angebotenen Beispielprogramme mitgeliefert wird, erhält man einen ersten Eindruck von der Mächtigkeit der hinterlegten Bibliotheksfunktionen.

Übung 1 - Temperatur messen

Zuerst muss das Sense HAT mit der GPIO-Leiste des Raspi3 verbunden und anschließend verschraubt werden. Ist das erfolgt, muss - bei älteren Linux-Versionen - die Sense HAT Bibliotheksdatei geladen werden. Das geschieht mit

  • sudo apt-get update
  • sudo apt-get install sense-hat
  • sudo reboot

Wer mit dem aktuellen Betriebssystem arbeitet (Stand: 2018), braucht diese Schritte nicht auszuführen; da sind die Bibliotheksdateien bereits integriert.

Temperatur messen mit dem Sense HAT
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben
  • Informiere dich über pythonhosted.org/sense-hat/api/ über die Befehle, mit denen sich der Temperatursensor auf dem Sense HAT ansteuern lässt.
  • Informiere dich über die Datenblätter zu den Sense-HAT Sensoren
    • HTS221 Sensor zur Messung der relativen Feuchtigkeit
    • LPS25H Sensor zur Messung des Luftdrucks
    • LSM9DS1 3-Achsen-Gyroskop, 3-Achsen-Beschleunigungssensor, 3-Achsen-Magnetometer
  • Mit welchen/welchem Sensor(en) wird die Temperatur bestimmt?
  • Starte den Raspberry Pi.
  • Übertrage das Programm senseHat_temp1.py in den Python-Editor und speichere es anschließend ab.
  • Starte das Programm und überprüfe die angezeigten Messwerte.

Das Programm senseHat_temp1.py

Terminalausgabe der Ergebnisse

Betrachtung der Ergebnisse

Den Datenblättern ist zu entnehmen, dass jeder der drei installierten Sensoren auch einen Temperatursensor enthält. Aber ... die gemessenen Temperaturen entsprechen nicht der Zimmertemperatur.

Grund: durch die "geschickte" Anbringung der drei Sensoren (Druck, Feuchtigkeit und IMU) liegen diese, wenn die Platine auf den Raspi gesteckt ist, direkt über den Kühlrippen des "dampfenden" Controllers auf der Raspi-Platine. Temperaturen um die 40° C sind dann zu erwarten. Raumtemperaturen lassen sich so leider nicht messen. Will man sie dennoch messen, muss ein externer Temperatursensor an einem der freien GPIOS betrieben werden. Wie das geht, wird später gezeigt oder - man trennt das Sense-HAT vom Raspi.

Da warme Luft bekanntlich aufsteigt, kann man, wenn der Raspi um 90° gedreht wird, erreichen, dass die aufsteigende warme Luft durch den schmalen Schlitz zwischen Raspi-Platine und HAT  schneller nach oben entweichen kann. Die Folge: die angezeigte Temperatur geht zügig zurück (s. Abb. 1). Dieser Effekt kann mit Hilfe eines kleinen Lüfters noch deutlicher erreicht werden.

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 1

Alle 60 Sekunden werden die Temperaturen in der Konsole ausgegeben. Drei Minuten nach dem Start wird der Raspi um 90° in die Senkrechte gedreht. Die erwärmte Luft zwischen Controller-IC und HAT kann jetzt schneller entweichen. Die gemessene Temperatur sinkt etwas ab.

Übung 2 - Eine LED Grafik erzeugen

Auf dem 8x8 LED-Graphik-Feld lassen sich mit relativ einfachen Mitteln kleine Grafiken in RGB-Farben darstellen. Dazu werden in einem ersten Schritt die für das Bild benötigten RGB-Farben definiert und anschließend in einem 64-Punkt-Array gesetzt. Die Funktion

  • sense.set_pixels(name)

bringt das Bildchen dann auf das LED-Array des Sense-HAT. Die Variable name ist in diesem Fall der Arrayname des 64-Punkt-Arrays.

Eine einfache LED-Grafik erzeugen
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben

 

  • Starte den Raspberry Pi.
  • Informiere dich über pythonhosted.org/sense-hat/api/ über die Befehle, mit denen sich das LED-Array auf dem Sense HAT ansteuern lässt.
  • Unterteile das 8x8 LED-Feld so, dass vier farbige Felder á 4x4 LEDs in den Farben rot, grün, gelb und blau entstehen und in der Mitte ein 2x2 LED-Feld in weiß (s. Abb. 2).
  • Übertrage das Programm senseHat_grafik1.py in den Python-Editor und speichere es anschließend ab.
  • Starte das Programm und überprüfe, ob die Flächen auf dem LED-Array wie vorgegeben dargestellt werden.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 2

Die vier farbigen Felder sollen, wie in dieser Abbildung dargestellt, so auf dem 8x8 LED-Display des Sense-HAT erscheinen.

Der dargestellte Entwurf wurde mit dem Programm Sense HAT Grid Editor von J. Robinson aufgenommen.

Das Programm SenseHat_grafik01.py

Nachdem gezeigt wurde, wie man ein Bild auf dem 8x8 LED-Display des Sense-HAT erzeugen kann, werden in der folgenden Übung vier verschiedene einfarbige Bilder mit Hilfe des Joysticks auf dem Sense-HAT abgerufen.

Übung 3 - Bildfolge mit einem Joystick steuern

Das Material für diese Übung entspricht dem aus den beiden vorherigen Übungen. Es werden fünf verschiedenfarbige Bilder von jeweils einer bestimmten Farbe deklariert: rot, grün, blau, gelb und braun. Die einfarbigen Bilder werden zunächst im Sekundentakt auf dem LED-Display dargestellt. Anschließend wird über den Joystick mit jedem Tastendruck nacheinander eines der fünf Bilder aufgerufen. Wer es sich zutraut, kann auch das Vorwärts- bzw. Rückwärtsblättern durch die fünf Bilder programmieren.

Bildfolge mit einem Joystick steuern
Aufgaben
  • Lade Python 3 und erzeuge über File - New File eine neue Datei.
  • Übertrage das Programm SenseHat_grafik02.py und speichere es ab.
  • Starte das Programm und überzeuge dich, dass es die oben beschriebenen Funktionen ausführt.

Das Programm SenseHat_grafik02.py

Die fünf Bildarrays (hier ist nur eins dargestellt) sind genau so aufgebaut wie Feld_1, nur die Farbe ist jedes mal geändert. Da der Joystick des SenseHat angesprochen werden soll, wird die Bibliotheksfunktion pygame und alle Funktionen aus pygame.locals importiert.

Die Bilddarstellung auf dem 8x8 LED-Array wird abgeschlossen mit der Funktion

  • sense.clear()

die alle LEDs ausschaltet.

Das Konsolenfenster unter pygame wird nicht benötigt, wir arbeiten nur mit der 8x8 LED-Matrix, deshalb: bei pygame.display.set_mode kleine Abmessungen wählen. Mit der boolschen Variablen aktion wird eine Endlosschleife aufgebaut in der abgefragt wird, ob der Joystick gedrückt wird (KEYDOWN). Wenn JA, wird ein neues Bild auf der LED-Matrix angezeigt.

In dem folgenden Quellcode lassen sich die einzelnen Bilder mit Hilfe des Joysticks vorwärts und rückwärts durchlaufen. Als sechstes Bild wurde ein "schwarzes" Bild hinzugefügt, bei dem alle LEDs der Matrix ausgeschaltet sind.

Das Programm SenseHat_grafik03.py

Mit der pygame-Bibliothek und dem Sense-HAT lassen sich relativ einfach grafische Spiele auf dem 8x8 LED-Display programmieren. Einführende Tutorials zum Gebrauch der Funktionen aus der pygame-Bibliothek findet man im Internet; einfach nur googeln.

Für den unterrichtlichen Einsatz oder in AGs scheint mir dieses Teil nützlich zu sein; angesprochen sind eher SuS der Mittel- bis Oberstufe.

Übung 4 - Messung der Beschleunigung

Mit Hilfe der Methode

 

  • sense.get_accelerometer_raw()

lässt sich mit dem Sense-HAT die Kraft auf die drei Raumachsen x, y und z des Sensors in Vielfachen von g bestimmen. Da der Sensor flach auf der Sense-HAT-Platine aufgelötet ist, wirkt nur auf die Achse, die zum Erdmittelpunkt zeigt, die Gravitationskraft mit + oder - 1g. Das Vorzeichen ergibt sich durch die Lage des Sensors zum Erdmittelpunkt. Insgesamt kann die Platine bzw. der Sensor auf der Platine sechs verschiedene Achslagen zum Erdmittelpunkt einnehmen.

Abbildung 3 - Achsausrichtung des IMU LSM9DS1
Messung der Beschleunigung
Material
  • 1x  Raspberry Pi 3
  • 1x  Sense HAT
  • 1x  USB-Steckernetzteil, 2,5 A
  • 1x  HDMI Kabel
  • 1x  kabellose Maus, Tastatur
Aufgaben
  • Übertrage in den Python3 Editor das Programm SenseHAT_beschleunigung1.py und speichere es anschließend ab.
  • Lege den Raspi flach auf den Tisch und starte das Programm. Sobald die erste Messanzeige im Terminalfenster erscheint, drehe den Raspi auf den Kopf und warte die folgende Messung ab.
  • Führe für die sechs angegebenen Lagen des Raspi (siehe Abb. 2) die Messungen aus.
  • Überprüfe, ob jeweils eine Achsrichtung den Wert + oder -1g anzeigt.

Das Programm SenseHAT_beschleunigung1.py

Terminalausgabe

Würdigung der Messergebnisse

Zwischen den einzelnen Messungen bleiben 10s, um den Controller in die neue Position zu bringen. Bei der ersten Messung lag der Controller flach auf dem Tisch, bei der zweiten wurde er um 180° gedreht (auf den Kopf gestellt). Das Vorzeichen der Erdbeschleunigung g wechselt bei der z-Achsrichtung von Plus zu Minus, die anderen Achsrichtungen weisen den korrekten Wert 0 aus.

Bei der dritten und vierten Messung wurde die Platine so gehalten, dass man auf die vier um 90° gedrehten USB-Anschlüsse schaut (y-Achsrichtung des Sensors) und bei den letzten beiden Messungen zeigen die USB-Anschlüsse nach oben bzw. unten (x-Achsrichtung des Sensors).

Übung 5 - Text automatisch ausrichten

Jeder kennt von seinem Handy oder Tablet, dass sich der Text auf dem Display immer so ausrichtet, dass er vom Betrachter gelesen werden kann, egal, wie das Display gehalten wird. Diesen Effekt werden wir auf dem 8x8 LED Display in der folgenden Übung umsetzen. Die Materialliste entspricht der aus Übung 4.

Text automatisch ausrichten
Aufgaben
  • Übertrage in den Python3 Editor das Programm SenseHAT_beschleunigung2.py und speichere es anschließend ab.
  • Lege den Raspi flach auf den Tisch und starte das Programm. Auf dem Display sollte die Zahl 2 erscheinen.
  • Neige jetzt den Raspi in verschiedene Raumrichtungen und beobachte die Darstellung auf dem Display. Die Zahl sollte für den Beobachter immer lesbar bleiben.

Das Programm SenseHAT_beschleunigung2.py

Im Terminalfenster werden zur Kontrolle die Messwerte bezüglich der drei Raumachsen ausgegeben.

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf