.. note:: 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 [|link_sf_facebook|] und treten Sie heute bei! .. _1.3.1_py: 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. .. image:: ../img/list_1.3.1.png Es ist definitiv praktisch, ein komplettes Kit zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - KOMPONENTEN IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können diese auch einzeln über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_power_module` - \- * - :ref:`cpn_l293d` - \- * - :ref:`cpn_motor` - |link_motor_buy| 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. .. image:: ../img/image336.png Experimentelle Verfahren ------------------------ **Schritt 1:** Bauen Sie die Schaltung auf. .. image:: ../img/image117.png .. note:: 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. .. image:: ../img/image118.jpeg **Schritt 2**: Wechseln Sie in den Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python **Schritt 3**: Ausführen. .. raw:: html .. code-block:: 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** .. note:: 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. .. raw:: html .. code-block:: python 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** .. code-block:: python 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. .. code-block:: python 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 ------------------ .. image:: ../img/image119.jpeg