Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke

Ausprobiert: Einen billigen Schrittmotor mit Bash und PHP ansprechen.

Ich war schon immer neugierig wie so ein Schrittmotor funktioniert und was man wohl damit anfangen kann. Einsatzbereiche wären wohl eine Plattform wo eine Kamera drauf ist, wodurch die Kamera dann frei schwenkwar werden würde, oder ein Roboter wo man kleinste Bewegungen punktgenau ausführen lassen könnte. Alternativ könnte man auch eine Solarzelle vollautomatisiert zur Sonne ausrichten lassen oder ähnliches realisieren.

Bei Pollin gab es für unter 5 Euro einen "simplen" für den Anschluss an den Arduino oder Raspberry Pi..., also habe ich ihn mal mitbestellt.

Es ist der DAYPOWER Schrittmotor S-SPSM-5V, den gibt es bei ebay China schon für knapp 1,50 Euro...

Aber wie steuert man so etwas mit einem Raspberry Pi an ?

GPIO Ports sind genug vorhanden, "Wiring Pi" erleichtert einen die Programmierung und mit ein wenig PHP war recht schnell ein kleines Script fertig was den Motor ansprach - alternativ habe ich es auch mal in flotteres Bash übersetzt.

Die Hardware:

Von Pin 2 (5V) geht es an Pin VCC bei der Steuerplatine (ROT)
Von Pin 6 (GND) geht es an Pin GND bei der Steuerplatine (SCHWARZ)
Von Pin 7 (GPIO4) geht es an Pin IN1 bei der Steuerplatine (GRÜN)
Von Pin 11 (GPIO17) geht es an Pin IN2 bei der Steuerplatine (BLAU)
Von Pin 13 (GPIO27) geht es an Pin IN3 bei der Steuerplatine (LILA)
Von Pin 15 (GPIO22) geht es an Pin IN4 bei der Steuerplatine (GELB)
 

Die Software:

Anfang macht die PHP Version:

<?php
//Zeitlimit zur Ausführung des Scripts hoch setzen, der Motor ist nicht der schnellste und PHP ist eigentlich nicht für solche spielereien gedacht.


set_time_limit(3600);

//Ansteuerung der Spulen des Schrittmotors DAYPOWER S-SPSM-5V von Pollin.de
$step[1]="1,0,0,0";
$step[2]="1,1,0,0";
$step[3]="0,1,0,0";
$step[4]="0,1,1,0";
$step[5]="0,0,1,0";
$step[6]="0,0,1,1";
$step[7]="0,0,0,1";
$step[8]="1,0,0,1";

//Deklarieren der Pins des Schrittmotors

$pin1="7"; //gpio 4 (Pin7)
$pin2="0"; //gpio 17 (Pin 11)
$pin3="2"; //gpio 27 (Pin 13)
$pin4="3"; //gpio 22 (Pin 15)

//Ausgänge als solche deklarieren
shell_exec("gpio mode ".$pin1." out");
shell_exec("gpio mode ".$pin2." out");
shell_exec("gpio mode ".$pin3." out");
shell_exec("gpio mode ".$pin4." out");

//Motor entgegen Uhrzeigersinn drehen

$ende=0;
do { // eine komplette Drehung (512 kleine Bewegungen)

$anz=1;//ein Step drehen
do {
$gostep = explode(",",$step[$anz]); //nimmt das Binäre Muster (Step= und zerlegt es in 4 einzelne Variablen (Gostep)
shell_exec("gpio write ".$pin1." ".$gostep[0]); //Schreibt in Pin 1 (GPIO 4) Low oder High
shell_exec("gpio write ".$pin2." ".$gostep[1]); //Schreibt in Pin 2 (GPIO 174) Low oder High
shell_exec("gpio write ".$pin3." ".$gostep[2]); //Schreibt in Pin 3 (GPIO 27) Low oder High
shell_exec("gpio write ".$pin4." ".$gostep[3]); //Schreibt in Pin 4 (GPIO 22) Low oder High
$anz=$anz+1;
} while($anz<=8);
// Ende des einen Steps (bestehend aus 8 Schritten)

$ende=$ende+1;

} while($ende<=512);
// Ende von 512 * 8 Schritten.
?>

Wenn das php als z.b. index.php auf dem PI unter "/var/www/" gespeichert ist, kann man es durch aufruf der Webseite des Pis z.b. unter http://192.168.0.2 aufgerufen werden. (die IP eures PIs müsste ihr selber wissen). Dann sollte der Schrittmotor eine komplette Drehung entgegen dem Uhrzeigersinn drehen.

Jetzt könnte man kleinere PHP Scripte anlegen die den Motor entsprechend um 10 Grad oder 45 Grad dreht. Durch den Aufruf des entsprechenden Scriptes von einer Webseite sollte der Motor dann das gewünschte ausführen.

Anschließend war ich mal neugierig wie schwer es ist das PHP Script in ein Bash umzuwandeln - war recht einfach, hier das Ergebnis:

motor.sh

Aufruf z.b. durch bash /var/www/motor.sh

#!/bin/sh
#Ansprechen eines Stepmotors DAYPOWER S-SPSM-5V von Pollin.de

#Variablen für die Steps festlegen
step[1]="1,0,0,0"
step[2]="1,1,0,0"
step[3]="0,1,0,0"
step[4]="0,1,1,0"
step[5]="0,0,1,0"
step[6]="0,0,1,1"
step[7]="0,0,0,1"
step[8]="1,0,0,1"

#Deklarieren der Pins des Schrittmotors

pin1="7" #gpio 4 (Pin7)
pin2="0" #gpio 17 (Pin 11)
pin3="2" #gpio 27 (Pin 13)
pin4="3" #gpio 22 (Pin 15)

#Ausgänge als solche deklarieren

gpio mode $pin1 out
gpio mode $pin2 out
gpio mode $pin3 out
gpio mode $pin4 out

for ((runde=0;runde<=512;runde++)) #eine Drehung (512 Schritte)
do

for ((anz=1;anz<=8;anz++)) #ein Schritt
do
#Zerlegen der Step Variablen in 4 einzelne Befehle
gostep=(`echo ${step[$anz]}| tr ',' ' '`)
#Schreibe die Low und Highs in die Pins
gpio write $pin1 ${gostep[0]}
gpio write $pin2 ${gostep[1]}
gpio write $pin3 ${gostep[2]}
gpio write $pin4 ${gostep[3]}
done #ende eines Steps

done #ende einer Drehung

exit

Durch den Aufruf durch Bash ist es etwas schneller...

Die GPIO Pins könnte ihr selber anpassen - Viel Spaß beim Rotieren 8-)

Impressum Startseite Grund Installation Grundlagen Hilfreiches Projekte Querschläger Meckerecke