MicroPython Motor_Control

Die Motoren können über den PWM-Controller gesteuert werden. Die drive(PWM0, PWM1, PWM2, PWM3) Funktion nimmt dabei vier Werte entgegen, die jeweils zwischen 0 und 255 liegen. Hierüber wird die Motorgeschwindigkeit definiert. PWM0 und PWM1 definieren dabei den linken Motor und steuern die Vorwärts- und Rückwärtsbewegung. PWM2 und PWM3 definieren dementsprechend den rechten Motor.

Die zusätzliche Funktion stop() setzt alle Motorbewegungen auf 0 und führt damit ein Bremsmanöver durch.

# Import des micro:bit Moduls
from microbit import *

# Initialisierung der I2C Schnittstelle
i2c.init(freq = 400000, sda = pin20, scl = pin19)

# Initialisierung des PWM Controllers
i2c.write(0x70, b'\x00\x01')
i2c.write(0x70, b'\xE8\xAA')

# Motoren mithilfe des PWM Controllers steuern
# PWM0 und PWM1 für den linken und PWM2 und PWM3 für den rechten Motor
def drive(PWM0, PWM1, PWM2, PWM3):
    i2c.write(0x70, b'\x02' + bytes([PWM0])) # Wert für PWM Kanal (0-255) an PWM Controller übertragen. 0x70 ist die I2C Adresse des Controllers. b'\x02 ist das Byte für den PWM Kanal 1. Zu dem Byte für den Kanal wird das Byte mit dem PWM Wert zu addiert.
    i2c.write(0x70, b'\x03' + bytes([PWM1])) # Wiederholen des Vorgangs für alle 4 Kanäle
    i2c.write(0x70, b'\x04' + bytes([PWM2]))
    i2c.write(0x70, b'\x05' + bytes([PWM3]))

# alle Motoren stoppen
def stop():
    drive(0, 0, 0, 0)


# Variablen für die Demo-while-Schleife
speed = 35
direction = "f"

# Demo-Schleife
while True:

    # vorwärts fahren
    if direction == "f":
        speed += 1
        drive(speed, 0, speed, 0)
        sleep(30)
        if speed > 254:
            stop()
            print("rückwärts")
            sleep(1000)
            speed = 35
            direction = "b"

    # rückwärts fahren
    elif direction == "b":
        speed += 1
        drive(0, speed, 0, speed)
        sleep(30)
        if speed > 254:
            stop()
            print("links")
            sleep(1000)
            speed = 35
            direction = "l"

    # links fahren
    elif direction == "l":
        speed += 1
        drive(0, speed, speed, 0)
        sleep(30)
        if speed > 254:
            stop()
            print("rechts")
            sleep(1000)
            speed = 35
            direction = "r"

    # rechts fahren
    elif direction == "r":
        speed += 1
        drive(speed, 0, 0, speed)
        sleep(30)
        if speed > 254:
            stop()
            print("vorwärts")
            sleep(1000)
            speed = 35
            direction = "f"

    # sonst stopp
    else:
        stop()
        print("gestoppt")

Achtung!

Ihr Webbrowser ist veraltet. Wechseln Sie jetzt zu einem aktuellen Browser für mehr Sicherheit, Geschwindigkeit und den besten Komfort auf dieser Seite.