Código de búsqueda

Lección 92: Controlando varios servos cada uno con potenciómetro | Curso de Arduino Paso a Paso

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.

Two_or_more_Servo_pot_bb

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

Imágenes

Múltiples servo un pot.: Configuración principal
Múltiples servo un pot.: Configuración principal
Múltiples servos de un potenciómetro: Vista superior de la configuración principal
Múltiples servos de un potenciómetro: Vista superior de la configuración principal
Múltiples servos con un potenciómetro: Creando 5V extra desde Arduino en una placa de pruebas.
Múltiples servos con un potenciómetro: Creando 5V extra desde Arduino en una placa de pruebas.
SG90 Mini Servo Motor
SG90 Mini Servo Motor
Two_or_more_Servo_pot_bb
Two_or_more_Servo_pot_bb
sg90_servo
sg90_servo
888-Lesson 92: Controlling Multiple servo motors
Idioma: C++
/*
 * 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

Recursos y referencias

Aún no hay recursos.

Archivos📁

Otros archivos