Categorieën

Arduino / Modules / Rotary encoder

Rotary encoder

De rotary encoder kan onder meer gebruikt worden om snelheid en/of omwentelingen te meten.

Status

Op voorraad

€ 1,95
Prijs per stuk

 

Aantal: 
+ in winkelwagentje
Op verlanglijst
 

Rotary encoder

Werkspanning: 5V
De rotary encoder kan onder meer gebruikt worden om snelheid en/of omwentelingen te meten.
Bij een rotary encoder hebben we twee blokvormige golf-outputs (A en B) die 90 graden met elkaar uit fase zijn. Het aantal pulsen of stappen die worden gegenereerd per omwenteling kan variëren. De rotary encoder van Sparkfun bijvoorbeeld heeft 12 stappen, maar andere kunnen er meer of minder hebben. Het diagram hieronder toont de de relatie van de fasen A en B tot elkaar als de encoder met de klok mee wordt gedraaid of juist andersom.
Rotary Encoder Phase Pulses
Iedere keer als de A-signaalpuls van positief naar 0 gaat, lezen we de waarde van de B-puls uit. Wz zien dat wanneer de encoder met de klok mee wordt gedraaid, de B-puls altijd positief is. Bij het draaien tegen de klok in, is de B-puls negatief. Door het monitoren van beide outputs met een microcontroller (Arduino), kunnen we de draairichting bepalen en door het bijhouden van het aantal A-pulsen, ook hoever er is gedraaid. We kunnen nog een stap verder gaan en de frequentie van de pulsen tellen om te bepalen hoe snel er is gedraaid. We kunnen concluderen, dat een rotary encoder een groot aantal voordelen heeft ten opzichte van een potmeter.

Aansluiten op een Arduino Mega
 

Encoder pins

Arduino pins

CLK

19

DT

18

SW

28

+,VCC

5V

GND

GND















Voorbeeld code (met 16 x 2 LCD scherm)

In de uitvoer op het scherm ziet u: "Martoparts vrij" De helderheid van het scherm moet ongeveer 50% zijn. Als u de knop indrukt is de uitvoer "Martoparts knop".
Als u de encoder naar rechts draait, wordt het beeld helderder, naar links wordt het donkerder.


Sketch:

    // Zet hier de library code:
    #include

    #include
    #define PWM_LED_PIN 3
    #define PIN_LCD_RS 39
    #define PIN_LCD_EN 41
    #define PIN_LCD_D4 43
    #define PIN_LCD_D5 45
    #define PIN_LCD_D6 47
    #define PIN_LCD_D7 49
    #define PIN_ENCODER_CLK 19
    #define PIN_ENCODER_DT 18
    #define PIN_ENCODER_SW 28
    // initialiseer de library met de pinnummers
    LiquidCrystal lcd( PIN_LCD_RS, PIN_LCD_EN, PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7 );
    Encoder myEnc( PIN_ENCODER_DT, PIN_ENCODER_CLK );
    int Bright = 128;
    long oldPosition = 0;
    int i = 0;
    void setup() {   
      analogWrite( PWM_LED_PIN, Bright );
      
      lcd.begin(16, 2);
      lcd.print("Martoparts");
      lcd.setCursor(0, 1);  
    }
    void loop()
    {       
        lcd.setCursor(0, 1);
        long newPosition = myEnc.read() / 4;
       
        if (newPosition > oldPosition)
        {       
          lcd.print("                ");
          lcd.setCursor( 8 + (i % 8), 1 );
          lcd.print(">");
          Bright += 5;
          if ( Bright > 255 )
            Bright = 255;
        }
        else
        if (newPosition < oldPosition)
        {
          lcd.print("                ");
          lcd.setCursor( 7 - (i % 8), 1 );
          lcd.print("<");           
          Bright -= 5;
          if ( Bright < 0 )
            Bright = 0;
        }
        
        if ( newPosition != oldPosition)
        {
          i = (i + 1)%16;
          oldPosition = newPosition;
          analogWrite( PWM_LED_PIN, Bright );
        }
        
        lcd.setCursor(8, 0);
        if ( digitalRead(PIN_ENCODER_SW) == LOW )
          lcd.print("knop ");
        else
          lcd.print("vrij");  
            
        delay( 5 );
    }

Deze website gebruikt cookies om het bezoek te meten, we slaan geen persoonlijke gegevens op.
© Martoparts.nl