TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
DU LERNST HIER... |
was ein PWM-Signal ist und wie du damit Servomotoren betreibst und Helligkeitssteuerungen von LED realisierst. |
WAS IST EIN PWM-SIGNAL? |
Man schaltet ein Signal repetierend während der Zeit ton ein und während der Zeit toff aus. Die Repetitionsperiode ist also T = ton + toff und das Verhältnis der Einschaltzeit zur Periode, genannt Dutyclyle: D = ton/T . Die Frequenz des PWM-Signals ist die Anzahl Perioden pro Sekunde, also fPWM = 1/T. PWM-Signale kannst du beim ESP32-Mikrocontroller auf allen GPIO-Pins erzeugen, die sich auch als Digital-Out konfigurieren lassen. Typische PWM-Frequenzen liegen bei 50 Hz, können aber zwischen 1 und ungefähr 1500 Hz gewählt werden. |
MUSTERBEISPIELE |
|
![]() |
![]() |
|||
Selbstbau mit Luminex SSL-LX5097
und 100 Ohm Vorwiderständen |
KY--016 Breakout mit eingebauten Vorwiderständen |
Wenn du die oben gezeigte Anordnung verwendest, sind die Zuordnungen der Farben blau, grün und rot auf den Ports IO19, IO18, IO23. Mit dem folgenden Programm erzeugst du ein zufälliges Farbspiel.
Programm:
from machine import Pin, PWM from time import sleep from random import randint P_RED = 23 P_GREEN = 18 P_BLUE = 19 fPWM = 50 def setColor(r, g, b): pwmRed.duty(r) pwmGreen.duty(g) pwmBlue.duty(b) pwmRed = PWM(Pin(P_RED), freq = fPWM) pwmGreen= PWM(Pin(P_GREEN), freq = fPWM) pwmBlue = PWM(Pin(P_BLUE), freq = fPWM) while True: r = randint(0, 1023) g = randint(0, 1023) b = randint(0, 1023) setColor(r, g, b) sleep(0.2)
Du kannst die Farben besonders schön erkennen, wenn du ein weisses Papier als Diffusor über die LED legst.
Bei einem Servomotor kannst du die Motorachse programmgesteuert in eine bestimmte Richtung drehen. Der Servomotor hat 3 Eingänge: GND, POWER und SIGNAL und wird mit einem PWM-Signal angesteuert. Über den Dutycyle stellst du die Achsrichtung ein. Den Zusammenhang zwischen Dutycycle und Achsrichtung findest du am besten experimentell heraus.
(Es gibt auch "kontinuierliche" Servomotoren, die je nach Dutycycle verschieden schnell rotieren).
Im Hobbybereich sind kleine Servomotoren mit einem Dreifachkabel bekannt (z.B. Tower Pro SG90). Die Kabelfarben sind üblicherweise braun: GND; rot(od. orange): VCC; gelb. Signal. Die Stromversorgung durch die Oxocard reicht allerdings nur für ganz kleine Servomotoren aus, darum solltest du Servomotoren grundsätzlich mit einer externen Spannungsquelle speisen. Du kannst das gleiche Kabel verwenden, das du für den Betrieb der NeoPixels konfektioniert hast (siehe Kapitel Neopixels). Die Verkabelung ist einfach:
![]() |
![]() |
Im folgenden Programm wird der Servomotor, der am Pin 18 angeschlossen ist, ständig mit zunehmendem Dutycycle angesteuert und wieder zurückgesetzt.
Programm:
from machine import PWM, Pin from time import sleep P_PWM = 18 servo = PWM(Pin(P_PWM), freq = 50) while True: for duty in range(25, 126): servo.duty(duty) print(duty) sleep(0.1)
MERKE DIR... |
PWM-Signale können zur Leistungssteuerung von Lichtquellen und Gleichstrommotoren eingesetzt werden, aber auch Servomotoren positionieren. Wichtigste Kenngrössen sind die PWM-Frequenz und der Dutycycle. |
ZUM SELBST LÖSEN |
|
ZUSATZSTOFF |
MIT JOYSTICK AUF POSITION FAHREN |
Ein Joystick ist ein Sensor, der die Lage des Knüppels als x- und y-Werte abgibt. Zusätzlich wird beim Drücken des Knüppels noch ein Tastenschalter geschlossen. Das Modell KY-023 ist Teil von diversen Sensorkits, kann aber auch einzeln (z.B. über eBay) beschafft werden. Im Innern befinden sich zwei Potentiometer, welche durch Bewegung des Knüppels ihren Wert ändern. Die 5 Anschlüsse sind wie folgt geschaltet:
Programm: from machine import PWM, Pin from ads1x15 import ADS1015 P_PWM_HORZ = 18 P_PWM_VERT = 19 VMAX = 1600 def valueToDuty(v): return int(v / VMAX * 100 + 30) servoHorz = PWM(Pin(P_PWM_HORZ), freq = 50) servoVert = PWM(Pin(P_PWM_VERT), freq = 50) adc = ADS1015() while True: horz = VMAX - adc.read(0) vert = adc.read(1) servoHorz.duty(valueToDuty(horz)) servoVert.duty(valueToDuty(vert))
|