Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

In diesem Tutorial lernen Sie, wie ein Drehgeber (Rotary Encoder) funktioniert und wie man ihn mit Arduino einsetzt. Sie können das folgende Video ansehen oder die schriftliche Anleitung unten lesen.

Überblick

Ein Drehgeber ist ein Positionssensor zur Bestimmung des Winkelpositions einer rotierenden Welle. Er erzeugt ein elektrisches Signal (analog oder digital) entsprechend der Drehbewegung.

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Es gibt viele Typen, klassifiziert nach Ausgangssignal oder Sensortechnologie. Der hier verwendete inkrementelle Drehgeber ist der einfachste Positionssensor zur Drehmessung.

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Er wird auch Quadratur-Encoder oder inkrementeller Drehgeber genannt; sein Ausgang ist eine Reihe von Rechteckimpulsen.

Funktionsweise des Drehgebers

Sehen wir uns den Encoder genauer an. Die Rechteckimpulse entstehen so: Der Encoder hat eine Scheibe mit gleichmäßig verteilten Kontaktzonen, die mit dem gemeinsamen Pin C und zwei separaten Kontakten A und B verbunden sind (siehe Abbildung).

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Beim Drehen der Scheibe machen die Pins A und B nacheinander Kontakt mit dem gemeinsamen Pin, wodurch zwei Rechtecksignal-Ausgänge erzeugt werden.

Jeder der beiden Ausgänge kann zur Positionsbestimmung genutzt werden, indem man die Impulse zählt. Für die Drehrichtung müssen jedoch beide Signale gleichzeitig betrachtet werden.

Die beiden Signale sind um 90° phasenverschoben. Dreht sich der Encoder im Uhrzeigersinn, liegt Ausgang A vor Ausgang B.

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Zählt man die Schritte bei jedem Signalwechsel (High→Low oder Low→High), haben die beiden Signale in diesem Moment entgegengesetzte Werte. Bei Gegenuhrzeigersinn sind die Werte gleich. Daraus lässt sich einfach die Drehrichtung programmieren.

Drehgeber Arduino Beispiel

Praktisches Beispiel mit Arduino. Das verwendete Modul kommt auf einem Breakout-Board mit fünf Pins: Ausgang A, Ausgang B, Taster-Pin, VCC, GND.

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Die Ausgänge können an beliebige digitale Pins des Arduino angeschlossen werden.

Benötigte Komponenten:

  • Drehgeber-Modul
  • Arduino Board
  • Steckbrett und Jumper-Kabel

Quellcode

Hier der Arduino-Code:

/* Arduino Rotary Encoder Tutorial
 * by Dejan Nedelkovski, www.HowToMechatronics.com */
#define outputA 6
#define outputB 7
int counter = 0;
int aState;
int aLastState;
void setup() {
  pinMode(outputA, INPUT);
  pinMode(outputB, INPUT);
  Serial.begin(9600);
  aLastState = digitalRead(outputA); // Initialzustand von Ausgang A lesen
}
void loop() {
  aState = digitalRead(outputA); // Aktuellen Zustand lesen
  // Wenn vorheriger und aktueller Zustand unterschiedlich: Impuls erfolgt
  if (aState != aLastState) {
    // Wenn Ausgang B ungleich Ausgang A: Uhrzeigersinn
    if (digitalRead(outputB) != aState) {
      counter++;
    } else {
      counter--;
    }
    Serial.print("Position: ");
    Serial.println(counter);
  }
  aLastState = aState; // Vorherigen Zustand aktualisieren
}Code language: Arduino (arduino)

Code-Beschreibung: Pins definieren, Variablen anlegen. Im setup() Pins als Inputs, serielle Kommunikation starten, Initialwert von Ausgang A in aLastState speichern.

Im loop() lesen wir Ausgang A erneut in aState. Bei Drehung wird ein Impuls erzeugt – die Werte unterscheiden sich, der erste if wird wahr. Der zweite if bestimmt die Richtung: Unterscheidet sich B von A, wird der Zähler erhöht, sonst verringert. Nach Ausgabe auf Serial Monitor wird aLastState mit aState aktualisiert.

Laden Sie den Code hoch, öffnen Sie den Serial Monitor und drehen Sie am Encoder – die Werte erscheinen. Mein Modul erzeugt 30 Zählungen pro Volldrehung.

Weiterführend: Ultraschallsensor HC-SR04 und Arduino – Kompletter Leitfaden

Beispiel 2 – Schrittmotorsteuerung mit Drehgeber

Zusätzlich zum Basisbeispiel steuern wir hier einen Schrittmotor per Drehgeber.

Drehgeber (Rotary Encoder) mit Arduino meistern: Funktionsweise & Integration

Quellcode:

/* Stepper Motor using a Rotary Encoder
 * by Dejan Nedelkovski, www.HowToMechatronics.com */
#include <LiquidCrystal.h>
LiquidCrystal lcd(1, 2, 4, 5, 6, 7);
#define stepPin 8
#define dirPin 9
#define outputA 10
#define outputB 11
int counter = 0;
int angle = 0;
int aState;
int aLastState;
void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
  pinMode(outputA, INPUT);
  pinMode(outputB, INPUT);
  aLastState = digitalRead(outputA);
  lcd.begin(16,2);
}
void loop() {
  aState = digitalRead(outputA);
  if (aState != aLastState) {
    if (digitalRead(outputB) != aState) {
      counter++;
      angle++;
      rotateCW();
    } else {
      counter--;
      angle--;
      rotateCCW();
    }
    if (counter >= 30) counter = 0;
    lcd.clear();
    lcd.print("Position: ");
    lcd.print(int(angle * (-1.8)));
    lcd.print("deg");
    lcd.setCursor(0,0);
  }
  aLastState = aState;
}
void rotateCW() {
  digitalWrite(dirPin, LOW);
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(2000);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(2000);
}
void rotateCCW() {
  digitalWrite(dirPin, HIGH);
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(2000);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(2000);
}Code language: Arduino (arduino)

Fragen gerne in den Kommentaren!

Herstellungsprozess

  1. C# Queues meistern: Enqueue, Dequeue und First-In-First-Out Operationen erklärt
  2. Arduino & MPU6050: Präzise Servomotor-Steuerung mit SG90 & MG996R
  3. Präzises DIY-Messrad mit Arduino Nano und Drehgeber
  4. u-blox LEA-6H 02 GPS-Modul: Arduino & Python Integrationsanleitung
  5. Temperatur & Luftfeuchte mit DHT11 auf Blynk auslesen – Arduino-Tutorial Schritt für Schritt
  6. Thermistor (NTC) einfach nutzen: Schritt-für-Schritt Arduino-Anleitung
  7. Musikalische Töne mit Arduino erzeugen: Schritt-für-Schritt-Anleitung
  8. Arduino an NMEA‑0183 anschließen: Schritt-für-Schritt-Anleitung
  9. Modbus auf Arduino meistern: Schritt-für-Schritt-Anleitung
  10. Sprachgesteuerte LEDs: Arduino Micro + BitVoicer Server für Spracherkennung