Lección 92: Controlando varios servos cada uno con potenciómetro | Curso de Arduino Paso a Paso
En este proyecto, aprenderás a construir un controlador de servo independiente y multicanal utilizando un Arduino Uno y dos potenciómetros. En lugar de un solo servo siguiendo un solo mando, esta guía te muestra cómo darle a cada servo su propia entrada analógica dedicada, lo que te permite controlar motores de servo de dos hasta seis de manera independiente y simultánea. Este es un componente fundamental para cualquier proyecto que requiera un control manual preciso de múltiples partes móviles.

Esta configuración es increíblemente versátil. Aquí hay algunas formas prácticas en las que puedes utilizarla:
- Robótica:Controlar el paneo y la inclinación de un gimbal de cámara o las articulaciones de la base y el brazo de un robot pequeño.
- Animatrónicos:Crear movimientos realistas para un títere o personaje animatrónico controlando independientemente su cabeza y ojos.
- Control del Modelo:Construyendo un controlador personalizado para vehículos RC o modelos de aeronaves para ajustar con precisión los flaps y los alerones.
- Automatización:Creando una estación de anulación manual para un seguidor solar o un dispositivo de posicionamiento de múltiples ejes.
Hardware requerido
- Arduino Uno (o cualquier placa compatible)
- 2 motores servo (se utilizan servos estándar de 180 grados aquí)
- 2x Potenciómetros (10kΩ es una opción común)
- Placa de pruebas y cables puente
- Fuente de alimentación externa de 5V (recomendada para múltiples servos)
Guía de cableado
Este proyecto requiere un poco más de cableado que una configuración de un solo servomotor, principalmente porque necesitas distribuir la alimentación y la tierra a múltiples componentes. La clave es utilizar los rieles de alimentación de la placa de pruebas para crear un bus común de 5V y GND. Un diagrama de cableado es esencial para esta construcción.

Desglosemos las conexiones, como se explica en el video (en el video a las 02:23). Primero, configura tus rieles de alimentación: conecta el Arduino.5Vconectar al riel positivo de la placa de pruebas y elGNDconectar al riel negativo. Esto te brinda un fácil acceso a la alimentación para todos tus componentes.
Potenciómetros:Cada potenciómetro actúa como un divisor de voltaje. Conecta el pin derecho de cada pot a el5Vraíl y el pasador izquierdo a laGNDraíl. El pin del medio es el "limpiaparabrisas" y proporciona un voltaje variable. Conecta el pin del medio del primer potenciómetro a la entrada analógica.A0, y el pin del medio del segundo aA1(en video a las 03:22).
Motores de servocompresión:Cada servo tiene tres cables. Conecta el cable de color oscuro (generalmente negro o marrón) alGNDral. Conecte el cable del medio (generalmente rojo) a el5Vrail. Finalmente, conecta el cable de señal (generalmente naranja o amarillo) a un pin habilitado para PWM en el Arduino. El cable de señal del primer servo va al pin3, y el cable de señal del segundo servo va al pin5(en video a las 04:01). Recuerda que debes usar pines habilitados para PWM (marcados con una tilde "~" en el Uno) para el control del servo.
Explicación del código
El código se basa en el ejemplo estándar "Perilla" del IDE de Arduino, pero se modifica para manejar dos servos. La lógica es sencilla: leer el valor analógico de un potenciómetro, mapearlo a un ángulo y comandar el servo para que se mueva a ese ángulo. La sección de configuración en la parte superior del código es donde harás todos tus ajustes.
Aquí está la sección configurable por el usuario que define los pines y crea los objetos servo:
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin = A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin = A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
Este es el núcleo de la configuración. Para agregar un tercer servo, copiarías el bloque de "configuración del servo 2", cambiarías todos los "2" por "3", asignarías un nuevo pin analógico (por ejemplo,A2) y un nuevo pin PWM (por ejemplo,9). TheServola clase está integrada en el IDE de Arduino, por lo que no se necesitan bibliotecas adicionales.
En elsetup()la funciónservo.attach(pin)el comando le dice al Arduino qué pin está conectado al cable de señal de cada servomotor. Debe tener una línea para cada servomotor que esté utilizando.
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
En elloop()el código lee el valor del potenciómetro, lo mapea a un rango de 0 a 180 grados y escribe ese ángulo en el servo. Eldelay(5)al final es un parámetro de ajuste. Como se demuestra en el video, reducir este valor de 15 a 5 milisegundos hace que el movimiento del servo sea mucho más suave y elimina la vibración (en el video a las 12:00).
Demostración de Proyecto en Vivo
Una vez que hayas cableado el circuito y subido el código, la demostración es inmediata. Cuando enciendas el Arduino, cada servomotor se moverá a una posición determinada por la configuración actual de su potenciómetro correspondiente. A medida que giras un botón, su servomotor seguirá suavemente el movimiento. El video demuestra que los dos servomotores operan de manera completamente independiente, lo que permite movimientos complejos y simultáneos. Si notas alguna sacudida o vibración, ajustando eldelay()el valor en el bucle es lo primero que hay que probar.
Capítulos
- [00:00] Introducción y Descripción del Proyecto
- [00:56] Entendiendo los Servomotores
- Diagrama de cableado para dos servos y potenciómetros
- [04:15] Explicación detallada del cableado
- [06:49] Explicación del código: Configuración e instalación
- [09:15] Explicación del código: Lógica de control y mapeo
- [11:15] Demostración y Sintonización en Vivo
/*
* Control two or more servo motors
* using potentiometers.
* Modified by Ahmad Shamshiri on Oct 17, 2019 at 20:13
* in Ajax, Ontario, Canada . www.Robojax.com
* This code on robojax https://robojax.com/RJT766
*
* Original code from Arduino IDE: File->Examples->Servo->knob
*
Controlling a servo position using a potentiometer (variable resistor)
by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
modified on 8 Nov 2013
by Scott Fitzgerald
http://www.arduino.cc/en/Tutorial/Knob
* Get this code and other Arduino codes from Robojax.com
* * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <Servo.h>
//**** servo 1 settings
Servo servo1;
const int servo1PotPin =A0;
const int servo1Pin = 3;// Must use PWM enabled pin
int servo1Value;
//**** servo 1 settings END
//**** servo 2 settings
Servo servo2;
const int servo2PotPin =A1;
const int servo2Pin = 5;// Must use PWM enabled pin
int servo2Value;
//**** servo 1 settings END
void setup() {
//Robojax.com multiple servo
servo1.attach(servo1Pin);
servo2.attach(servo2Pin);
}
void loop() {
//Robojax.com multiple servo
servo1Value = analogRead(servo1PotPin);
servo1Value = map(servo1Value, 0, 1023, 0, 180);
servo1.write(servo1Value);
servo2Value = analogRead(servo2PotPin);
servo2Value = map(servo2Value, 0, 1023, 0, 180);
servo2.write(servo2Value);
delay(5);
//Robojax.com multiple servo
}// loop end
Cosas que podrías necesitar
-
Amazonas
-
Amazonas
-
eBay
-
AliExpressCompra el servo motor SG90 de 180 o 360 en AliExpress.s.click.aliexpress.com
Recursos y referencias
Aún no hay recursos.
Archivos📁
Otros archivos
-
Folleto de datos del motor Seroo SG90
robojax-servo-SG90_datasheet.pdf0.12 MB