Control the world!

Wie findet man heraus, ob sich Leute auf der Toilette die Hände gewaschen haben? Wie kann man einen LED-Streifen in ein Spiel verwandeln, das kontaktlos und hinter einem Schaufenster gespielt werden kann? Was braucht es für eine automatische Bewässerungsanlage?

In diesem Artikel möchte ich dir an Beispielen zeigen, wie einfach es sein kann, einem Projekt mit einem Microcontroller etwas Leben einzuhauchen. Es ist für alle geeignet, auch ohne Programmiererfahrung.

Das erwartet dich:

  • Ein grober Überblick darüber was ein Microcontroller ist und macht
  • Einstieg in MicroPython
  • Eine grobe Übersicht über die Möglichkeiten mit einem Raspberry Pi Pico
  • Zwei simple Projekte, die eine Grundlage für eigene Ideen schaffen

Die kleinen Controller

Ein Microcontroller ist vergleichbar mit einem sehr reduzierten Mini-Computer. Er verfügt meist über Recheneinheiten, RAM-Speicher und Flash Speicher, in dem das Programm gespeichert wird. Sie werden in der Elektrotechnik überall eingesetzt, wo kleine, klar definierte Aufgaben immer wieder ausgeführt werden. Ein gutes Beispiel dafür ist ein digitaler Wecker: Im Innern sitzt ein kleiner Microcontroller, der das Display steuert und so die Zeit anzeigt.

Die Raspberry Pi Foundation hat vor gut einem halben Jahr einen neuen Microcontroller vorgestellt – den RP2040. Dieser kleine Chip ist offenbar aus vielen Gründen cool, nur leider verstehen Nicht-Elektroingenieure 80% davon nicht einmal im Ansatz. Was ich hingegen verstanden habe, als er damals vorgestellt wurde, ist, dass er auch vormontiert auf einer Platine gekauft werden kann. Darauf befindet sich alles was man benötigt, um den Chip mit dem PC zu verbinden, zu programmieren und um Geräte an ihn anzuschliessen.

Der Raspberry Pi Pico

Der Raspberry Pi Pico. Das schwarze Quadrat ist der Microcontroller, die goldigen Felder sind Anschlüsse.

Die 20% der Infos zum RP2040 (das Raspberry Pi Pico heisst) die einfach verständlich sind, sind folgende:

  1. Es gibt enorm viele, gute und einfache (Sekundarschul-Level) Dokumentationen zum Raspberry Pico und zum RP2040.
  2. Das Board verfügt über 40 Pins an den Seiten. Diese lassen sich einzeln ansteuern und die meisten sind frei belegbar. Man hat also viele Optionen für ein- und ausgehende Signale. Das können Sensoren oder passive Geräte wie LED’s sein. Auch ein Internetanschluss ist möglich.
  3. Es wird keine zusätzliche Hardware benötigt, um den Pico zu programmieren. Ein PC und ein Micro-USB-Kabel genügen.
  4. Der Pico wird von jedem Computer als USB-Device erkannt, wie zum Beispiel eine Maus oder eine Tastatur. Dazu später mehr.
  5. Ein Pico kostet nur 5 CHF.

Thermometer: das erste Projekt auf dem Pico

In diesem Projekt lernst du den internen Thermometer des RP2040 auszulesen. Dafür benötigt man:

  1. Ein Raspberry Pi Pico
  2. Einen PC/Mac
  3. Ein Micro-USB-Kabel
  4. Internetzugang um Thonny zu installieren

Als erstes installiert man den Code-Editor Thonny auf dem PC/Mac.
Nachdem er geöffnet wurde, sollte es so aussehen:

Thonny application
Das obere Feld ist das Programmierfenster. Darin schreibt man den Code. Das untere Fenster ist eine Konsole, auf der die Ausgabe von Daten und die Eingabe von Befehlen erfolgt.

Der RP2040 kann in MicroPython oder in C# programmiert werden. Dieses Tutorial nutzt MicroPython. Ganz unten rechts im Fenster von Thonny steht, welche Programmiersprache gerade verwendet wird.

Das erste Programm in Python

Als ersten Test schreiben wir den Python-Befehl print(‚Hallo Welt‘) . Ausführliche Dokumentation zum Print-Befehl findest du hier. Mit dem grünen Run-Knopf startet man das Programm. Die Konsole gibt Hallo Welt aus.

Installieren von Micro-Python

Der Pico verfügt über einen kleinen weissen Knopf, den sogenannten BOOT-Selektor. Wird dieser während dem Einstecken gedrückt, erscheint der Pico als USB-Drive und man kann auf ihm direkt Programme speichern. Dazu steckt man das Micro-USB-Kabel zuerst am PC ein. Danach hält man den mit «Bootsel» angeschriebenen Knopf gedrückt, während man das Micro-USB-Kable in den Pico einsteckt. Dieser sollte jetzt im File Explorer/Finder als USB-Gerät angezeigt werden.

In Thonny kann man jetzt MicroPython als Sprache wählen. Dazu klickt man ganz unten rechts auf die zur Zeit ausgewählte Sprache und kann danach den Pico als Interpreter für MicroPython wählen.

Ein neues Fenster öffnet sich und man kann MicroPython installieren.

Code auf dem Pico ausführen

Die Konsole – oder wie es in Thonny richtig heisst „die Shell“ – ermöglicht es, Python-Befehle direkt auf dem Pico auszuführen, indem man sie eintippt und auf Enter drückt. Diese werden nicht als Programm gespeichert, sondern einfach ausgeführt.

Auch hier können wir das print(‚Hallo Welt‘) testen. Wenn die Ausgabe Hallo Welt lautet, hat alles funktioniert. Diese Funktion ist sehr praktisch zum schnellen Testen von Programmen. Dazu später mehr.

Das erste Programm

Mit MicroPython erhalten wir Zugriff auf die Python-Libary «machine». Genauere Infos zur «machine»-Libary findest du hier. Was eine Python-Bibliothek ist und wie man sie genau verwendet, findest du hier. Für unser Projekt ist nur folgendes wichtig: Die Bibliothek «machine» gibt uns Zugriff auf die sogenannten Pins. Pins nennt man die physischen Ausgänge aus einem Microcontroller.

Raspberry Pi: Der RP2040 ist für rund einen Euro erhältlich -  Notebookcheck.com News
Die kleinen, silbrigen Flächen am Rand nennt man Pins.

Manche dieser Pins wurden auf dem Pico nach aussen geführt, andere gehen auf die zum Board verbauten Modulen zu. Die kleine Onboard LED ist ein Bauteil, welches wir über den Pin 25 erreichen können. Setzen wir im Programm den Wert dieses Pins auf 1, beginnt die LED zu leuchten.
Der Code sieht so aus:

from machine import Pin
led = Pin(25, Pin.OUT)
led.value(1)

from machine import Pin
Diese Zeile lädt aus der Library «machine» das Modul «Pins». Das wird so gemacht, da wir für unser Programm nicht die ganze Bibliothek benötigen.

led = Pin(25, Pin.OUT)
In der Variablen «led» speichern wir die Funktion Pin. Dieser geben wir an, dass wir gerne Pin 25 benutzen möchten und dass dies ein Output-Pin sein soll.

led.value(1)
In dieser Zeile geben wir an, dass der Wert 1 sein soll. In unserem Fall bedeutet das volle Spannung, was die LED zum leuchten bringt.

Mit dem grünen Play-Button kann man das Programm testen. Die kleine, grüne LED auf dem Pico sollte sofort zu leuchten beginnen.

Um sie wieder abzustellen, gibt es zwei Möglichkeiten. Entweder man ändert im Code den Value auf 0 und führt den ganzen Code erneut aus, oder man schreibt direkt in der Shell led.value(0) und drückt Enter. Dies führt nur diese Zeile aus. So kann man bei grösseren Projekten einfach Funktionen testen, ohne jedes Mal den Code neu zu starten.

Der Temperatursensor

Die LED alleine hat noch keinen grossen Nutzen. Wir können aber etwas damit anzeigen – zum Beispiel, ob eine maximale Temperatur überschritten wurde.

Der RP2040 verfügt über sogenannte Analog Digital Converter. Diese übersetzen eine analoge Spannung in ein digitales 12bit-Signal. Der RP2040 hat vier solche ADC’s. Drei davon wurden auf dem Pico als Pins nach aussen geführt, einer der ADC 4 geht zu einem Temperatur-Sensor.

Dieser Sensor dient eigentlich der Überprüfung der chipinternen Temperatur und ist daher nicht sehr zuverlässig als Thermometer für die Raumtemperatur. Für unsere Demonstration genügt er aber völlig.

In der Dokumentation zum RP2040 steht zum Temperatursensor:

Das ist ein gutes Beispiel dafür, wie grossartig die Dokumentation ist. Alleine wäre ich nie auf den Umrechnungsfaktor gekommen, da ich den Rest nicht vollständig verstehe. So können wir uns aber einfach
T = 27 – (ADC_voltage – 0.706)/0.001721 merken und später ins Programm einbauen.

Eine Hürde ist noch, dass wir vom ADC eine Zahl erhalten, aber für die Rechnung die Spannung brauchen. In der Dokumentation zum Pico steht dazu:

Das bedeutet, unser Umrechnungs-Faktor ist 3.3V/65535 .

Das Programm, das wir schreiben, soll jede Sekunde die Temperatur messen und dann entscheiden, ob es zu warm ist oder nicht. Um die Zeitfunktionen nutzen zu können, benötigen wir eine zusätzliche Bibliothek, die «utime». Genauer Infos dazu hier. Wir benötigen nur den Befehl utime.sleep(). In den Klammern können wir in Sekunden angeben, wie lange das Programm pausiert wird.

Jetzt, da wir alle Einzelteile haben, können wir das Programm schreiben.

Starten wir dieses Programm mit dem Play-Button, schreibt es zu jeder Sekunde die Temperatur in die Konsole.

Möchten wir, dass die LED angeht sobald eine Temperatur erreicht wird, können wir dies über eine simple if/else Bedingung lösen:

Jetzt geht die LED bei über 27 Grad an und wenn die Temperatur wieder sinkt, geht sie wieder aus. Diese Temperatur kann zum Testen je nach Zimmertemperatur verstellt werden. Ich habe den Pico in die Hand genommen, um ihn zu erwärmen. Alternativ kann man ihn an den Lüftungsschlitz des PC’s halten. Er sollte einfach nicht wärmer als 70 Grad werden, aber dafür haben wir ja jetzt einen Thermometer programmiert.

Wie weiter?

Das war der Einstieg in den Pico, ohne zusätzliche Hardware. Ab hier wäre es sinnvoll, wenn man einige Elektronikbauteile besitzt, wie zum Beispiel ein paar verschiedene Widerstände, ein paar LEDs und ein Elektroniksteckbrett (Bread-Board). Ich habe dieses Set bei AliExpress bestellt. Das ist eine gute Grundlage für weitere Projekte. Ab hier gibt es im Internet unzählige Tutorials. Am besten suchst du dir ein Projekt aus, überlegst dir, welche Einzelteile dafür notwendig sind und testet alles separat. Am Schluss kannst du alles zusammenführen, nochmals testen und dann alles zusammenlöten. So kannst du Projekte mit sehr geringen Kosten etwas Flair versehen.

Viel Spass beim Machen!

(dbo)

Eigentlich wollte ich was mit dem Raspberry Py machen. Ich liebe es wenn man einem Projekt das gewisse Etwas verleihen kann. Zum Beispiel ein Plakat, das sich merkt, wie oft es angeschaut wurde.  Mein Problem damit ist, dass es mir fast zu schade ist, ein Py in solche Projekte zu verpacken, da es fast 50CHF kostet und völlig überpowert ist für solche Tasks. Arduino hat mich immer genervt, weil es so unglaublich wenig Speicher hat. Als der Pico mit seinen 2mb Flash Speicher vorgestellt wurde, wurde ich hellhörig. Da eine Einheit nur 5CHF kostet, wäre es für mich auch ok, ein Pico in ein Projekt einzuleimen ohne eine Möglichkeit, es je wieder zu retten.

Ich habe also 6 Picos bestellt. Ich dachte dass ich garantiert aus Versehen eines falsch verkable und durchbrenne. Bis jetzt ist es zum Glück noch nicht geschehen.

Mein Ziel war es ursprünglich, Wasserventile so zu kombinieren, dass ich ein Bild aus Wassertropfen fallen lassen kann. Ich habe bei Aliexpress 25 Slenoid-Ventile bestellt, leider aber noch keine erhalten. Die Lieferzeiten auch China sind zur Zeit leider für manche Produkte über zwei Monate. auch auf meinen Elektronikbausatz habe ich 1.5 Monate gewartet. Damit habe ich viel rumexperimentiert und Dinge gelernt. Die Idee zum Tutorial kam mir, weil es so einfach ist einen Pico zu bestellen und, nur um rauszufinden ob einem das Spass macht, baucht man nicht mehr als einen Pico. Die meisten Tutorials im Netzt nutzen schon von Anfang an externe Elektronikbauteile und ich dachte mir, dass das nicht sein muss.

Ich habe viel mit dem Pico ausprobiert, mit SK6812 LED-Streifen und mit Servos. Ich habe mit Mosfets eine Schaltung gebaut für einen 12v Poversupply, das wird dann wichtig, sobald meine Ventile endlich kommen.

Beim Tutorial war es mir vor allem wichtig zu zeigen, dass man nichts wissen muss und sehr wenig benötigt, um anzufangen. Die Antwort auf fast jede Frage steht entweder in der sehr ausführlichen SDK vom Pico, im Datasheet vom RP2040 oder auf Google. Das hat zwar viel Zeit und Recherche gekostet, aber ich hoffe es ist mir gelungen, einen einfachen Einstieg zu gestalten. Leider gibt es nicht soviel her, verglichen mit der Zeit, die ins Verstehen der Materie floss.

Ursprünglich dachte ich, dass es mein ganzes Digezz sein wird, mein Wasserdisplay zu realisieren. Jetzt wird das wohl nächstes Semester. Falls jemand Ideen hat, was man mit einem kleinen Microcontroller anstellen könnte, bin ich sehr offen für weitere Projekte.