Hvad er forskellen mellem Arduino Potentiometer og Rotary Encoder

Hvad Er Forskellen Mellem Arduino Potentiometer Og Rotary Encoder



Potentiometre og roterende encodere bruges begge til at detektere rotation eller føle position. De er elektromekaniske enheder, der anvendes med forskellige anvendelser inden for elektronik. De kan også forbindes med Arduino for at lave forskellige projekter. Denne artikel skal demonstrere de grundlæggende forskelle mellem et potentiometer og en roterende encoder.

Hvad er et potentiometer

Et potentiometer er en reostat, eller vi kan kalde det en variabel modstand. Værdien af ​​modstand varierer afhængigt af potentiometerets akselrotation. Potentiometre kan kun dreje til en indstillet afstand. Der findes både analoge og digitale potentiometre, men de ligner næsten hinanden. Analoge potentiometre kan forbindes med mikrocontrollere på Arduino, Raspberry Pi og andre enheder. Et potentiometer har tre ben, der er indgangsspændingsben Vcc, jordstift GND og indgangssignalben. Signalstiften giver input til Arduino.









Hvad er en Rotary Encoder

Roterende kodere registrerer drejeknappens vinkelposition og sender et signal til mikrocontrolleren eller enhver anden enhed, som de er forbundet til. Den har en skive med jævnt fordelte kontaktområder, der er forbundet med en fælles stift. Roterende encodere har også en indbygget trykknap eller drejekontakt, der giver ON og OFF signaler efter specifikke krav.







Pinout-diagram og pin-beskrivelse af roterende encoder

Diagrammet nedenfor viser stifterne på den roterende encoder. Disse stifter er beskrevet som følger:

Ud B eller CLK



Denne stift giver et output af, hvor mange gange knappen eller encoderen har drejet. Hver gang, når knappen drejes, fuldfører CLK en cyklus med HØJ og LAV. Det tælles som én rotation.

Ud A eller DT

Dette er den anden udgangsstift på den roterende encoder, der bestemmer rotationsretningen. Det halter 90° efter CLK-signalet. Derfor, hvis dens tilstand ikke er lig med CLKs tilstand, er rotationsretningen med uret, ellers mod uret.

Kontakt

Kontaktstiften bruges til at kontrollere, om trykknappen er trykket ned eller ej.

Vcc

Denne pin er tilsluttet en 5V forsyning

GND

Denne pin er forbundet til jorden

Forskellen mellem Potentiometer og Rotary Encoder

Specifikation Potentiometer Roterende encoder
Rotation Potentiometeret kan kun drejes i én retning, og det også i tre fjerdedele af en cirkel. Rotary Encoder er i stand til at rotere 360° kontinuerligt i både urets og mod urets retning.
Analog eller digital enhed Potentiometeret er for det meste en analog inputenhed, der måler ændringen i position gennem en ændring i værdien af ​​en modstand En roterende encoder er en digital input-enhed, der registrerer vinkelpositionen og giver digitale værdier.

Antal inputpositioner Et potentiometer har et uendeligt antal indgangspositioner, hvorpå der kan tages værdier, fordi det er en analog enhed Roterende encodere har et begrænset antal indgangspositioner.

Opsætning af potentiometer med Arduino

Potentiometeret er lettere at sætte op med en Arduino end en roterende encoder. Potentiometeret har kun tre ben VCC, GND og en INPUT pin, der er forbundet til Arduino. Potentiometerets grænseflade med Arduino er vist nedenfor:

Programmering af potentiometeret i Arduino er nemmere end den roterende encoder. Nedenfor er eksempler på syntakskoder for dem begge.

Eksempelkode for potentiometer

const int pot = A0; // Erklære input pin
ugyldig opsætning ( ) {
   pinMode ( gryde, INDGANG ) ; // Opsætningsværdi taget fra potentiometer som input
Serial.begin ( 9600 ) ;
}
ugyldig løkke ( ) {
int potValue = analogRead ( gryde ) ; // Aflæs værdi af input taget af potentiometer
kort ( potVærdi, 0 , 1023 , 0 , 255 ) ; // Skalering af værdien af ​​input til at matche 8 -bit
Serial.println ( potVærdi ) ; // Udskriver værdi, der blev indtastet til potentiometer
forsinke ( 100 ) ;
}

Potentiometerkoden er meget nem og enkel. Den analoge input-pin på Arduino er simpelthen erklæret at tage input fra potentiometeret, og derefter bruges analogRead() og map() funktioner til at læse og give den nøjagtige værdi af læsning fra potentiometeret.

Interfacing Rotary Encoder med Arduino

Den roterende encoder har fem ben. VCC og GND af den roterende encoder er forbundet med den for Arduino. De resterende ben CLK, DT og SW er forbundet til Arduinos digitale indgangsben.

Arduino-kode til Rotary Encoder

// Rotary Encoder-indgange
#define CLK_PIN 2
#define DT_PIN 3
#define SW_PIN 4
int tæller = 0 ;
int nuværendeCLKState;
int lastCLKState;
String currentDirection = '' ;
unsigned long lastButtonPressTime = 0 ;
ugyldig opsætning ( ) {
// Indstil encoderstifter som input
    pinMode ( CLK_PIN, INPUT ) ;
    pinMode ( DT_PIN, INPUT ) ;
    pinMode ( SW_PIN, INPUT_PULLUP ) ;
// Opsætning af seriel skærm
Serial.begin ( 9600 ) ;
// Læs starttilstanden for CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
ugyldig løkke ( ) {
// Læs den aktuelle tilstand af CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Hvis sidst og den nuværende tilstand af CLK er forskellige, derefter der opstod en puls
// Reager kun på 1 tilstandsændring for at undgå dobbelttælling
hvis ( nuværende CLKState ! = sidsteCLKState && nuværendeCLKState == 1 ) {
// Hvis DT-tilstanden er anderledes end CLK-tilstanden, derefter
// encoderen roterer mod uret, så sænk
hvis ( digitallæs ( DT_PIN ) ! = nuværende CLKState ) {
mod--;
nuværende retning = 'CCW' ;
} andet {
// Encoderen roterer med uret, så stigning
tæller++;
nuværende retning = 'CW' ;
}
Seriel.print ( 'Rotationsretning: ' ) ;
Seriel.print ( nuværende retning ) ;
Seriel.print ( ' | Tællerværdi: ' ) ;
Serial.println ( tæller ) ;
}
// Husk sidst CLK tilstand
lastCLKState = nuværendeCLKState;
// Læs knappens tilstand
int buttonState = digitalRead ( SW_PIN ) ;
// Hvis vi registrerer et LAVT signal, trykkes der på knappen
hvis ( knapState == LAV ) {
// Hvis der er gået 50 ms siden sidst LAV puls betyder det, at
// knappen er blevet trykket ned, sluppet og trykket igen
hvis ( millis ( ) - lastButtonPressTime > halvtreds ) {
Serial.println ( 'Knap trykket!' ) ;
}
// Husk sidst knaptryk begivenhed tid
lastButtonPressTime = millis ( ) ;
}
// Sætte i en lille forsinkelse til Hjælp afvise læsningen
forsinke ( 1 ) ;
}

I den ovenfor givne kode kontrolleres tilstanden af ​​CLK-stiften i loop()-funktionen. Hvis den ikke er lig med dens tidligere tilstand, viser den, at drejeknappen har drejet. Nu, for at kontrollere retningen af ​​drejeknappen, sammenlignes den nuværende tilstand af CLK med tilstanden af ​​DT. Hvis begge tilstande er ulige, viser det, at knappen har drejet med uret, og dens værdi øges modsat for at vise drejeknappens position. I det modsatte tilfælde tæller dekrementer.

Ansøgninger

Potentiometre bruges hovedsageligt, hvor en kontrolfunktion er påkrævet. De bruges i volumenkontrol, LED lysstyrkekontrol. På den anden side tilbyder roterende encodere en bred vifte af applikationer. De bruges i robotteknologi, medicinsk udstyr, automatisering og spil.

Konklusion

Potentiometre og roterende encodere er begge særligt nyttige enheder inden for elektronik. Roterende encodere er avancerede sammenlignet med potentiometre, da de kan rotere kontinuerligt til 360°. På samme måde har de flere anvendelser i moderne elektronik, og de er lidt sværere at bruge end potentiometre .