Schrittmotor Stepper IR Fernsteuerung
Hinweis: Kauflinks verweisen auf Ebay- oder Amazon-Angebote, die mir eine kleine Provision bezahlen, um meinen Kanal/Website zu unterstützen.
Mit dem Hintergedanken, einen Antennen-Rotor für meine Loop Antenne zu bauen, habe ich einen Schrittmotor oder Stepper (Nema 17) mit einer TV Infrarot Fernsteuerung gesteuert. Der hier verwendete Treiber ist nicht in der Lage, das Microstepping (kleinere Schritte als 1,8°) anzusteuern, was aber für meinen Zweck trotzdem ausreicht. Das hier empfohlene Set mit dem Schrittmotor "Nema 17" und dem hochwertigen Treiber "TB 6600" kostet nur um 20 Euro und schöpft die Qualitäten (Micro Stepping) des Motors voll aus.
Produkte
Amazon Produktlinks.
- Schrittmotor Nema 17 mit gutem Treiber für Microstepping (ca. 20 Euro)
- IRremote Library (kostenlos)
- Universal IR Fernbedienung
- Arduino Infrarot Sensor
Video Anleitung
"Schrittmotor, Stepper fernsteuern in Arduino"
Detailbilder
Der Infrarot Sensor.
Video Anleitung
"Schrittmotor aus DVD Laufwerk in Arduino fernsteuern"
In diesem Video habe ich mein altes DVD Laufwerk zerlegt und die Antriebseinheit mit Schrittmotor ausgebaut. Dann habe ich noch 4 Kabel angelötet und durch Zusammenschließen der Kabel herausgefunden, welche zwei Kabel zusammen gehören. Das funktioniert ganz ohne Messgerät. Und dann geht es auch schon los. Kurz ein einfaches Skript auf den Arduino geladen und der Stepper bewegt sich und fährt auf und ab.
Als besonderes Schmankerl habe ich dann den DVD Brenner noch per Infrarot Fernsteuerung betrieben. So kann man auch mit Elektronik Schrott noch Spaß haben :-) Manche bauen sich sogar ganze Plotter oder 3D Drucker aus solchen alten Laufwerken zusammen!
Arduino Sketch (Code)
Der einfache Code, um den Stepper zum Laufen zu bringen
const int PinEn = 5; //Enable,
Aktivierung
const int PinStep = 6; //Step
const int PinDir = 7; //Direction,
Drehrichtung
int steps = 0; //Variable deklarieren
void setup() {
pinMode(PinStep, OUTPUT);
pinMode(PinDir, OUTPUT);
pinMode(PinEn, OUTPUT);
digitalWrite(PinEn, HIGH);
}
void loop() {
digitalWrite(PinDir, LOW); //Uhrzeigersinn
for(steps = 0; steps < 200; steps++)
{
digitalWrite(PinStep, HIGH);
delayMicroseconds(500);
digitalWrite(PinStep, LOW);
delayMicroseconds(500);
}
delay(1000);
digitalWrite(PinDir, HIGH); //gegen Uhrzeigersinn
for(steps = 0; steps < 200; steps++)
{
digitalWrite(PinStep, HIGH);
delayMicroseconds(500);
digitalWrite(PinStep, LOW);
delayMicroseconds(500);
}
delay(1000);
}
Arduino Code mit integrierter Infrarot Fernsteuerung
#include <IRremote.h> //IR Library einbinden
int RECV_PIN = 9; //IR Sensor an Pin 9
IRrecv irrecv(RECV_PIN);
decode_results results;
const int PinEn = 5; //Enable,
Aktivierung
const int PinStep = 6; //Step
const int PinDir = 7; //Direction,
Drehrichtung
int steps = 0; //Variable deklarieren
int raster = 1; //Geschwindigkeit
void setup() {
Serial.begin(9600);
irrecv.enableIRIn();
pinMode(PinStep, OUTPUT);
pinMode(PinDir, OUTPUT);
pinMode(PinEn, OUTPUT);
digitalWrite(PinEn, HIGH);
}
void loop() {
if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
if (results.value == 2496420446) //wenn Taste A gedrückt wird ist Raster = 1
{raster = 1;
Serial.println("Schrittweite 1 = 1,8°");
}
if (results.value == 598863752) //wenn Taste B gedrückt wird ist Raster = 5
{raster = 5;
Serial.println("Schrittweite 5 = 9°");
}
if (results.value == 2774773698) //wenn Taste C gedrückt wird ist Raster = 10
{raster = 10;
Serial.println("Schrittweite 10 = 18°");
}
if (results.value == 4031698352) //wenn Taste D gedrückt wird ist Raster = 25
{raster = 25;
Serial.println("Schrittweite 25 = 45°");
}
if (results.value == 1431986946) //wenn Taste >> gedrückt wird
{
digitalWrite(PinDir, LOW); //Uhrzeigersinn
for(steps = 0; steps < raster; steps++)
{
digitalWrite(PinStep, HIGH);
delayMicroseconds(1000);
digitalWrite(PinStep, LOW);
delayMicroseconds(1000);
}
}
if (results.value == 4283186720) //wenn Taste << gedrückt wird
{
digitalWrite(PinDir, HIGH); //Gegen Uhrzeigersinn
for(steps = 0; steps < raster; steps++)
{
digitalWrite(PinStep, HIGH);
delayMicroseconds(1000);
digitalWrite(PinStep, LOW);
delayMicroseconds(1000);
}
}
irrecv.resume();
}
}