Gemeinsames IPS

Liebe Teilnehmer am Projektpraktikum,

im diesjährigen Projektpraktikum gibt es eine Komponente, die von allen Teams gemeinsam genutzt und weiterentwickelt wird. Die Komponente besteht aus:

  • Ultraschallsender am Luftschiff
  • Ultraschallempfangsstationen am Boden
  • Basisstation (Raspberry Pi)
  • GUI (gtk3+ und Python3)

 Diese Seite dient der Dokumentation der Schnittstelle und der gemeinsamen Arbeit.

 

Inhaltsverzeichnis[Anzeigen]

 

1. Überblick

 

2. Ultraschallsender am Luftschiff

besteht aus Ultraschall- und Infrarotsender. Alle 200 ms werden diese für 200 µs mit 40 kHz angeregt. Die LEDs benötigen 5 Volt bei ca. 100 mA => Transistor nehmen. Die Ultraschallwandler werden bei 12 Volt an einer H-Brücke betrieben.

3. Ultraschallempfangsstationen am Boden

Die Bodenstationen detektieren die Ultraschall- und Infrarotsignale und senden die Zeitdifferenz der Ankunft per nRF24 an die Basisstation.

4. Basisstation (Raspberry Pi)

Die Basisstation besteht aus einem Raspberry Pi mit daran angeschlossenem Arduino. Das Arduino dient dabei nur der Vermittlung von Raspberry Pi zum nRF24 Funkmodul. Das Funkmodul kann man auch an die GPIOs des Raspberrys anschließen.

5. GUI (gtk3+ und Python3)

Das Programm, das auf dem Rapberry Pi läuft ist in Python3 geschrieben. Die GUI basiert auf GTK+ (Version 3) und wurde mit Glade erstellt. Als Schnittstelle habe ich mir gedacht, dass jedes Team eine eigene Klasse erstellt, die dann von dem Programm aufgerufen wird.

 

class TeamX(threading.Thread):
    """ Das ist Eure Funktionsklasse, hier kommt alles rein, was speziell Euer Team betrifft. In den Eventhandler-Funktionen bitte keine komplizierten Berechnungen durchführen, sondern nur flags setzen, da diese von einem anderen Thread berechnet werden müssten und diesen evtl. blockieren würden(=>GUI hängt, etc.). Die run-Funktion wird in Eurem Thread ausgeführt, da kommen die Berechnungen rein. Zugriff auf die gui oder arduino habt Ihr über self.main.gui bzw. self.main.arduino """
    def __init__(self, main):
        threading.Thread.__init__(self) 
        self.main = main
        print("TeamX")
        self.run_ = True
        self.start_ = 0
    def run(self):
        i=0
        while(self.run_):
            i=i+1
            print("TeamX run:",i)
            if (self.start_):
                #wegpunktnavigation etc.
                self.main.arduino.send("TeamX fliegt!\n")
                pass
            time.sleep(0.1) #schlafen ist gut, um die CPU nicht voll auszulasten
    def onStart(self):
        #Start-Button wurde gedrückt
        self.start_ = 1
        pass
    def onStop(self):
        #Stop-Button wurde gedrückt
        self.start_ = 0
        # reset etc.
        pass
    def onNewPos(self):
        #globale Variablen
        #posx
        #posy
        #posz
        #print(posx,posy,posz)
        pass
    def onButtonPressed(self, i):
        #welcher Button welche Nummer hat seht Ihr in der glade Datei oder im Eventhandler
        print(i)
        pass
    def onWaypointUpdate(self):
        #wegpunkt wurde in der gui geändert
        pass
    def onObstacleUpdate(self):
        pass
    def onExit(self):
        # Programm beenden
        self.run_=False
        pass

Wer sich in Python einlesen möchte, dem sind die folgenden Tutorials ans Herz gelegt.
generell: https://python.readthedocs.org/en/latest/tutorial/index.html
gtk3: https://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html
threading: http://docs.python.org/3/library/threading.html

 

 Unter Linux müssen mindestens die folgenden Pakete installiert werden:

python3-gi python3-gi-cairo python3-all python3-regex python3-serial python3-gobject

Downloads: im Anhang findet Ihr die Datei ips.zip. Da sind alle Dateien für die GUI und die Arduino Sketches drin.

Die jeweils aktuellen Dateien sind im GIT Repository zu finden:

github.com

 

Anhänge:
Diese Datei herunterladen (ips.zip)ips.zip[ ]%2013-%05-%21 %1:%Mai%+02:00