Mit Transistoren Motoren steuern

Mit Transistoren Motoren steuern Titelbild

Mit Transistoren Motoren steuern

Für den nächsten Aufbau braucht ihr den Motor und einen Transistor. Damit werden wir dann auch eure brennende Frage beantworten, was den ein Transistor ist! Transistoren sind mit drei Beinen ausgestattet. Bei den beiliegenden Transistoren ist das mittlere Bein die Basis (B) und die beiden anderen nennen sich Kollektor (C) und Emitter (E). Die Vorderseite erkennst du an der Abflachung. Solange zwischen der Basis und dem Emitter genug Spannung anliegt (ca. 0,7V), kann ein Strom vom Kollektor zum Emitter fließen, sofern auch dort eine Spannung anliegt. Vereinfacht gesagt öffnet die Spannung zwischen B und E den Weg für den Strom von C nach E. Du musst in jedem Versuch darauf achten, dass die Beine B, C und E richtig angeschlossen werden. Umso stärker der Strom am Base-Pin ist, desto mehr wird auch durchgelassen. Das heißt, damit kann auch kontrolliert werden, wie viel Strom durch den Transistor fließen kann.

show

Die Transistoren und der Temperatursensor sehen auf dem ersten Blick sehr gleich aus, sind aber sehr verschieden und können bei falscher Benutzung kaputtgehen. Was was ist, erkennt ihr auf der Vorderseite. Beim (DS)18B20 steht genau das drauf. Die Schrift ist recht klein, aber trotzdem zu erkennen. Auf dem Transistor sollte etwas mit BC draufstehen.

Da wir das jetzt geklärt haben, kommen wir zum Motor. Dieser funktioniert wie eine LED. Solange eine ausreichende Spannung anliegt, fängt der Motor an, sich zu drehen. Doch dabei braucht dieser viel mehr Strom als eine LED. Deswegen bekommt der Motor nicht direkt von einem GPIO-Pin Strom, sondern mit Hilfe des Transistors von dem 3.3V-Pin. Wichtig ist, dass andere Motoren so viel Strom verbrauchen können, dass unbedingt eine externe Stromquelle angeschlossen werden muss.

enter image description here

Anschlüsse Pi Anschlüsse Breadboard
3,3V Collector Transistor
GPIO 4 Base Transistor
Emitter Transistor -> 1 Seite DC Motor
GND 1 Seite DC Motor
Diode mit beiden Seiten des DC Motors
import RPi.GPIO as gpio
import time
gpio.setmode(gpio.BCM)

gpio.setup(4, gpio.OUT)

motor = gpio.PWM(4, 100)

motor.start(0)

try:
    while True:
        for a in range (66,99):
            motor.ChangeDutyCycle(a)
            print(a)
            time.sleep(0.5)
except:
    motor.stop()

Wenn ihr das Programm startet, sollte sich der Motor nach einiger Zeit anfangen zu drehen. Während der Zeit wird auch immer eine Zahl zwischen 66 und 99.

In Zeile 1 bis 3 passiert wieder nichts Spannendes, außer das Einbinden der Bibliotheken und das Festlegen der Pinbelegung. In Zeile 5 lernen wir etwas Neues kennen. Wir definieren die Variable motor und übergeben ihr ein Objekt, mit dem wir an GPIO 4 PWM benutzen können. Mit dem zweiten Parameter wird die Frequenz festgelegt. In unserem Fall entscheiden wir uns für 100 Hertz. Diesen Wert könnt ihr aber auch anpassen.

Doch warum machen wir uns die Mühe? Normalerweise können wir uns den Stromfluss wie zwei Linien vorstellen. Wenn er fließt, ist die Linie hoch, wenn der Strom nicht fließt, ist die Linie niedrig. Durch die PWM können wir nicht "halb so viel" Strom schicken, aber wir können kleine Pausen einfügen. Der Raspberry Pi ist sehr schnell und kann deswegen innerhalb von Millisekunden den Strom an- und wieder ausschalten. So wird ein Stromfluss erzeugt, der nicht HIGH oder LOW ist, sondern etwas dazwischen. Wie häufig Strom kommt, wird auch DutyCycle genannt. In dem folgenden Diagramm können wir sehen, wie sich die Veränderung des DutyCycles auf die Veränderung den Stromflusses auswirkt. In Zeile 15 und 16 geben wir noch die Zahl aus und lassen den Pi warten, damit die Veränderung der Geschwindigkeit überhaupt bemerkbar ist. Das wiederholt sich jetzt solange, bis das Programm abgebrochen wird. Ist das der Fall, wird in Zeile 18 die gesamte PWM-Funktion auf diesem Pin gestoppt. Dieser Befehl ist wichtig, weil ansonsten der Motor einfach weiter läuft, obwohl wir das Programm beendet haben.

enter image description here

In Zeile 9 benutzen wir dann auch gleich den DutyCycle, indem wir mit motor.start() eine Funktion auf das Objekt aufrufen. Da diese Funktion schon weiß, um welches Objekt es sich handelt, müssen wir nicht nochmal den GPIO-Pin übergeben. Der übergebene Parameter ist in diesem Fall der DutyCycle. Das heißt, es fließt noch kein Strom.

In Zeile 11 und 12 fängt die Try-Bedingung mit der while-Schleife an, die solange läuft, bis das Programm abgebrochen wird. In der Schleife gibt es in Zeile 13 noch eine weitere Schleife. In dieser For-Schleife werden alle Zahlen von 66 bis 99 durchgegangen. In Zeile 14 wird dann mit folgender Funktion motor.ChangeDutyCycle(a) der DutyCycle geändert. Da in der Variablen a nur Zahlen zwischen 66 und 99 sein können, wird der DutyCycle zwischen 66 % oder 99 % liegen.

Noch Fragen oder Feedback?

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