Aus Raspberry Pi Geek 01/2024

Stoppuhr für einen Drohnen-Parcours (Seite 2)

Sehen wir uns jetzt den wichtigsten Teil des Programms aus Listing 1 etwas genauer an. Bei oberflächlicher Beachtung des Codes fällt gar nicht auf, wie wichtig die While-Schleifen für die Ausführung des Programms sind. Zuerst einmal gilt es zu verstehen, dass der Eingang für die Lichtschranken mit negativer Logik arbeitet. Das bedeutet: Im Ruhezustand ist er logisch TRUE, im geschalteten Zustand FALSE. Daher können wir die Abfrage ohne eine Negation direkt auf den Wert des Buttons machen.

Solange die Lichtschranke nicht auslöst, verweilt das Programm in einer Schleife, die aus einem schlichten sleep besteht. Wir fragen in der Schleife kontinuierlich den Eingang ab. Dieses Verfahren bezeichnet man im Allgemeinen als Polling. Ein solches Polling ist sehr CPU-intensiv und darum eigentlich keine besonders gute Wahl, wenn es darum geht, digitale Eingänge abzufragen.

Deshalb ordnen wir die sleep-Anweisung innerhalb der Schleife an, um die CPU etwas zu entlasten. Sie sollten aber im Hinterkopf behalten, dass das Programm mit den aktuell im Code stehenden Werten nur zehn Mal in der Sekunde prüft, ob die Lichtschranke auslöst. Ein geschickter Drohnenpilot könnte unentdeckt durchschlüpfen. Falls dieses Problem bei Ihnen auftritt, verkürzen Sie die Wartezeit und erhöhen so die Anzahl der Abfragen.

Die bessere Alternative zum Pollen bietet das Verwenden von Hardware-Interrupts, um Methoden asynchron zum Hauptprogramm aufzurufen. Hier löst ein Ereignis (Event) am digitalen Eingang den Aufruf aus. Solche Ereignisse kann man bei der Interrupt-Programmierung sowohl statusorientiert (HIGH, LOW) als auch flankenorientiert (Übergänge zwischen HIGH und LOW) verarbeiten. Dabei gibt man in der Regel den flankenorientierten Events den Vorzug, sofern sie nur genau bei einem Signalwechsel auftreten. Dabei handelt es sich allerdings schon um eine fortgeschrittene Programmiertechnik, die viele Tücken mit sich bringt. Das Stoppuhrprogramm wäre mit dieser Technik erheblich komplizierter ausgefallen. Daher haben wir uns für unser Beispiel für das einfachere Polling entschieden.

Um die Messwerte auf dem Display anzuzeigen, brauchen wir einen Treiber, der auf Github zum Herunterladen bereitsteht [4]. Zusätzlich zum Treiber benötigen wir noch einen Font zur Textdarstellung. Dafür wählen wir sysfont.py von Guy Carver [5]. Das Display verwendet zur Datenübertragung die SPI-Schnittstelle, die es zunächst mit den passenden Werten zu konfigurieren gilt. Das einfache Testprogramm aus Listing 1 hat nicht viele Sonderfunktionen, liefert aber ein gutes Beispiel dafür, wie man eine Lichtschranke abfragt und damit eine Stoppuhr ansteuert.

Listing 1

Zeitmessung

from ST7735 import TFT
from sysfont import sysfont
from machine import SoftSPI,Pin
import time
spi = SoftSPI(baudrate=20000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))
tft=TFT(spi,21,22,17)
tft.initr()
tft.rgb(True)
tft.rotation(1)
button = Pin(13, Pin.IN,Pin.PULL_DOWN)
while True: #run forever
  tft.fill(TFT.BLACK)
  tft.text((0,0),
 "Wait", TFT.RED, sysfont, 4, nowrap=True)
  while button.value(): # wait to start
    time.sleep(0.1)
  start=time.ticks_ms()
  tft.fill(TFT.BLACK)
  tft.text((0,0), "Run", TFT.RED, sysfont, 4, nowrap=True)
  time.sleep(1)
  while button.value(): # wait to stop
    time.sleep(0.1)
  mytime=int((time.ticks_ms()-start)/1000)
  tft.fill(TFT.BLACK)
  tft.text((0,0), str(mytime)+" S", TFT.RED, sysfont, 4, nowrap=True)
  time.sleep(5)
  while button.value(): # wait to restart
    time.sleep(0.1)
  time.sleep(1)

Auswertung

Der Versuchsaufbau funktionierte im Test zwar erst einmal recht gut, birgt aber noch einiges an Verbesserungspotenzial. Zunächst erwies es sich als recht schwierig, die Lichtschranken so einzustellen, dass sie die Drohne jedes Mal sicher erkennen. Gerade beim schnellen Fliegen kommt es vor, dass sie unerkannt durchrutscht. Hier könnte es helfen, mehr Lichtschranken zu verbauen, um eine bessere Erfassung zu gewährleisten, beispielsweise auch mit von unten nach oben gerichteten Bauteilen.

Wer schon einmal in einem geschlossenen Raum eine Drohne geflogen hat, weiß, dass sie ziemlich viel Luftbewegung erzeugt. Interessanterweise genügte das im Test, um den Versuchsaufbau umzublasen. Erschwerend kam hinzu, dass die verwendete Tello-Drohne ein Kamerabild zur Lagestabilisierung verwendet. Die schlechten Skills des Piloten erwiesen sich hier nicht unbedingt als hilfreich. Um es kurz zu machen: Hängen Sie den Aufbau so auf, dass er sich durch den Luftstrom der Drohne nicht bewegen kann.

Heraushängende Leitungen sind definitiv keine gute Idee: Sie scheinen Drohnen geradezu magisch anzuziehen. Und zu guter Letzt kann ich jedem nur raten, die Zimmerpflanzen (Abbildung 4) in Sicherheit zu bringen, bevor eine Drohne im Raum fliegt.

Abbildung 5: Eine Zimmerpflanze des Autors nach dem Rückschnitt durch die Drohnenpropeller.

Abbildung 5: Eine Zimmerpflanze des Autors nach dem Rückschnitt durch die Drohnenpropeller.

Fazit

Dieses einfache Projekt zeigt, wie schnell sich mit MicroPython ein Projekt aufsetzen lässt. Das hier vorgestellte Testprogramm ist bei Weitem noch nicht perfekt. Es soll Ihnen lediglich die Werkzeuge an die Hand geben, selbst den Code in einen für Ihre Zwecke optimalen Zustand zu bringen. Sie könnten einen zusätzlichen Neustart-Taster einbauen oder die Anzeige auf dem Display aufhübschen. Der ESP32 liefert genug Power, um die Ergebnisse via API auch an eine Webseite zu schicken. Mit ein wenig Fantasie kann man mithilfe der Lichtschranke regelrechte Drohnenwettkämpfe austragen – der Autor wünscht viel Spaß dabei. (tle)

Der Autor

Martin Mohr hat die komplette Entwicklung der modernen Computertechnik miterlebt. Nach dem Studium entwickelte er überwiegend Java-Applikationen. Mit dem Raspberry Pi erwachte seine alte Liebe zur Elektronik wieder.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 5 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben