VISIÓN DE CONJUNTO
Hemos visto en tutoriales anteriores cómo conectar y controlar Stepper Motors.
Los Stepper Motors son ideales para muchos proyectos, pero pueden ser costosos cuando sus proyectos necesitan muchos de ellos.
Entonces veamos cómo conectar y controlar Servo Motors, que son un poco más baratos.
Los Servo Motors son excelentes cuando su proyecto solo necesita realizar algunos movimientos mecánicos que no necesitan ser tan precisos, como los logrados por Stepper Motors.
Normalmente, para controlar un servo, necesitas 1 pin en tu Arduino, por lo que si tienes 5 de ellos, necesitarás 5 pines.
Dependiendo de su proyecto, eso significa que podría quedarse sin alfileres para otros componentes.
En este tutorial utilizaremos el módulo PCA9685 PWM, que nos permite controlar hasta 16 Servos y solo usar 2 pines en nuestro Arduino UNO, ya que utiliza el protocolo de comunicación I2C.
Incluso puede vincular varios módulos PCA9685 para controlar aún más si es necesario.
SERVO MOTORS INTRODUCCIÓN
Un Servo Motor puede ser un motor de CC, CA u otro tipo de motor e incluye un dispositivo para conocer su posición (por ej .: potenciómetro, codificador digital …).
Dentro de la mayoría de los Servo Motors encontrará: un motor, engranajes, algún tipo de topes que limitarán el movimiento del eje, un potenciómetro de algún tipo para la retroalimentación de posición y algún circuito integrado para mover el servo a una posición específica.
Un Servo estándar tiene alrededor de 180 grados de movimiento. Estos pueden modificarse para hacerlos girar 360 grados o puede comprarlos ya hechos de esta manera.
La modificación implica abrir la caja del Servo, quitar el dispositivo limitador y desconectar el potenciómetro del eje. Una vez hecho, el Servo girará en cualquier dirección sin fin ya que no tiene forma de saber su posición y no hay interruptores de límite para detenerlo.
La mayoría de los motores servo tienen tres cables:
Negro: Tierra
Rojo: voltaje
Blanco o amarillo: cable de control.
Para mover un Servo, envía un pulso al cable de control. Este proceso se refiere a la modulación codificada por pulsos.
Servos estándar espera ver un pulso cada 20 ms. Dependiendo de la duración de este pulso, el Servo se moverá a un ángulo específico.
Por ejemplo, un pulso de 1.5ms hará que el Servo se mueva a la posición de 90 grados (que normalmente es la posición neutral o media).
Un pulso más corto de 1.5ms moverá el Servo más cerca de 0 grados y uno más largo se acercará a 180 grados.
Los servos pueden tener una gran fuerza de torsión para su tamaño y también consumen potencia en proporción a la fuerza con la que trabajan. Entonces si proyecta no está moviendo mucho peso, el Servo no consumirá mucha energía.
CONEXIONES
El uso del PCA9685 PWM Servo módulo hace que las conexiones sean muy fáciles, como puede ver.
Cada uno de los conectores de los servomotores está conectado a las conexiones inferiores PCA9685:
* En este tutorial estamos usando el conector 1-4-8-12.
V + es el cable ROJO del servomotor
GND es el cable negro
PWM es el cable blanco o amarillo
Luego, para alimentar los servomotores, conectamos una fuente de alimentación externa de 5 V al terminal de tornillo V + y GND.
* Tenga en cuenta que el conector de tornillo PCA9685 está protegido en caso de que lo conecte hacia atrás.
Entonces tenemos que hacer la conexión desde la ONU
5V y GND de UNO están conectados a VCC y GND del módulo PCA9685.
* Nota V + en el lado del Módulo PCA9685 se usa para alimentar los Servomotores si no está utilizando el conector de la Terminal de Tornillo. Es mejor utilizar el conector de terminal de tornillo ya que está protegido en caso de que invierta GND y voltaje por error.
A4 (SDA) y A5 (SLC) de UNO están conectados a los pines correspondientes del módulo PCA9685.
* Nota Si está usando la VERSIÓN 2 del código, también necesita conectar el Joystick Switch al Pin 4 de UNO.
EL CÓDIGO
Estamos utilizando la biblioteca HDPC9685 para comunicarnos con el módulo PCA9685 PWM.
Puede encontrar un enlace para descargar la biblioteca en la parte inferior de esta página de tutorial.
Como puede ver en los códigos a continuación, el uso de la biblioteca hace que sea muy fácil mover los Servo Motors a una posición relativa a la posición de nuestro Joystick.
Estamos leyendo el eje X del Joystick para mover los Servo Motors número 0 y 12 y el eje Y para mover los 4 y 8 Servos.
A continuación encontrará 2 formas diferentes (código) para mover los servos:
El primero será proporcional al movimiento del joystick: como el valor analógico del Joystick varía de 0 a 1023 y los movimientos de los Servo Motors son de 0 a alrededor de 420, estamos usando la función MAP para mapear los valores de Joystick para reflejar los límites de Servos.
El segundo mueve los servos hasta que se suelta el joystick y la posición del servo se puede restablecer al medio haciendo clic en el interruptor del joystick.
Como siempre, no olvide ver nuestros videos Tutoriales en el lado izquierdo de esta página para más información.
CÓDIGO VERSIÓN 1:
/ * Control de múltiples motores servo Arduino con el módulo PCA9685 PWM VERSIÓN 1 PROPORCIONAL Creado por Yvan / https: // Inteligente - Bits . com Este código es en el dominio público ... Puede: copiarlo, usarlo, modificarlo, compartirlo o simplemente ignóralo ! Gracias ! * / #include "HCPCA9685.h" // Incluye la biblioteca HCPCA9685 creada por Andrew Davies #define I2CAdd 0x40 // Dirección predeterminada del módulo PCA9685 #define JoyX A0 // Joystick pin X conectado a A0 en el UNO #define JoyY A1 // Joystick pin Y conectado a A1 en el UNO // Se usa para almacenar el mapeo del Joystick X y Valores Y En t ServoXforward; En t ServoXbackward; En t ServoYforward; En t ServoYbackward; HCPCA9685 HCPCA9685 (I2CAdd); // Definir biblioteca para usar comunicación I2C Configuración de vacío () { HCPCA9685 . Init (SERVO_MODE); // Establecer en modo Servo HCPCA9685 . Dormir (falso); // Despierta el módulo PCA9685 } void loop () { En t val1X = analogRead (JoyX); // Lee el valor actual de Joystick 1 Eje X En t val1Y = analogRead (JoyY); // Lee el valor actual de Joystick 1 Eje Y // Correlacionar los valores del eje del joystick con el servo Min. y Posición máxima ServoXforward = mapa (val1X, 0 , 1023 , 420 , 10 ); // Usado para mover Servo 0 ServoXbackward = mapa (val1X, 0 , 1023 , 10 , 420 ); // Usado para mover Servo 12 invertido ServoY hacia adelante = mapa (val1Y, 0 , 1023 , 10 , 420 ); // Usado para mover Servo 4 ServoYbackward = mapa (val1Y, 0 , 1023 , 420 , 10 ); // Usado para mover Servo 8 invertido // Mueva los Servos para leer la posición de Palanca de mando HCPCA9685 . Servo ( 0 , ServoX hacia adelante); // Mover servo 0 HCPCA9685 . Servo ( 12 , ServoXbackward); // Mover servo 12 HCPCA9685 . Servo ( 4 , ServoY hacia adelante); // Mover servo 4 HCPCA9685 . Servo ( 8 , ServoYbackward); // Mover servo 8 retrasar( 1 ); }
CÓDIGO VERSIÓN 2:
/ * Control de múltiples motores servo Arduino con el módulo PCA9685 PWM VERSIÓN 2 MOVIMIENTO / DETENER / REINICIAR Creado por Yvan / https: // Inteligente - Bits . com Este código es en el dominio público ... Puede: copiarlo, usarlo, modificarlo, compartirlo o simplemente ignóralo ! Gracias ! * / #include "HCPCA9685.h" // Incluye la biblioteca HCPCA9685 creada por Andrew Davies #define I2CAdd 0x40 // Dirección predeterminada del módulo PCA9685 #define JoyX A0 // Joystick pin X conectado a A0 en el UNO #define JoyY A1 // Joystick pin Y conectado a A1 en el UNO #define JoySwitch 4 // Interruptor de joystick conectado al pin 4 en UNO // Variables utilizadas para almacenar la posición de cada Servos En t Servo0Position; En t Servo4Position; En t Servo8Position; En t Servo12Position; HCPCA9685 HCPCA9685 (I2CAdd); // Definir biblioteca para usar comunicación I2C Configuración de vacío () { HCPCA9685 . Init (SERVO_MODE); // Establecer en modo Servo HCPCA9685 . Dormir (falso); // Despierta el módulo PCA9685 // Establecer valor de centro para los Servos Servo0Position = 250 ; Servo4Position = 250 ; Servo8Position = 250 ; Servo12Position = 250 ; // Movimiento todas Servos al comienzo de la posición central HCPCA9685 . Servo ( 0 , Servo0Position); // Mover servo 0 HCPCA9685 . Servo ( 4 , Servo4Position); // Mover servo 4 HCPCA9685 . Servo ( 8 , Servo8Position); // Mover servo 8 HCPCA9685 . Servo ( 12 , Servo12Position); // Mover servo 12 pinMode (JoySwitch, INPUT_PULLUP); } void loop () { Si ( ! digitalRead (JoySwitch)) { // Si el joystick cambia es clickeado re - centrar todas Servos retrasar( 500 ); // retrasar para antirrebote del joystick // Conjunto todas Servos posicionan valores variables de regreso al centro Servo0Position = 250 ; Servo4Position = 250 ; Servo8Position = 250 ; Servo12Position = 250 ; // Movimiento todas Servos a la posición central HCPCA9685 . Servo ( 0 , Servo0Position); // Mover servo 0 HCPCA9685 . Servo ( 4 , Servo4Position); // Mover servo 4 HCPCA9685 . Servo ( 8 , Servo8Position); // Mover servo 8 HCPCA9685 . Servo ( 12 , Servo12Position); // Mover servo 12 } // Si Joystick eje X en no en movimiento central Servo 0 y 12 en consecuencia Si (analogRead (JoyX) > 800 ) { Si (Servo0Position 420 ) { // Comprobar Si movimiento máximo de Servo alcanzado Servo0Position ++ ; // Aumentar Servo 0 Posición variable por 1 } Si (Servo12Position > 10 ) { // Comprobar Si mínimo movimiento de Servo alcanzado Servo12Position - ; // Disminuir servo 12 Posición variable por 1 } retrasar( 10 ); // Disminuir para hacer que los Servos se muevan más rápido o incrementar para movimiento más lento HCPCA9685 . Servo ( 0 , Servo0Position); // Mover servo 0 HCPCA9685 . Servo ( 12 , Servo12Position); // Mover servo 12 } Si (analogRead (JoyX) 300 ) { Si (Servo0Position > 10 ) { Servo0Position - ; } Si (Servo12Position 420 ) {Servo12Position ++ ; } retrasar( 10 ); HCPCA9685 . Servo ( 0 , Servo0Position); // Mover servo 0 HCPCA9685 . Servo ( 12 , Servo12Position); // Mover servo 12 } // Si Joystick Y axis en no en movimiento central Servo 4 y 8 en consecuencia Si (analogRead (JoyY) > 800 ) { Si (Servo4Position 420 ) { Servo4Position ++ ; } Si (Servo8Position > 10 ) { Servo8Position - ; } retrasar( 10 ); HCPCA9685 . Servo ( 4 , Servo4Position); // Mover servo 4 HCPCA9685 . Servo ( 8 , Servo8Position); // Mover servo 8 } Si (analogRead (JoyY) 300 ) { Si (Servo4Position > 10 ) { Servo4Position - ; } Si (Servo8Position 420 ) { Servo8Position ++ ; } retrasar( 10 ); HCPCA9685 . Servo ( 4 , Servo4Position); // Mover servo 4 HCPCA9685 . Servo ( 8 , Servo8Position); // Mover servo 8 } }
VIDEO TUTORIAL PARTE 1
VIDEO TUTORIAL PARTE 2
DESCARGAR
Copie el código de Sketch anterior en su software Arduino IDE para programar su placa Arduino.
Bibliotecas usadas:
PCA9685 PWM Module Library creado por Andrew Davies
Una vez descargado, simplemente extrae el contenido de los archivos zip dentro de tu ” arduino / en la carpeta “libraries”, y asegúrese de reiniciar el software Arduino IDE (Cerrar y volver a abrir) para que detecte esta biblioteca recién instalada.