Schulprojekt

StartHardware-Forum Schulprojekt

Schlagwörter: 

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Autor
    Beiträge
  • #6613
    Zerspaner
    Teilnehmer

    Hallo,

    ich möchte eine Encoder ECW1J-B24-BC0024L an einen Arduino UNO anschließen. welche Pins nehmen ich da?

    ich habe den Tx->1 und 2 genommen und folgendes Programm erstellt. Mithilfe des Internets.

    int messungPin1 = LOW;
    int messungPin1Alt = LOW;
    int encoderWert = 0;
    
     void setup() { 
     pinMode(2, INPUT);
     Serial.begin(9600);
     } 
    
     void loop() {
     messungPin1 = digitalRead(2);
     if ((messungPin1 == HIGH) && (messungPin1Alt == LOW)) {
     encoderWert++;
     Serial.println (encoderWert);
     }
     messungPin1Alt = messungPin1;
     }

    Es will einfach nicht funktionieren.

    Der Mittler Anschluss meines encoders ist in 5V
    Die Aüßernen Tx->1 und 2

    • Dieses Thema wurde geändert vor 2 weeks, 5 days von Stefan Hermann.
    #6614
    Stefan Hermann
    Keymaster

    Hallo Zerspaner,

    vielen Dank für deine Frage. Ich hab mir den Code mal angesehen. Im Grunde gehst du das Thema schon richtig an. Du hast nur einen von den beiden Pins nicht als Input deklariert. Passiert mir auch immer wieder. Dann braucht der Encoder Pull-Up-Widerstände. Du kannst die internen vom Arduino nutzen. Anstelle von pinMode(pin,INPUT) schreibt man dann einfach pinMode(pin, INPUT_PULLUP). Ich empfehle auch, Pin 0 und 1 vom Arduino-Board nicht zu verwenden. Die werden für die Datenübertragung zum Computer verwendet und können ziemlich unvorhersehbares Verhalten zeigen. Hier der Code:

    int encoder0PinA = 3;
    int encoder0PinB = 4;
    
    int messungPin1 = LOW;
    int messungPin1Alt = LOW;
    
    int encoderWert = 0;
    
    void setup() {
      pinMode(encoder0PinA, INPUT_PULLUP);
      pinMode(encoder0PinB, INPUT_PULLUP);
      Serial.begin(115200);
    }
    
    void loop() {
      messungPin1 = digitalRead(encoder0PinA);
      if ((messungPin1 == HIGH) && (messungPin1Alt == LOW)) {
        if (digitalRead(encoder0PinB) == LOW) {
          encoderWert--;
        } else {
          encoderWert++;
        }
        Serial.println(encoderWert);
      }
      messungPin1Alt = messungPin1;
    }

    BTW: Dieses Verfahren ist nicht sehr präzise und das Arduino muss die ganze Zeit »zuhören«, was das Programm langsam macht. Wenn dich das stört, gibt es Programm-Bibliotheken, die da Abhilfe schaffen oder du nutzt die Interrupts des Arduinos. Ich hab hier mal was rüber geschrieben: Arduino-Encoder

    Ich hoffe, das hilft dir schon mal weiterhilft :)

    Liebe Grüße

    • Diese Antwort wurde geändert vor 2 weeks, 5 days von Stefan Hermann.
    #6620
    Stefan Hermann
    Keymaster

    Ach so: Die Schaltung geht jetzt vom GND in den mittleren Anschluss des Encoders, die äußeren Anschlüsse sind mit den Arduino-Pins 3 und 4 verbunden.

Ansicht von 3 Beiträgen - 1 bis 3 (von insgesamt 3)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.