Unicorn Basics Pi DE

Unicorn Basics Pi DE Titelbild

Vorwort

Alle Schaltungen, Programme und Bauteile wurden vorab von uns geprüft. Dennoch können wir leider nicht ausschließen, dass sich Fehler ins Buch, in die Schaltungen oder in die Programme eingeschlichen haben. Wenn du auf Probleme stoßen solltest oder eine Frage hast, kannst du uns natürlich gern kontaktieren. Die Möglichkeiten dazu findest du auf der rechten Seite. Denk bitte außerdem daran, dass LEDs nie aus kurzer Distanz direkt angesehen werden sollten.

Herausgeber

Jugend Programmiert
Coding World UG (haftungsbeschränkt)
Obdrupstraße. 23a, 24986 Mittelangeln
www.codingworld.io
Support & Feedback: support@cw42.de
show

Inhaltsverzeichnis

Thema Seite
Das Shield Seite 2
Bibliothek installieren Seite 3
Das erste Programm Seite 4
Liste aller Funktionen Seite 6
Mit Farben arbeiten Seite 8
Die Eingaben testen Seite 9
Weitere Projekte Seite 11

Das Shield

Das Coding Unicorn Shield stellt eine großartige Grundlage für deine Projekte dar und lässt sich einfach mit Jumper Kabeln an deinen Raspberry Pi verbinden. Mehr dazu auf cw42.de/anschluss oder im Begleit zettel. Auf den nächsten Seiten werden wir dir erklären wie du die Python Bibliothek installierst, um so richtig mit dem Programmieren loslegen zu können. Natürlich geben wir dir zu Beginn auch einen Einblick, welche Programme du damit schreiben kannst. Insgesamt hast du auf deiner Platine neun Pixel, oder auch WS2812B LEDs (Rot), zwei weiße 5mm LEDs auf den Augen (Grün), einen Helligkeitssensor auf der Nase (Blau) und einen Taster auf dem Ohr (Dunkelblau). Da wir mit dem Raspberry Pi nicht automatisch analoge Werte lesen können, brauchen wir noch einen kleinen Hack. Dafür ist der Kondensator (Orange) wichtig. Mehr dazu findest du auf cw42.de/55 und weitere Infors zum Verbinden auf cw42.de/upi1.

Das Shield mit Erklärungen

Bibliothek installieren

Bevor wir anfangen, das Unicorn Shield zu programmieren, müssen wir erstmal die benötigten Bibliotheken installieren und gegebenenfalls die Einstellungen auf dem Raspberry Pi anpassen. Für die Pixel/WS2812B ist es wichtig, dass der PWM am Pi funktioniert. Wenn du diese Pixel benutzen möchtest, kannst du den Klinke-Audio Ausgang am Pi nicht benutzen. Das kannst du mit raspi-config einstellen. Benutze dafür einfach den folgenden Befehl: Zuerst den Terminalbefehl sudo raspi-config und dann die folgenden Befehle ausführen: 7 Advanced Options -> A4 Audio -> 2 Force HDMI -> Ok. Für die nächsten Schritte brauchst du eine Internetverbindung.

Damit du Python Bibliotheken installieren kannst, musst du folgende Befehle ausführen:

sudo apt-get install python-dev
python-setuptools

Und jetzt die Bibliothek herunterladen und installieren:

git clone https://github.com/
        coding-world/unicorn-shield-python
cd unicorn-shield-python/
cd rpi-ws281x
sudo python setup.py install
cd ..


cd UnicornShield
sudo python setup.py install
cd 

Das erste Programm

Im nächsten Schritt schreiben wir ein einfaches Programm, was alle Pixel LEDs zum Blinken bringt und zwar in der Farbe Pink. Wenn du dort Fehler haben solltest, wiederhole am besten den oberen Teil noch einmal.

import unicornshield as unicorn
from time import sleep

while True:
  unicorn.setAll(155,0,155)
  unicorn.show()
  sleep(1)
  unicorn.clear()
  sleep(1)

Jetzt musst du das Programm mit sudo python nameDesProgramms.py ausführen und kannst es jederzeit mit Strg+C oder Ctrl+C beenden.

Schrit für Schritt

In den ersten beiden Zeilen werden die benötigten Bibliotheken eingebunden. Mit as unicorn können wir dem langen Namen der Bibliothek unicornshield verkürzen und haben der Bibliothek einen Spitznamen gegeben. Die sleep() -Funktion brauchen wir später, um das Programm zu pausieren.

Mehr müssen wir nicht machen, um mit dem Shield zu arbeiten. Deswegen fängt auch schon gleich in Zeile 4 mit while True: eine Schleife an, die für immer läuft bis das Programm mit Strg + C beendet wird. In dieser Schleife benutzen wir in Zeile 5 zum ersten Mal eine Funktion aus der unicornshield Bibliothek. Mit der Funktion .setAll() können wir allen Pixeln eine Farbe geben. Dafür müssen wir drei Parameter für die Farbwerte übergeben und benutzen dabei das sogenannte RGB-System. Das steht für Rot, Grün und Blau. Für jeden Parameter kannst du ein Wert von 0 bis 255 angeben und so fast alle Farben mischen. Mit den Werten die wir übergeben haben, mischen wir ein Pink zusammen. Nehmen wir mal an, dass das Programm nach Zeile 5 abrupt aufhören würde, was würde dann passieren? Richtig, die LEDs würden noch gar nicht leuchten. Dafür sorgt nämlich die .show()-Funktion in Zeile 6. Erst nach dem Aufrufen dieser Funktion werden die Farben auf dem Shield angezeigt. Da sich diese Funktionen alle in der unicornshield Bibliothek befinden, müssen wir diese auch mit dem Namen der Bibliothek oder dem Spitznamen aufrufen, also in diesem Fall unicorn.nameDerFunktion(). Wir wollen nun ja aber, dass die Pixel blinken und nicht einfach nur leuchten. In der nächsten Zeile rufen wir also die sleep(1)-Funktion auf. Dadurch wird das Programm für eine Sekunde lang pausiert. In Zeile 8 erfolgt dann das Ausschalten der LEDs mit der .clear()-Funktion, keines der Pixel leuchtet jetzt noch. Um sicherzugehen, dass die LEDs auch wirklich ausgeschaltet sind, bauen wir mit der sleep(1)-Funktion in Zeile 9 erneut eine Pause von einer Sekunde ein. Und schon haben wir ein Blinken mit dem Einhorn erschaffen! Im nächsten Schritt werden wir uns dann mit den anderen Komponenten des Shields beschäftigen und danach geht es dann an das Mischen der Farben. Mehr Informationen über Python und den Raspberry Pi findest du auch auf codingworld.io







Liste der Funktionen

Funktion Erklärung Parameter
.brightness(b) Mit dieser Funktion kannst du die Helligkeit der Pixel einstellen b=helligkeit, 0-1
.getBrightness() Gibt den momentanen Wert für die Helligkeit zurück
.clear() Schaltet alle Pixel aus
.setPixel(x,r,g,b) Setzt die Farbe für einen Pixel x=Position, von 0 - 8; r=farbe rot, von 0 -255; g=farbe grün, von 0 - 255; b=farbe blau, von 0 - 255
.getPixel(x) Gibt die aktuellen Farbwerte für einen Pixel zurück x = Position, von 0 - 8
.setAll(r,g,b) Setzt eine Farbe für alle Pixel r=farbe rot, von 0 -255; g=farbe grün, von 0 - 255; b=farbe blau, von 0 - 255
.show() Zeigt die gesetzen Farbwerte von .setPixel() und .setAll() auf dem Shield an
Augen
.leftEyeOn() Schaltet die LED auf dem linken Auge an
.leftEyeOff() Schaltet die LED auf dem linken Auge aus
.rightEyeOn() Schaltet die LED auf dem rechten Auge an
.rightEyeOff() Schaltet die LED auf dem rechten Auge aus
Nase
.nose() Gibt den Wert für die momentane Helligkeit zurück. Bei Zimmerbeleuchtung ca. 0,3
Taster / Ohr
.buttonPressed() Gibt False wenn der Taster nicht gedrückt ist und True wenn der Taster gedrückt ist

Diese Funktionen musst du alle mit der eingebundenen Bibliothek aufrufen. Zum Beispiel:


import unicornshield

unicornshield.leftEyeOn()

Auch müssen alle Python Programme, die mit dieser Bibliothek ausgeführt werden, mit Root-Rechten - also mit sudo - ausgeführt werden. Das solltest du auch im Kopf behalten, wenn du einen Cronjob für dein Unicorn Programm einrichtest.

Mit Farben arbeiten

Wenn wir mit den Pixeln auf dem Shield arbeiten, können wir mithilfe der RGB Parameter die meisten Farben mischen. Wir haben hier mal eine kleine Liste vorbereitet, du kannst aber jeden sogenannten Color Picker deiner Wahl benutzen. (Wenn du diesen Begriff bei Google eingibst, kannst du auch den von Google integrierten Color Picker benutzen.) Damit du dir das besser vorstellen kannst, haben wir mit der .setPixel()-Funktion einige Beispielfarben vorbereitet. Du kannst diese aber natürlich auch für die .setAll()-Funktion übernehmen.

.setPixel(0,255,0,0) Rot
.setPixel(0,255,180,0) Orange
.setPixel(0,255,255,0) Gelb
setPixel(0,0,255,0) Grün
.setPixel(0,0,255,155) Türkis
setPixel(0,0,0,255) Blau
.setPixel(0,255,0,255) Lila
.setPixel(0,255,255,255) Weiß
.setPixel(0,0,0,0) Schwarz/ausgeschaltet

Wichtig ist, dass du nach dem Aufrufen von .setPixel() und .setAll() nicht vergisst, auch die .show()-Funktion zu benutzen, damit die Farben auch wirklich auf dem Shield dargestellt werdet. Außerdem kannst du anstatt .setAll(0,0,0) auch einfach die .clear()-Funktion benutzen, da schwarz und ausgeschaltet das Gleiche ist (es gibt ja kein schwarzes Licht).

Jetzt bist du dran: Schaffst du es, deine Lieblingsfarbe mit den RGB-Werten zu erstellen? Und was passiert, wenn du die Werte alle ein wenig veränderst?

Die Eingaben testen

Jetzt haben wir uns schon viel mit den Pixel LEDs auf dem Unicorn Shield auseinander gesetzt, doch natürlich gibt es auch noch den Taster und den Helligkeitssensor. In diesem kleinen Programm soll es genau darum gehen.

test-station.py

import unicornshield as unicorn
from time import sleep

unicorn.setAll(100,100,100)
unicorn.show()

while True:
    buttonStatus = unicorn.buttonPressed()
    print("BTN:"+str(buttonStatus))
    noseStatus = unicorn.nose()
    print("NOS:"+str(noseStatus))
    if(buttonStatus == True):
        unicorn.setAll(0,0,139)
        unicorn.show()
        unicorn.leftEyeOn()
        unicorn.rightEyeOn()
    elif(noseStatus > 0.2):
        unicorn.setAll(155,0,155)
        unicorn.show()
        unicorn.leftEyeOff()
        unicorn.rightEyeOff()
    sleep(0.3)

Das Programm kannst du dann mit sudo python test-station.py ausführen und es läuft solange, bis du es mit Strg+C oder Ctrl+C beendest. Wenn du das Programm startest, sollten erstmal alle Pixel weiß aufleuchten. Ebenso sollte im Terminal eine Ausgabe mit dem Status des Tasters und der momentan gemessenen Helligkeit stehen. Nach dem Drücken des Tasters leuchten alle Pixel LEDs blau und die beiden LEDs auf den Augen leuchten nun auch. Wenn du den Daumen oder die Hand über den Helligkeitssensor hältst, sollten die Augen wieder ausgeschaltet sein und die Pixel LEDs lila leuchten. Jetzt aber zum Programmcode.

Wenn wir uns das Programm näher Ansehen, dann stellen wir fest, dass in den ersten beiden Zeilen die benötigten Bibliotheken importiert werden. In Zeile 4 und 5 wird dann bei jedem Start die Farbe der Pixe LEDs erstmal auf weiß geschaltet.

Eine ewig laufende while-Schleife finden wir in den Zeilen 7 bis 22. Der Code der ersten drei Zeilen innerhalb dieser Schleife sorgt dafür, dass die Daten für den Status des Buttons in der Variablen buttonSatus und der aktuelle Helligkeitswert in der Variablen noseStatus gespeichert werden. Dafür benutzen wir die Funktion .buttonPressed() und .nose(). Diese kennst du auch schon aus der Übersicht der Funktionen. Diese Werte werden in der Konsole mithilfe der print()-Funktion ausgegeben. Im nächsten Schritt gibt es zwei Bedingungen. Die erste Bedingung finden wir in Zeile 12 und diese ist dann wahr, wenn die Variable buttonStatus gleich True ist. True bedeutet in diesem Fall, dass der Taster gedrückt wurde. Wenn dem so ist, wird alles von Zeile 13 bis 16 ausgeführt. Dabei werden zunächst in Zeile 13 und 14 alle Pixel LEDs auf blau gesetzt und dann in Zeile 15 und 16 die beiden LEDs eingeschaltet. Wenn diese Bedingung nicht wahr ist, also der Taster nicht gedrückt wird, wird in Zeile 17 eine zweite Bedingung geprüft. Diese Bedingung ist wahr, wenn der Wert von der Variable noseStatus größer als 0,2 ist. Das würde bedeuten, dass jemand mit dem Daumen/der Hand den Helligkeitssensor verdeckt hat. Stimmt das, wird alles von Zeile 18 bis 21 ausgeführt. Zuerst werden in Zeile 18 und 19 die Pixel LEDs auf Lila gesetzt und dann in Zeile 20 und 21 die beiden LEDs ausgeschaltet. Am Ende gibt es in Zeile 22 noch eine kurze Pause, denn häufiger können wir eh nicht effektiv messen. Wenn keine von den beiden Bedingungen wahr ist, passiert nichts und es gibt keine Veränderung auf dem Shield.

Jetzt bist du dran: Kannst du die Farben in den Bedingungen verändern? Und was passiert, wenn du den Wert in der zweiten Bedingung von 0,2 auf einen anderen änderst?



Weitere Projekte

Projekt Link
Online findest du noch eine erweiterte Demo mit allen Funktionen cw42.de/unicornDemo
Emails sind eine coole Sache, doch manchmal bekommt man gar nicht mehr mit, wenn eine neue E-Mail angekommen ist. Mit dem Einhorn Shield kannst du dir das einfach anzeigen lassen und an deine ungelesenen E-Mails erinnert werden cw42.de/unicornEmail
Mit einem DS18B20 und deinem Einhorn Shield kannst du ohne viel Aufwand die aktuelle Temperatur in deinem Zimmer anzeigen und auch wie warm es maximal sein sollte. cw42.de/temperatur
Verbinde dein Einhorn mit der Twitter API und lass es blinken, sobald ein Hastag angezeigt wird cw42.de/einhornHastag

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!