Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

1.3.1 Motor

Einführung

In diesem Projekt werden wir lernen, wie man mit L293D einen Gleichstrommotor steuert und ihn im Uhrzeigersinn und gegen den Uhrzeigersinn drehen lässt. Da der Gleichstrommotor einen größeren Strom benötigt, verwenden wir aus Sicherheitsgründen das Netzteilmodul zur Stromversorgung der Motoren.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_1.3.1.png

Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link:

Name

KOMPONENTEN IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können diese auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Stromversorgungsmodul

-

L293D

-

Gleichstrommotor

KAUFEN

Schaltplan

Stecken Sie das Netzteilmodul ins Steckbrett und setzen Sie die Jumperkappe auf den 5V-Pin, dann gibt es eine Ausgangsspannung von 5V. Verbinden Sie Pin 1 des L293D mit GPIO22 und setzen Sie es auf hohes Niveau. Verbinden Sie Pin2 mit GPIO27 und Pin7 mit GPIO17, setzen Sie dann einen Pin hoch und den anderen niedrig. So können Sie die Drehrichtung des Motors ändern.

../_images/image336.png

Experimentelle Verfahren

Schritt 1: Bauen Sie die Schaltung auf.

../_images/image117.png

Bemerkung

Das Netzteilmodul kann mit einer 9V-Batterie und dem 9V-Batteriehalter aus dem Kit betrieben werden. Setzen Sie die Jumperkappe des Netzteilmoduls in die 5V-Busstreifen des Steckbretts.

../_images/image118.jpeg

Schritt 2: Wechseln Sie in den Ordner des Codes.

cd ~/raphael-kit/python

Schritt 3: Ausführen.

sudo python3 1.3.1_Motor.py

Während der Code läuft, dreht sich der Motor zunächst 5 Sekunden lang im Uhrzeigersinn, hält dann für 5 Sekunden an, danach dreht er sich 5 Sekunden lang gegen den Uhrzeigersinn; anschließend hält der Motor erneut für 5 Sekunden an. Diese Reihe von Aktionen wird wiederholt durchgeführt.

Code

Bemerkung

Sie können den untenstehenden Code Ändern/Zurücksetzen/Kopieren/Ausführen/Stoppen. Bevor Sie dies tun, müssen Sie jedoch zum Quellcode-Pfad, wie z.B. raphael-kit/python, navigieren. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

import RPi.GPIO as GPIO
import time

# Set up pins
MotorPin1   = 17
MotorPin2   = 27
MotorEnable = 22

def setup():
    # Set the GPIO modes to BCM Numbering
    GPIO.setmode(GPIO.BCM)
    # Set pins to output
    GPIO.setup(MotorPin1, GPIO.OUT)
    GPIO.setup(MotorPin2, GPIO.OUT)
    GPIO.setup(MotorEnable, GPIO.OUT, initial=GPIO.LOW)

# Define a motor function to spin the motor
# direction should be
# 1(clockwise), 0(stop), -1(counterclockwise)
def motor(direction):
    # Clockwise
    if direction == 1:
        # Set direction
        GPIO.output(MotorPin1, GPIO.HIGH)
        GPIO.output(MotorPin2, GPIO.LOW)
        # Enable the motor
        GPIO.output(MotorEnable, GPIO.HIGH)
        print ("Clockwise")
    # Counterclockwise
    if direction == -1:
        # Set direction
        GPIO.output(MotorPin1, GPIO.LOW)
        GPIO.output(MotorPin2, GPIO.HIGH)
        # Enable the motor
        GPIO.output(MotorEnable, GPIO.HIGH)
        print ("Counterclockwise")
    # Stop
    if direction == 0:
        # Disable the motor
        GPIO.output(MotorEnable, GPIO.LOW)
        print ("Stop")

def main():
    # Define a dictionary to make the script more readable
    # CW as clockwise, CCW as counterclockwise, STOP as stop
    directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
    while True:
        # Clockwise
        motor(directions['CW'])
        time.sleep(5)
        # Stop
        motor(directions['STOP'])
        time.sleep(5)
        # Anticlockwise
        motor(directions['CCW'])
        time.sleep(5)
        # Stop
        motor(directions['STOP'])
        time.sleep(5)

def destroy():
    # Stop the motor
    GPIO.output(MotorEnable, GPIO.LOW)
    # Release resource
    GPIO.cleanup()

# If run this script directly, do:
if __name__ == '__main__':
    setup()
    try:
        main()
    # When 'Ctrl+C' is pressed, the program
    # destroy() will be executed.
    except KeyboardInterrupt:
        destroy()

Code-Erklärung

def motor(direction):
    # Clockwise
    if direction == 1:
        # Set direction
        GPIO.output(MotorPin1, GPIO.HIGH)
        GPIO.output(MotorPin2, GPIO.LOW)
        # Enable the motor
        GPIO.output(MotorEnable, GPIO.HIGH)
        print ("Clockwise")
...

Erstellen Sie eine Funktion, motor(), deren Variable „direction“ ist. Wenn die Bedingung direction=1 erfüllt ist, dreht sich der Motor im Uhrzeigersinn; wenn direction=-1 ist, dreht sich der Motor gegen den Uhrzeigersinn; und unter der Bedingung direction=0, hört er auf sich zu drehen.

def main():
    # Define a dictionary to make the script more readable
    # CW as clockwise, CCW as counterclockwise, STOP as stop
    directions = {'CW': 1, 'CCW': -1, 'STOP': 0}
    while True:
        # Clockwise
        motor(directions['CW'])
        time.sleep(5)
        # Stop
        motor(directions['STOP'])
        time.sleep(5)
        # Anticlockwise
        motor(directions['CCW'])
        time.sleep(5)
        # Stop
        motor(directions['STOP'])
        time.sleep(5)

In der main() Funktion wird ein Array, directions[], erstellt, in dem CW gleich 1 ist, CCW den Wert -1 hat und die Nummer 0 für Stopp steht.

Während der Code ausgeführt wird, dreht sich der Motor zunächst 5 Sekunden lang im Uhrzeigersinn, hält dann für 5 Sekunden an, danach dreht er sich 5 Sekunden lang gegen den Uhrzeigersinn; anschließend hält der Motor erneut für 5 Sekunden an. Diese Reihe von Aktionen wird wiederholt durchgeführt.

Nun sollten Sie sehen, wie das Motorblatt sich dreht.

Phänomen-Bild

../_images/image119.jpeg