Este tutorial es parte de: Servomotores
Todos los videos relacionados con servomotores se listan aquí. Los enlaces a otros videos se encuentran debajo de este artículo.
Controlar un servomotor con potenciómetro y LCD1602 usando Arduino
En este tutorial aprenderemos cómo controlar un servomotor usando un potenciómetro y mostrar el valor del potenciómetro así como el ángulo del servomotor en una pantalla LCD1602. Este proyecto es una excelente manera de combinar múltiples componentes y comprender cómo pueden trabajar juntos para crear un sistema interactivo. Al final de este tutorial tendrás una configuración funcional que te permitirá ajustar el ángulo del servomotor con una perilla mientras muestra simultáneamente los valores en la LCD.

Antes de sumergirnos en el cableado y el código, es útil entender los componentes que vamos a usar. El potenciómetro actúa como una resistencia variable que puede ajustar la salida de voltaje según su posición, la cual usaremos para determinar el ángulo del servo. La LCD1602 mostrará el valor actual del potenciómetro y el ángulo correspondiente del servo. Puedes consultar el video (en el video a las 00:00) para una guía visual de todo el proceso.
Hardware explicado
Los principales componentes que utilizaremos en este proyecto son:
- Placa Arduino:Esto servirá como el controlador de todo el sistema, procesando las entradas del potenciómetro y controlando la posición del servo en función de esas entradas.
- Potenciómetro:Se utilizará un potenciómetro de 10 kΩ para proporcionar una entrada analógica al Arduino. Tiene tres terminales: uno conectado a 5 V, otro a tierra y el terminal central conectado a un pin analógico (A0) del Arduino.
- Servomotor:Este servo se controlará enviándole un ángulo en función de la posición del potenciómetro. El cable de señal se conecta a un pin digital del Arduino (pin 9).
- Pantalla LCD1602:Esta pantalla mostrará el valor del potenciómetro y el ángulo del servo. Se conecta a varios pines digitales del Arduino para su control.
El potenciómetro funciona variando la resistencia y, por tanto, la tensión en su terminal central, que el Arduino lee como una entrada analógica. El servomotor se controla enviándole una señal específica de modulación por ancho de pulso (PWM) que corresponde al ángulo deseado. La LCD1602 utiliza una biblioteca que nos permite controlar fácilmente su pantalla y mostrar información sobre el potenciómetro y el servomotor.
Detalles de la hoja de datos
| Fabricante | varios |
|---|---|
| Número de pieza | LM016L |
| Tensión lógica/IO | 5 V |
| Tensión de alimentación | 4.5 - 5.5 V |
| Corriente de salida (por canal) | hasta 2 mA |
| Corriente de pico (por canal) | 20 mA |
| Guía de frecuencia PWM | 50 Hz |
| Umbrales de la lógica de entrada | 0.3 × Vcon copia(bajo), 0.7 x Vcc(alto) |
| Caída de tensión / RDS(encendido) / saturación | 0.2 V máx. |
| Límites térmicos | 85 °C |
| Paquete | DIP de 16 pines |
| Notas / variantes | pantalla de 16x2 caracteres |
- Conecta el pin central del potenciómetro al pin analógico A0.
- Asegúrese de que el servo esté alimentado con una fuente de 5 V y conectado al pin digital 9.
- Utilice la biblioteca adecuada para la pantalla LCD y asegúrese de que esté incluida en su IDE de Arduino.
- Tenga cuidado con el cableado para evitar cortocircuitos, especialmente con las conexiones del servo.
- Verifique que la LCD esté inicializada correctamente en el código para evitar problemas de visualización.

Instrucciones de cableado
Para cablear los componentes entre sí, comienza conectando el potenciómetro. Conecta un pin exterior del potenciómetro al pin de 5V del Arduino, y el otro pin exterior a tierra. El pin central va al pin analógicoA0.
A continuación, para el servomotor, conecta el cable marrón o negro a tierra, el cable rojo al pin de 5V y el cable amarillo o naranja al pin digital9en el Arduino. Para la LCD1602, conecte elVDDpin a 5V,RWponer a tierra, yV0al pin central del potenciómetro para el ajuste del contraste. ConecteRSfijar12,ENfijar11,D4fijar5,D5sujetar4,D6fijar3, yD7fijar2.
También se recomienda incluir una resistencia de 220 ohmios en serie con el LED si está utilizando uno, conectándola a la fuente de 5 V. Además, se puede conectar un condensador de 470 µF entre la alimentación y la masa del servo para filtrar cualquier ruido durante su funcionamiento.
Ejemplos de código y guía paso a paso
El código comienza incluyendo las librerías necesarias e inicializando los pines para el LCD y el servo. El siguiente extracto muestra la configuración del LCD y del servo:
void setup() {
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}Este fragmento inicializa la pantalla LCD para 16 columnas y 2 filas, conecta el servo al pin 9 y muestra un mensaje de bienvenida en la LCD. Ellcd.clear()La función garantiza que cualquier mensaje anterior sea eliminado.
A continuación, el bucle lee continuamente el valor del potenciómetro y actualiza la posición del servomotor y la pantalla LCD:
void loop() {
val = analogRead(potpin); // reads the value of the potentiometer
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
lcd.setCursor(11, 0);
lcd.print(val);
lcd.setCursor(0, 1);
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
}Este bucle lee el valor del potenciómetro, lo mapea a un ángulo correspondiente para el servo y actualiza la pantalla LCD con tanto el valor del potenciómetro como el ángulo del servo. Eldelay(500)al final del bucle, evita que la pantalla se actualice demasiado rápido.
Demostración / Qué esperar
Cuando alimentes el sistema, la pantalla LCD mostrará "Robojax Servo Knob" durante 2 segundos, seguida por el valor del potenciómetro y el ángulo del servo. Al girar el potenciómetro, el ángulo del servo cambiará en consecuencia y el nuevo valor del potenciómetro se reflejará en la LCD. Si experimentas algún comportamiento inesperado, como que el servo se mueva en la dirección equivocada, revisa el cableado del potenciómetro y las conexiones del servo (en el video en 10:00).
Este tutorial es parte de: Servomotores
- Controlar un servomotor con pulsadores usando Arduino
- Control a Servo Motor with a Push Button: Move Servo and Return SPB-1
- Control a Servo Motor with a Push Button: Move Servo in One Direction SPB-2
- Controlling a Servo Motor with a Push Button: Move Servo While Button Is Pressed (SPB-3)
- Controlar un servomotor con un potenciómetro usando Arduino
- Controlando motores servo utilizando un control remoto por infrarrojos con Arduino
- Control de motor servo Arduino usando un potenciómetro
- Controlando la posición del servo con gestos de la mano para Arduino
- Controlling Two or More Servos with Potentiometers Using an Arduino
- How to Control a 360° Servo with Three Push-Button Switches
- How to Use Continuous 360° Servo with Arduino
- Código y vídeo de Arduino para el controlador de servos PCA9685 de 16 canales y 12 bits V1
- Build an Arduino Servo Toggle Switch with a Push Button
/*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 November 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
*/
// May 20, 2018 20:08
// Written by Ahmad S. for Robojax.com at Ajax, Ontario, Canada
// Watch the video for this code at https://youtu.be/DN1LPMSZtNA
// This code is taken from http://robojax.com/learn/arduino
#include <LiquidCrystal.h>
// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// start of servo settings *******
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = A0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int angle; // the angle servo is sent to
// END of servo settings *******
void setup() {
// Robojax Servo knob with LCD1602 Test
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
myservo.attach(9); // attaches the servo on pin 9 to the servo object
// Robojax Servo knob with LCD1602 Test
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Robojax Servo Knob");
delay(2000);
}
void loop() {
// Robojax Servo knob with LCD1602 Test
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
angle = map(val, 0, 1023, 0, 180); // scale it to use it with the servo (value between 0 and 180)
myservo.write(angle); // sets the servo position according to the scaled value
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pot. Value:");
// set the cursor to column 0, line 1
lcd.setCursor(11, 0);
lcd.print(val);
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print("Angle :");
lcd.setCursor(11, 1);
lcd.print(angle);
delay(500);
// Robojax Servo knob with LCD1602 Test
}
Recursos y referencias
-
ExternoBiblioteca LCD1602 (de GitHub)github.com
-
ExternoUso de la pantalla LCD LCD1602 para Arduinoyoutube.com
Archivos📁
No hay archivos disponibles.