Programmcodes

Funktionen

Wie in anderen Programmiersprachen gibt es auch in Python die Möglichkeit Funktionen bzw. Unterprogramme zu schreiben.
Diese Funktionsblöcke werden nicht mit Klammern geöffnet bzw. geschlossen, sondern durch einen Doppelpunkt „:“ bzw. durch Einrückungen.
Besonders ist, dass jede Funktion mittels dem Schlüsselwort def definiert werden muss.

Beispiel test.py

#!/usr/bin/python
 
def add(a,b):
        return a+b
 
#MAIN PROGRAMM 
if __name__ == "__main__":
        print add(10,5)

Man könnte nun eine zweites Python Programm schreiben, in dem man die Funktion add(a,b) von test.py aufruft.

Dafür gibt es nun 2 verschiedene Varianten

Variante 1 - test2.py

#!/usr/bin/python
 
from test import *
 
if __name__ == "__main__":
        print(add(10,39))

Variante 2 - test3.py

#!/usr/bin/python
 
import test
 
if __name__ == "__main__":
        print(test.add(20,30))

Für unser Projekt empfehle ich zwei Python-Programme

Motor.py

Im Python Programm Motor.py muss die Ansteuerung der Motoren mittels GPIO erfolgen. Dafür muss man zuerst die Bibliothek RPi.GPIO einbinden.

Einbinden der Bibliothek

import RPi.GPIO as GPIO

Ansteuerungsmodus der GPIO Schnittstelle

Anschließend kann man bereits die GPIO-Codes im Programm definieren und ansteuern. Dafür legt man zuerst fest, ob man die GPIO-Schnittstelle mit den

ansteuern will.

 GPIO Nummern

GPIO.setmode(GPIO.BCM)
 
#oder
#GPIO.setmode(GPIO.BOARD)

GPIO Setup (Input or Output)

Als nächstes muss man in Python bekanntgeben, ob die GPIO Pins zur Eingabe (GPIO.IN) oder zur Ausgabe (GPIO.OUT) verwendet werden.

#Zum Beispiel Pin GPIO4 als Ausgabe-Pin definieren
GPIO.setup(4, GPIO.OUT)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(27, GPIO.OUT)

Signalübertragung auf GPIO Pins

Nachdem definiert wurde,

  1. wie die GPIO Pins angesprochen werden und
  2. ob diese als Eingabe oder als Ausgabe dienen,

kann man beginnen ein Signal auf die GPIO Pins zu legen bzw. zu empfangen.

Hier gibt es zwei Varianten der Signalübertragung

auf den GPIO Pin.

Senden eines Signals

    #Auf GPIO17 wird ein niedriges Signal (0) gesendet
    GPIO.output(17, GPIO.LOW)
    #Auf GPIO27 wird ein hohes Signal (1) gesendet
    GPIO.output(27, GPIO.LOW)

Empfangen eines Signals

    #Variable signal enthält das Signal an GPIO17
    signal=GPIO.input(17)
    #Prüfung auf ein hohes Signal
    if signal==GPIO.LOW:
         print("Empfang eines niedrigen Signals auf GPIO17")
    else:
         print("Empfang eines hohen Signals auf GPIO17")
 

PWM (Pulsweitenmodulation)

Über GPIO kann man nicht nur ganz niedrige (0V) oder ganze hohe Signale (3.3V) anlegen, man kann auch mithilfe von PWM (Pulsweitenmodulation) eine Spannung die zwischen LOW und HIGH liegt erzeugen und an einem GPIO Pin anlegen.
Damit kann man entweder LEDs dimmen oder Motoren schneller bzw. langsamer laufen lassen. Zweiteres kann für unser Projekt ganz hilfreich sein.
Dazu muss man die gewünschten GPIO Pins nicht nur als Input oder Output definieren, sondern zusätzlich bekanntgeben, dass man über diesen Pin auch weitere Signale (anstelle von GPIO.HIGH und GPIO.LOW) übertragen möchte.

Dies geht wiefolgt:

EnableA=GPIO.PWM(4, 100)   #Frequency = 100
EnableA.start(10)           #10% von HIGH Signal (Möglich sind 0-100%) 

Rein physikalisch wird einfach das Signal nicht durchgehend auf die Leitung übertragen sondern eben nur 10% der Zeit. Dadurch wird der Motor nicht ständig angetrieben sondern nur in 10% der Gesamtzeit, was sich wiederum auf die Geschwindigkeit des Motors auswirkt.

 PWM Modulation

 PWM Modulation mit Motor