Potentiometre og roterende encodere ser næsten identiske ud ved første øjekast, men de virker på forskellige måder. Opdag, hvordan du bruger begge dele med en Arduino.
Blandt elektroniske brugerkontrolkomponenter skiller drejeknapper sig ud som nogle af de mest tilfredsstillende at bruge. De kan komplementere berøringsskærme og andre inputenheder, samt fungere godt med knapper og kontakter. Men hvordan kan du tilføje en knap til dine egne DIY Arduino-projekter?
Du har to hovedmuligheder: et potentiometer eller en roterende encoder. Disse komponenter kan se ens ud, men metoderne til at bruge dem med en enhed som et Arduino-mikrocontrollerkort er meget forskellige. Lad os se, hvordan de sammenligner sig med hinanden.
Potentiometre vs. Roterende kodere
De fleste potentiometre og drejekodere, som gør-det-selv-entusiaster vil støde på, kommer i en lignende formfaktor. De har en kubisk eller cylindrisk base med forbindelsesben påsat, og et rundt skaft, der vrider sig og har udskæringer til en kasket at sidde på.
Nogle potentiometre ser anderledes ud, såsom dem, der kommer i form af lange dias, som dem, der findes på musikmixer. Når det kommer til den roterende type, ser de dog ved første øjekast næsten identiske ud med roterende encodere, så du ville blive tilgivet for at tro, at de er ens.
Hvad er et potentiometer?
Et potentiometer er i bund og grund en variabel modstand. Når akslen drejes, ændres modstanden inde i potentiometeret, hvilket giver en bruger mulighed for at ændre egenskaberne af et kredsløb uden at skulle genopbygge det. Potentiometre kan være både analoge og digitale, men digitale potentiometre efterligner analoge, og det gør dem meget ens at bruge.
Potentiometre har altid et defineret start- og slutpunkt, hvor akslen ikke længere kan drejes. Nogle potentiometre har en ujævn fornemmelse, når de drejes, men mange er også glatte, som dem der findes på gamle stereoanlæg.
På trods af at de er analoge, fungerer potentiometre godt med mikrocontrollere. Du kan sagtens opsæt et potentiometer med en Raspberry Pi Pico eller Arduino.
Hvad er en roterende encoder?
Roterende encodere bestemmer positionen af deres aksel ved hjælp af en sensor til at levere et analogt eller digitalt signal til den enhed, de er tilsluttet. Dette fortæller enheden, hvilken position koderen er i. Ved siden af den roterende aksel har roterende encodere normalt også en indbygget knap, der aktiveres ved at skubbe akslen nedad.
I modsætning til potentiometre kan roterende encodere dreje uden at stoppe, og de har næsten altid taktile bump for hver af akslens positioner. Mange moderne biler bruger roterende encodere til at styre deres underholdningssystemer.
Sådan bruger du et potentiometer med en Arduino
Takket være deres enkle design er det nemt at bruge et potentiometer med en Arduino. Dit potentiometer har tre stik: jord, udgang og vref. Jord- og vref-benene forbindes til henholdsvis GND- og 5V-stikkene på din Arduino, mens potentiometrets udgangsben forbindes til en af de analoge indgange på dit board.
Arduino Potentiometer kode
Din Arduino potentiometerkode starter med det grundlæggende Opsætning() og loop() skabelon, som du vil se, når du opretter en ny fil i Arduino IDE. Tilføj først a const int variabel i starten af koden for at registrere pottens analoge pin-forbindelse - i dette tilfælde A0.
konstint potentiometer = A0;
Efter dette er Opsætning() Funktionen er enkel: du skal blot angive dit potentiometers ben som input. Du kan også starte en seriel forbindelse, hvis du vil sende data til din pc til diagnosticering.
ugyldigOpsætning(){
pinMode (potentiometer, INPUT);
Seriel.begynde(9600);
}
Dernæst er det tid til at konfigurere loop() fungere. Start med at oprette en int variabel ved hjælp af analogRead() funktion til at gemme positionen af dit potentiometer. Efter dette kan du bruge kort() funktion til at reducere størrelsen af den værdi, du har med at gøre - i dette eksempel for at matche PWM-specifikationer, for eksempel for at kontrollere lysstyrken af en LED. Tilføj en kort forsinkelse for at sikre stabilitet.
ugyldigsløjfe(){
int potentiometerValue = analogRead (potentiometer);
kort (potentiometerVærdi, 0, 1023, 0, 255);
Seriel.println(potentiometerværdi);
forsinkelse (10);
}
Nu hvor du har positionen for dit potentiometer, kan du bruge det med andre dele af koden. For eksempel en hvis sætning ville fungere godt til at udløse kode, når potentiometeret er i en bestemt position.
konstint potentiometer = A0;
ugyldigOpsætning(){
pinMode (potentiometer, INPUT);
Seriel.begynde(9600);
}
ugyldigsløjfe(){
int potentiometerValue = analogRead (potentiometer);
kort (potentiometerVærdi, 0, 1023, 0, 255);
Seriel.println(potentiometerværdi);
forsinkelse (10);
}
Sådan bruger du en roterende encoder med en Arduino
Roterende indkodere kræver mere indviklet kode end potentiometre, men de er stadig ret nemme at arbejde med. Din roterende encoder har fem ben: jord, VCC, en knapben (SW), udgang A (CLK) og udgang B (DT). Jord- og VCC-benene forbindes til henholdsvis jord- og 5V-stikkene på din Arduino, mens SW-, CLK- og BT-benene forbindes til individuelle digitale stik på Arduino.
Arduino Rotary Encoder-kode
For at gøre vores kode enklere og nemmere at arbejde med, vil vi bruge SimpleRotary Arduino-biblioteket skabt af MPrograms på GitHub. Sørg for, at du har dette bibliotek installeret, før du begynder at arbejde på din kode.
Ligesom din potentiometerkode kan du starte dit roterende encoder-script med den grundlæggende Arduino Opsætning() og loop() funktionsskabelon. Start med at erklære SimpleRotary-biblioteket og tildel dine encoder-ben i denne rækkefølge; CLK, DT og SW.
#omfatte
SimpleRotary roterende(1,2,3);
Du behøver ikke tilføje noget til din Opsætning() funktion, medmindre du vil bruge den serielle monitor til at diagnosticere din roterende encoder.
ugyldigOpsætning(){
Seriel.begynde(9600);
}
Det loop() funktion er en anden historie. Bestemmelse af encoderakslens rotation starter med en rotary.rotate() funktionskald, der er tildelt en int variabel. Hvis resultatet er 1, drejer encoderen med uret. Hvis resultatet er 2, drejer encoderen mod uret. Resultatet vil altid være 0, hvis encoderen ikke har drejet siden sidste kontrol.
Du kan bruge hvis sætninger for at udløse anden kode afhængigt af koderens rotationsretning.
ugyldigsløjfe(){
int encoderRotation;
encoderRotation = rotary.rotate();if (encoderRotation == 1) {
Serial.println("med uret");
}
if (encoderRotation == 2) {
Serial.println("mod uret");
}
}
Du skal også tilføje noget kode til din encoder-knap til loop() fungere. Denne proces er meget ens, bortset fra at du vil bruge rotary.push() funktion i stedet for rotary.rotate().
ugyldigsløjfe(){
int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("knap trykket");
}
}
Dette script er ret simpelt, og du kan gøre meget for at gøre det til dit eget. Det er værd at tjekke SimpleRotary-projektdokumentationen for at sikre, at du bruger alle dens nøglefunktioner. Når den er sat sammen, skal din encoder-kode se sådan ud.
#omfatte
SimpleRotary roterende(1,2,3);ugyldigOpsætning(){
Seriel.begynde(9600);
}ugyldigsløjfe(){
int encoderRotation;
encoderRotation = rotary.rotate();if (encoderRotation == 1) {
Serial.println("med uret");
}if (encoderRotation == 2) {
Serial.println("mod uret");
}int encoderButton;
encoderButton = rotary.push();
if (encoderButton == 1) {
Serial.println("knap trykket");
}
}
Sådan vælger du mellem potentiometre og roterende indkodere til projekter
Som du kan se, fungerer roterende encodere og potentiometre helt anderledes. Begge disse komponenter giver dig nye måder at styre dine elektronikprojekter på, men hvilken skal du vælge?
Potentiometre er overkommelige og nemme at bruge, men tillader kun et begrænset inputområde. Dette gør dem gode, når du vil kontrollere lysstyrken på en LED eller hæve og sænke strømmen til specifikke komponenter og andre lignende opgaver.
Roterende encodere giver meget mere omfang end potentiometre. Inkluderingen af en trykknap betyder, at de er gode til menustyringssystemer, som det ses i mange moderne biler. Denne type komponent er blevet meget populær i det mekaniske tastaturbyggeri. Du kan endda bygge en lille macropad med indbygget encoder.
Lignende udseende, forskellige komponenter
Med alle disse informationer under bæltet burde du være klar til at komme i gang med et elektronikprojekt med et potentiometer eller en roterende encoder. Disse komponenter kan give dig masser af kontrol over de kredsløb, du bygger, men du skal sikre dig, at du vælger den rigtige mulighed for dit projekt.