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.
Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link:
Name |
KOMPONENTEN IN DIESEM KIT |
LINK |
|---|---|---|
Raphael Kit |
337 |
Sie können diese auch einzeln über die untenstehenden Links kaufen.
KOMPONENTENBESCHREIBUNG |
KAUF-LINK |
|---|---|
- |
|
- |
|
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.
Experimentelle Verfahren
Schritt 1: Bauen Sie die Schaltung auf.
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.
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