Cómo controlar tu servo con el Arduino

  1. Ordenadores
  2. Arduino
  3. Cómo controlar tu servo con el Arduino

Libro Relacionado

Arduino Para Dummies

Por John Nussey

Usando un potenciómetro (o cualquier sensor analógico), es posible controlar directamente tu servo con el Arduino de la misma manera que controlarías una garra mecánica en las máquinas recreativas.

El esbozo de la perilla

Este ejemplo muestra cómo puedes usar fácilmente un potenciómetro para mover tu servo a un grado específico.

Necesitas:

  • Un Arduino Uno
  • Una protoboard
  • Un servo
  • Una resistencia variable de 10k ohmios
  • Alambres de salto

El servo está cableado exactamente como en el ejemplo de barrido, pero esta vez necesitas conexiones extra a 5V y GND para el potenciómetro, así que debes usar una protoboard para proporcionar los pines extra. Conecta los pines 5V y GND del Arduino a las filas positiva (+) y negativa (-) de la protoboard.

Conecta el servo a la protoboard usando ya sea una fila de tres pines del cabezal o tres cables de salto. Conecta el enchufe rojo a la fila de 5V, el enchufe negro/marrón a la fila GND, y el enchufe blanco/amarillo al pin 9 del Arduino.

Encuentra un espacio en la protoboard para el potenciómetro. Conecta el pin central al pin A0 en el Arduino y los pines restantes a 5V en un lado y GND en el otro.

Después de haber construido el circuito, abra el sketch eligiendo File→Examples→Servo→Knob. El código para el sketch es el siguiente:

// Controlando la posición de un servo utilizando un potenciómetro (resistencia variable)// por Michal Rinott <http://people.interaction-ivrea.it/m.rinott>#include <Servo.h>Servo myservo; // crear un objeto servo para controlar un potenciómetro servo = 0; // pin analógico usado para conectar el potenciómetro val; // variable para leer el valor de la configuración analógica pinvoid setup(){ myservo.attach(9); // adjunta el servo en el pin 9 al bucle vacío del servo objeto}void loop(){ val = analogRead(potpin); // lee el valor del potenciómetro // (valor entre // 0 y 1023) val = map(val, 0, 1023, 0, 179); // escala para usarlo con // el servo (valor entre 0 y // 180) myservo.write(val); // ajusta la posición del servo de acuerdo con el retardo del valor escalado(15); // wa}

Usted puede notar que hay algunas discrepancias entre los comentarios y el código. Al referirse al rango de grados para mover el servo, el dibujo menciona tanto 0 a 179 como 0 a 180. Con todos los tutoriales de Arduino, es mejor asumir que son trabajos en curso y que no siempre pueden ser precisos.

LEER MÁS:  Cómo configurar el reconocimiento de voz de Macintosh con Speakables para Skype

El rango correcto es de 0 a 179, lo que le da 180 valores. Contar desde cero se denomina indexación cero y es una ocurrencia común en Arduino, como habrás notado en este punto.

Una vez que haya encontrado el sketch, pulse el botón Compilar para comprobar el código. El compilador debe resaltar cualquier error de sintaxis en el cuadro de mensaje, que se ilumina de color rojo cuando se descubren.

Si el sketch se compila correctamente, haga clic en Cargar para cargar el sketch a su foro. Cuando termine de cargarlo, tu servo debe girar a medida que giras tu potenciómetro.

Si eso no es lo que sucede, debería revisar el cableado:

  • Asegúrate de que estás usando el pin 9 para conectar la línea de datos (blanco/amarillo) al servo.
  • Compruebe sus conexiones al potenciómetro y asegúrese de que la clavija central está conectada a la clavija analógica 0.
  • Comprueba las conexiones de la protoboard. Si los cables o componentes de salto no se conectan utilizando las filas correctas en la protoboard, no funcionarán.

El desglose del croquis de la perilla

En las declaraciones, se nombran la biblioteca de servos, Servo.h, y un nuevo objeto servo. El pin de entrada analógica se declara con un valor 0, indicando que se está utilizando el valor 0 analógico.

Usted puede haber notado que el pin está numerado como 0, no A0 como en otros ejemplos. Cualquiera de los dos está bien, porque A0 es sólo un alias de 0, como A1 es de 1, y así sucesivamente. Usar A0 es bueno para la claridad, pero opcional.

LEER MÁS:  Cómo configurar una cuenta WeTransfer Plus

Hay una última variable para almacenar el valor de la lectura, que se convertirá en la salida.

#incluye <Servo.h>Servo myservo; // crea un objeto servo para controlar un potenciómetro servo = 0; // pin analógico usado para conectar el potenciómetro val; // variable para leer el valor del pin analógico

En la configuración, el único elemento a definir es myservo, que es usando el pin 9.

void setup(){ myservo.attach(9); // conecta el servo en el pin 9 al objeto servo}

En lugar de utilizar dos variables separadas para la entrada y la salida, este boceto simplemente utiliza una. Primero, val se usa para almacenar los datos crudos del sensor, un valor de 0 a 1023. Este valor es entonces procesado usando la función de mapa para escalar su rango al del servo: 0 a 179.

Este valor se escribe en el servo usando myservo.write. También hay un retraso de 15 milisegundos para llegar a ese lugar. A continuación, el bucle se repite y actualiza su posición según sea necesario.

void loop(){ val = analogRead(potpin); // lee el valor del potenciómetro // (valor entre 0 y 1023) val = map(val, 0, 1023, 0, 179); // escala para usarlo con el servo // (valor entre 0 y 180) myservo.write(val); // establece la posición del servo de acuerdo con // el retardo del valor escalado(15); // espera a que el servo llegue allí}

Con esta simple adición al circuito, es posible controlar un servo con cualquier tipo de entrada. En este ejemplo, el código usa una entrada analógica, pero con unos pocos cambios podría usar fácilmente una entrada digital.