Schrittmotor am Raspberry Pi über Webinterface steuern

Veröffenticht am 05.11.2016    von     in der Kategorie Raspberry Pi     bisher 6 Reaktionen    Zuletzt überarbeitet am 21.02.2017


Der in diesem Beitrag veröffentlichte Programm-Code ermöglicht die Steuerung eines Schrittmotors mit ULN 2003 Treiber Board über ein auf dem Raspberry Pi vorhandenes Webinterface. Die beiden Skripte sind Teil eines Projektes, in dem ich den Sichtbereich der Kamera mittels eines Schrittmotors über ein Webinterface einstelle. Da ich in diesem Projekt mittels Bewegungsmelder auf die Kamera zugreife, stelle ich der Weboberfläche das Kamerabild über eine Bilderreihe, anstatt einem Videostream zur Verfügung.

 

Funktionsweise des Programmcodes

 

Vorbereitung

Damit die zur Verfügung gestellten Programmskripte funktionieren, sind neben dem Anschluss des Schrittmotors, folgende Vorbereitungen notwendig.

Für die Verbindung zwischen Python und HTML/JavaScript muss neben einem eingerichteten Webserver die Tornado Websocket Bibliothek vorhanden sein. Informationen zur Verwendung des Tornado Websocket findest du in meinem Beitrag “Web zu UART Terminalprogramm…”.

Wenn du auch das Kamerabild über die Bildreihe dem Webinterface zur Verfügung stellen möchtest, dann schaue dir mal die Beiträge “Kameraaufnahme mit HC-SR501 Bewegungsmelder am Raspberry Pi” und zur Zwischenspeicherung der Bilder meinen Beitrag zur Anlage einer Ram-Disk an.

 

Anschluss und Ansteuerung des Schrittmotors

Bei dem von mir verwendeten Schrittmotor handelt es sich um einen 28YBJ-48DC 5V 4 Phasen Motor mit ULN2003 Treiber Board. Da Christoph Scherbeck mit seinem Beitrag “Schrittmotorsteuerung mit dem Raspberry Pi” eine super Anleitung zum Anschluss und Ansteuerung veröffentlicht hat, welche auch die Grundlage für meine Umsetzung ist, möchte ich auf diesen Verweisen.

 

Das Python-Skript

 

 

Das HTML-Skript

Die Übergabe der gewünschten Drehrichtung an das Python-Skript erfolgt mit der entsprechenden Funktion socket.send(). Die Überwachung und Abfrage der Button erfolgt in $(‘.button-auswahl button’).click(function(evt).

Auslesen der Bewegungssensoren mit JavaScript

Wenn der Aufruf der Webseite mit einem Smartphone bzw. Tablet erfolgt, wird die Drehrichtung in der Funktion handleOrientation(event) überwacht und verarbeitet. In meinem Fall möchte ich nicht jede Gradänderung weitergeben und führe diese erst nach Erfüllung der if-Option durch. Damit die erste Positionsabfrage keine Einwirkung auf den Schrittmotor hat, verwende ich im Skript var startStatus. Weitere Informationen zur Erfassung der Sensorwerte des Gerätes findest du in der API Beschreibung “Detecting device orientation”.

Sollte die Abfrage auf deinem Gerät oder verwendeten Browser nicht unterstützt werden, erfolgt auch keine entsprechende Text-Ausgabe im Footer in den entsprechenden <label> Tags.

Download aller Dateien

Die beiden Skripte mit den notwendigen Bootstrap Bibliotheken kannst du dir hier als ZIP-Archiv herunterladen.

 


Transparenz-Hinweis:

Die auf dieser Seite verwendeten Produktlinks sind sogenannte Affiliate-Links zu einem Partnerprogramm. Für dich entstehen dadurch keine Mehrkosten, ich erhalte durch deinen Kauf über den Link eine kleine Provision.


Wolfgang Raab – Betreiber von webnist.de

Mein Name ist Wolfgang, ich beschäftige mich nun schon seit 1985 mit der EDV und im Besonderen mit der Software- und Webentwicklung.

Auf diesem Blog schreibe ich über Dinge, die mich begeistern, beschäftigen und ich der Meinung bin, es könnte für andere interessant und hilfreich sein.

Als großer Fan des Raspberry Pi finde ich es spannend, wie man den kleinen Computer in Verbindung mit dem IoT und Smart Home nutzen kann. Deshalb behandeln viele Beiträge auch genau dieses Thema.

Ich bin ein leidenschaftlicher Leser und Fotograf. Wenn ich nicht gerade in einem spannenden Roman versinke, bin ich oft unterwegs, um die Schönheit der Welt mit meiner Kamera einzufangen und zu teilen.

Weitere Infos und Fotos findest du auf einem der folgenden Plattformen.






Mehr erfahren?

Besuche die "About"-Seite meines Blogs und finde heraus, wie du mit mir in den Bereichen Web- und Mobile-Programmierung und Raspberry Pi zusammenarbeiten kannst. Hier beginnt deine digitale Reise.


Unterstützen

Dieser Beitrag hat dir gefallen und konnte dir bei deinem Projekt oder Problem behilflich sein? Dann würde ich mich sehr freuen, wenn du dich mit einer noch so kleinen Spende erkenntlich zeigen möchtest.




  • Tobias Luthner schrieb am 14. Dezember 2023:

    Hallo

    vielen dank für deine Programme, Ich bin jedoch blutiger anfänger was den Raspy betrifft. (Ich Programmiere normalerweise Codesys (Beckhoff) mit Strukturiertem Text.

    Ich komme momentan jedoch mit dem Programm hier nicht klar. Ich hab einen Raspberry 3B+ mit aktueller Software und demnach auch Python 3 am laufen. Jedoch bekomme ich hier immer fehler. (Ich hab die Print befehle jetzt zumindest schon mal an die Synthax von python3 angepasst.)
    Ich bekomme wenn ich es im thonny laufen lassen den Fehler

    File “/usr/lib/python3/dist-packages/tornado/ioloop.py”, line 237, in current
    loop = asyncio.get_event_loop()

    File “/usr/lib/python3.9/asysncio/events.py”. line 642, in get event_loop
    raise RuntimeError(‘There is no current event loop in thread %r.’
    RuntimeError: There is no current event loop in thread #Thread-1′.

    Vielleicht können Sie mir weiter helfen.

    Vielen Dank schon mal und schöne Woche noch.

    Ich kann ihnen auch das komplette Programm schicken wenn es ihnen was bringt.

    • Raab Wolfgang schrieb am 15. Dezember 2023:

      Hallo,
      vielen Dank für die Nachricht.
      Den Fehler kann ich leider nicht ohne Weiteres reproduzieren. Eventuell muss der Code nicht nur bei den Print-Befehlen angepasst werden. Ein Blick in Google mit der Fehlermeldung hat leider keine empfehlenswerte Fehlerbehebung gebracht.

      Eine Anpassung des Codes an Python 3 und dem aktuellen Raspberry Pi OS ist geplant, allerdings komme ich zeitnah bedauerlicherweise nicht dazu dies zu realisieren. Aber vielleicht kann ein anderer Leser dieses Beitrages eine Hilfestellung liefern.

      Viele Grüße
      Wolfgang

  • Mark schrieb am 23. Oktober 2020:

    Servus Wolfgang,

    wirklich super Seite! Bin bei der Umsetzung meines Projektes (pan/tilt Steuerung einer Kamera) auf deine Seite gestoßen.
    Hab deinen Code auch soweit übernommen und das script gestartet. Dieses läuft auch (Warte auf Verbindung, 2 Threads aktiv.), allerdings kommt es zu keiner Verbindung laut Browser. Es steht nur “Verbindungsstatus: I”
    Ich habe zwar keine Kamera angeschlossen, die Ansteuerung des Motors sollte aber doch trotzdem funktionieren.
    Hast du eine Idee woran es liegt?

    Beste Grüße
    Mark

    • Wolfgang schrieb am 24. Oktober 2020:

      Hallo Mark,
      vielen Dank für Dein Lob. Hast Du für die Verbindung zwischen Browser und Python-Skript auch die Tornado Websocket Bibliothek installiert und getestet?

      Viele Grüße
      Wolfgang

  • Gawlik, Jürgen schrieb am 2. Juli 2018:

    Servus Wolfgang,

    erstmal: tolle Seite, mit jede Menge interressantem Wissen.
    geau sowas habe ich gesucht.
    Meine Aussenkamera läuft mit einer normalen Schrittmotor-Steuerung.
    Programm habe ich in Gambas geschrieben,
    Kamera-Bild zeige ich mit Firefox an.
    Umstandlich ? Ich weiss, aber besser konnt ich´s nicht.

    Jetzt meine Frage: wo muss ich die Dateien aus der *.zip
    unterbringen, dass die sich alle wiederfinden. 🙂

    Danke im Vorraus.

    Wenn alles läuft, bin ich auch gern zu einer Spende bereit.

    • Wolfgang schrieb am 2. Juli 2018:

      Hallo Jürgen,
      vielen Dank für deine Nachricht.
      Bei mir sind die beiden Skripts im www Ordner des Webserver gespeichert.
      Viele Grüße
      Wolfgang


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Notwendige Felder sind mit * markiert.

 

Kleiner Hinweis, alle Kommentare werden moderiert.

Dies bedeutet, der Kommentar wird vor der Veröffentlichung durchgelesen und von mir geprüft. Auch behalte ich mir vor, jeden Kommentar zu löschen, der nicht direkt auf das Thema abzielt oder nur den Zweck hat, Leser oder Autoren herabzuwürdigen.

Entdecke die Welt von Webnist.de

Erfahre mehr über die Hintergründe meines Blogs und wie ich dich bei deinen digitalen Projekten unterstützen kann.

Aktuelles Video auf YouTube

Beschreibung der Verwendung eines TTP223B Touch Sensors am GPIO Port des Raspberry Pi mit Python.