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.

Video Anleitung

"Schrittmotor, Stepper fernsteuern in Arduino"

youtube-video

Detailbilder

arduino stepper

Der Infrarot Sensor.

arduino 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!

youtube-video

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();
}
}

© by Richy Schley, 2021 - 2024. All Rights Reserved. Built with Typemill.