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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Laurent B. (Firma: Fischer Reinach AG) (derpolymechaniker)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

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


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.