Forum: Mikrocontroller und Digitale Elektronik 4 Schrittmotoren ansteuern über IR-Fernbedienung?


von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


Angehängte Dateien:

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 :)

von Joe F. (easylife)


Lesenswert?

Laurent B. schrieb:
> Doch es dreht sich irgendwie nur 1 Motor.

Und was hindert dich jetzt daran weitere 6 Zeichen (z.B. '2'..'7') zu 
nehmen, und die anderen 3 Motoren genau wie den ersten anzusteuern?
Soucecode kann hier übrigens direkt als .txt oder .c File angehängt 
werden.
Screenshot ist denkbar ungünstig.

: Bearbeitet durch User
von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


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

: Bearbeitet durch User
von Stefan F. (Gast)


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.

von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


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
  }

}

von Stefan F. (Gast)


Lesenswert?

Frage den Autor der Library, ob er helfen möchte.

Ich vermute mal, dass man irgendwo mindestens einstellen muss, welches 
Protokoll die Fernbedienung spricht.

von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


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

von Stefan F. (Gast)


Lesenswert?

Es kann durchaus sein, dass deine Fernbedienungen einen anderen Code 
verwenden. Weitere Fragen richtest du bestimmt besser an den Autor der 
Library.

von Jo T. (Gast)


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.

von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


Lesenswert?

Ja wäre nett.

Ich habe jetzt noch eine Universal Fernbedieunung gekauft (Schwaiger 
3801)
, aber es wird mir immer noch kein Code angezeigt im seriellen Monitor. 
:(

Am Programm sollte doch alles i.O. sein?


Gruesse

von Jo T. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.