Potentiometers en roterende encoders zien er op het eerste gezicht bijna identiek uit, maar ze werken op verschillende manieren. Ontdek hoe je beide kunt gebruiken met een Arduino.
Onder de elektronische gebruikersbesturingscomponenten vallen draaiknoppen op als een van de meest bevredigende om te gebruiken. Ze kunnen touchscreens en andere invoerapparaten aanvullen en werken ook goed samen met knoppen en schakelaars. Maar hoe kun je een knop toevoegen aan je eigen DIY Arduino-projecten?
Je hebt twee hoofdopties: een potentiometer of een roterende encoder. Deze componenten lijken misschien op elkaar, maar de methoden om ze te gebruiken met een apparaat zoals een Arduino-microcontrollerkaart zijn heel verschillend. Laten we eens kijken hoe ze zich met elkaar verhouden.
Potentiometers vs. Roterende encoders
De meeste potentiometers en roterende encoders die doe-het-zelvers tegenkomen, hebben een vergelijkbare vormfactor. Ze hebben een kubusvormige of cilindrische basis met daaraan bevestigde verbindingspoten, en een ronde schacht die draait en uitsparingen heeft voor een dop om op te zitten.
Sommige potentiometers zien er anders uit, zoals die in de vorm van lange dia's, zoals die op muziekmixers. Als het op het roterende type aankomt, lijken ze op het eerste gezicht bijna identiek aan roterende encoders, dus het zou je vergeven zijn te denken dat ze hetzelfde zijn.
Wat is een potentiometer?
Een potentiometer is in wezen een variabele weerstand. Terwijl de as wordt gedraaid, verandert de weerstand in de potentiometer, waardoor een gebruiker de eigenschappen van een circuit kan wijzigen zonder het opnieuw te hoeven opbouwen. Potentiometers kunnen zowel analoog als digitaal zijn, maar digitale potentiometers bootsen analoge potentiometers na en hierdoor lijken ze erg op elkaar.
Potentiometers hebben altijd een gedefinieerd begin- en eindpunt waar de as niet meer kan worden gedraaid. Sommige potentiometers voelen hobbelig aan als ze worden gedraaid, maar veel zijn ook glad, zoals die op oude stereo's.
Ondanks dat ze analoog zijn, werken potentiometers goed met microcontrollers. Je kunt gemakkelijk stel een potentiometer in met een Raspberry Pi Pico of Arduino.
Wat is een roterende encoder?
Roterende encoders bepalen de positie van hun as met behulp van een sensor om een analoog of digitaal signaal te geven aan het apparaat waarop ze zijn aangesloten. Dit vertelt het apparaat in welke positie de encoder zich bevindt. Naast de roterende as hebben roterende encoders meestal ook een ingebouwde knop die wordt bediend door de as naar beneden te duwen.
In tegenstelling tot potentiometers kunnen roterende encoders draaien zonder te stoppen, en ze hebben bijna altijd voelbare hobbels voor elk van de posities van de as. Veel moderne auto's gebruiken roterende encoders om hun entertainmentsystemen te bedienen.
Hoe een potentiometer te gebruiken met een Arduino
Dankzij hun eenvoudige ontwerp is het gebruik van een potentiometer met een Arduino eenvoudig. Uw potentiometer heeft drie aansluitingen: massa, uitgang en vref. De grond- en vref-pinnen worden respectievelijk aangesloten op de GND- en 5V-connectoren op uw Arduino, terwijl de uitgangspen van de potentiometer wordt aangesloten op een van de analoge ingangen op uw bord.
Arduino potentiometercode
Uw Arduino-potentiometercode begint met de basis opgericht() En lus() sjabloon die u zult zien wanneer u een nieuw bestand maakt in de Arduino IDE. Voeg eerst een toe const int variabele aan het begin van de code om de analoge penverbinding van de pot te registreren - in dit geval A0.
constint potentiometer = A0;
Hierna volgen de opgericht() functie is eenvoudig: u hoeft alleen de pin van uw potentiometer als invoer te declareren. U kunt ook een seriële verbinding starten als u gegevens naar uw pc wilt sturen voor diagnose.
leegteopgericht(){
pinMode (potentiometer, INPUT);
Serieel.beginnen(9600);
}
Vervolgens is het tijd om de lus() functie. Begin met het maken van een int variabele met behulp van de analoogLezen() functie om de positie van uw potentiometer op te slaan. Hierna kunt u de kaart() functie om de grootte van de waarde waarmee u te maken hebt te verkleinen - in dit voorbeeld om te voldoen aan de PWM-specificaties, bijvoorbeeld om de helderheid van een LED te regelen. Voeg een korte vertraging toe om stabiliteit te garanderen.
leegtelus(){
int potentiometerWaarde = analogRead (potentiometer);
kaart (potentiometerwaarde, 0, 1023, 0, 255);
Serieel.println(potentiometerWaarde);
vertraging (10);
}
Nu je de positie van je potentiometer hebt, kun je deze gebruiken met andere delen van de code. Bijvoorbeeld een als verklaring zou goed werken om code te activeren wanneer de potentiometer in een specifieke positie staat.
constint potentiometer = A0;
leegteopgericht(){
pinMode (potentiometer, INPUT);
Serieel.beginnen(9600);
}
leegtelus(){
int potentiometerWaarde = analogRead (potentiometer);
kaart (potentiometerwaarde, 0, 1023, 0, 255);
Serieel.println(potentiometerWaarde);
vertraging (10);
}
Een roterende encoder gebruiken met een Arduino
Roterende encoders vereisen meer ingewikkelde code dan potentiometers, maar ze zijn nog steeds vrij eenvoudig om mee te werken. Uw roterende encoder heeft vijf pinnen: aarde, VCC, een knoppen (SW), uitgang A (CLK) en uitgang B (DT). De aarde- en VCC-pinnen worden respectievelijk aangesloten op de grond- en 5V-connectoren op uw Arduino, terwijl de SW-, CLK- en BT-pinnen worden aangesloten op individuele digitale connectoren op de Arduino.
Arduino Rotary Encoder-code
Om onze code eenvoudiger en gemakkelijker te maken om mee te werken, gebruiken we de SimpleRotary Arduino-bibliotheek gemaakt door MPrograms op GitHub. Zorg ervoor dat u deze bibliotheek hebt geïnstalleerd voordat u aan uw code gaat werken.
Net zoals je potentiometercode, kun je je draai-encoderscript starten met de basis-Arduino opgericht() En lus() functie sjabloon. Begin met het declareren van de SimpleRotary-bibliotheek en wijs uw encoder-pinnen in deze volgorde toe; CLK, DT en SW.
#erbij betrekken
EenvoudigeRotary roterend(1,2,3);
U hoeft niets toe te voegen aan uw opgericht() functie tenzij u de seriële monitor wilt gebruiken om uw roterende encoder te diagnosticeren.
leegteopgericht(){
Serieel.beginnen(9600);
}
De lus() functie is een ander verhaal. Het bepalen van de rotatie van de encoder-as begint met a roterend.draaien() functieaanroep die is toegewezen aan een int variabel. Als het resultaat 1 is, draait de encoder rechtsom. Als het resultaat 2 is, draait de encoder tegen de klok in. Het resultaat is altijd 0 als de encoder niet is gedraaid sinds de laatste controle.
Je kunt gebruiken als instructies om andere code te activeren, afhankelijk van de draairichting van de encoder.
leegtelus(){
int encoderRotatie;
encoderRotation = roterend.roteren();als (encoderRotatie == 1) {
Serieel.println("met de klok mee");
}
als (encoderRotatie == 2) {
Serieel.println("tegen de klok in");
}
}
Je moet ook wat code toevoegen voor de knop van je encoder aan het lus() functie. Dit proces lijkt erg op elkaar, behalve dat u de roterend.push() functioneren, in plaats van roterend.draaien().
leegtelus(){
int encoderKnop;
encoderButton = draaiknop.duwen();
als (encoderButton == 1) {
Serieel.println("knop ingedrukt");
}
}
Dit script is vrij eenvoudig en je kunt er veel aan doen om het je eigen te maken. Het is de moeite waard om de SimpleRotary-projectdocumentatie te bekijken om er zeker van te zijn dat u alle belangrijke functies gebruikt. Eenmaal samengesteld, zou uw encodercode er als volgt uit moeten zien.
#erbij betrekken
EenvoudigeRotary roterend(1,2,3);leegteopgericht(){
Serieel.beginnen(9600);
}leegtelus(){
int encoderRotatie;
encoderRotation = roterend.roteren();als (encoderRotatie == 1) {
Serieel.println("met de klok mee");
}als (encoderRotatie == 2) {
Serieel.println("tegen de klok in");
}int encoderKnop;
encoderButton = draaiknop.duwen();
als (encoderButton == 1) {
Serieel.println("knop ingedrukt");
}
}
Hoe te kiezen tussen potentiometers en roterende encoders voor projecten
Zoals u kunt zien, werken roterende encoders en potentiometers heel anders. Beide componenten bieden u nieuwe manieren om uw elektronicaprojecten te besturen, maar welke moet u kiezen?
Potentiometers zijn betaalbaar en gemakkelijk te gebruiken, maar hebben slechts een beperkt invoerbereik. Dit maakt ze ideaal wanneer u de helderheid van een LED wilt regelen, of het vermogen naar specifieke componenten wilt verhogen of verlagen, en andere soortgelijke taken.
Roterende encoders bieden veel meer mogelijkheden dan potentiometers. De opname van een drukknop betekent dat ze geweldig zijn voor menubedieningssystemen, zoals te zien in veel moderne auto's. Dit type component is erg populair geworden in de bouwruimte voor mechanische toetsenborden. Je kan zelfs bouw een kleine macropad met een ingebouwde encoder.
Vergelijkbare look, verschillende componenten
Met al deze informatie onder uw riem, zou u klaar moeten zijn om aan de slag te gaan met een elektronicaproject met een potentiometer of roterende encoder. Deze componenten kunnen u veel controle geven over de circuits die u bouwt, maar u moet ervoor zorgen dat u de juiste optie kiest voor uw project.