4 Schrittmotoren ansteuern über IR-Fernbedienung?

OP (Firma: Fischer Reinach AG) #5487496
Lesenswert?

Hallo geschätzte Elektronikfreunde :)

Ich entwickle gerade eine Maschine, welche zum Tranieren von Spurhünden 
dienen soll. Die Herausforderung darin besteht, 4 Drehteller über 4 
Schrittmotoren in Bewegung zu versetzen. Da ich in der Mechanikbranche 
tätig bin und nur gewisse Grundlagen der Elektronik und 
Steuerungstechnik beherrsche, ist mein KnowHow begrenzt.

Ich programmiere mit dem Arduino 1.8.5. Einiges habe ich bereits 
geschafft.
Doch es dreht sich irgendwie nur 1 Motor. Und ich möchte alle 4 
unabhängig voneinander steuern können. Auch soll das Signal über eine 
IR-Fernbedieunung ausgegeben werden.

Kann mir da jemand bitte helfen?

Mein Equipment: 4x Makeblock 42byg Stepper Motor, Makeblock MegaPi 
Microcontroller board, 4x Makeblock Megapi Stepper Motor Driver, 
Fernbedienungs-Set mit VS1838B und Breakout (Infrarot).

Anbei noch mein angefangenes Programm.


Herzliche Gruesse :)
Angehängte Dateien:
OP (Firma: Fischer Reinach AG) #5487810
Lesenswert?

Sehr geehrter Joe.F.(easylife)

Hatte ein Überlegungsfehler gemacht und die Befehle stepper.run mit 
2,3,4 und die cases vergessen anzupassen. :D
Jetzt funktioniert es.

Wie kann ich diese per einer Infrarot Fernbedienung steuern?
zB. wenn ich auf die Taste 1 drücke soll case'1' bzw. stepper1 drehen 
etc. ?

Herzliche Gruesse
Gast #5487838
Lesenswert?

> Wie kann ich diese per einer Infrarot Fernbedienung steuern?

"Man" kann das machen. Du solltest zunächst mal ein Programm schreiben, 
dass die Signale der Fernbedienung empfängt und irgendwie auf dem 
seriellen Monitor anzeigt. Damit kannst du für jede Taste den Code 
ermitteln. Dann schreibst du ein Programm, dass auf eben diese Codes 
reagiert.

Soweit die generelle Vorgehensweise.

Die erste Hürde wird wohl sein, herauszufinden, wie das Signal deiner 
konkreten Fernbedienung codiert ist und dann eine dazu passende Library 
zu finden bzw. selbst zu schreiben. Für Arduino gibt es ja fertige 
Bastelkisten mit IR Fernbedienung, ich nehme daher an, dass genau dazu 
passend auch Programmierbeispiele existieren.
OP (Firma: Fischer Reinach AG) #5489840
Lesenswert?

Sehr geehrter Stefanus F.

Ich habe eine Library gefunden.

Das IR-Board habe ich mit dem Microcontroller verbunden. VCC, GND und 
I/O in PIN30 eingesteckt.

Aber irgendwie funktioniert es nicht, bzw. im seriellen Monitor werden 
keine Codes angezeigt.

Hier das Programm:


#include <IRremote.h>

int RECV_PIN = 30;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);


  irrecv.enableIRIn(); // Start the receiver

}

void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value, DEC);
    irrecv.resume(); // Receive the next value
  }

}
OP (Firma: Fischer Reinach AG) #5489937
Lesenswert?

Ich habe jetzt alle Protokolle eingestellt, bzw die Bekanntesten.

Ich habe auch andere Fernbedienungen ausprobiert, im seriellen Monitor 
wird mir kein Code angezeigt.

Irgendwas übersehe ich?!


Hier das erweiterte Prog:

#include <boarddefs.h>
#include <IRremote.h>
#include <IRremoteInt.h>
#include <ir_Lego_PF_BitStreamEncoder.h>


// Definiere Sensor Pin
const int RECV_PIN = 12;

// Define IR Receiver and Results Objects
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  // Serial Monitor @ 9600 baud
  Serial.begin(9600);
  // Enable the IR Receiver
  irrecv.enableIRIn();
}

void loop(){
  if (irrecv.decode(&results)){
        Serial.println(results.value, HEX);
        switch (results.decode_type){
            case NEC:
              Serial.println("NEC");
              break;
            case SONY:
              Serial.println("SONY");
              break;
            case RC5:
              Serial.println("RC5");
              break;
            case RC6:
              Serial.println("RC6");
              break;
            case DISH:
              Serial.println("DISH");
              break;
            case SHARP:
              Serial.println("SHARP");
              break;
            case JVC:
              Serial.println("JVC");
              break;
            case SANYO:
              Serial.println("SANYO");
              break;
            case MITSUBISHI:
              Serial.println("MITSUBISHI");
              break;
            case SAMSUNG:
              Serial.println("SAMSUNG");
              break;
            case LG:
              Serial.println("LG");
              break;
            case WHYNTER:
              Serial.println("WHYNTER");
              break;
            case AIWA_RC_T501:
              Serial.println("AIWA_RC_T501");
              break;
            case PANASONIC:
              Serial.println("PANASONIC");
              break;
            case DENON:
              Serial.println("DENON");
              break;
          default:
            case UNKNOWN:
              Serial.println("UNKNOWN");
              break;
          }
        irrecv.resume();
 }
}
Gast #5490220
Lesenswert?

Ich nutze erfolgreich an Attiny13/45 den RC5-Code, den z.B. die gerade 
bei P. Im Angebot erhälliche Gigaset RC20 sendet. Mein Code ist Ass, 
sollte aber als Inline einzubunden sein, TimerInt anpassen auf deinen 
Takt, ist jetzt 1/1.2MHz.
Alternativ könnte ich eine Testschaltung aus einem
µC+IR-Empfäger zur Verfügung stellen für den guten Zweck. Die gibt an 4 
Pins 4 Bit des Tastencodes aus.
Gast #5495162
Lesenswert?

Wenn du mit dem C-Code nicht zum Erfolg kommst, (du hast ja einen neuen 
Thread aufgemacht wegen seriellem Monitor),
oder der Arduino überlastet ist mit der Aufgaben,  melde dich in 15 
Tagen. Im Urlaub kann ich nichts schicken.
Auf Uni-FB ist meist Gerätetaste 1=TV1 der RC5, den ich verwende.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren