Motorsteuerung mit Taster

  • Hallo Fans vom Raspberry pi :)

    ich bin blutiger Anfänger mit Raspy und Programmierung und habe da ein Problemchen. Ich möchte Scheinwerfer mit einen Raspberry über 24V Motoren ausrichten. Dabei habe ich eine responsive Benutzeroberfläche mit PHP + HTML geschrieben. Nun kann ich die Motoren über Button mit PC oder Smartphone steuern aber nur an oder aus. Ich möchte sie aber wie mit einen Taster bedienen, also gedrückter Button = Motor läuft und nicht gedrückter Button = Motor ist aus.
    Ich habe leider keine Ahnung wie das funktionieren könnte. Es wäre ganz lieb von Euch wenn Ihr mir weiterhelfen könnten. Danke für Eure Mühe im Voraus.

    MFG
    Dirk

  • Du benötigst also ein Skript oder Programm, das GPIOs überwachen kann und sobald ein Stromkreis per Taster geschlossen wird, eine Aktion ausführt. In PHP kann man das m.W.n. nicht effizient oder sinnvoll realisieren. Welche Programmiersprachen kannst du sonst noch so?

  • Einfach anstatt PHP und apache2 o.ä., das verwenden: FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

    Zusätzlich evtl. auch das: FAQ => Nützliche Links / Linksammlung => Interrupt

    Ansonsten bitte etwas genauer beschreiben was du vor hast bzw machen möchtest.


  • Du benötigst also ein Skript oder Programm, das GPIOs überwachen kann und sobald ein Stromkreis per Taster geschlossen wird, eine Aktion ausführt. In PHP kann man das m.W.n. nicht effizient oder sinnvoll realisieren. Welche Programmiersprachen kannst du sonst noch so?

    Wie gesagt, ich bin Anfänger und kann am besten HTML etwas PHP und ganz wenig Javascript.
    Mit PHP könnte man das Problem lösen, dazu müsste ich aber 2 GPIO für eine Taste blockieren. ,dazu reichen die GPIOs nicht. Aus Platzgründen muss ich 16 Motoren mit einem Raspy steuern.
    Ich habe gehört, dass es mit Javascript funktionieren könnte
    Automatisch zusammengefügt:


    Einfach anstatt PHP und apache2 o.ä., das verwenden: FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

    Zusätzlich evtl. auch das: FAQ => Nützliche Links / Linksammlung => Interrupt

    Ansonsten bitte etwas genauer beschreiben was du vor hast bzw machen möchtest.

    Mein Ziel ist, 5 Bühnenscheinwerfer mit PC oder Smartphone zu steuern. Momentan müssen die Techniker mit einer Halsbrecherischen Methode per Leiter hochklettern und per Hand einrichten.
    Ein Scheinwerfer hat 8 x 24Volt Gleichstrommotoren die mit einen Raspy gesteuert werden soll.
    Mit PHP würde es funktionieren aber ich brauche pro Tasterfunktion 2 GPIOs also würde ich insgesamt 32 GPIOs benötigen und so viel hat der Raspy nicht und Platz für 2 Raspys ist nich. Ich habe gehört, dass man mit Javascript je ein GPIO an und ausgeschalteten werden kann. Ich habe allerdings keine Ahnung wie. Ich würde mich freuen wenn Ihr miene helfen könnt.

    Einmal editiert, zuletzt von BugsBunny007 (20. Mai 2017 um 19:29)

  • Du schreibst ein wenig WirrWarr...

    Wieso 2 GPIO für eine Taste?
    Pro Taste brauchst du nur einen GPIO.
    Mit unterschiedlichen Tasterdruckzeiten kannst du auch unterschiedliche Aktionen durchführen...

    Allgemein ist PHP für solch ein Vorhaben ungeeignet, da ein PHP Script über einen Webbrowser nur eine begrenze Zeit ausgeführt wird und dann auch den Browser derweil blockiert.
    JavaScript alleine ist ebenfalls ungeeignet da JS auf dem Client läuft, also eine Kommunikation zwischen Server und Client implementiert werden müsste.

    Wie du also evtl. merkst ist das komplizierter als mal eben jüste umgesetzt - insbesondere für dein individuellen Fall.

    Mit meinen Python-Webserver Vorlagen geht das recht schnell umzusetzen, mit Python hast du auch die umfangreichsten Möglichkeiten bezgl. GPIO.
    Wie gesagt sind in der Anleitung Vorlagen enthalten die du nur copy&pasten brauchst, die direkt und auf Anhieb funktionieren. Die brauchst du dann nur noch für Dein Vorhaben erweitern und gut is... Die *.html kannst du weiter verwenden, *.css auch, *.js ebenfalls, nur *.php nicht den Part übernimmt Python.

    Bitte schau dir das zumindest mal an.

    Wenns dir trotzdem warum auch immer gegen den Strich geht dann schau dir das an: FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO


    PS: Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.


  • Warum bist Du so gereizt? Ich habe doch gesagt das ich ein Anfänger in bin. Ich habe mir halt gedanken gemacht, wie es funktionieren könnte. Ich hätte mit einen gpio den Status ausgelesen und mit den anderen gesteuert.
    Sorry wenn ich da falsch lag.
    Ich wollte von Euch hilfe und bin über jede lösung dankbar. natürlich werde ich mir deine lösung ansehen, ich hoffe nur da ich sie verstehe da ich mit python noch nichts gemacht habe.

  • Bitte nicht Beiträge vollständig quoten/zitieren, vor allem wenn diese genau da drüber stehen.


    Den Status eines GPIO's ließt man via Software aus, nicht über einen weiteren GPIO. Schaltest du einen GPIO auf OUT und HIGH kannst du via Software den Status abrufen und das zeigt dir dann genau das an: OUT und HIGH.

    Jeder Pi ab Model B+ hat 17 normale GPIO's die ohne Bedenken genutzt werden können. Zusätzlich gibts weitere 9 die man ebenfalls nutzen könnte, die aber eine Sonderfunktion haben... Und zu guter letzt könntest du auch noch sog. Port Expander anschließen um noch mehr GPIO's zu kriegen.

    • Offizieller Beitrag
    Zitat

    Aus Platzgründen muss ich 16 Motoren mit einem Raspy steuern.

    Mein Ziel ist, 5 Bühnenscheinwerfer

    aber ich brauche pro Tasterfunktion 2 GPIOs also würde ich insgesamt 32 GPIOs benötigen

    Nö!
    Ja aber nur 10 GPIOs, zur Erläuterung: 5x horizentral + 5x vertikal != 25 sondern 10 Also 1 Scheinwerfer mit 1x von rechts nach links + 1x unten nach oben = 2 Motoren = 2 GPIO. x 5 = 10 GPIO == KEINE 30+GPIO!! ;)
    Nö!

  • ein Scheinwerfer hat 8 Motoren.
    1x vertikal, 1x horizont, 1 x rotation, 4 x Klappen, 1x Zoom . Jeder Motor soll sich mit Tastendruck jeweils in 2 Richtungen bewegen lassen.
    Es soll mit Smartphone oder PC gesteuert werden und die Motoren sollen stehen wenn der Finger vom Button genommen wir um ein aufwickeln der Kabel zu verhindern, die würde u.U. bei Ein- / Ausbutton passieren.

  • [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> ein Scheinwerfer hat 8 Motoren. [/font][font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]1x vertikal, 1x horizont, 1 x rotation, 4 x Klappen,[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> 1x Zoom . Jeder Motor soll sich mit Tastendruck jeweils in 2 Richtungen bewegen lassen.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Und fuenf davon an einen Raspi? Das sind viel mehr Ausgaenge als der Raspi hat,[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]es braucht also Port-Expander oder etwas aehnliches.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> Es soll mit Smartphone oder PC gesteuert werden und die Motoren sollen stehen wenn[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> der Finger vom Button genommen wir um ein aufwickeln der Kabel zu verhindern, die würde[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]> u.U. bei Ein- / Ausbutton passieren.[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Die Events dazu heissen onmousedown und onmouseup.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Damit die bearbeitet werden ohne dass die Seite neu geladen wird, benutzt man[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]eine Technik namens AJAX. Damit kann man ein Script auf dem Server aufrufen.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Eine andere Moeglichkeit ist ein WebSocket. Das braucht aber einen passenden[/font]
    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Server.[/font]

    [font="Source Sans Pro, Tahoma, Helvetica Neue, Arial, sans-serif"]Was existiert schon in diesem Projekt? Nur die Webseite oder schon mehr?[/font]

  • Ich habe ein Modell mit einen Raspy und 4 Motorbrücken gebaut und die Webseite . Ich kann alle Motoren über die Webseite ansteuern allerdings nur immer nach rechts (an) oder nach links ( an). Ich kann keine Position anfahren und dann stoppen?

  • Was meinst du mit "Position anfahren" ?

    Das hört sich nach einer Servo Motor Steuerung an...


    Hast du vielleicht etwas mehr Details, wie zB welche Motorbrücken, welcher Code o.ä.?

  • ich habe die doppelten H-Brücken L298N verbaut. Leider sind die Motoren keine Servos.
    Automatisch zusammengefügt:
    <?php

    if(isset($_GET['Befehl'])) {

    //EINSCHALTEN
    //LED1
    if($_GET['Befehl'] === 'led1ein') {

    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 1")); //Befehl an die Shell senden um GPIO 23 einzuschalten
    }
    Automatisch zusammengefügt:
    //AUSSCHALTEN
    //LED1
    elseif($_GET['Befehl'] === 'led1aus') {
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0"));
    }}
    ?>
    Automatisch zusammengefügt:
    <?php

    if(isset($_GET['Befehl'])) {

    //EINSCHALTEN
    //LED1
    if($_GET['Befehl'] === 'led1ein') {

    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 1")); //Befehl an die Shell senden um GPIO 23 einzuschalten
    }
    Automatisch zusammengefügt:
    //AUSSCHALTEN
    //LED1
    elseif($_GET['Befehl'] === 'led1aus') {
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0"));
    }}
    ?>

    Einmal editiert, zuletzt von BugsBunny007 (21. Mai 2017 um 11:46)

  • ok, habe ich noch nich gemacht aber versuche es gleich einmal.
    Automatisch zusammengefügt:
    [code=php]<?php

    if(isset($_GET['Befehl'])) {

    //EINSCHALTEN
    //LED1
    if($_GET['Befehl'] === 'led1ein') {

    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 1")); //Befehl an die Shell senden um GPIO 23 einzuschalten
    }[/php]


    [font="Courier 10 Pitch, Courier, monospace"]//AUSSCHALTEN
    //LED1
    elseif($_GET['Befehl'] === 'led1aus') {
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0"));
    }}
    ?>[/font]

    [font="Courier 10 Pitch, Courier, monospace"]<a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1ein">Led1 einschalten</a>
    <a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1aus">Led1 ausschalten</a>[/font]
    Automatisch zusammengefügt:
    [code=php]//AUSSCHALTEN
    //LED1
    elseif($_GET['Befehl'] === 'led1aus') {
    $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0"));
    }}
    ?>
    [/php]
    Automatisch zusammengefügt:
    [code=php][/php]
    Automatisch zusammengefügt:
    Ich hoffe jetzt ist es ok
    Automatisch zusammengefügt:
    [code=php]<a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1ein">Led1 einschalten</a>

    <a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1aus">Led1 ausschalten</a>[/php]

    Einmal editiert, zuletzt von BugsBunny007 (21. Mai 2017 um 13:30)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!