Encoder motor pololu

Buenas tardes

tengo un motor DC pololu con encoder
ya lo conecte, utulizo un arduino mega

este es mi codigo:

int input;
#define encoder0PinA  18  // cable amarillo pololu
#define encoder0PinB  19  // cable blanco pololu  //cable azul va a 5-12V, cable verde y negro a tierra, cable rojo 12V 
volatile  int encoder0Pos = 0;
int encoder0dir=0;


void setup() {
    pinMode(encoder0PinA, INPUT); 
  digitalWrite(encoder0PinA, HIGH);       // turn on pullup resistor
  pinMode(encoder0PinB, INPUT); 
  digitalWrite(encoder0PinB, HIGH);       // turn on pullup resistor

  attachInterrupt(4, doEncoder, CHANGE);  // encoder pin on interrupt 0 - pin 2
  Serial.begin (9600);
  Serial.println("start");                // a personal quirk

}
void loop() {}

  void doEncoder() {
  /* If pinA and pinB are both high or both low, it is spinning
   * forward. If they're different, it's going backward.
   *
   * For more information on speeding up this process, see
   * [Reference/PortManipulation], specifically the PIND register.
   */
  if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
    encoder0Pos++;
    encoder0dir=1;
  } else {
    encoder0Pos--;
    encoder0dir=-1;
  }

  Serial.println (encoder0Pos, DEC);
}


/* See this expanded function to get a better understanding of the
 * meanings of the four possible (pinA, pinB) value pairs:
 */
void doEncoder_Expanded(){
  if (digitalRead(encoder0PinA) == HIGH) {   // found a low-to-high on channel A
    if (digitalRead(encoder0PinB) == LOW) {  // check channel B to see which way
                                             // encoder is turning
      encoder0Pos = encoder0Pos - 1;         // CCW
    } 
    else {
      encoder0Pos = encoder0Pos + 1;         // CW
    }
  }
  else                                        // found a high-to-low on channel A
  { 
    if (digitalRead(encoder0PinB) == LOW) {   // check channel B to see which way
                                              // encoder is turning  
      encoder0Pos = encoder0Pos + 1;          // CW
    } 
    else {
      encoder0Pos = encoder0Pos - 1;          // CCW
    }

  }
  Serial.println (encoder0Pos, DEC);          // debug - remember to comment out
                                              // before final program run
  // you don't want serial slowing down your program if not needed
}

mi problema es que si le doy vueltas manualmente al encoder si lo da correctamente:

pero cuando le meto voltaje al motor, la lectura del encoder se paniquea :s:

que puede ser??

saludos xD

Que te parece un esquema de como has conectado motor y enconder.
Quien los alimenta? El Arduino? Si es el arduino, el enconder puede ser pero el motor no.
Tu dirás.

surbyte:
Que te parece un esquema de como has conectado motor y enconder.
Quien los alimenta? El Arduino? Si es el arduino, el enconder puede ser pero el motor no.
Tu dirás.

este es el diagrama de mi conexión :slight_smile:


los 5V del encoder estan conectados al arduino al igual que la tierra del encoder.

Los 5V del motor?
Probaste con los 5V del enconder a la fuente del motor? Solo es una prueba porque debería funcionar mejor con los 5V del arduino.
El enconder parece no tener electrónica.
Debería tener un par de resistencias de 10k a 5V del arduino.
prueba siguiendo este ejemplo respetando tus pines del ardino

le meti 12V al encoder y ya jalo :slight_smile: gracias