Logisch mit dem Analogen ausmessen von Werten Unicorn

Logisch mit dem Analogen ausmessen von Werten Unicorn Titelbild

Mit der Nase des Einhorns Programmieren

Wie du vermutlich schon gesehen hast, hat das Einhorn eine wunderschöne große und gelb-orangenfarbene Nase. Doch die Nase kann mehr als nur gut aussehen, denn die Nase ist in Wahrheit ein Photowiderstand. Im Vergleich zu einem ganz normalen Widerstand, ist die Größe nicht immer gleich. (Damit meinen wir jetzt nicht den Umfang oder den Durchmesser des Bauteils, sondern den Widerstandswert. Aber das weißt du ja sicherlich sowieso.) Also, in einem komplett abgedunkeltem Raum liegt die Widerstandsgröße bei ein paar Mega-Ω (Ohm) . Je heller es wird, umso geringer wird der Widerstand. Alles, was uns jetzt noch fehlt, ist ein Kondensator. Denn ein Kondensator kann Spannung speichern und wieder abgeben. Du kannst dir einen Kondensator wie einen sehr kleine Akku vorstellen, den du aufladen kannst und dann als Spannungsquelle wieder entladen kannst. So ein Kondensator entlädt sich jedoch deutlich schneller. Dazu kommt, dass sie sofort versuchen sich zu entladen, wenn die Speicherkapazität erreicht ist. Die Speichergröße eines Kondensators wird in Farad oder kurz F angegeben. Bei unserem Unicorn Shield findest du den Kondensator auf dem rechten Ohr.

Bis jetzt haben wir viel mit digitalen Werten gearbeitet, die immer nur eine 1/True oder eine 0/False zurück bekommen. Das ist praktisch, wenn wir die Daten von einem Taster haben wollen, der entweder gedrückt ist (True) oder halt nicht (False). Das sind die digitalen Werte mit denen der Raspberry Pi am besten arbeiten kann. Es wird nur eine 1 gemessen, wenn eine Spannung von über 2V an dem Pin anliegt. Es gibt aber noch eine ganze Reihe von Situationen, in denen es sehr hilfreich ist, nicht nur auf eine 1 oder 0 beschränkt zu sein und zwar bei analogen Werten. Diese analogen Werte können wir aber leider nicht so einfach beim Raspberry Pi messen und müssen deswegen den Umweg mit dem Kondensator gehen.

import unicornshield as unicorn
from time import sleep

while True:
  if unicorn.nose() > 0.3:
    unicorn.setAll(155,155,155)
    unicorn.show()
    sleep(4)
    unicorn.clear()

Wenn du das Programm ausführst, sollte zunächst erstmal nichts passieren, bis du beispielsweise mit deinem Daumen die Nase bedeckst. Dann sollten alle LEDs auf dem Einhorn für vier Sekunden aufleuchten und anschließend direkt wieder ausgehen. Und wie immer kannst du das Programm mit Strg+C jederzeit beenden.

Schritt für Schritt

Die wirkliche Neuerung in diesem Programm kommt erst in Zeile 5. Dort gibt es in der while-Schleife eine if-Bedingung. Allerdings benutzen wir dort zum ersten Mal nicht das ==, um zu sehen, ob etwas wirklich gleich ist, sondern > oder auch Größer als-Zeichen genannt. Das benutzen wir, um den Rückgabewert von unicorn.nose() zu testen. Übersetzt steht in Zeile 5, wenn der Rückgabewert von unicorn.nose() größer ist als 0,3, dann führe die eingerückten Zeilen aus. Wichtig: In Python (und in den meisten anderen Programmiersprachen), werden die Kommazahlen nicht mit einem , getrennt sondern mit einem .. Wenn du ein , benutzt wird es zu einer Fehlermeldung kommen. In Zeile 6 schalten wir dann alle LEDs an, in Zeile 7 gibt es eine sleep()-Funktion, die das Programm anhält, damit wir auch etwas von dem Licht haben und in Zeile 8 werden dann alle LEDs wieder ausgeschaltet.

Es kann sein, dass du den Kommawert in Zeile 5 anpassen musst, weil er von der Helligkeit deiner Umgebung abhängt. Diesen Helligkeitswert kannst du mit print(unicorn.nose()) einfach austesten und kontrollieren.

Noch Fragen oder Feedback?

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