Potentiometrar och roterande omkodare ser nästan identiska ut vid första anblicken, men de fungerar på olika sätt. Upptäck hur du använder båda med en Arduino.
Bland elektroniska användarkontrollkomponenter utmärker sig vridknapparna som några av de mest tillfredsställande att använda. De kan komplettera pekskärmar och andra inmatningsenheter, samt fungera bra med knappar och strömbrytare. Men hur kan du lägga till en ratt till dina egna DIY Arduino-projekt?
Du har två huvudalternativ: en potentiometer eller en roterande encoder. Dessa komponenter kan se likadana ut, men metoderna för att använda dem med en enhet som ett Arduino-mikrokontrollkort är väldigt olika. Låt oss se hur de jämförs med varandra.
Potentiometrar vs. Roterande kodare
De flesta potentiometrar och roterande kodare som gör-det-själv-entusiaster kommer att stöta på kommer i en liknande formfaktor. De har en kubisk eller cylindrisk bas med kopplingsben fästa och ett runt skaft som vrids och har utskärningar för en keps att sitta på.
Vissa potentiometrar ser annorlunda ut, till exempel de som kommer i form av långa bilder, som de som finns på musikmixdäck. När det kommer till den roterande typen, men vid första anblicken ser de nästan identiska ut med roterande kodare, så du skulle bli förlåten om du tror att de är likadana.
Vad är en potentialmätare?
En potentiometer är i huvudsak ett variabelt motstånd. När axeln vrids ändras motståndet inuti potentiometern, vilket gör att en användare kan ändra egenskaperna hos en krets utan att behöva bygga om den. Potentiometrar kan vara både analoga och digitala, men digitala potentiometrar efterliknar analoga och detta gör dem väldigt lika att använda.
Potentiometrar har alltid en definierad start- och slutpunkt där axeln inte längre kan vridas. Vissa potentiometrar har en ojämn känsla när de vrids, men många är också släta, som de som finns på gamla stereoapparater.
Trots att de är analoga fungerar potentiometrar bra med mikrokontroller. Du kan enkelt ställ in en potentiometer med en Raspberry Pi Pico eller Arduino.
Vad är en roterande kodare?
Roterande omkodare bestämmer positionen för sin axel med hjälp av en sensor för att ge en analog eller digital signal till enheten de är anslutna till. Detta talar om för enheten i vilken position kodaren är. Vid sidan av den roterande axeln har roterande pulsgivare vanligtvis även en inbyggd knapp som manövreras genom att axeln trycks nedåt.
Till skillnad från potentiometrar kan roterande omkodare vridas utan att stanna, och de har nästan alltid taktila stötar för var och en av axelns positioner. Många moderna bilar använder roterande kodare för att styra sina underhållningssystem.
Hur man använder en potentiometer med en Arduino
Tack vare deras enkla design är det enkelt att använda en potentiometer med en Arduino. Din potentiometer har tre kontakter: jord, utgång och vref. Jord- och vref-stiften ansluts till GND- respektive 5V-kontakterna på din Arduino, medan potentiometerns utgångsstift ansluts till en av de analoga ingångarna på ditt kort.
Arduino Potentiometerkod
Din Arduino potentiometerkod börjar med det grundläggande uppstart() och slinga() mall som du kommer att se när du skapar en ny fil i Arduino IDE. Lägg först till a konst int variabel i början av koden för att registrera pottens analoga stiftanslutning – i det här fallet A0.
konstint potentiometer = A0;
Efter detta har uppstart() Funktionen är enkel: du behöver bara deklarera din potentiometers stift som en ingång. Du kan också starta en seriell anslutning om du vill skicka data till din PC för diagnostik.
tomhetuppstart(){
pinMode (potentiometer, INPUT);
Serie.Börja(9600);
}
Därefter är det dags att ställa in slinga() fungera. Börja med att skapa en int variabel med hjälp av analogRead() funktion för att lagra positionen för din potentiometer. Efter detta kan du använda Karta() funktion för att minska storleken på värdet du har att göra med – i det här exemplet för att matcha PWM-specifikationer, till exempel för att styra ljusstyrkan på en LED. Lägg till en kort fördröjning för att säkerställa stabilitet.
tomhetslinga(){
int potentiometerValue = analogRead (potentiometer);
karta (potentiometerValue, 0, 1023, 0, 255);
Serie.println(potentiometerVärde);
fördröjning (10);
}
Nu när du har positionen för din potentiometer kan du använda den med andra delar av koden. Till exempel en om uttalande skulle fungera bra för att trigga kod när potentiometern är i en specifik position.
konstint potentiometer = A0;
tomhetuppstart(){
pinMode (potentiometer, INPUT);
Serie.Börja(9600);
}
tomhetslinga(){
int potentiometerValue = analogRead (potentiometer);
karta (potentiometerValue, 0, 1023, 0, 255);
Serie.println(potentiometerVärde);
fördröjning (10);
}
Hur man använder en roterande kodare med en Arduino
Roterande kodare kräver mer intrikat kod än potentiometrar, men de är fortfarande ganska lätta att arbeta med. Din roterande encoder har fem stift: jord, VCC, ett knappstift (SW), utgång A (CLK) och utgång B (DT). Jord- och VCC-stiften ansluts till jord- respektive 5V-kontakterna på din Arduino, medan SW-, CLK- och BT-stiften ansluts till individuella digitala kontakter på Arduino.
Arduino Rotary Encoder-kod
För att göra vår kod enklare och lättare att arbeta med kommer vi att använda SimpleRotary Arduino-biblioteket skapat av MPrograms på GitHub. Se till att du har det här biblioteket installerat innan du börjar arbeta med din kod.
Ungefär som din potentiometerkod kan du starta ditt roterande kodarskript med den grundläggande Arduino uppstart() och slinga() funktionsmall. Börja med att deklarera SimpleRotary-biblioteket och tilldela dina kodningsstift i denna ordning; CLK, DT och SW.
#omfatta
EnkelRotary roterande(1,2,3);
Du behöver inte lägga till något i din uppstart() funktion såvida du inte vill använda den seriella monitorn för att diagnostisera din roterande encoder.
tomhetuppstart(){
Serie.Börja(9600);
}
De slinga() funktion är en annan historia. Bestämning av pulsgivaraxelns rotation börjar med a rotary.rotate() funktionsanrop som är tilldelat en int variabel. Om resultatet är 1, vrids kodaren medurs. Om resultatet är 2, vrider kodaren moturs. Resultatet blir alltid 0 om kodaren inte har vridits sedan den senaste kontrollen.
Du kan använda om satser för att trigga annan kod beroende på riktningen för kodarens rotation.
tomhetslinga(){
int encoderRotation;
encoderRotation = rotary.rotate();if (encoderRotation == 1) {
Serial.println("medurs");
}
if (encoderRotation == 2) {
Serial.println("moturs");
}
}
Du måste också lägga till lite kod för din kodares knapp till slinga() fungera. Denna process är väldigt lik, förutom att du kommer att använda rotary.push() funktion, snarare än rotary.rotate().
tomhetslinga(){
int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("knapp nedtryckt");
}
}
Det här skriptet är ganska enkelt, och du kan göra mycket för att göra det till ditt eget. Det är väl värt att kolla in SimpleRotary-projektdokumentationen för att säkerställa att du använder alla dess nyckelfunktioner. När du har satt ihop den ska din kodningskod se ut så här.
#omfatta
EnkelRotary roterande(1,2,3);tomhetuppstart(){
Serie.Börja(9600);
}tomhetslinga(){
int encoderRotation;
encoderRotation = rotary.rotate();if (encoderRotation == 1) {
Serial.println("medurs");
}if (encoderRotation == 2) {
Serial.println("moturs");
}int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("knapp nedtryckt");
}
}
Hur man väljer mellan potentiometrar och roterande kodare för projekt
Som du kan se fungerar roterande omkodare och potentiometrar helt olika. Båda dessa komponenter ger dig nya sätt att styra dina elektronikprojekt, men vilket ska du välja?
Potentiometrar är prisvärda och lätta att använda, men tillåter bara ett begränsat ingångsintervall. Detta gör dem bra när du vill styra ljusstyrkan på en LED, eller höja och sänka strömmen till specifika komponenter och andra liknande uppgifter.
Roterande omkodare ger mycket mer utrymme än potentiometrar. Införandet av en tryckknapp gör att de är utmärkta för menykontrollsystem, som man ser i många moderna bilar. Denna typ av komponent har blivit mycket populär i det mekaniska tangentbordsbygget. Du kan till och med bygga en liten macropad med inbyggd encoder.
Liknande utseende, olika komponenter
Med all denna information under bältet bör du vara redo att sätta igång med ett elektronikprojekt med en potentiometer eller roterande encoder. Dessa komponenter kan ge dig massor av kontroll över kretsarna du bygger, men du måste se till att du väljer rätt alternativ för ditt projekt.