• Erste Schritte
  • Hardware & GPIO
  • Projekte
  • Software
    • Webserver
  • Arduino & ESP8266
  • Hausautomatisierung
  • Sonstiges
    • News
Facebook Twitter YouTube
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
  • Einstieg
    • Erste Schritte
      • Raspberry Pi 3 Einstieg - Starter KitWas brauche und wie starte ich? – Raspberry Pi Einstieg
    • Einrichtung
      • microsd_karte_menuRaspbian Betriebssystem auf eine SD Karte flashen – Einfach & Schnell
      • wlanbluetooth_menuWLAN und Bluetooth einrichten – Raspberry Pi 4
      • wifi_menuWLAN Stick installieren und einrichten – Alternative
      • bash_menuSSH Zugriff einrichten via Putty – Kommandozeilen Zugriff
      • rdp_menuRemotedesktop Verbindung aufbauen – Fernsteuerung
    • Einsteiger Projekte
      • Sinnvolles Raspberry Pi Zubehör
      • 15 Raspberry Pi Projekte für Anfänger
      • Ampelschaltung mit GPIOs
      • GPIOs mit Port Expander erweitern
      • Elektronischer Würfel
      • 13 tolle Projekte für Kinder und Jugendliche
      • Roboter selber bauen
      • In Visual Studio Code mit C++ programmieren
      • Wünsch dir ein Tutorial
    • Programmieren lernen
      • Teil 1: Einführung
      • Teil 2: GPIOs steuern
      • Teil 3: GUI erstellen
      • Teil 4: PWM
      • C# GUI Apps entwickeln
  • Hardware & GPIO
    • 50 der wichtigsten Raspberry Pi Sensoren und Module – Aufgelistet mit Links zu den TutorialsRaspberry Pi Sensoren
    • Beliebte Tutorials
      • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
      • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
      • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Funksteckdosen (433MHz) steuern
      • Raspberry Pi Relais ModulRaspberry Pi: Relais-Schalter per GPIO steuern
      • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
      • Amazon-Alexa-deutsch-auf-dem-Raspberry-Pi-installierenAmazon Alexa (Deutsch) auf dem installieren
      • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
      • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren
      • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
      • Raspberry Pi USB Boot per Stick oder SSD Festplatte einrichtenUSB Boot per Stick oder SSD Festplatte
      • Analog
        • Raspberry Pi MCP3008 ADCMCP3008: Am Raspberry Pi analoge Signale auslesen
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
        • Raspberry Pi PulsmesserRaspberry Pi Pulsmesser: Herzfrequenz messen
        • Joystick am Raspberry Pi benutzen (mit MCP3008)Joystick am Raspberry Pi benutzen (mit MCP3008)
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Drehregler - Rotary EncoderKY040 Drehregler als Lautstärkeregler für den Raspberry Pi
        • Easpberry Pi Soil SensorBodenfeuchtigkeit mit dem Raspberry Pi messen
        • Raspberry Pi KeypadRaspberry Pi Keypad anschließen – Codeschloss
        • Raspberry Pi door sensorÜberwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
        • Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)Raspberry Pi Waage selber bauen (mit Gewichtssensor HX711)
      • Funk
        • 71-M-PU7vML.-S3L1500-Raspberry Pi’s über 433 MHz Funk kommunizieren lassen
        • Remote Control Raspberry Pi 433Mhz Radio TransmitterRaspberry Pi mit 433Mhz Funksender fernsteuern
        • Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433Mhz)Raspberry Pi Funksteckdosen (433MHz) steuern
        • Raspberry Pi MiFlora - Xiaomi Pflanzensensor in OpenHAB einbindenMiFlora – Xiaomi Pflanzensensor ins Smart Home einbinden
        • Raspberry Pi RFID RC522 TüröffnerRaspberry Pi RFID RC522 Tags auslesen (NFC)
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation (2.4 GHz): Arduino & Raspberry Pi
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen
        • Raspberry Pi Xbox 360 Wireless ControllerRaspberry Pi mittels Xbox 360 Controller steuern
        • Raspberry Pi GSM Modul - Huawei Internet SticksRaspberry Pi GSM Modul – Mobiles Internet
        • Raspberry Pi Bluetooth DatentransferRaspberry Pi Bluetooth Datentransfer zum Smartphone
      • Infrarot & Laser
        • Raspberry Pi Infrarot FernbedienungRaspberry Pi: Per IR Remote Befehle ausführen
        • infrarot sharp distance senserInfrarot Abstandsmessung mit dem Raspberry Pi
        • Raspberry Pi Laser Lichtschranke für weite DistanzenRaspberry Pi Laser Lichtschranke für weite Distanzen
        • Infrarot Raspberry Pi FernbedienungInfrarot Steuerung einrichten
        • Raspberry Pi Infrarot Lichtschranke bauen und Geschwindigkeit messenRaspberry Pi Infrarot Lichtschranke bauen
        • Raspberry Pi Fotowiderstand HelligkeitssensorFotowiderstand (Helligkeitssensor) am Raspberry Pi
      • Temperatur & Navigation
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorRaspberry Pi: Luftfeuchtigkeit und Temperatur messen
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Raspberry Pi RTC Real Time ClockReal Time Clock Modul steuern
        • Rotation und Beschleunigung mit dem Raspberry Pi messenRotation und Beschleunigung mit dem Raspberry Pi messen
        • Raspberry Pi GPS ModulRaspberry Pi GPS Ortungs- / Navigationsgerät bauen
        • Raspberry Pi Kompass selber bauenRaspberry Pi Kompass selber bauen (HMC5883L)
        • Kontaktlosen Infrarot-Temperatursensor MLX90614 am Raspberry Pi auslesenMLX90614 – Kontaktlos Temperaturen messen
      • Displays
        • Raspberrry Pi HD44780 I2CHD44780 LCD Display per I2C ansteuern
        • Raspbery Pi LCD DisplayRaspberry Pi LCD Display: 16×2 Zeichen anzeigen
        • DisplayTipps & Tricks zum offiziellen 7″ Raspberry Pi Touchscreen
        • Raspberry Pi TouchscreenTestbericht zum 7″ Raspberry Pi Touchscreen Display
        • LCD Touch Display (3.2″) am Raspberry PiLCD Touch Display (3.2″) am Raspberry Pi
        • tft lcd touch displayRaspberry Pi LCD Touch Display Teil 2 – Anpassungen
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtRaspberry Pi LED Matrix – Projektübersicht
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige mit MAX7219 am Raspberry Pi (Anode)
        • Raspberry Pi Tablet Raspad TestberichtRaspberry Pi Tablet „Sunfounder RasPad“ Testbericht
      • Motoren & Sonstige
        • Raspberry Pi Stepper Motor Control with L293D / ULN2003ARaspberry Pi Schrittmotor ansteuern
        • Raspberry Pi Servo MotorRaspberry Pi Servo Motor Steuerung
        • Raspberry Pi PCA9685 mehrere Servos gleichzeitig steuernMehrere Servo Motoren per Raspberry Pi steuern
        • Raspberry Pi PIR Motion SensorBewegungsmelder PIR anschließen und steuern
        • How to use a Raspberry Pi Fingerprint Sensor for AuthenticationRaspberry Pi Fingerprint Sensor zur Authentifizierung nutzen
        • Raspberry Pi Akku AdapterRaspberry Pi mit Akkus/Batterien betreiben
        • Entfernung messen mit Ultraschallsensor HC-SR04 – Raspberry PiEntfernung messen mit Ultraschallsensor HC-SR04
        • Raspberry Pi WS2801B RGB LED Streifen anschließen und steuernWS2801 RGB LED Streifen anschließen und steuern
        • Raspberry Pi WS2812 RGB LED StripWS2812 RGB LED Streifen per Raspberry Pi steuern
        • Raspberry Pi Überwachungskamera LivestreamÜberwachungskamera Livestream einrichten
        • NoIRAufnahmen mit dem offiziellen Kamera Modul
        • Raspberry Pi Zero - establishing an Ethernet connection (ENC28J60)Raspberry Pi Zero – Ethernet Verbindung
  • Software
    • Webserver Installation
      • apache2_menu25Teil 1 – Apache2
      • php_menu25Teil 2 – PHP 5
      • mysql_menu25Teil 3 – MySQL
      • phpmyadmin_menu25Teil 4 – phpMyAdmin
      • ftp_menu25Teil 5 – FTP Server
      • dns_menu25Teil 6 – DNS Server via No-IP
      • home_menu25Homeverzeichnis ändern
      • share_25Samba Server: Dateien im Netzwerk teilen
      • nodejs_menu25Node.js Webserver installieren und GPIOs schalten
      • ssl_menu25SSL Zertifikat kostenlos mit Let’s Encrypt
      • wordpress_25Eigenen WordPress-Server einrichten
      • cloud-25Nextcloud auf dem Raspberry Pi installieren
    • Entertainment
      • led_menu25Raspberry Pi Ambilight für alle Geräte mit OSMC selber bauen
      • amazon_menu25Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
      • controller_25Raspberry Pi RetroPie – Spielekonsole selber bauen
      • kodi_menu25Mediencenter Raspbmc als SmartTV mit dem Raspberry Pi
      • android_25Android TV Box zum selber bauen
      • apple-2316234_640Raspberry Pi als AirPlay-Empfänger
      • jukebox_menu25Raspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.)
      • steam_25Steam Spiele streamen
      • minecraft_menu25Raspberry Pi Minecraft Server
      • youtube_25YouTube Live Streaming einrichten
      • qr-code-tutorials-raspberrypi.de_25Raspberry Pi QR / Barcode Scanner
    • Fernsteuerung
      • rdp_menuRaspberry Pi Remotedesktop Verbindung
      • ssh_menu25SSH Zugriff einrichten via Putty (Windows)
      • vnc_menu25Raspberry Pi mittels VNC fernsteuern
      • welcome_menu25SSH Terminal Begrüßung ändern
      • telegram1_menu25Telegram Messenger auf dem RaspberryPi
      • telegram2_menu25Mit Telegram Messenger Raspberry Pi steuern
      • bluet_menu25Raspberry Pi Bluetooth Datentransfer zum Smartphone
      • alexa_voice_25Eigenen Raspberry Pi Alexa Skill bauen
      • microphone_25Sprachsteuerung selber bauen
      • mqtt_25MQTT Broker/Client Funkkommunikation
      • mail_25Vom Raspberry Pi Emails senden
      • twitter_25Per Twitter Bot Nachrichten posten
    • Weitere
      • loggen_menu25Sensordaten mit ThingSpeak loggen und auswerten
      • mysql_datalogger25Per lokaler MySQL Datenbank zum Raspberry Pi Datenlogger
      • opencv_menu25OpenCV auf dem Raspberry Pi installieren
      • arduino_menu30tWiringPi installieren & Pinbelegung (Raspberry Pi)
      • radio_menu25Raspberry Pi als Radio Sendestation
      • win10_menu25Windows 10 IoT auf dem Raspberry Pi installieren
      • printer_25Drucker einrichten und per Knopfdruck Bilder drucken
      • gsm_menu25Raspberry Pi GSM Modul – Mobiles Internet (LTE, 3G, UMTS)
      • autostart_menu25Autostart: Programm automatisch starten lassen
      • machine-learning-25Raspberry Pi Machine Learning erlernen
  • Projekte
      • roboter_menu30tRoboter
        • Raspberry Pi Roboter ProjektRaspberry Pi Roboter Projektübersicht
        • Raspberry Pi Roboter Bausatz fertigTeil 1: Zusammenbau
        • Raspberry Pi Roboter - Linien folgenTeil 2: Linien folgen lassen
        • Raspberry Pi Roboter per Infrarot Fernbedienung steuernTeil 3: Per Infrarot Fernbedienung steuern
        • Raspberry Pi Roboter: Ultraschall AutopilotTeil 4: Automatisch Hindernissen ausweichen
        • Raspberry Pi Roboter der eigenen Stimme folgen lassenTeil 5: Der eigenen Stimme folgen lassen
        • Raspberry Pi Roboter mit Xbox 360 Controller fernsteuernTeil 6: Mit Xbox 360 Controller Roboter fernsteuern
        • Raspberry Pi Robot Arm 6DOF6-Gelenkigen Roboter Arm am Raspberry Pi betreiben (6 DOF)
      • led_menu30LED Matrix
        • Raspberry Pi LED MAX7219 Dot Matrix – ProjektübersichtMAX7219 LED Matrix – Projektübersicht
        • 8×8 LED Dot Matrix Parts8×8 LED Matrix – Zusammenbau und Installation
        • Raspberry Pi Bibliothek für mehrzeilige m x n MAX7219 LED MatrizenBibliothek für mehrzeilige m x n MAX7219 LED Matrizen
        • Graphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnenGraphiken auf mehrzeiligen Raspberry Pi LED Matrizen zeichnen
        • Pong auf MAX7219 Matrizen spielen (mit Joystick) – Raspberry PiPong auf MAX7219 Matrizen spielen (mit Joystick)
        • Snake auf Raspberry Pi MAX7219 Matrizen spielenSnake auf Raspberry Pi MAX7219 Matrizen spielen
        • 7 Segment Anzeige (Anode) mit MAX7219 MAX7221 und Raspberry Pi7 Segment Anzeige (Anode) mit MAX7219/MAX7221
        • Raspberry Pi 7 Segment Anzeige Kathode mit MAX7219Raspberry Pi: 7 Segment Anzeigen mit MAX7219 steuern (Kathode)
      • wetterstation_menu30Wetterstation
        • Raspberry Pi Wetterstation mit OpenHAB 2 bauenEigene Raspberry Pi Wetterstation mit OpenHAB 2 bauen
        • Raspberry Pi Luftfeuchtigkeit/Temperatur SensorLuftfeuchtigkeit und Temperatur messen
        • raspberry_pi_thingspeak_daten_loggenSensordaten mit ThingSpeak loggen und auswerten
        • Raspberry Pi BMP180 SensorRaspberry Pi und I2C Luftdrucksensor BMP180
        • Measuring Temperature with a Raspberry Pi Temperature Sensor (1-Wire)Raspberry Pi Temperatursensor (1-Wire): Temperatur messen
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Raspberry Pi Gas Sensor MQ-2Raspberry Pi Gas Sensor (MQ-X) konfigurieren und auslesen
      • arduino_menu30tArduino & ESP8266
        • ESP8266 Microcontroller BoardEinführung & Programmierung des ESP8266 NodeMCU Boards
        • Raspberry Pi + ESP8266 NodeMCU: Per WLAN Daten sendenRaspberry Pi + ESP8266 NodeMCU: Per WLAN Daten senden
        • ESP8266 NodeMCU Außenposten-Wetterstation für den Raspberry PiESP8266 Wetterstation Außenposten für den Raspberry Pi
        • Mit dem NodeMCU ESP8266 433MHz Funksteckdosen steuernMit dem NodeMCU ESP8266 433MHz Funksteckdosen steuern
        • ESP8266 NodeMCU HD44780 LCD Display per I2C steuernNodeMCU ESP8266: HD44780 LCD Display per I2C steuern
        • ESP8266 Grafikdisplay: Am SSD1306 OLED per I2C Bilder & Text anzeigen
        • ESP8266 Google Maps API RoutenplanerESP8266 Google Maps API Routenplaner auf LCD anzeigen
        • 2000px-Arduino_Logo.svgRaspberry Pi und Arduino – Einführung
        • arduino unoArduino und Raspberry Pi miteinander kommunizieren lassen
        • Funkkommunikation zwischen Raspberry Pi's und Arduinos (2.4 GHz)Funkkommunikation zwischen Raspberry Pi’s und Arduinos (2.4 GHz)
        • NodeMCU: ESP8266 mit Solarpanel und Akku mit Strom versorgenNodeMCU: ESP8266 mit Solarzelle und Akku mit Strom versorgen
        • ESP8266 Access Point: Günstigen Wlan Repeater selber bauenESP8266 Access Point: Günstigen Wlan Repeater selber bauen
      • Mini Projekte
        • Raspberry Pi Gewächshaus automatisch selber bauenAutomatisches Raspberry Pi Gewächshaus selber bauen
        • Eigene Raspberry Pi Gartenbewässerung mit Webseite bauenEigene Gartenbewässerung mit Webseite bauen
        • Raspberry Pi Radio StationRaspberry Pi als Radio Sendestation verwenden
        • Raspberry Pi Radio ReceiverRaspberry Pi als Radioempfänger benutzen (Autoradio, Car PC)
        • spotify-logo-primary-horizontal-dark-background-rgbRaspberry Pi als Jukebox (Spotify, Soundcloud, TuneIn, uvm.) – Online Radio
        • Raspberry Pi RetroPie Guide - SNES Classic Spielekonsole selber bauenRaspberry Pi RetroPie Guide – SNES Spielekonsole bauen
        • Android + Raspberry Pi: Funksteckdosen App BedienungRaspberry Pi + Android/iOS: Funksteckdosen per App schalten
        • Indirekte Deckenbeleuchtung selber bauen mit farbigem LED LichtIndirekte Deckenbeleuchtung selber bauen mit farbigem LED Licht
  • Sonstiges
    • Wünsch dir ein Tutorial
    • News
    • Reviews
      • Pi Cap – Kapazitives Raspberry Pi Erweiterungsboard
      • Raspberry Pi Tablet „Sunfounder RasPad“ – Testbericht & Einrichtung
      • Testbericht zum 7″ Raspberry Pi Touchscreen Display
      • CrowPi 2 Testbericht: Laptop & Lern-Kit für Kinder
      • Daten auf dem Wio Terminal LCD Screen anzeigen
    • Raspberry Pi Zero
      • Offizielles 5$ Raspberry Pi Zero Modul vorgestellt
      • Raspberry Pi Zero – Ethernet Verbindung herstellen (ENC28J60)
      • Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern
  • Hausautomation
    • OpenHAB
      • steckdose_25Sonoff S20 Wifi Steckdose steuern
      • wireless_25Funksteckdosen (433 MHz) schalten
      • schalter_25Relais steuern (Rollladen, Lichter, etc.)
      • wetterstation_menu30Wetterstation mit OpenHAB 2 bauen
      • ws28_25WS28xx RGB LED Streifen steuern
      • touchscreen_25Touchscreen Panel bei Näherung aktivieren
      • mqtt_25MQTT Datenabfrage: Raspberry Pi an ESP8266
      • spotify_25Remote Spotify Player im Smart Home
      • heizung_25eQ-3 Thermostat im Smart Home
    • Einführung
      • Raspberry Pi Smart Home OpenHAB installierenOpenHAB installieren & konfigurieren
      • Home Assistant auf dem Raspberry Pi – Erste Schritte
    • ESP8266 NodeMCU
      • esp8266_25Einführung & Programmierung
      • arduino_25ESP8266: Arduino IDE installieren
      • lcd_25NodeMCU HD44780 LCD
      • battery_25Batteriebetrieb via Deep-Sleep
      • wifi_menuPer WLAN Daten senden
      • wetterstation_menu30Wetterstation Außenposten
      • maps_25Google Maps Routenplaner
      • wireless_25NodeMCU Funksteckdosen steuern
      • mail_25Vom NodeMCU Emails versenden
      • rgb_25WS2812B LEDs am Smartphone steuern
      • solar_25ESP8266 Stromversorgung mit Solarzelle
    • Überwachung
      • Aufnahmen mit dem offiziellen Kamera Modul des Raspberry Pi
      • Raspberry Pi: Überwachungskamera Livestream einrichten
      • mailbox_25Briefkasten Sensor – Email Benachrichtigung bei neuer Post
      • Raspberry Pi Überwachungskamera mit Webcam betreiben
      • Überwachung von Fenstern und Türen mit dem Raspberry Pi und Reed-Relais
      • ESP32 Cam Livestream Tutorial für Kamera Modul
    • Raspberry Pi + Android: Benachrichtigungen von Bewegungsmelder
    • Raspberry Pi + Android/iOS: Funksteckdosen per App schalten
    • Raspberry Pi + Android: Schwenkbarer Kamera-Livestream
      • Smart Home
        • Amazon Alexa (Deutsch) auf dem Raspberry Pi installieren
        • Raspberry Pi Funksteckdosen (433MHz) steuern – Tutorial
        • Raspberry Pi Sprachsteuerung selber bauen (Hausautomatisierung)
  • Englisch
  • Französisch
Tutorials for Raspberry Pi Tutorials for Raspberry Pi
Home»Hardware & GPIO»Raspberry Pi Schrittmotor ansteuern mit L293D / ULN2003A

Raspberry Pi Schrittmotor ansteuern mit L293D / ULN2003A

Facebook Twitter LinkedIn Tumblr Email Reddit
Raspberry Pi Stepper Motor Control with L293D / ULN2003A
Teilen
Facebook Twitter LinkedIn Email Tumblr Reddit Telegram WhatsApp

Im Gegensatz zu einem normalen Motor kann man mit einem Schrittmotor und dem Raspberry Pi die Schritte individuell steuern und kann damit immer die genaue Position erkennen. Schrittmotoren eignen sich daher perfekt für Anwendungen, bei denen man den Drehwinkel kennen muss wie z.B. in der Robotik.

Zum einfachen Ansteuern eines solchen Motors genügt ein Treiber IC, wobei es den L293D, sowie den ULN2003 gibt. Die Ansteuerung beider Treiber wird in diesem Tutorial gezeigt.

 

Der gängigere der beiden ist der ULN2003, wobei dieser auch oft in Driver Boards mit dem 28BYJ-48 verbaut ist. Es ist eine Spannung von 5V sowie 12V möglich.

Der L293D hingegen lässt die Möglichkeit offen eine externe Stromquelle anzuschließen, womit z.B. eine höhere Stromstärke (die bei manchen Motoren nötig ist) angeschlossen werden kann.

 

Zubehör

  • Schrittmotor (z.B. den 28BYJ-48 mit ULN2003 Driver Board)
  • L293D Treiber IC
  • (alternativ, falls kein L293D gewünscht ist: ULN2003 Darlington Array IC)
  • Jumper Kabel
  • ggf. eine externe Stromquelle, z.B. Batterien

Als Raspberry Pi Schrittmotor kann natürlich jeder andere auch genommen, wichtig ist beim Anschließen nur auf die ggf. unterschiedlichen Farben zu achten (siehe Datenblatt).

Die besagten Farben beziehen sich in meinem Fall auf die des 28BYJ-48 (Datenblatt):

Raspberry Pi Schrittmotor Aufbau
Falls du also einen anderen Motor wählst, achte dabei darauf, dass die Farben anders sein können, wichtig sind allerdings nur die Positionen und Schritte.

 

Aufbau L293D

Hast du einen Motor mir ULN2003 Driver Board bzw. den ULN2003 Treiber IC kannst du diesen Schritt überspringen.

Ein Blick ins Datenblatt zeigt, dass eine externe Stromquelle möglich ist. Der Aufbau ist also wie folgt:

Raspberry Pi Schrittmotor Aufbau - L293D
 Wichtig ist noch zu sagen, dass falls du keine externe Stromquelle benutzt, muss +5V vom Raspberry auch unten links an den IC (Pin 8), zusätzlich zu Pin 16 angeschlossen werden.

Falls der Motor mehr Stromstärke benötigt, als das Raspberry liefern kann, kommst du um eine externe Stromquelle nicht herum (am besten eine feste Stromquelle und keine Batterie). Der Vorwiderstand ist dabei auch im Datenblatt genannt. Achte dabei, dass du genug Spannung und Stromstärke einspeist, denn das ist die häufigste Ursache, weshalb der Motor später nicht arbeitet wie er soll. Beim 28BYJ-48 ist das jedoch nicht der Fall.

 

Aufbau ULN2003

Im Gegensatz zum L293D sind hier nur 5V bzw 12V Eingangsspannung erlaubt (Datenblatt). Da das Raspberry aber nur 5V liefert, können wir auch nur Motoren betreiben, die maximal 5V benötigen.

 

Raspberry Pi Schrittmotor Aufbau - ULN2003
 

Testen des Raspberry Pi Schrittmotor

Beim 28BYJ-48 ist die Sequenz die folgende. Falls du einen anderen Motor benutzt, musst du die Sequenz entsprechend dem Datenblatt anpassen.
Wir erstellen also ein Skript

sudo nano schrittmotor.py

und fügen folgendes Skript ein:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import RPi.GPIO as GPIO
import time
 
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
coil_A_1_pin = 4 # pink
coil_A_2_pin = 17 # orange
coil_B_1_pin = 23 # blau
coil_B_2_pin = 24 # gelb
#enable_pin   = 7 # Nur bei bestimmten Motoren benoetigt (+Zeile 24 und 30)
 
# anpassen, falls andere Sequenz
StepCount = 8
Seq = list(range(0, StepCount))
Seq[0] = [0,1,0,0]
Seq[1] = [0,1,0,1]
Seq[2] = [0,0,0,1]
Seq[3] = [1,0,0,1]
Seq[4] = [1,0,0,0]
Seq[5] = [1,0,1,0]
Seq[6] = [0,0,1,0]
Seq[7] = [0,1,1,0]
 
#GPIO.setup(enable_pin, GPIO.OUT)
GPIO.setup(coil_A_1_pin, GPIO.OUT)
GPIO.setup(coil_A_2_pin, GPIO.OUT)
GPIO.setup(coil_B_1_pin, GPIO.OUT)
GPIO.setup(coil_B_2_pin, GPIO.OUT)
 
#GPIO.output(enable_pin, 1)
 
def setStep(w1, w2, w3, w4):
    GPIO.output(coil_A_1_pin, w1)
    GPIO.output(coil_A_2_pin, w2)
    GPIO.output(coil_B_1_pin, w3)
    GPIO.output(coil_B_2_pin, w4)
 
def forward(delay, steps):
    for i in range(steps):
        for j in range(StepCount):
            setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
            time.sleep(delay)
 
def backwards(delay, steps):
    for i in range(steps):
        for j in reversed(range(StepCount)):
            setStep(Seq[j][0], Seq[j][1], Seq[j][2], Seq[j][3])
            time.sleep(delay)
            
if __name__ == '__main__':
    while True:
        delay = raw_input("Zeitverzoegerung (ms)?")
        steps = raw_input("Wie viele Schritte vorwaerts? ")
        forward(int(delay) / 1000.0, int(steps))
        steps = raw_input("Wie viele Schritte rueckwaerts? ")
        backwards(int(delay) / 1000.0, int(steps))

Anschließend nur noch mit STRG+O und STRG+X speichern und beenden. Gestartet wird einfach mit

sudo python schrittmotor.py

Mittels setStep(0,0,0,0) kannst du den Motor in den Ruhezustand setzen, da ansonsten die ganze Zeit Strom verbraucht wird (durch die Elektromagneten im Motor).

Achte darauf, dass wenn du die Verzögerung (pro Schritt) hoch stellst sich der Motor sehr langsam bewegen wird (z.B. bei 100ms würde eine volle Umdrehung bereits 51,2 Sekunden dauern, da der Motor insgesamt 512 Schritte hat. Eine zu kleine Verzögerung kann jedoch das Gegenteil bewirken, sodass die Signale zu schnell übertragen werden und dadurch der Motor nur „stottert“. Willst du einen schnelleren Motor, wähle ein Modell mit größerem Schrittwinkel).

 

28BYJ-48 l293d python schrittmotor uln2003 uln2003a
Teilen Facebook Twitter Pinterest LinkedIn Tumblr Email
Vorheriger BeitragJoystick am Raspberry Pi benutzen (mit MCP3008)
Nächster Beitrag Pong auf MAX7219 Matrizen spielen (mit Joystick) – Raspberry Pi

Ähnliche Beiträge

ESP32 TDS Sensor: Wasserqualität im Smart Home messen

ESP32 pH-Sensor – Automatische pH-Messung für Pool und Hydroponik

Home Assistant auf dem Raspberry Pi – Erste Schritte

Mit der Raspberry Pi REST API via Python alle GPIOs steuern

160 Kommentare

  1. Heinz-Rolf am 9. September 2014 14:03

    Hallo, da ich mich gerade mit dem Thema beschäftige und mir einen Schrittmotor mit ULN2003 bestellt habe, frage ich mich was mit Pin 18 denn weiter passiert. In deinem Script wir der nur definiert und auf 1 gesetzt, aber verkabelt wird er nicht.

    Antworten
    • Admin am 10. September 2014 15:30

      Ja, das stimmt, beim L293D Baustein wird er nicht verkabelt, nur beim ULN2003 IC. Es gibt manche Schrittmotoren, die einen zusätzlichen Impuls brauchen, um den Schritt zu machen. Zu diesem Motor gibt es unterschiedliche Datenblätter (z.B. hier).
      Da ich das Tutorial allerdings für alle Schrittmotoren allgemein geschrieben habe, habe ich den enable_pin mit hinzugefügt. Motoren, bei denen im Datenblatt explizit nur 4 Verbindungen angegeben habe, brauchen diesen Implus nicht.

      Antworten
  2. Henning am 29. Dezember 2014 20:56

    Für ein Projekt müssen wir zwei Schrittmotoren eigenständig betreiben können. Nachdem wir uns dieses Tutorial aufmerksam(!) durchgelesen haben, haben wir uns dazu entschieden, den L293D als Treiber zu verwenden, da wir eine externe Stromquelle benutzen wollen, um die 12V Schrittmotoren anzutreiben. Hier haben wir jedoch zwei Fragen: Welchen Vorwiderstand benötigt der Motor? Wie müsste die Verkabelung aussehen, wenn zwei Schrittmotoren angeschlossen werden statt einem?

    Vielen Dank für die Antwort im Voraus!
    Mit freundlichen Grüßen,
    Henning

    Antworten
    • Felix am 29. Dezember 2014 21:49

      Hallo Henning,
      die Daten zum Vorwiderstand und Betriebsspannung stehen im Datenblatt (online). Bei deinem Modell sind es 34 Ohm (wie du den Widerstand perfekt erreichst erfährst du hier: Widerstände berechnen und kombinieren)

      Der L293D ist nur für einen Motor geeignet, daher bräuchtest du zwei Module und dementsprechend 8 GPIO Pins. Die Spannung VCC und Masse GND werden an beide parallel angeschlossen (vom Pi und von deiner externen Stromquelle).

      LG Felix

      Antworten
      • Henning am 30. Dezember 2014 0:36

        Hallo Felix,
        danke für deine schnelle Antwort!
        Allerdings stellt sich uns noch eine Frage.
        Gibt es einen Unterschied bei den GPIO-Pins, die mit Zahlen belegt sind? In der Abbildung sind ja die Pins 4,17,23 und 24 benutzt worden. Es hätten aber auch alle anderen mit Zahlen belegten Pins verwendet werden können, oder? Wenn ich jetzt den Motor 1 der Abbildung nach verkable, welche Pins müsste ich dann für den 2. Motor belegen? Bitte mit Beschreibung (z.B. an Stelle von Pin 4 Pin 18).

        Mit freundlichen Grüßen,
        Henning

      • Felix am 30. Dezember 2014 0:44

        Hi Henning,
        welches Raspberry Pi Modell hast du denn (das Model B+ hat mehr GPIO Pins).
        Wenn du das Model B (Rev.2) hast, hast du folgende GPIO Pins: Link. Manche Pins haben eine „doppelte“ Funktion, d.h. sie können entweder als einfaches GPIO Pin verwendet werden, oder z.B. mit einer höheren Datenrate.

        Welche Pins du nimmst, bleibt dir überlassen. Ein Beispiel wäre du nimmst für den ersten Motor die aufgeführten und für den zweiten diese: 18,22,25,27 Damit hast du jene Pins, die mehrere Funktionen haben noch frei. Du kannst aber im Grunde jeden als GPIO markierten Pin benutzen.

        LG Felix

  3. Henning am 30. Dezember 2014 0:52

    Hallo Felix,
    da wir die Teile für unser Projekt noch nicht gekauft haben, haben wir noch kein Raspberry, wir werden uns jedoch das Raspberry Pi B+ kaufen.
    Danke für die Hilfe!
    Zuerst nicht einmal eine Stunde gebraucht, um zu antworten und jetzt lediglich 8 Minuten bis zur nächsten hilfreichen Antwort, super!
    Mit freundlichen Grüßen,
    Henning

    Antworten
    • Felix am 30. Dezember 2014 0:58

      Danke für das Lob 🙂
      Sollte es einmal mit den GPIO Pins knapp werden, kann ich auch einen I²C Port Expander empfehlen: http://amzn.to/1vDhKOW (ansonsten steht hier alles für den Pi benötigte).
      Davon können bis zu 8 Stück gleichzeitig betrieben werden, wobei jeder 16 weitere IO Pins liefert. Wie genau diese funktionieren habe ich hier erklärt: GPIOs mittels I2C Port Expander erweitern

      Falls noch Fragen auftreten, einfach stellen 😉

      LG Felix

      Antworten
  4. Lars am 8. Februar 2015 10:51

    Hallo,
    ich habe gerade deinen Code übernommen und der RPi liefert mir beim Ausführen folgende Meldung:
    Traceback (most recent call last):
    File „schrittmotor.py“, line 1, in
    import RPi.GPIO as GPIO
    ImportError: No module named GPIO
    Ich verwende das Modell B+.
    Was muss ich tun damit es funktioniert ?
    Grüße Lars

    Antworten
  5. Lars am 8. Februar 2015 13:44

    Hallo,
    die vorige Frage hat sich inzwischen erübrigt.
    Meine aktuelle Frage ist, wie muss ich den Code verändern, sodass der Motor tatsächlich mit der Schrittweite von 1,8 bzw 0,9 ° pro Schritt dreht ?
    Grüße

    Antworten
    • Felix am 8. Februar 2015 14:30

      Hi Lars,
      wenn du einen Motor mit 0.9° Schrittwinkel hast, dann musst du damit genau einen Schritt machen. In meinem Beispiel müsstest du setStep(w1, w2, w3, w4) mit entsprechender Sequenz aufrufen. Hier ist es wichtig, in welcher Sequenz sich der Motor befindet (bzw. wie die Magnete gerade geladen sind). Pro Schritt musst du also eine Sequenz weiter. Du müsstest also die Sequenz Nummer speichern und dann jeweils den nächsten Schritt machen.

      LG Felix

      Antworten
      • Lars am 8. Februar 2015 16:56

        Hallo Felix,
        vielen Dank für die schnelle Antwort.
        Ich habe deinen Code wie folgt geändert:

        def forward(delay, steps):
            for i in range(steps):
                    setStep(Seq[i%8][0], Seq[i%8][1], Seq[i%8][2], Seq[i%8][3])
                    time.sleep(delay)

        so läuft der Motor natürlich wesentlich langsamer aber durch die Modulo-Division ist jeder Schritt einzeln ansteuerbar.
        Weist du wie sich diese Lösung auf das Drehmoment auswirkt ?
        LG Lars

      • Felix am 8. Februar 2015 17:40

        Du musst aber bei einer Sache aufpassen: Angenommen du rufst die Funktion erst mit 1, dann 2 usw. auf. Dann wäre im ersten Schritt Seq[0] (i in [0]:) ausgeführt, im zweiten wieder Seq[0] und Seq[1] (i in [0,1]:), d.h. der/die ersten Teilschritte wiederholen sich immer wieder und daher wird der Motor stottern.
        Was du machen kannst ist eine Variable außerhalb zu definieren, darin den letzten Schritt speichern und jedes Mal auch dort es anfangen:

        schritt = 0
        
        def forward(delay, steps):
            for i in range(schritt, schritt + steps):
                ...
            schritt = (schritt + steps) % 8

        (Habe das nicht getestet, sollte aber funktionieren).

  6. jack am 26. März 2015 11:19

    Ich hätte da mal eine frage, ich muss mit einem Raspberry Pi Daten von einer ez430-Chronos Sportuhr die ACC Daten auslesen diese dann an die GPIO’s schicken wo sie dann an den L293D gesendet werden welcher dann 2 Motoren ansteuern soll, also so Motoren welche in ferngesteuerten Autos vorhanden sind. Ich hab schon ein kleines Programm geschrieben welches die Daten auf dem PC von der Uhr ausliest und anzeigt. Das Problem jedoch ist wenn ich es auf den Raspberry Pi starte kommt eine Fehlermeldung dass die Hexadezimal Zahlen nicht vom Raspberry Pi erkannt werden oder so… also her ist mein skript, ich würde mich über verbesserungs Vorschläge freuen

    import Tkinter,thread,time,serial
    #Programm für den Rapberry Pi als Kommentar 
    #import RPi.GPIO as GPIO
    
    #Variblen
    varExit=False
    varRun=False
    #GPIO Ausgänge festlegen
    #GPIO.setwarnings(False)
    #GPIO.setmode(GPIO.BCM)
    #GPIO.setup(4,GPIO.OUT)
    #GPIO.setup(17,GPIO.OUT)
    #GPIO.setup(23,GPIO.OUT)
    #GPIO.setup(24,GPIO.OUT)
    
    
    ser=serial.Serial(port="COM5",baudrate=115200,parity='N')
    #ser = serial.Serial('/dev/ttyACM0',115200,timeout=1)
    
    #Funktionen
    
    def offnen():
        global ser
        try:
            ser.open()
            lb.configure(text="Port wurde geöffnet")
    
        except:
            lb.configure(text="Fehler beim öffnen")
            
    
    def schliessen():
        global ser
    
        try:
            ser.close()
            lb.configure(text="Port wurde geschlossen")
        except:
            lb.configure(text="Fehler beim schliessen")
            
            
    def start():
        cmd ='xffx07x03'
        try:
            ser.write(cmd)
            lb.configure(text="AP start")
            for i in range(3):
                print hex(ord(ser.read()))
        except:
            lb.configure(text="Fehler beim Starten vom AP")
            
        
    def stop():
        global varRun
    
        cmd = 'xFFx09x03'
        varRun=False
        try:
            ser.write(cmd)     
            lb.configure(text="AP stop")
            for i in range(3):
                print hex(ord(ser.read()))
        except:
            lb.configure(text="Fehler beim Stoppen vom AP")
            
        
    def acc_data():
        global ser,varRun,varExit
    
        while varExit == False:
            if varRun==True:
                cmd = 'xffx08x07x00x00x00x00'
                r = ser.write(cmd)
                r = ser.read(7)
                if(ord(r[3]) == 1):
                    r=([ord(r[4])],[ord(r[5])],[ord(r[6])])
                    lb1.configure(text=r[0])
                    lb2.configure(text=r[1])
                    lb3.configure(text=r[2])
                    x =r[0]
                    y =r[1]
                    z =r[2]
    
                    #Durch die Positionen der x-y-z-Achsen in bewegung bringen
                    if x > [240] and y > [10] and y = [40]:
                        print "Roboter vorwärts normale Geschwindigkeit"
                        #L=GPIO.PWM(4,200)
                        #R=GPIO.PWM(23,200)
                        #m=GPIO.PWM(17,200)
                        #s=GPIO.PWM(24,200)
                        #L.ChangeDutyCycle(50)
                        #R.ChangeDutyCycle(50)
                        #m.ChangeDutyCycle(0)
                        #s.ChangeDutyCycle(0)
                    elif x > [245] and y > [20] and y  [245] and y  [200] and z  [240] and y > [250] and z > [52]:
                        print "Roboter steht"
                        #L=GPIO.PWM(4,200)
                        #R=GPIO.PWM(23,200)
                        #m=GPIO.PWM(17,200)
                        #s=GPIO.PWM(24,200)
                        #m.start(0)
                        #s.start(0)
                        #L.start(0)
                        #R.start(0)
                    elif x > [100] and y < [10] and z < [10]:
                        print "Roboter nach links"
                        #R=GPIO.PWM(23,200)
                        #s=GPIO.PWM(24,200)
                        #L=GPIO.PWM(4,200)
                        #m=GPIO.PWM(17,200)
                        #L.ChangeDutyCycle(20)
                        #m.ChangeDutyCycle(20)
                        #R.ChangeDutyCycle(100)
                        #s.ChangeDutyCycle(100)
                    elif x < [100] and y  [0] and z < [20]:
                        print " Roboter nach rechts"
                        #R=GPIO.PWM(23,200)
                        #s=GPIO.PWM(24,200)
                        #L=GPIO.PWM(4,200)
                        #m=GPIO.PWM(17,200)
                        #L.ChangeDutyCycle(100)
                        #m.ChangeDutyCycle(100)
                        #R.ChangeDutyCycle(20)
                        #s.ChangeDutyCycle(20)
                    else:
                        print "Wartet auf Anweisung"
                        #R=GPIO.PWM(23,200)
                        #s=GPIO.PWM(24,200)
                        #L=GPIO.PWM(4,200)
                        #m=GPIO.PWM(17,200)
                        #L.ChangeDutyCycle(20)
                        #m.ChangeDutyCycle(0)
                        #R.ChangeDutyCycle(20)
                        #s.ChangeDutyCycle(0)
    
    
        stop()
        #R.stop()
        #L.stop()
        #m.stop()
        #s.stop()
        #GPIO.cleanup()
        schliessen()
    
        
    def read():
        global varRun
        
        if varRun==False:
            varRun=True
            lb.configure(text="Lesen der Daten")
        else:
            varRun=False
            lb.configure(text="Lesen der Daten gestoppt")
    
        
    
            
    def ende():
        global varExit, varRun
    
        varRun=False
        varExit=True
        time.sleep(1)
            
        main.destroy()
    
    
    #Hauptprgramm
    
    main=Tkinter.Tk()
    
    a=Tkinter.Button(main,text="open Port",command=offnen)
    b=Tkinter.Button(main,text="close Port",command=schliessen)
    c=Tkinter.Button(main,text="start AP",command=start)
    d=Tkinter.Button(main,text="stop AP",command=stop)
    e=Tkinter.Button(main,text="read Data",command=read)
    end=Tkinter.Button(main,text="Exit",command=ende)
    lb=Tkinter.Label(main,text="Letzte Aktion",width=20)
    lb1=Tkinter.Label(main,text="x")
    lb2=Tkinter.Label(main,text="y")
    lb3=Tkinter.Label(main,text="z")
    
    a.grid(row=2,column=1)
    b.grid(row=2,column=2)
    c.grid(row=3,column=1)
    d.grid(row=3,column=2)
    e.grid(row=3,column=3)
    end.grid(row=5,column=2)
    lb.grid(row=1,column=3)
    lb1.grid(row=4,column=1)
    lb2.grid(row=4,column=2)
    lb3.grid(row=4,column=3)
    
    
    thread.start_new_thread(acc_data,())
    main.mainloop()
    Antworten
  7. Thorxel am 26. April 2015 13:25

    Hallo,
    Ich habe genau diese beiden Halbleiter da und möchten ebenfalls meinen Schrittmotor mit dem Pi ansteuern nur habe ich einen Schrittmotor der nur 4 Kabel hat (Schwarz, Rot, Grün, Blau) kann ich ihn trotzdem irgendwie mit diesen ICs ansteuern? 🙂 danke schonmal im Vorraus

    Antworten
    • Felix am 26. April 2015 13:29

      Hi,
      ja klar, das funktioniert auch. Schau mal beim Aufbau mit dem L293D IC, dort werden nur 4 Kabel des Motors benötigt. Ansonsten kannst du es fast 1:1 übermehmen, nur musst du im Datenblatt deines Motors schauen, welche Funktionen die Kabel mit den versch. Farben haben und diese auf mein Beispiel übertragen (Wiring Diagram).

      Antworten
  8. Craig am 3. Juni 2015 11:37

    Hallo,
    in meiner Bachelorarbeit geht es darum, zwei Elektrozylinder Typ T6V4 von RACO mit einem Mikrocontroller anzusteuern. Außerdem müssen jeweils ein Temperatur- und Drucksensor, Näherungsschalter für die Endlagen der Zylinder, ein Potentiometer zur Einstellung der Geschwindigkeit und ein Display in die Schaltung integriert werden. Da ich mich bis jetzt noch nie mit Mikrocontrollern auseinandergesetzt hatte, finde ich dieses Thema sehr Anspruchsvoll aber zugleich wahnsinnig interessant. Wäre denn diese Aufgabe mit dem Raspberry Pi zu lösen? Wenn ja, welche zusätzliche Hardware werde ich dafür benötigen?

    Ich bedanke mich schon mal im Voraus für die Hilfe!

    Herzliche Grüße

    Craig

    Antworten
    • Peter Elektrisch am 20. November 2018 15:48

      Hallo Craig!
      Wenn Du Bitschlerer werden willst und dafür lernen sollst, dann tu das Bitte und
      lass Dir Deinen Abschluss nicht hier zusammengutenbergen !

      Antworten
  9. Marcus Wollmann am 10. Juli 2015 13:55

    Hallo,

    im Umgang mit der Programmierung für Schrittmotor bin ich noch recht unerfahren und deshalb würde es mir sehr helfen, wenn ich hier ein bisschen Hilfe bekommen könnte.

    Ich habe einen Schrittmotor (6V, 1,2A, Baugröße NEMA 23) mit 4 Anschlüssen (Kabeln) an eine Schrittmotor-Endstufe (http://www.micompan-shop.de/product_info.php?products_id=45) und diese wiederum an einen Takt- und Richtungssignal-Generator (http://www.micompan-shop.de/product_info.php?products_id=12&MODsid=moikscbl07a8dgs2d74d2vh621) angeschlossen. Diese Ansteuerung funktioniert nach einigen Test mit den Einstellungen problemlos. Nun möchte ich den Takt- und Richtungssignal-Generator durch den Raspi bzw. durch ein geeignetes Programm auf dem Raspi den Schrittmotor ansteuern Ich habe vor, die Eingänge der Schrittmotor-Endstufe über einen Treiberbaustein (welcher ist noch offen) mit den GPIO-Pins zu verbinden. Nun ist die Frage ob das so vom Aufbau her richtig ist bzw. möglich ist, und wenn ja, wäre das obige Programm zum Ansteuern geeignet bzw. wie müsste man das erweitern?
    Mit dem Programm müsste ich die sowohl die Richtung als auch die Taktung (Geschwindigkeit) einstellen können.

    Vielen Dank im voraus.
    MfG Makkez

    Antworten
    • Felix am 10. Juli 2015 16:38

      Hallo Marcus,
      wie hast du die Einstellungen gesetzt? Wenn du sie per Signalen setzen kannst, sollte das kein Problem sein, diese auch mit dem Pi (oder einem IC, der vom Pi gesteuert wird) zu setzen.

      Antworten
  10. Steffen am 25. September 2015 19:36

    Hallo,
    mich würde interessieren, ob ich viele Schrittmotoren (>10) über einen RPi steuern kann? Es wäre kein Problem, wenn dabei zu jedem beliebigen Zeitpkt immer nur ein Motor laufen kann, es müssten also nie mehrere gleichzeitig arbeiten. Geht das nur über ein BUS-System, wenn ja, welches würde sich anbieten? Und welche Motoren eignen sich (ich würde gerne den 28BYJ-48 verwenden).
    Danke vorab!
    Steffen

    Antworten
    • Felix am 25. September 2015 20:33

      Hallo Steffen,
      ja das geht. Dafür reichen jenachdem wie viele Motoren du anschließen willst entweder die GPIOs des Pi’s (je 4 pro Motor) oder aber du nutzt einfach eine GPIO Erweiterung: GPIOs mittels I2C Port Expander erweitern
      LG Felix

      Antworten
  11. Steffen am 25. September 2015 21:26

    Hi Felix,
    Danke für die schnelle Antwort. Bei meiner Idee wären es 16-18 Schrittmotoren, da wird der Kabelsalat groß. Siehst du noch eine Möglichkeit, mit der man alle Motoren über nur 4 GPIOs (plus evtl Steuerleitung(en)) anschließt und dann temporär nur einen einzelnen Motor ansprechen kann? Jeder dieser Motoren müsste 1-2 Mal pro Tag nur ein paar Umdrehungen fahren, Betriebsdauer pro Motor pro Tag ca 30 sec.
    Danke nochmals!

    Antworten
    • Felix am 25. September 2015 21:45

      Hallo Steffen,
      16-18 sind natürlich eine ganze Menge, da machen Expander weniger Sinn.
      Mit nur 4 GPIOs wirst du dennoch nicht zurecht kommen, je nach Realisierung. Z.B. könntest du NAND/AND Gatter als Schalter für die jeweiligen Motoren verwenden. Bestimmt gibt es dazu auch einen IC Baustein, der das nochmals vereinfacht, aber da habe ich grade keinen Namen parat – sorry.

      Antworten
  12. Christian am 5. Oktober 2015 18:26

    Hallo,

    Danke für die super Beschreibung.
    Sobald ich „setStep(0,0,0,0)“ in die Konsole eingebe, kommt folgende Fehlermeldung: „-bash: syntax error near unexpected token `0,0,0,0′“

    Kann mir jemand sagen, was ich falsch mache?

    Herzlichen Dank
    Grüße

    Antworten
    • Felix am 5. Oktober 2015 19:17

      Hast du das in die Python Konsole eingegeben? Klingt so, als ob du es in die normale Konsole eignebeben hast.

      Antworten
  13. Olli am 10. Oktober 2015 0:33

    Hi, tolle Anleitung. Ich habe den ULN2003. Der Programmtest wird abgearbeitet und läut aber die Welle am Motor bewegt sich nicht. Nehm ich den Motor in die Hand spüre ich ein rucken im Motor. Er ist neu gekauft und der selbe den du im obigen Beispiel verwendest.

    hast du eine Idee was das sein könnte?

    lg

    Antworten
    • Felix am 10. Oktober 2015 0:38

      Hi Oliver,
      der ULN2003 ist nur der Treiber IC. Ich hatte mal exakt das selbe Problem mit einem kleinen Motor, der mehr Stromstärke brauchte (~1Ampere), aber der Pi liefert zu wenig. Da hilft eine externe Stromquelle aus (L293D).
      Benutzt du das verlinkte Seit aus Treiber und Motor? Ist er an 5V angeschlossen und hast du sonst noch etwas am Pi (GPIOs) laufen?
      LG Felix

      Antworten
      • Niklas am 19. September 2018 18:43

        Hallo, ich habe das gleiche Problem. Ich verwende den 28BYJ-48 Motor aus dem Tutorial. Habe es auch schon mit einer 9V-Blockbatterie versucht, da wird das zucken nur stärker und der Motor wird leicht handwarm. Habe es auch schon mit 2 verschiedenen Treiberplatinen und 2 verschiedenen Motoren versucht, gleiches Problem bei beiden.
        Danke für eure Mithilfe.

    • Olli am 10. Oktober 2015 0:54

      Die LEDs der Treiberplatine blinken entsprechend der eingegeben Zeit und Schrittanzahl. Ich habe die Spannungsversorgung jetzt vom Pi gelöst und trotzdem ist keine Bewegung zu sehen. Ein zucken ist zu spüren, wenn man den Motor in der hand hält. Gibt es die Möglichkeit , dass intern das getriebe blockiert? hat es einen Anschlag o.ä.?

      PS: vielen dank für die schnelle Hilfe

      Antworten
  14. ElBarto am 11. Oktober 2015 15:47

    Guten Tag, ich muss für ein Projekt einen Steppermotor (http://www.adafruit.com/products/324) mit dem L293D Treiber ansteuern, dafür habe ich den Motor, Treiber, Steckplatine, Raspberry und alle möglichen Widerstände (großes Paket mit Widerständen in allen Bereichen) Zuhause. Jetzt habe ich dieses 12V Netzteil (http://www.amazon.de/Overlook-Security-Steckernetzger%C3%A4t-%C3%9Cberwachungskameras-1000mA/dp/B005O1A9B0/ref=sr_1_2?ie=UTF8&qid=1419893870&sr=8-2&tag=modules-21&keywords=netzger%C3%A4t+12v) um den Motor extern mit Strom zu versorgen. Jetzt ist meine Frage, wofür genau ist der Widerstand eigentlich vorhanden und wie groß muss ich den wählen, im Datenblatt finde ich nur die winding resistance, dies müsste aber ja der Spulenwiderstand sein. Können Sie mir da vielleicht weiterhelfen?
    Mit freundlichen Grüßen,
    ElBarto

    Antworten
    • ELBARTO am 13. Oktober 2015 20:26

      Guten Tag, können Sie mir bei meiner Frage behilflich sein, weil es ärgert mich schon, dass ich bei meinem Projekt nicht weiter komme. da ich mir bei dem Widerstand nicht mehr sicher bin wie genau es jetzt muss bzw ob ich überhaupt einen Widerstand verbauen muss.
      Mit freundlichen Grüßen,
      ElBarto

      Antworten
    • Felix am 13. Oktober 2015 20:31

      Hallo,
      nunja die Größe des Widerstandes berechnet sich aus U = R*I (U die Spannung, R der Widerstand, I die Stromstärke) bzw. R = U / I
      Nun muss geschaut werden, wie viel Spannung der Motor von den angelegten 12V braucht (subtrahieren) und auch welche Stromstärke angegeben ist.

      Bsp: 5V Motor mit 200mA (=0.2A) Betriebsstrom bei 12V Eingangsspannung. Es müssen 7V „vernichtet“ werden.
      R = 7 / 0.2 = 35 (der nächst passende Widerstand wäre z.B. 33 Ohm)

      Antworten
  15. ElBarto am 13. Oktober 2015 21:25

    Danke für die Antwort, also habe ich es doch richtig, dass ich keinen Widerstand, wie dieser in der allgemeinen Zeichnung vorhanden ist, benötige, da mein Motor ja mit 12V läuft und mein Netzteil auch 12v liefert, oder habe ich da einen Denkfehler? Es muss ja keine Spannung „vernichtet“ werden.
    Mit freundlichen Grüßen,
    ElBarto

    Antworten
    • Felix am 13. Oktober 2015 23:45

      Falls das Netzteil auch genügend Stromstärke liefern kann, wie der Motor braucht.
      Vorsicht aber bei der Verbindung zum Pi. An die GPIOs darf nie mehr als 3.3V gelangen (falls du 5V statt 3.3V vom Pi VCC nimmst, solltest du einen kleinen Widerstand vor die GPIOs schalten).

      Antworten
  16. ELBARTO am 14. Oktober 2015 5:39

    Danke für die Antworten. Wo muss ich denn die Widerstände wegen den gpio einbauen, diese sind in der Zeichnung vom Schaltplan oben ja auch nicht vorhanden, obwohl 5V vom Raspberry bezogen. Oder sind die Widerstände nicht notwendig, da der Treiber genügend Spannung aufnimmt?
    Mit freundlichen Grüßen,
    ElBarto

    Antworten
    • Felix am 14. Oktober 2015 12:54

      Im angegebenen Beispiel ist kein Widerstand vor den GPIOs nötig. Sie sind hier der Impuls-Sender für den IC (GPIO.OUT), anders sähe es aus, falls einer als INPUT deklariert werden würde und quasi als GND funktioniert – was aber hier nicht der Fall ist.

      Antworten
  17. Alex am 13. November 2015 13:26

    Hallo Leute, ich hab folgendes Problem:
    ich habe den Script wie in der Anleitung auf meinem Raspberry Pi übernommen.
    Wenn ich den Script nun über den Befehl $python schrittmotor.py ausführen will bekomme ich jedoch nur die Meldung:
    File „schrittmotor.py“, line 31
    GPIO.output(coil_A_1_pin, w1)
    ^
    IndentationError: expected an indented block
    Kann mir villeicht jemand weiterhelfen?
    mfG,
    Alex

    Antworten
    • Felix am 13. November 2015 13:42

      Hey Alex,
      versuch es jetzt nochmal. WordPress entfernt andauernd die Tabs aus dem Code, daher die Fehlermeldung. Nun sollte es aber klappen.
      LG Felix

      Antworten
  18. Dominic am 8. Februar 2016 18:21

    Hallo, ich möchte den Schrittmotor aus einem CD-Laufwerk, welcher den Laser bewegt, betreiben, zu dem ich keine Daten habe. Ich habe den/das Raspberry Pi 2 Mod B und L293d. Im Datenblatt finde ich aber nichts über den benötigten Vorwiderstand für Pin 8 :/ . Auch weiß ich nicht, wie hoch die Spannung der externen Stromversorgung sein muss. Ich würde auf 5 V tippen. Ich bin Anfänger und würde mich über Hilfe freuen.

    MfG Dominic

    Antworten
    • Felix am 8. Februar 2016 18:23

      Hallo Dominic,
      ohne Datenblatt ist es vor allem schwierig die richtigen Schritte anzugeben. Auf 5V würde ich bei einem CD Laufwerk auch tippen, aber du solltest dennoch mal schauen, ob du nicht die Bezeichnung des Schrittmotors findest (steht oftmals darauf). Darüber kannst du dann nach dem Datenblatt suchen.

      Antworten
  19. Dominic am 8. Februar 2016 19:23

    Auf dem Motor steht nichts drauf. Weder Etikett noch Prägung. Ich kann max. sagen das der Motor aus einem AOpen CRW5232/AAO PRO Laufwerk ist. Aber auch darüber finde ich nichts über den Motor. Alternative habe ich noch einen Schrittmotor aus einem Drucker. qh4-4473 smb40-4870-a… aber auch zu dem finde ich keine Daten.. lediglich 27V 6.4 Ohm

    MfG Dominic

    Antworten
    • Felix am 8. Februar 2016 23:24

      Darf ich fragen, wofür du ihn verwenden willst? Bzw. was spricht dagegen einen „üblichen“ Motor zu nehmen (abgesehen von der Bastel-Faszination)? Da weißt du zumindest was du hast und es gibt sie bereits für wenige Euro.

      Antworten
  20. Dominic am 9. Februar 2016 6:45

    Hey. Klar darfst du. Mein Vorhaben wäre in diesem Video zu sehen.

    https://www.youtube.com/watch?v=UqOYlB8f48k

    Das möchte ich gerne „in etwa“ nachbauen. Mir geht es dabei hauptsächlich um das lernen im Umgang mit dem Raspberry und zum Beispiel der Programmierung mit Python und Ähnlichem. Ich versuche immer alles aus dem zu machen was ich da habe und nicht immer sofort zu kaufen.

    Antworten
    • Felix am 9. Februar 2016 13:24

      Was du noch machen könntest (wobei ich nicht garantieren kann, dass es damit funktionieren wird): Schau mal nach Datenblättern von anderen Schrittmotoren in CD Laufwerken. Meist sind sie relativ ähnlich und wenn du Glück hast kannst du sogar die Schrittreihenfolge benutzen. Wenn er stottert musst du eine andere versuchen – deshalb einfach ausprobieren 🙂

      Antworten
  21. Dominic am 9. Februar 2016 16:03

    Also die meisten haben 5V. Wenn ich eine Spule bestrome zieht sie knapp 500ma. Steps komme ich mit Hand gefühlt auf 10.. Wie würde jetzt ein sehr einfaches Script aussehen um ihn zu testen ?

    MfG Dominic

    Antworten
    • Felix am 9. Februar 2016 16:06

      Im Grunde kannst du das Skript von oben verwenden und umschreiben. Die Steps müsstest du halt anpassen (ebenfalls StepCount).
      Ich glaube nicht, dass du die Anzahl so einfach per Hand rausfinden kannst. Bei dem hier verlinkten sind es z.B. 512 Steps mit jeweils 8 Sequenzen. D.h. 4096 „Schritte“ führen zu einer Umdrehung und ein CD Laufwerk wird auch recht viele Schritte haben, um möglichst genau arbeiten zu können. Aber ich lasse mich auch gerne eines besseren belehren 🙂

      Antworten
  22. Dominic am 9. Februar 2016 16:39

    Kannst du mir vllt bei dem Skript helfen? Bin wie gesagt Anfänger und verstehe nicht alles wie z.B die Kommentare in den grünen Klammern oder das mit dem enable pin.. mein Motor hat 4 Anschlüsse,.. bei den Sequenzen siehts ähnlich aus :/

    Antworten
    • Felix am 9. Februar 2016 17:02

      Das sind keine Kommentare, sondern Outputs. Allerdings kannst du die erstmal ingorieren, da sie nichts bzgl der Funktionalität ändern.
      Schau dir am besten mal die Sequenzen auf dem Datenblatt von meinem verwendeten Motor an, dann sollte es wahrscheinlich verständlicher werden. Den Enable Pin kannst du auch ignorieren, wenn dein Motor nur 4 Anschlüsse hat. Ohne vorliegendes Datenblatt kann ich dir leider nicht sagen, wie die richtige Sequenz Folge lautet. Du müsstest hier einfach mal testen (z.B. mit der von mir verwendeten – wenn du Glück hast sind sie gleich). Ansonsten andere Sequenzen ausprobieren.

      Antworten
  23. Dominic am 9. Februar 2016 17:51

    Ich habe mir die Sequenzen angesehen und folgendes ist mir aufgefallen.

    http://www.imgbox.de/users/public/images/2bAIPU8mb8.png

    Nur verstehe ich den Sinn /die Logik nicht :/

    Desweiteren ist mir aufgefallen das du die GPIOs beim Namen nennst und nicht die Pin Nr verwendest. Ich habe beim Pi 2 B mehr Pins und demnach ein anderes Pinout.

    http://pi4j.com/images/j8header-2b-large.png

    So wie ich das sehe kann ich das nicht so übernehmen.

    Antworten
    • Felix am 9. Februar 2016 17:57

      Was verstehst du daran genau nicht? Die Reihenfolge der Farbbelegungen ist zwar anders, aber die Logik gleich.
      Das Pinout des Pi 2B ist gleich mit den vorherigen Modellen, bis auf dass es mehr Pins besitzt. Die Belegungen der ersten 26 Pins (die hier benutzt werden) sind gleich. Weiterhin gibt es die GPIO Nummern (GPIO.BCM) und die Pin Nummern 1-26 bzw. 40 (GPIO.BOARD).

      Antworten
  24. Dominic am 9. Februar 2016 18:16

    Ich versteh grad garnichts mehr. was hat es dann mit der pinbelegung in der zeichnung oben auf sich ?

    http://www.imgbox.de/show/img/Ay0CWikGOW.png

    Antworten
    • Felix am 9. Februar 2016 18:18

      Was du da hast ist jedenfalls nicht die offizielle Pinbelegung. Wie in deinem Bild unten steht ist die Belegung für WiringPi / Pi4J.
      Die richtigen Pins sind oben gezeigt und können auch hier nachgeschaut werden: http://de.pinout.xyz/

      Antworten
  25. Dominic am 9. Februar 2016 18:52

    Ich habs jetzt so übernommen wie bei dir.

    Aber bekomme nur fehlermeldungen.

    pi@raspberrypi:~/Desktop $ sudo python Schrittmotor2.py
    Traceback (most recent call last):
    File „Schrittmotor2.py“, line 23, in
    GPIO.setup(enable_pin, GPIO.OUT)
    NameError: name ‚enable_pin‘ is not defined

    Antworten
    • Felix am 9. Februar 2016 18:54

      Entweder du gibst der Variable enable_pin einen Wert oder löschst die Zeile. Die Fehlermeldung ist doch aufschlussreich 🙂

      Antworten
  26. Dominic am 9. Februar 2016 19:16

    GPIO.setup(enable_pin, GPIO.OUT)

    GPIO.output(enable_pin, 1)

    beide zeilen gelöscht. jetzt sagt er :

    pi@raspberrypi:~/Desktop $ sudo python Schrittmotor2.py
    Zeitverzoegerung (ms)?

    Antworten
    • Felix am 9. Februar 2016 19:18

      Dann klappt doch alles? Du musst es natürlich auch beantworten.
      Schau dir bitte das Skript nochmal genau an.
      LG Felix

      Antworten
  27. Dominic am 9. Februar 2016 19:38

    hab ich angesehen. aber ich hab das pi erst 6-7 tage. und keine programmiererfahrung.

    ich weiß nicht was zu tun ist… :'(

    ich habs bisher geschafft ne led zum blinken zu bringen und das prog so umzuschreiben das es sos blinkt, oder nen einfaches fenster mit button und ausgabe in die konsole..das wars auch schon

    Antworten
    • Felix am 9. Februar 2016 20:13

      Ich würde dir raten dich erst ein bisschen mehr mit der Programmierung generell zu beschäftigen (falls du Bücher magst, schau mal hier). Zwar sind ambitionierte Projekte sehr gut, aber ohne Grundwissen ist es natürlich schwerer.

      Antworten
  28. Dominic am 9. Februar 2016 20:46

    ich beschäftige mich doch gerade damit.

    ich würde es besser lernen und verstehen wenn du mir sagen würdest was er jetzt von mir will. dann mache ich das und weiß es beim nächsten mal.

    wenn es erst mal läuft kann ich am skript basteln/ verändern und dadurch lernen was passiert wenn ich etwas mache.

    ich brauche aber jetzt erst die hilfe um es erst mal in gang zu setzen

    Antworten
    • Felix am 9. Februar 2016 21:43

      Was meinst du? Ich habe doch bereits geschrieben, dass du den Wert eingeben musst?

      Antworten
  29. Dominic am 10. Februar 2016 6:38

    ja, naja.. du sprachst von antworten :D. ich hoffe du bist nachsichtig mit mir.
    Nimms mir bitte nicht übel.

    if __name__ == '__main__':
    	while True:
    		delay = raw_input("Zeitverzoegerung (ms)?")
    		steps = raw_input("Wie viele Schritte vorwaerts? ")
    		forward(int(delay) / 1000.0, int(steps))
    		steps = raw_input("Wie viele Schritte rueckwaerts? ")
    		backwards(int(delay) / 1000.0, int(steps))

    ka, so vielleicht??

    if __name__ == '__main__':
    	while True:
    		delay = raw_input(1)
    		steps = raw_input(5)
    		forward(int(delay) / 1000.0, int(steps))
    		steps = raw_input(5)
    		backwards(int(delay) / 1000.0, int(steps))

    inwiefern zeitverzögerung ?

    Antworten
    • Felix am 10. Februar 2016 13:06

      Ich meinte damit, dass du dir einfach mal anschauen solltest, was die Funktionen tun: raw_input erwartet (wie der Name sagt) einen Input vom User. Du musst also etwas eingeben. Wenn du das nicht willst, schreib einfach den Variablenwert.

      delay = 300
      steps = 100
      Antworten
  30. Dominic am 10. Februar 2016 17:36
    if __name__ == '__main__':
    	while True:
    		delay = 300
    		steps = 100
    		forward(int(delay) / 1000.0, int(steps))
    		steps = 100
    		backwards(int(delay) / 1000.0, int(steps))

    so hab ich es jetzt. jetzt macht es klack klack klack und der motor zuppelt ein bisschen hin und her.
    klingt nicht gesund. habe den pi neugestartet weil ich nicht weiß wie ich das skript stoppen kann :/
    ich versorge das breadboard mit einem labornetzteil und 5v. ohne widerstand.

    im datenblatt finde ich nichts zum widerstand zu vcc2

    Antworten
    • Felix am 10. Februar 2016 17:41

      STRG+C zum Skript stoppen.
      Das klackern kommt daher, dass die Schritt-Sequenzen nicht stimmen. Leider kann ich dir ohne Datenblatt da auch nicht mehr sagen 🙁

      Antworten
  31. Dominic am 10. Februar 2016 17:47

    ich werde da weiter suchen,.. kannst du mir noch nen tipp wegen dem vorwiderstand geben?

    ich versorge das breadboard mit einem labornetzteil und 5v. ohne widerstand.

    im datenblatt finde ich nichts zum widerstand zu vcc2

    Antworten
    • Felix am 10. Februar 2016 17:49

      Einige Motoren haben einen eingebauten Vorwiderstand (für 5V), ansonsten versuch einen kleinen (5-10Ohm).
      Widerstände berechnen und kombinieren

      Antworten
  32. Dominic am 10. Februar 2016 18:29

    – Sehr gebräuchlich sind 1,8° pro schritt, bzw. 200 Schritt pro Umdrehung! Kleine Schrittmotoren, z. B. aus CD oder Floppy Laufwerken können aber auch nur 12 Schritte pro Umdrehung anbieten!

    – Auf diesem Bild der Schrittmotor aus einem alten CD-Laufwerk aus einem alten PC vom Wertstoffhof.16 mm Durchmesser und 13 mm lang! auch dieser Schrittmotor ist hervorragend zu steuern, hat nur 12 schritte für eine volle Umdrehung

    – Die bipolaren Stepper machen 18° pro Vollschritt

    – Motortyp: 2- Phase 4- draht;
    Fahrt Spannung: dc4-6v
    Schraubenlänge: 52mm
    Effektive Schlaganfall: 40mm
    Durchmesser der motor: 15mm
    Durchmesser der schraube: 3mm
    Spindelsteigung: 3mm
    Schrittwinkel: 18 Grad
    Menge: 2 stück

    das habe ich finden können auf verschiedenen seiten.. hilft dir /uns das weiter?

    Antworten
    • Felix am 10. Februar 2016 18:35

      Naja, du kennst die Sequenzen nicht und ohne diese wird er klappern. Die Schritt Anzahl ist erstmal zweitrangig, da ein Schritt aus z.B. 8 Sequenzen besteht (siehe Tutorial). Dabei werden die Schritte wiederholt, wobei z.B. 512 Schritte (mit je 8 Sequenzen) eine volle Umdrehung ergeben. Das kann im Falle von anderen Schrittmotoren variieren, was aber insofern nicht wichtig ist, da die Schritte sich ja nur wiederholen. Kennst du die Sequenzen (Polung der Magnete), so kannst du die Anzahl der Schritte zählen.
      Deshalb meine ich ist es schwierig den Motor anzusteuern, ohne die entsprechenden Sequenzen zu kennen.

      Antworten
  33. Dominic am 10. Februar 2016 18:49

    ich habe noch jemanden gefragt und einen teil seines skriptes kopiert.

    zitat:
    Das hängt aber nicht vom Motortyp ab, sondern mehr von der Verkabelung. Die Schrittmotoren in CD-Laufwerken sind wohl alle gleich, also mit der vorgegebenen Sequenz anzusteuern.
    Datenblätter zu meinen Motoren habe ich nie gesucht und wie bereits geschrieben kann man die Schritte abzählen wenn der Motor angeschlossen ist und läuft.

    skript kopie:
    http://pastebin.com/Zptnr2Mu

    er benutzt auch sollche motoren

    Antworten
    • Felix am 10. Februar 2016 18:52

      Dann kannst du die Sequenzen ja verwenden (entweder das Skript oder du passt die Seuqnzen in meinen Skript oben an).
      LG Felix

      Antworten
  34. Dominic am 10. Februar 2016 18:57

    ohje,… kann ich doch garnicht :'(

    so vllt ?

    # anpassen, falls andere Sequenz
    StepCount = 4
    Seq = range(0, StepCount)
    Seq[0] = [1,0,0,0]
    Seq[1] = [0,0,0,1]
    Seq[2] = [0,1,0,0]
    Seq[3] = [0,0,1,0]

    Antworten
    • Felix am 10. Februar 2016 19:02

      Ich denke eher:

      Seq[0] = [1,0,0,0]
      Seq[1] = [0,0,1,0]
      Seq[2] = [0,1,0,0]
      Seq[3] = [0,0,0,1]

      Wie gesagt, du musst es ausprobieren. Das ist auch keine 100%ige Aussage, da die Farben nicht angegeben sind. Da es aber nur 4 Sequenzen sind hast du nur ein paar Möglichkeiten und solltest einfach mal ausprobieren.

      Antworten
  35. Dominic am 10. Februar 2016 19:32

    Juhu,. it works *thumbsup

    1000 1 100 10 +
    1000 10 100 1 + funktionieren

    1000 100 10 1 –
    1000 100 1 10 – funktionieren nicht

    so läuts ganz gut.

    if __name__ == '__main__':
    	while True:
    		delay = 10
    		steps = 60
    		forward(int(delay) / 1000.0, int(steps))
    		steps = 60
    		backwards(int(delay) / 1000.0, int(steps))

    recht herzlichen Dank !!

    Antworten
    • Felix am 10. Februar 2016 19:33

      Super 🙂 Das war eine schwere Geburt 😀

      Antworten
  36. Dominic am 10. Februar 2016 20:02

    ja. das kann man wohl sagen.
    und jetzt konnte ich mein bereits angeeignetes wissen auch einsetzen.

    habe das skript jetzt umgebastelt zum experimentieren.

    ich habe ja nicht nur den einzelnen laufwerks/laser antriebs motor, sondern komplett mit schlitten. zum testen habe ich es jetzt so gemacht das :

    -schlitten fährt 20 schritte vor, pausiert kurz, fährt 20 vor, pausiert kurz, 20 vor
    -pausiert etwas länger, fährt 60 schritte zurück

    -„while true“ habe ich ersetzt durch for x in range(2)

    – und zum ende noch ein „GPIO.cleanup()

    *läuft
    *jui 😀

    Antworten
  37. Dominic am 12. Februar 2016 19:31

    ich würde jetzt gerne einen zweiten motor mit hinzufügen… teilweise kann ich das skript selber anpassen,…

    aber ein zwei sachen weiß ich leider nicht:

    – wo für steht eig das w1, w2, w3, w4 ?
    – was heißt “ for i in range “ und “ for j in range“ ? und warum i und j ?
    – und wie muss ich es schreiben wenn ich will das beide motoren gleichzeitig eine sache machen ?

    den teil den ich ändern könnte würde so aussehen:

    http://pastebin.com/yrJmrs9A

    den rest weiß ich nicht wirklich..

    danke im vorraus

    Antworten
    • Felix am 13. Februar 2016 0:44

      w1, w2, w3, w4 sind Funktionsvariablen von setStep, die die Zustände für die 4 Motor Pins angeben. Ich will dir nicht zu Nahe treten, aber du solltest wirklich zumindest die Programmier Basics dir anschauen, da der meiste Code selbsterklärend ist. Ich versuche dir dennoch zu helfen.
      Bzgl. der zweiten Frage: http://pythoncentral.io/pythons-range-function-explained/
      Zu 3: Du schreibst eine ähnliche Funktion, die die Pins des anderen Motors ansteuert.

      Antworten
  38. Dominic am 13. Februar 2016 1:08

    danke und kein problem. ich weiß das ich noch viel lernen muss…
    schaue auch schon ganz fleißig :

    aber zwischen durch ist man nicht mehr so aufnahmefähig, möchte aber dennoch weiter machen 🙂

    Antworten
    • Felix am 13. Februar 2016 1:12

      Versuch am besten dich nicht an einem Projekt zu verfangen. Ich denke vor allem als Anfänger ist es schwer, auch wenn ich verstehe, dass man nach ersten Erfolgen motiviert ist weiter zu machen 🙂
      Du könntest aber verschiedene kleine Projekte (wie es sie hier auf der Seite gibt) probieren. Die Python Dokumenation ist ziemlich gut und gibt Hilfe zu unklaren Befehlen. So eignest dir mehr Wissen an und kannst dann nach einiger Zeit ein größeres Projekt starten.
      LG Felix

      Antworten
  39. Dominic am 13. Februar 2016 2:05

    in deinem skript sprichst du iwie deinen motor nicht direkt an,. du sagst nur was und wie schnell und wie lange er was machen soll,.. wie mache ich das denn jetzt mit zweien ?

    du definierst was zu tun ist wenn du vorwärts oder rückwerts sagst und sagst dann wenn “dies“ dann abarbeiten in dauerschleife

    geht es vllt mit w5,w6,w7,w8 ?

    ich studiere dein skript hoch und runter, aber da komme ich nicht weiter :/

    Antworten
    • Felix am 13. Februar 2016 2:08

      Diese w1 usw sind wie gesagt nur Funktionsvariablen. Ich definiere erst die Pins für den Motor (Nr und Pin als Output) und in der Funktion weise ich den übergebenen Wert (w1, ..) den jeweiligen Pins zu. Du brauchst eine zweite Funktion, die die Pins deines zweiten Motors anspricht, die du natürlich auche rstmal zuweisen musst (äquivalent zum ersten Motor, nur andere Pin Nummern). Wie du die inneren Variablen dabei nennst ist vollkommen egal.

      Antworten
  40. Dominic am 13. Februar 2016 3:09

    kannst du mir ein beispiel schreiben ?

    ich tendiere gedanklich zu sowas oder so ähnlich :

    http://pastebin.com/jLQpeAki

    sprich x und y

    Antworten
  41. Dominic am 14. Februar 2016 22:57

    also ich habs jetzt auf eigene faust probiert, aber entweder es bewegt sich immer nur einer oder es brummt,.. bekomme es nicht hin :/

    Antworten
    • Felix am 14. Februar 2016 22:58

      Dann poste deinen ganzen Code mal auf http://pastebin.com/ und verlinke ihn hier.

      Antworten
  42. Dominic am 14. Februar 2016 23:42

    ich habs jetzt hintereinander, dann gehts,.. aber nicht zeitgleich oder oder eben erst motor 1 dann 2 dann1….

    http://pastebin.com/0QD3Jd4r

    Antworten
    • Felix am 14. Februar 2016 23:49

      Dein Skript macht an einigen Stellen keinen Sinn bzw. ist falsch. Ich habe es mal geändert: http://pastebin.com/cPED3NyZ
      Evtl. stimmen die Einrückungen (Leerzeichen/Tabs) nicht überein, das müsstest du überprüfen (sonst IndentError). Ansonsten natürlich anpassen.

      Antworten
  43. Dominic am 15. Februar 2016 0:18

    danke, so funktioniert, bzw jetzt versteh ich es

    nur merkwürdiger weise fährt jetzt ein motor ( X) nur gequält zurück,.. vorher gings mit delay 2 bis 3,.. jetzt muss mind. 10 sein. und die lampe am labornetzteil geht auf rot,.. heißt für mich das er jetzt mehr strom zieht/braucht,.. wie kann das sein.

    info : ich habe die zweite h-brücke (auch l239d) an einem anderen gnd am pi und vcc1 am zweiten 5v anschluss am pi

    das mit setstep X und setstepY hatte ich auch schon versucht, aber meine reihenfolge war wohl komplett verkehrt

    Antworten
  44. Dominic am 16. Februar 2016 13:12

    weiter beschäftigt es mich, wie ich es hinbekomme/ schreiben muss damit zwei sachen gleichzeitig passieren,.. hab viel versucht aber nicht hinbekommen :/

    Antworten
  45. Dominic am 18. Februar 2016 13:13

    So, bisher habe ich noch allein hinbekommen:

    – servo funktionsfähig ins script aufgenommen
    – testweise sequenzen funktionsfähig auf 8 erweitert

    aber ich kriege x und y nicht zeitgleich ans laufen,.. kann nur treppen zeichnen und keine diagonalen oder kreise :'(

    i need help

    Antworten
    • Felix am 19. Februar 2016 0:29

      Du kannst es z.B. mit Threads versuchen. Vollkommen gleichzeitig ist aber auch nicht möglich, da jeder Computer etwas nacheinander abarbeitet. Du könntest jedoch z.B. immer nur einen Schritt mit x, dann einen mit y, dann wieder x usw. machen. Dadurch hättest du einen ähnlichen Effekt.

      Antworten
  46. Dominic am 19. Februar 2016 1:23

    ja, hab ich gemacht mit nur einem step,.. kam halt eine mini treppe raus,..

    hab schon gelesen über threads und multithreading,.. aber immer nur iwelche rechen aufgaben, da ist es dann schwer für mich das in mein projekt „rein zu verstehen“ :/

    das mit dem abarbeiten ist doch eine kernel sache oder nicht ?

    kannst du mir da helfen ?

    Antworten
    • Felix am 19. Februar 2016 2:47

      Wenn dein Motor keine großwinkligen Schritte hat, sollte das kaum auffallen. Ich denke, es wird keine einfache Lösung für das Problem geben, da die GPIOs nicht wirklich parallel angesprochen werden können. Ich will nicht sagen, dass es nicht möglich ist, aber gerade als Anfängerprojekt sehr kompliziert.

      Antworten
  47. Dominic am 23. Februar 2016 21:43

    ja, habs hinbekommen,.. mit threads,.. jetzt gehen diagonalen,… was hat es eig mit den „1000.0, int(steps)“ auf sich? wenn ich die zahl zb auf 500 setze läufts langsamer,.. wie könnte ich zb halbschritte realisieren und was mir aufgefallen ist,.. ich benutze ja für meine z achse einen analog servo mit deinem p.changedutycycle,.. warum klappts bei digitalen nicht genauso ? die machen fast garnichts ?!

    mfg dom

    Antworten
  48. Kai am 27. Februar 2016 15:27

    Nettes, gutes Tuttorial mit viel Hintergrundinformationen, allerdings hab ich dazu ein paar kleine Anmerkungen.

    – ich verwende das fertige ULN2003 Modul, da sind die Anschlüsse ein wenig Vertauscht. Richtet man sich nach den Kabelfarben des Motors, kriegt man das aber hin.

    – Im script wird der enable_pin nicht definiert. (Programmabbruch) – Da ich den mit dem ULN-Modul eh nicht brauche kann man die 2 Zeilen auch einfach auskommentieren.

    – Nach beendigung einer Vor oder Rückwärtsfahrt bleiben immer 1 oder 2 Spulen des Motors unter Spannung, sodas sich der Motor erhitzt, auch wenn er gerade nichts zu tun hat.
    Deshalb habe ich im __main__ Programmteil nach den Fahrten einen weiteren setStep Befehl eingefügt wo ich allen Gpios den Wert 0 zuweise.

    mfg Kai

    Antworten
    • Felix am 27. Februar 2016 15:59

      Hallo Kai,
      wegen dem ULN2003 Modul habe ich die Farben der Kabel dazu geschrieben, denke das sollte nicht all zu kompliziert sein.
      Den Enable Pin braucht man bei dem Motor hier nicht, allerdings brauchen manche diesen, daher habe ich ihn mit rein geschrieben (da man ja auch andere Motoren verwenden kann).
      Bzgl. deines dritten Punktes muss ich widersprechen: Wenn du alle GPIOs auf 0 setzt liegt zwar keine Spannung an, aber es ist (bei manchen Motoren) ein zusätzlicher Schritt. Wenn der Motor sich nach dem letzten Schritt nicht bewegen und einsatzbereit bleiben soll, sollte die Spannung der GPIOs nicht verändert werden.
      LG Felix

      Antworten
  49. Kai am 27. Februar 2016 22:53

    Hi Felix,
    nun über Punkt eins und zwei brauchen wir nicht wirklich reden.., das Tut ist schon klasse aber.bei den Farben kam es mir im text nicht wirklich rüber (das modul ist ja nicht über fritzing dargestellt) und bei zwei…, jeder der schon mal ein wenig programiert hat, erkennt das auf den ersten Blick und weiss was zu tun ist… beim dritten Punkt gehe ich hier auch vom 28BYJ-48 Motor aus, ich habe halt gesehen, das dieser nach der einer Fahrt und dann ca. 5 Minuten Ruhe doch schon recht warm, bzw. fast heiß wurde und das Labornetzteil gab auch dementsprechend einen höheren Stromverbrauch an. daher habe ich das nach den Fahrten durch die Stromlossetzung der Motorspulen eleminiert. (Hintergrund ist, das ich plane ne Steuerung über Solar/Akku aufzubauen wo der Motor so alle halbe Stunde für ca. ne Minute etwas zu tun bekommt, daher muss ich auf den Stromverbrauch achten) Bei anderen Motoren, oder wo die Position gehalten werden soll, klar da macht es Sinn auch den Motor unter Spannung zu halten.

    Ansonsten freue ich mich schon darauf hier weitere nette und sehr gute Tutorials von Euch hier lesen zu dürfen.

    Antworten
  50. Dominic am 29. Februar 2016 1:32

    @kai: Setz einfach ein GPIO.cleanup () drunter

    Antworten
  51. Frank am 3. März 2016 17:50

    Hallo Felix,

    ich nutze den 28BYJ-48 mit ULN2003 Driver Board. Betrieben wird das Ganze mit 5V.
    Das Programm läuft ohne Fehler.

    Egal welche Zeitverzögerung und/oder Schritte ich angebe, der Motor ruckelt. Wenn ich vorsichtig die Achse mit der Hand nachführe, ist eine Vorwärts- bzw. Rückwärtsbewegung zu bemerken. Ansonsten kommt der Motor nicht aus dem Quark.

    Hast Du eine Idee? Habe es schon mit mehreren Baugleichen Motoren und Platinen probiert.

    DANKE!!

    Antworten
    • Felix am 3. März 2016 18:02

      Bist du dir bei den Steps sicher, dass diese in der richtigen Reihenfolge sind? Das klingt nämlich sehr verdächtig danach (brummen, ruckeln). Ansonsten könnte es sein, dass zu wenig Stromstärke eingespeist wird, aber davon gehe ich nicht aus.

      Antworten
  52. Frank am 5. März 2016 17:38

    Hallo Felix,
    was wären den so die optimalen Einstellungen?

    Antworten
    • Felix am 5. März 2016 19:17

      Was meinst du mit Einstellungen? Dieses Brummen entsteh (aller Wahrscheinlichkeit nach) durch eine falsche Schrittreihenfolge. Das kann entweder an der Software liegen oder aber, dass du die Kabel nicht richtig angeschlossen hast. Auch wenn es unwahrscheinlich ist, können deine Farbem der Kabel von meinen abweichen – das müsstest du testen. Falls es ein andere Motor wäre, müsstest du außerdem noch die Schritte anpassen.

      Antworten
  53. Jonas am 8. März 2016 20:33

    Hallo Felix,
    Ich wollte dieses Tutorial nehmen um meinen eigenen Roboter zu bauen, aber leider bewegen sich die Motoren nicht… Hier ist der Script

    http://pastebin.com/pVbdBnjp

    Ich habe noch Ultraschallsensoren angeschlossen weshalb ich andere Pins benutzen musste.

    Ich kann bei meinen Anschl[ssen keinen Fehler finden…
    Kannst du mir irgendwie helfen?

    Antworten
    • Felix am 8. März 2016 21:19

      Hast du den selben Motor benutzt (mit Treiberboard)?

      Antworten
    • Jonas am 8. März 2016 21:36

      Ich benutze den L293D und den selben Motor

      Antworten
  54. Patsch am 7. April 2016 12:26

    Hallo,

    ich will Anfangen mich mit dem PI zu beschäftigen und habe mir als erstes Projekt einen „V-Plotter“ ausgesucht, ähnlich diesem Projekt hier: http://www.homofaciens.de/technics-machines-v-plotter_ge_navion.htm#commentFrame

    Jetzt bin ich gerade dabei die einzelnen Komponenten zusammen zu suchen die ich dafür benötigen werde und wollte dich sicherheitshalber bitten den Schrittmotor und den Treibercontroller kurz anzusehen ob ich diese auch verwenden kann bevor ich die bestelle, wäre super =)

    Ausgesucht habe ich:
    http://eckstein-shop.de/12V-28BYJ-48-Step-Motor-XH-5P-Stock und
    http://eckstein-shop.de/L298N-Schrittmotor-Stepper-Motor-Driver-Controller

    Insgesamt werden vier davon im Einsatz sein (mit externem Netzteil, vom PC schätze ich) und ein Servo. Daher werde ich auch die GPIOs erweitern wie von dir beschrieben, bekommst dann auf jeden Fall Rückmeldung zu dem Projekt =)

    Antworten
    • Felix am 7. April 2016 19:37

      Hi Patsch,
      den 28BYJ-48 Motor bekommt man oft für wenig Geld (<5€) inkl. dem ULN2003 Treiber. Da der Motor auch nur 5V braucht, ist ein L298 IC eigentlich nicht nötig. Ist zwar auch möglich, aber kostet mehr und hat keinen richtigen Mehrwert für diesen Motor. Hat es einen bestimmten Grund, warum du den L298 IC ausgesucht hast?
      LG Felix

      Antworten
  55. Mirco am 16. April 2016 16:23

    Hallo,
    ich habe vor kurzem damit angefangen mich mit dem Pi, der Schrittmotorsteuerung und der Programmierung zu beschäftigen – bin also noch blutiger Anfänger – habe mir aber ein richtiges Projekt vorgenommen. Ich habe hier viele hilfreiche Infos bekommen, es gibt aber dennoch viele Sachen die ich einfach nicht weis, und bitte somit um Unterstützung.

    Ich habe einen Pi und gehe direkt von den GPIO-Ports auf eine Schrittmotor-Steuerplatine: http://www.pollin.de/shop/dt/Mjc5OTgxOTk-/Bausaetze_Module/Bausaetze/Schrittmotorplatine_Bausatz.html
    und steuere folgenden Motor: http://www.pollin.de/shop/dt/NTQ1OTg2OTk-/Motoren/Schrittmotoren/Schrittmotor_PSM57BYGHM201_0_9_.html.
    Auf der Steuerplatine sind noch zwei Schalteranschlüsse die ich gerne mit benutzen will, in der Montageanleitung ist unter Anderem auch ein Stromlaufplan: http://www.pollin.de/shop/downloads/D810027B.PDF
    der anzeigt das die Spannung der Schalterausgänge 5V ist und dann auf nen Transistor geht, und von dort über nen Widerstand und den LPT-Port quasi direkt zum GPIO-Port gehen würde. Jetzt bin ich mir nicht sicher welche Spannung am GPIO ankommen würde (vermute auch 5V), kann es aber auch nicht Messen weil der Impuls zu kurz ist. Ich würde die Widerstände R10/12 sonst gegen andere austauschen, so das ich auf 3,3V bzw etwas weniger komme um den Port nicht zu grillen. Kann mir jemand sagen ob das not tut, und wenn ja, welchen Widerstände ich bräuchte?

    Gruß, Mirco

    Antworten
  56. Marcus am 16. Juli 2016 19:33

    Hallo Felix,
    ich bin noch recht neu in python und bin etwas verwundert, das das offenbar nur bei mir auftritt jedenfalls hab ich es noch in keinem anderen Kommentar gesehen. ich bekomme eine Fehlermeldung und zwar:
    pi@raspberrypi:~/p $ ./schrittmotor.py
    Traceback (most recent call last):
    File „./schrittmotor.py“, line 14, in
    Seq[0] = [0,1,0,0]
    TypeError: ‚range‘ object does not support item assignment
    Ich benutze python3 mit RPI3.
    Hat jemand eine Idee?
    In meinem Python Kurs wurde es im Zusammenhang mit strings angesprochen. Dort heißt es:
    „Wie in Java aber nicht wie in C/C++ können strings in Python nicht verändert werden. Versucht man eine indizierte Position zu ändern bekommt man die Fehlermeldung
    TypeError: ’str‘ object does not support item assignment.“
    Also wieso geht es bei euch?^^
    Grüße Marcus

    Antworten
    • Felix am 16. Juli 2016 20:04

      Python3 erstellt aus range nicht automatisch eine Liste, anders als Python2 (Standard). Damit kannst du es aber einfach lösen (Zeile 13):

      Seq = list(range(0, StepCount))
      Antworten
    • Marcus am 17. Juli 2016 23:23

      Danke, da wär ich so nicht drauf gekommen, da ich direkt mit Python 3 angefangen habe. Hast es oben auch schon ergänzt, Top Mann 😉 – Motor läuft. Das Delay kann ich bis auf 0,8µs drücken (ohne Last)

      Antworten
  57. CreeperNicol am 14. August 2016 11:04

    Hallo Felix! Ich habe dein Skript komplett übernommen. Als Motor habe ich den ULN2003 IC mit dem Motortreiber. Ich weiss aber nicht so recht, wie ich ihn am Raspi anschließen soll…

    Antworten
    • Felix am 14. August 2016 12:31

      Wo hängt es denn genau? Im schematischen Aufbau sind die Anchlüsse doch definiert und auch das Datenblatt des ICs sollte helfen.

      Antworten
    • CreeperNicol am 16. August 2016 16:05

      Ich verwende aber nicht so ein großes Board sonder den Treiber der bei dem moter dazugeliefert wird… Ich weiss nicht wie ich den treiber mit dem Raspberry Pi verbinde

      Antworten
      • Felix am 17. August 2016 12:37

        Die Farbe der Kabel ist auch auf den Boards fast immer gleich. Daran kannst du es ablesen.

  58. Gunter am 15. August 2016 19:24

    Hallo, ich habe neben den tollen Tutorials auch die Kommentare durchgelesen. Hier fragte Steffen im September 2015 nach einer Möglichkeit mehrere (16-18) Schrittmotore in einer Art Bussystem anzusteuern. Das geht doch beim L293D über die Enable-Eingänge. Diese müssten über zwei BCD-Dezimal Dekoder (HEF4028B) aktiviert bzw. gesperrt werden. Allerdings müssten eventuell auch noch zwischen die Steuersignale (GPIOs) und die 16-18 L293D Treiber Stufen eingesetzt werden. Ich weiß nicht wie hochohmig die L293D Eingänge sind und ob ein GPIO PIN wirklich 18 Eingänge treiben kann.
    Wegen dieser Anfrage habe ich mir nochmal genauer Dein Fritzing Diagramm angesehen und festgestellt, dass die Enable Eingänge zwar miteinander verbunden sind aber ansonsten in der Luft hängen. Müssten die nicht auf High liegen?

    Antworten
    • Felix am 15. August 2016 21:57

      Hallo Gunter,
      Im Grunde genommen (laut Datenblatt) ja, allerdings funktioniert der L239D auch ohne die Enable Pins. Jedenfalls nutze ich einen L293D in meinem aktuellen Roboter Projekt und habe diese Pins nicht angeschlossen.

      Antworten
  59. LarsMq am 10. Januar 2017 13:19

    Hallo Felix!

    Ich bin immer noch begeistert von deiner Seite.
    Eine Frage zu dem L293D:
    Kann man damit auch einen Trafo „simulieren“?

    Hintergrund ist meine alte 12V-Legoeisenbahn. Die hat einen 12V-Trafo, in dem man mit einem Drehknopf die Fahrtrichtung und die Geschwindigkeit variabel verstellen kann. (Gleichstrom-Trafo mit Brückengleichrichtern etc. – gerade erst einen defekten ausgetauscht;) )

    Kann ich jetzt die o.g. Schaltung mit einer externen 12V-Stromquelle (ggf. erstmal den 12V-Gleichstrom-Ausgang des Lego-Trafos) nehmen und als Verbraucher dann nicht den Motor, sondern die Gleisanlage anschließen? Wie müssen dann die Sequenzen eingestellt werden? Oder macht das damit keinen Sinn, und ich brauche etwas ganz anderes? Es fahren auf den Gleisen ja mehrere Züge/Motoren.

    Im Hinterkopf habe ich, dass ich die Anlage dann über eine kleine Webseite „steuern“ kann – also angefangen mit vorwärts-/rückwärts-fahren um dann die Schaltung der elektrischen Weichen, der Schranke, den „Abstellgleisen“ etc. darüber zu ermöglichen. Später dann… 😉 … eine Digitalisierung mit Dekodern habe ich erstmal nicht vor.

    Antworten
    • LarsMq am 10. Januar 2017 13:21

      Grußwort vergessen:)

      Vielen Dank für ein paar Infos und viele Grüße!
      Lars

      P.S.: Das Roboter-Projekt finde ich übrigens auch TOP! 🙂

      Antworten
      • Felix am 10. Januar 2017 18:07

        Danke 🙂

    • Felix am 10. Januar 2017 18:07

      Die Geschwindigkeit wird über die Spannung geregelt? Falls ja, denke ich nicht, dass es mit dem L293D klappt 🙁 Muss aber auch gestehen, dass ich noch keinen Trafo mit dem Pi benutzt habe und mich daher auch gerne eines besseren belehren lasse 😀

      Antworten
    • LarsMq am 11. Januar 2017 13:17

      Hallo Felix,

      ja, der Trafo reguliert die Spannung zwischen 0-12V, so dass die Motoren auf den Gleisen dann entsprechend garnicht/langsamer/schneller fahren, und in die eine Richtung gedreht gibt er halt +/- und in die andere Richtung -/+ – Polung aus… (= vorwärts/rückwärts fahren).

      Hm – wie kann man denn einen „Trafo“ über einen Raspberry Pi steuern? Hast du / hat jemand eine Idee dazu?
      Eine „mechanische“ Idee: Einen Schrittmotor (wie hier beschrieben über Raspberry PI gesteuert) nehmen, der dann per „Lego-Technik-Zahnräder“ den Trafo-Regler entsprechend vor/zurückdreht … Sieht bestimmt lustig aus:)

      Danke und Gruß
      Lars

      Antworten
      • Felix am 11. Januar 2017 21:11

        Du suchst also quasi einen Potentiometer, den du per Befehl steuern kannst?

    • LarsMq am 12. Januar 2017 13:36

      Ja, genau sowas wäre das wohl (ich bin ja Elektroniklaie…) – aber ja, klar. Per Programm steuerbarer Potentiometer der 0-12V ausgeben kann (evtl. mit Polwender oder eine Polwendeschaltung dann halt davor „bauen“…)
      Also ein „digitaler Potentiometer“ – gibt es sowas?
      Danke und Gruß
      Lars

      Antworten
      • Felix am 12. Januar 2017 13:44

        Da hast du etwas falsch verstanden: Ein Potentiometer ist ein regelnbarer Widerstand 🙂 Und ja, die gibt es.

    • LarsMq am 12. Januar 2017 13:43

      Also, sowas z.B.:
      http://www.mouser.de/ProductDetail/Intersil/ISL95311WIU10Z/?qs=sGAEpiMZZMsX%252bY3VKDPZyEk97ZwKT6JOKufKn4bykgw%3d
      Nur habe ich persönlich nun keinen Plan von den da angegebenen Daten. Heißt das jetzt, ich könnte mit dem 0-12V „Ausgangsleistung“ erzeugen und das mit den 3.3V / 5V vom Raspberry pi steuern?!?

      Das war jetzt mal eine schnelle google-suche…
      Danke und Gruß
      LarsMq

      Antworten
    • LarsMq am 13. Januar 2017 8:56

      Achso, ja.
      Also eine externe 12V-Stromquelle, die durch den regelbaren Widerstand zum Verbraucher geht, und dieser Widerstand wird über den Raspberry Pi entsprechend verändert. (? richtig zusammengefasst?)
      Na dann werde ich das mal (nachdem ich noch ein paar Grundlagenprojekte durchgeführt habe) ausprobieren und kann meinem Sohn sagen: Ja, das geht;)
      Vielen Dank!
      LarsMq

      Antworten
      • Felix am 13. Januar 2017 12:29

        Ja, so ungefähr 🙂

  60. Andreas_ am 10. Januar 2017 21:19

    Servus

    Ich habe das ganze mit dem ULN 2003 board versucht, jedoch dreht sich der Motor nicht selbstständig… 🙁
    Wenn ich nachhelfe dreht er sich, ansonsten vibriert er nur.

    Kommt mir vor als würde er den Takt nicht finden…

    Beschaltung ist genauso wie in deinem Schaltplan.
    Ich habe es mit 2 verschieden Motoren versucht, bei beiden wars gleich.

    Wisst ihr vielleicht was das Problem sein könnte?

    MfG. Andreas

    Antworten
    • Felix am 11. Januar 2017 0:31

      Dieses vibrieren klingt eher, nach zu wenig Strom. Wie viel mA braucht der Motor und woher bezieht er den Strom?

      Antworten
    • Andreas_ am 13. Januar 2017 16:06

      Habe es zuerst mit meinem Raspberry betrieben…
      Nachdem ich das ULN2003 board an mein Netzgerät angeschlossen habe, hats funktioniert.

      Danke 😉

      Antworten
  61. Daniel am 2. März 2017 14:58

    Servus ich habe eine Frage

    Ich möchte das der schrittmotor bei einer Bestimmten temperatur z.b. 110 Grad nach Links läuft und bei z.b. 98 Grad nach Rechts läuft.

    Hier wäre mein Skript: http://pastebin.com/970URF2V

    MFG Daniel

    Antworten
  62. Tobias am 5. März 2017 22:05

    Hallo Felix,

    deine Tutorials sind echt klasse.
    Ich komme aber leider irgendwie nicht weiter.

    Ich habe den 28BYJ-48 mit ULN2003AN Board (dein Link) und bekomme ihn einfach nicht zum laufen.
    Ich habe den Motor am Treiberboard angeschlossen.
    IN1 geht auf GPIO 23
    IN2 geht auf GPIO 4
    IN3 geht auf GPIO 24 und
    IN4 geht auf GPIO 17
    Die LEDs auf dem Treiberboard leuchten in folgender Reihenfolge:
    D
    DC
    C
    CB
    B
    BA
    A
    AD

    Ich fühle, dass sich im Motor nach jedem delay was bewegt aber er läuft nicht.
    Habe gefühlt 1000 Farbkombinationen und Sequenzen ausprobiert jedoch ohne Erfolg.
    Ich hoffe du kannst mir helfen.

    mfg Tobias

    Antworten
  63. Louis am 8. März 2017 15:02

    Hallo Felix,

    ist es möglich die Schrittmotoren von einem CNC Plotter wie du beschrieben hast zu verkabeln und diese dann mit LinuxCNC auf dem RasPi anzusteuern?

    Mfg
    Louis

    Antworten
    • Louis am 8. März 2017 15:03

      Also mit dem L293D IC als Steuerung

      Antworten
    • Felix am 8. März 2017 16:50

      Mit LinuxCNC habe ich noch nicht gearbeitet, aber mit dem L293D kannst du jeden Schrittmotor, auch aus einem CNC Plotter, ansteuern.

      Antworten
  64. Thomas am 22. März 2017 16:06

    Hallo,

    vielen Dank für die Anleitung.

    Ist es möglich, dem Motor eine Startposition zu geben? Also so, dass er beim Start erstmal wieder in die Ausgangsstellung zurück fährt?

    Antworten
    • Felix am 23. März 2017 0:18

      Nein leider nicht. Der Schrittmotor kennt seinen Zustand nicht – im Gegensatz zu einem Servo Motor, der aber wiederum keine ganzen Umdrehungen kann.

      Antworten
      • Thomas am 23. März 2017 18:52

        Vielen Dank für deine Rückmeldung. Ja, Servormotor hab ich auch schon durch, funktioniert leider nicht so wie gewünscht aufgrund der nur halben Drehung. Also müsste man dann beim Schrittmotor mit einem Referenz- oder Endschalter arbeiten? Das sollte ja nicht so das große Problem sein.
        Ich habe derzeit einen 4-poligen Schrittmotor von Nanotec, ST2018S0604-A, und ein A4988, aber irgendwie komme ich nicht zurecht, weil ich irgendwie keine Anleitung finde, wie man das Board an den Raspberry anschließt und scheinbar auch nur 2 Pins (und GND) vom Board mit dem Raspberry verbunden werden sollen. Würdest du mir ein anderes Treiberboard empfehlen, welches in der Handhabung vielleicht nich ganz so komplex ist?

      • Felix am 23. März 2017 19:58

        Richtig. Ich habe mal einen analogen Spieleautomaten aufgemacht, welcher auch Schrittmotoren nutzte. Dort wird solange gedreht, bis ein gewisser Punkt eine Lichtschranke durchfährt und ab dann weiß das System, wo es sich befindet.
        Wieso nutzt du keinen L293D oder ULN2003A? Das sind die gängisten Treiber ICs für Schrittmotoren.

      • Thomas am 27. März 2017 17:32

        Ja, habe jetzt einen L293D und es funktioniert, jedoch macht der Motor nicht pro Schritt 1,8°, sondern 7,2°. Weißt du zufällig woran das liegen könnte?

      • Felix am 27. März 2017 18:21

        Wie viele Schritte hat dein Motor denn pro Umdrehung laut Datenblatt?

  65. Thomas am 27. März 2017 20:12

    Hmm ja das ist eine gute Frage. Ich bin davon ausgegengen, dass Step Angle 1,8° einem Schritt entspricht, und demnach 200 Steps für eine Umdrehung gemacht werden müssten. https://de.nanotec.com/fileadmin/files/Datenblaetter/Schrittmotoren/ST2018/ST2018S0604-A.pdf

    Antworten
    • Felix am 27. März 2017 20:16

      Hast du wirklich nur einen Step oder eine komplette Phase (= 4 Steps) laufen lassen? Du müsstest immer die vorherige Phase wissen, um den folgenden Schritt zu machen.

      Antworten
      • Thomas am 27. März 2017 20:49

        Ich hab genau das Skript laufen lassen, welches du oben gepostet hast.

      • Felix am 27. März 2017 20:50

        Du musst es natürlich anpassen für deine Zwecke 🙂

      • Thomas am 28. März 2017 22:00

        Stimmt, das macht sinn.

        Ich hab jetzt noch das Problem, dass der Motor quasi kein Drehmoment hat. Hab Ihn angeschlossen an 3,9V (wie im Datenblatt angegeben), und die 1,2A vom Netzteil sollten auch ausreichen denke ich. Aber irgendwie rattert er nur bei dem geringsten Widerstand.

        Hab ich vielleicht irgendwas falsch gemacht? Oder ist der Motor einfach scheisse?

      • Thomas am 29. März 2017 14:27

        Also, zwischenzeitlich habe in in Erfahrung bringen können, dass mein Motor mit 3,9V-48V läuft, jedoch dann ein IMT-901 oder SMC genutzt werden sollte, meine Frage daher, hat der L293D eine ähnliche Funktion wie ein IMT-901 oder SMC?

  66. Viktor am 9. Mai 2017 21:01

    Hallo Felix,

    ich programmiere gerade zuhause einen Plotter mit einer X und Y-Achse die jeweils von einem Schrittmotor angetrieben werden.
    Habe mir zur Ideenfindung (:-P) dein Programm angeschaut.
    Dabei ist mir aber die Eingabe der Steps unklar.
    Würde der motor nicht z.B. 8000 Schritte machen wenn man bei dir 1000 eingibt? da es ja 8 sequenzen gibt die in der inneren Schleife durchlaufen und dann 1000 durchläufe der äußeren Schleife. Dies würde doch 8000 „echte“ Schritte ergeben.

    Bitte korrigiere mich falls ich falsch liege
    lg Viktor

    PS: super seite 😀

    Antworten
    • Felix am 9. Mai 2017 21:05

      Hi Viktor,
      ja, du hast recht. Die Sache ist folgende: Du kannst natürlich auch die einzelnen Schritte einer Sequenz „laufen“ lassen, aber dafür müsstest du eben den letzten Stand speichern, um dann den nächsten bzw. vorherigen Schritt auszuführen. Da sich das Tutorial in erster Linie an absolute Neulinge gerichtet hat, wollte ich es nicht unnötig verkomplizieren. Möglich ist es jedoch allemal 🙂

      Antworten
      • Viktor am 11. Mai 2017 21:51

        hy,
        danke für die schnelle rückmeldung hat mur sehr geholfen 😀
        ich lese jetzt den letzten stand über die Parameter der for Schleife ein und über return gebe ich den neuen stand wieder zurück
        derweil schreibe ich den stand in den range hinein wobei dies noch nicht 100%ig läuft
        gibt es da eine bessere („saubere“) lösung?

        lg Viktor

  67. Thorsten am 1. Juni 2017 19:47

    Hallo Felix,

    danke für dieses Tutorial nebst Kommentaren. Endlich konnte ich erste Erfolge mit meinem Nema 17 verbuchen.
    Nachdem ich im Datenblatt die richtige Sequenz gefunden habe (http://www.osmtec.com/downloads/stepper_motor/stepper_motor.pdf Seite 11)
    läuft der Motor etwas ruhiger als mit deinen Originalsequenzen. Allerdings nur mit 8 Steps und nur rückwärts??? Vorwärts brummt er nur. Außerdem lässt sich der Motor durch einfaches Fingerauflegen anhalten. An der Verkabelung scheint es nicht zu liegen, mit deinem Original dreht er sich, wenn auch brummend und ruckelnd, in beide Richtungen.
    Das Netzteil sollte mit 12V 2A ausreichend sein. Hast du einen Tip für mich wie das Brummen aufhört und der Motor mit seinem eigentlichen Drehmoment läuft?

    Antworten
    • Felix am 2. Juni 2017 11:20

      Ist die Sequenz ganz sicher richtig? Dieses Brummen/Ruckeln habe ich meist dann festgestellt, wenn die Schritte nicht mit den des Motors übereingestimmt haben.

      Antworten
  68. Michael am 16. Januar 2018 15:46

    Hallo Felix,

    gibt es ähnlich wie für Servomotoren die Möglichkeit über ein Driver Board mehr als 2 Schrittmotoren anzusteuern? In meinem Projekt möchte ich gerne min. 3 ehr 4 Motoren ansteuern.

    Vielen Dank =)

    Antworten
  69. Michi am 31. März 2018 0:14

    Hallo,
    mein Schrittmotor(28BYJ-48) geht nicht. Er vibriert zwar, aber er rührt sich kein einziges Grad.
    Bitte um Hilfe!

    Antworten
    • Felix am 1. April 2018 12:36

      Klingt nach ntweder zu geringer Stromaufnahme oder falscher Schrittkombination.

      Antworten
  70. Maik am 24. Oktober 2018 18:56

    Hey Felix,
    für meine Masterarbeit, benötige ich einen Schrittmotor und habe deine Anleitung gefunden und nachgebaut. Ich habe das Raspberry Pi 2 Model B V1.1 sowie den Treiber L293D genommen. Als Schrittmotor verwende ich den ST2018S0604-A — Schrittmotor – NEMA 8.
    Die Sequenzen habe ich wie folgt umgeschrieben:
    Seq[0] = 1,0,1,0
    Seq[1] = 0,1,1,0
    Seq [2] = 0,1,0,1
    Seq [3] =1,0,0,1
    Soweit funktioniert der Motor schonmal. Nun zu meinem Problem: Der Motor hat einen minimalen Winkel von 1,8° bedeutet also er müsste 200 Schritte für eine volle Umdrehung machen. Bei mir ist es aber so, dass er nach 50 Schritten schon die 360° macht. Könntest du mir hier weiterhelfen?

    Viele Grüße

    Maik

    Antworten
  71. Reinhard am 8. November 2018 3:37

    Hey Maik,
    eine Umdrehung sind 50 Ausgaben der 4-er Sequenz also die angegebenen 200 Schritte. Zur Positionierung auf einzelne Schritte genau ist ein einzelner Schritt erforderlich, also konkret ein einzelner Wert der 4-er Sequenz (z.B. nur Seq[0]).
    Schönen Gruß
    Reinhard

    Antworten
  72. spicer am 26. Mai 2020 22:06

    Hallo
    Kleine Info:
    Habe ein Breakout Board mit einem ULN2003 vom Chinesen und einen 12V 28BYJ-48 Motor dran.
    Musste orange/blau tauschen, damit es funktioniert.
    coil_A_2_pin = 23 # orange
    coil_B_1_pin = 17 # blau

    Wenn ich schon mal da bin, wie kann ich kleinere Zeitverzögerungen als 1ms realisieren?

    Antworten
  73. Evender am 23. September 2022 11:15

    ERROR: Could not find a version that satisfies the requirement RIP.gpio
    ERROR: No matching distribution found for RIP.gpio
    und nichs geht !!!

    Antworten

Hinterlasse einen Kommentar Antwort abbrechen

Raspberry Pi Fernbedienung: Infrarot Steuerung einrichten

Raspberry Pi LED MAX7219 Dot Matrix – Projektübersicht

Die besten Raspberry Pi Alternativen in einer Übersicht

Nextcloud Anleitung: Eigene Raspberry Pi Cloud einrichten und konfigurieren

Raspberry Pi Node.js Webserver installieren und GPIOs schalten

Raspberry Pi Sensordaten mit ThingSpeak loggen und auswerten

Blog abonnieren

Abboniere Raspberry Pi Tutorials, um kein Tutorial mehr zu verpassen!

Tutorials for Raspberry Pi
Facebook Twitter YouTube
  • Kontakt & Impressum
  • Unterstützen
  • Datenschutz

Tippe den Suchbegriff oben ein und drücke Enter, um danach zu suchen. Drücke Esc, um abzubrechen.