ESP32 - Potentiometer

Deze tutorial laat u zien hoe u de ESP32 gebruikt met een potentiometer. We behandelen in detail:

Over de Potentiometer

De potentiometer (ook bekend als roterende hoeksensor) wordt gebruikt om instellingen te wijzigen (bijv. het volume van een speaker, kamertemperatuur, helderheid van een lamp...).

Potentiometer Pinout

Pinout Potentiometer

Een potentiometer heeft meestal 3 pinnen:

  • VCC pin: sluit deze pin aan op VCC (5V of 3,3V)
  • GND pin: sluit deze pin aan op GND (0V)
  • Output pin: levert de uitgangsspanning aan de analoge ingang van de ESP32.
Potentiometer Pinout

※ Notiz:

De GND- en VCC-pinnen zijn omwisselbaar.

Hoe de Potentiometer Werkt

De as van de potentiometer kan gedraaid worden van 0° (dichtst bij de GND-pin) tot een maximale hoek (dichtst bij de VCC-pin), genoemd ANGLE_MAX.

De spanning op de output pin is recht evenredig met de hoekpositie van de as en varieert van 0 tot VCC. De onderstaande tabel toont de relatie tussen hoek en spanning op de output pin:

Hoek Spanning
0V
ANGLE_MAX°VCC
hoek°hoek° × VCC / ANGLE_MAX°

※ Notiz:

De waarde van ANGLE_MAX is afhankelijk van de fabrikant.

Hoe Potentiometer Werkt

ESP32 - Roterende Potentiometer

De analoge ingangspin van de ESP32 zet de spanning (tussen 0V en 3,3V) om in een geheel getal (tussen 0 en 4095), genaamd ADC-waarde of analoge waarde.

We kunnen de output pin van de potentiometer verbinden met een analoge ingangspin van de ESP32 en vervolgens de analoge waarde vanaf deze pin uitlezen.

De analoge waarde kan worden herschaald naar een andere waarde. Enkele toepassingen:

  • Herschalen van de analoge waarde naar de hoek van de potentiometer.
  • Herschalen van de analoge waarde naar de spanning van de potentiometer.
  • Herschalen van de analoge waarde naar een instelwaarde (bijv. volume van een speaker, kamertemperatuur, helderheid van een lamp...)

Herschalen van het bereik

VAN NAAR
Hoek door gebruiker gedraaidANGLE_MAX°
Spanning van potentiometer pin 0V3,3V
ADC waarde uitgelezen door ESP32 04095
Instelwaarde omgezet door ESP32 VALUE_MINVALUE_MAX

Aansluitschema tussen Potentiometer en ESP32

  • Hoe u de ESP32 en potentiometer verbindt met een breadboard
ESP32 Potentiometer Aansluitschema

This image is created using Fritzing. Click to enlarge image

Als u niet weet hoe u ESP32 en andere componenten van stroom moet voorzien, vindt u instructies in de volgende tutorial: Hoe ESP32 van stroom te voorzien.

Hoe ESP32 en potentiometer aansluiten

Hoe Potentiometer te Programmeren

  • Lees de waarde van een input pin uit, verbonden met de output pin van de potentiometer, met behulp van de analogRead() functie.
analogValue = analogRead(36); // GPIO36
  • Schaal de waarde om naar de hoek van de potentiometer met behulp van de map() functie.
angle = map(analogValue, 0, 4095, 0, ANGLE_MAX);
  • Schaal om naar de spanning van de potentiometer:
voltage = map(analogValue, 0, 4095, 0, 3.3);
  • Schaal om naar een regelbare waarde (bijv. volume van stereo, helderheid, snelheid van een DC motor...)
value = map(analogValue, 0, 4095, VALUE_MIN, VALUE_MAX);
  • Bijvoorbeeld, herschalen naar de helderheid van een LED. Zoals in deze tutorial genoemd kan de helderheid van een LED geregeld worden met behulp van een PWM-waarde van 0 (altijd UIT) tot 255 (altijd AAN). Daarom kunnen we de analoge waarde mappen naar de helderheid van de LED (van UIT naar helderst) als volgt:
brightness = map(analogValue, 0, 4095, 0, 255);

Als u de LED wilt dimmen van nachtlampje tot helderst,

nightlight = 100; // afhankelijk van gewenste helderheid brightness = map(analogValue, 0, 4095, nightlight, 255);

※ Notiz:

De map() functie kan alleen gebruikt worden om een analoge waarde te herschalen naar een int of long type. Als de regelbare waarde een float type is, moet u in plaats van map() de functie floatMap() gebruiken.

floatMap() functie:

float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; }

ESP32 Code

/* * Deze ESP32 code is ontwikkeld door newbiely.nl * Deze ESP32 code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/tutorials/esp32/esp32-potentiometer */ float floatMap(float x, float in_min, float in_max, float out_min, float out_max) { return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; } // the setup routine runs once when you press reset: void setup() { // initialize serial communication at 9600 bits per second: Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); } // the loop routine runs over and over again forever: void loop() { // read the input on analog pin GPIO36: int analogValue = analogRead(36); // Rescale to potentiometer's voltage (from 0V to 3.3V): float voltage = floatMap(analogValue, 0, 4095, 0, 3.3); // print out the value you read: Serial.print("Analog: "); Serial.print(analogValue); Serial.print(", Voltage: "); Serial.println(voltage); delay(1000); }

Snelle Stappen

  • Als u voor het eerst met ESP32 werkt, bekijk dan hoe u de omgeving voor ESP32 instelt in Arduino IDE.
  • Kopieer de bovenstaande code en plak deze in Arduino IDE.
  • Compileer en upload de code naar het ESP32-board door te klikken op de Upload-knop in Arduino IDE
Arduino IDE Code Uploaden
  • Open de Seriële Monitor in Arduino IDE
Hoe seriële monitor openen in Arduino IDE
  • Draai aan de potentiometer
  • Bekijk het resultaat op de Seriële Monitor. Het ziet er als volgt uit:
COM6
Send
Analog: 0, Voltage: 0.00 Analog: 0, Voltage: 0.00 Analog: 126, Voltage: 0.62 Analog: 281, Voltage: 1.37 Analog: 517, Voltage: 2.53 Analog: 754, Voltage: 3.69 Analog: 906, Voltage: 4.43 Analog: 4095, Voltage: 3.30 Analog: 4095, Voltage: 3.30
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Notiz:

Deze tutorial gebruikt de functie analogRead() om waarden uit te lezen van een ADC (Analog-to-Digital Converter) die verbonden is met een potentiometer. De ESP32 ADC is geschikt voor projecten die GEEN hoge nauwkeurigheid vergen. Voor projecten waarbij precieze metingen nodig zijn, houd rekening met het volgende:

  • De ESP32 ADC is niet perfect nauwkeurig en kan kalibratie vereisen voor correcte resultaten. Elk ESP32-board kan iets verschillen, dus de ADC moet per afzonderlijk board gekalibreerd worden.
  • Kalibratie kan lastig zijn, vooral voor beginners, en levert niet altijd precies de gewenste resultaten op.

Voor projecten die een hoge precisie vereisen, overweeg het gebruik van een externe ADC (bijv. ADS1115) samen met de ESP32, of gebruik een Arduino met een betrouwbaardere ADC. Wilt u toch de ESP32 ADC kalibreren, raadpleeg dan de ESP32 ADC Calibration Driver.

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!