ESP32 - Potenciómetro acciona el servomotor

Este tutorial te enseña cómo usar un ESP32 con el potenciómetro para controlar un servomotor. En detalle:

También aprendemos cómo convertir el valor analógico en tensión y luego usar el umbral de tensión para controlar el LED:

Si quieres controlar el ángulo del servomotor en proporción al valor del potenciómetro, consulta el tutorial ESP32 - Motor de servomotor controlado por potenciómetro.

Acerca del servomotor y del potenciómetro

Tenemos tutoriales específicos sobre el servomotor y el potenciómetro. Cada tutorial contiene información detallada e instrucciones paso a paso sobre la disposición de pines del hardware, el principio de funcionamiento, la conexión de cableado al ESP32 y el código para ESP32... Obtén más información sobre ellos en los siguientes enlaces:

Diagrama de Cableado

Diagrama de cableado de ESP32, potenciómetro y servomotor

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Código ESP32 - Umbral analógico

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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 }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Realiza el cableado tal como se muestra en la imagen anterior.
  • Conecta la placa ESP32 a tu PC mediante un cable micro USB.
  • Abre Arduino IDE en tu PC.
  • Selecciona la placa ESP32 correcta (p. ej. ESP32 Dev Module) y el puerto COM.
  • Haz clic en el icono Libraries en la barra izquierda del Arduino IDE.
  • Escribe ESP32Servo en la caja de búsqueda, luego busca la biblioteca de servomotores de Kevin Harrington y John K. Bennett.
  • Haz clic en el botón Install para instalar la biblioteca de servomotores para ESP32.
Biblioteca de servomotores para ESP32
  • Copie el código anterior y péguelo en el IDE de Arduino.
  • Compilar y subir el código a la placa ESP32 haciendo clic en el botón Subir en el IDE de Arduino.
  • Gire el potenciómetro.
  • Observe que el servomotor está girando.

Código ESP32 - Umbral de voltaje

El valor analógico leído del potenciómetro se convierte a voltaje, y luego el voltaje se compara con un umbral de voltaje. Si excede el umbral, activa un servomotor.

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/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; }

※ Nota:

Este tutorial utiliza la función analogRead() para leer valores de un ADC (Convertidor Analógico-Digital) conectado a un potenciómetro. El ADC del ESP32 es bueno para proyectos que no requieren alta precisión. Sin embargo, para proyectos que necesitan mediciones precisas, tenga en cuenta:

  • El ADC del ESP32 no es perfectamente preciso y podría necesitar calibración para obtener resultados correctos.
  • Cada placa ESP32 puede variar un poco, por lo que es necesario calibrar el ADC para cada placa individual.
  • La calibración puede ser difícil, especialmente para principiantes, y podría no dar siempre exactamente los resultados que deseas.

Para proyectos que requieren alta precisión, considera usar un ADC externo (p. ej. ADS1115) con el ESP32 o usar un Arduino, que tiene un ADC más fiable. Si aún desea calibrar el ADC del ESP32, consulte ESP32 ADC Calibration Driver

Video Tutorial

Estamos considerando crear tutoriales en video. Si considera que los tutoriales en video son importantes, suscríbase a nuestro canal de YouTube para motivarnos a crear los videos.

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!