ESP32 - Potentiometer stuurt servo motor aan

Deze tutorial legt uit hoe u de ESP32 kunt gebruiken met een potentiometer om een servo motor aan te sturen. In detail:

We leren ook hoe we de analoge waarde omzetten naar spanning en vervolgens de spanningsdrempel gebruiken om een LED te besturen:

Als u de hoek van de servo motor proportioneel wilt aansturen op basis van de waarde van de potentiometer, zie dan de tutorial ESP32 - Servo motor controlled by potentiometer.

Over Servo Motor en Potentiometer

We hebben specifieke tutorials over servo motor en potentiometer. Elke tutorial bevat gedetailleerde informatie en stapsgewijze instructies over hardware pinout, werkingsprincipe, bedradingsverbindingen met ESP32, ESP32 code ... Leer meer over deze onderwerpen via de volgende links:

Bedradingsschema

ESP32 Potentiometer Servo Motor Bedradingsschema

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.

ESP32 Code - Analoge Drempelwaarde

/* * 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-triggers-servo-motor */ #include <ESP32Servo.h> #define POTENTIOMETER_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to Potentiometer pin #define SERVO_PIN 26 // ESP32 pin GPIO26 connected to Servo Motor's pin #define ANALOG_THRESHOLD 1000 Servo servo; // create servo object to control a servo void setup() { // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); } void loop() { int analogValue = analogRead(POTENTIOMETER_PIN); // read the input on analog pin if (analogValue > ANALOG_THRESHOLD) servo.write(90); // rotate servo motor to 90 degree else servo.write(0); // rotate servo motor to 0 degree }

Snelle Stappen

  • Als dit de eerste keer is dat u met ESP32 werkt, bekijk dan hoe u de omgeving instelt voor ESP32 in Arduino IDE.
  • Maak de bedrading zoals op de bovenstaande afbeelding.
  • Verbind de ESP32 board met uw pc via een micro USB-kabel.
  • Open Arduino IDE op uw pc.
  • Selecteer de juiste ESP32 board (bijv. ESP32 Dev Module) en de juiste COM-poort.
  • Klik op het Libraries-icoon in de linkerzijbalk van Arduino IDE.
  • Typ ESP32Servo in het zoekvak en zoek naar de servo library van Kevin Harrington, John K. Bennett.
  • Klik op de knop Install om de servo motor library voor ESP32 te installeren.
ESP32 servo motor library
  • Kopieer de bovenstaande code en plak deze in Arduino IDE.
  • Compileer en upload de code naar de ESP32 board door te klikken op de knop Upload in Arduino IDE.
  • Draai aan de potentiometer.
  • Zie de servo motor draaien.

ESP32 Code - Spanning Drempelwaarde

De analoge waarde die van de potentiometer wordt gelezen, wordt omgezet naar spanning, en vervolgens wordt deze spanning vergeleken met een spanningsdrempel. Als deze de drempel overschrijdt, activeert het een servo motor

/* * 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-triggers-servo-motor */ #include <ESP32Servo.h> #define POTENTIOMETER_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to Potentiometer pin #define SERVO_PIN 26 // ESP32 pin GPIO26 connected to Servo Motor's pin #define VOLTAGE_THRESHOLD 2.5 // Voltages Servo servo; // create servo object to control a servo void setup() { // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); servo.attach(SERVO_PIN); // attaches the servo on pin 9 to the servo object servo.write(0); } void loop() { int analogValue = analogRead(POTENTIOMETER_PIN); // read the input on analog pin float voltage = floatMap(analogValue, 0, 1023, 0, 5); // Rescale to potentiometer's voltage if (voltage > VOLTAGE_THRESHOLD) servo.write(90); // rotate servo motor to 90 degree else servo.write(0); // rotate servo motor to 0 degree } 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; }

※ Notiz:

In deze tutorial wordt de functie analogRead() gebruikt om waarden te lezen van een ADC (Analog-to-Digital Converter) verbonden met een potentiometer. De ESP32 ADC is geschikt voor projecten die GEEN hoge nauwkeurigheid vereisen. Voor projecten die precieze metingen nodig hebben, let op:

  • De ESP32 ADC is niet perfect accuraat en kan kalibratie nodig hebben voor juiste resultaten. Elke ESP32 board kan enigszins verschillen, dus u moet de ADC voor elk board afzonderlijk kalibreren.
  • Kalibratie kan lastig zijn, vooral voor beginners, en geeft mogelijk niet altijd exact de gewenste resultaten.

Voor projecten die hoge precisie vereisen, overweeg het gebruik van een externe ADC (bijv. ADS1115) met de ESP32 of gebruik een Arduino, die een betrouwbaardere ADC heeft. Als u toch de ESP32 ADC wilt kalibreren, raadpleeg dan de ESP32 ADC Kalibratiesoftware

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!