Quadrature Encoder
This installment of Scott's bread boarding adventures, involves a quadrature encoder. I'm not sure where I got this one, and there are no part numbers, so no datasheet. My version is a 20 steps per revolution, no detent, and a momentary push button on top. I bent the two structural legs out to the side to make affixing easier.
The easy part of the project is the code. There are a lot of ways to get this running, but the easiest and most reliable is to grab a copy of Keith Neufeld's excellent library.
I found that my encoder uses a maximum of 0.3mA.
Use a current limiting resistor on the momentary switch side to reduce power. I used a 20k resistor. On some designs you might need to include a pull-up resistor, but I used the internal resistors of the ATMEGA168 processor.
extern \"C\" { #include \"WConstants.h\" } #include \"Quadrature.h\" unsigned int encoder1_pos; unsigned int encoder1_pos_old; Quadrature encoder1(7, 8); // Connected to pins 7 and 8 const int pin_reset = 9; // Button on encoder sunk on pin 9 with current limiting resistor (22k) void setup() { encoder1.minimum(0); encoder1.maximum(100); encoder1.position(50); pinMode(pin_reset, INPUT); digitalWrite(pin_reset, HIGH); // Turn on internal pull up resistors Serial.begin (115200); } void loop() { char buf[127] = \"\"; if (digitalRead(pin_reset) == LOW) { encoder1.position(50); } //Check for change in position encoder1_pos = encoder1.position(); if (encoder1_pos != encoder1_pos_old) { encoder1_pos_old = encoder1_pos; for (int j=0; j<=encoder1_pos; j++) { buf[j] = \'=\'; } Serial.println(buf); } }
created: Dec. 1, 2013, 1:01 a.m.
modified: April 14, 2019, 12:50 a.m.