Cómo usar un servo con Arduino (Previsualizar)

Los servos son componentes muy usados en brazos robóticos, maquetas, domótica, robots… porque nos permiten crear movimientos verdadermente útiles a un gran abánico de aplicaciones. ¿Te gustaría aprender a controlar servos con tu Arduino? (1)Vamos a hacer un barrido del servo, controlando su posición con Arduino. (2)Vamos a controlar el barrido del servo con un potenciómetro. ¡Empezamos!

Barrido de un servo controlado con Arduino

Esquema de conexión

El servo que voy a usar es el Servo ES09D de Emax, también puedes usar otros, como el servo SG90, no te preocupes por el modelo, los más habituales se conectan y programan de la misma forma.

Nuestro servo tiene tres cables, los del mío son marrón, rojo y amarillo, estos colores pueden variar. Sabemos que el marrón es GND, el rojo es la alimentación (5V)  y el amarillo es la señal. Los cables de los servos, tienen una terminación hembra, si tienes una ZUM Core de bq puedes conectar el servo directamente a los pines machos de la placa; si tienes un Arduino/Genuino UNO puedes convertir los cables a macho, con estos cables jumper macho-macho o con estos conversores macho-macho

Por tanto, conectamos los cables rojo y marrón a 5V y GND, respectivamente, y el amarillo a un pin digital de Arduino, yo lo he conectado en el pin 9. Así:

Esquema de conexion servo y arduino

Fácil, ¿no? Pues… ¡vamos a programarlo!

Programación para hacer un barrido con el servo: “sweep”

Abrimos Arduino IDE. Incluímos la librería servo
incluir libreria del servo

Creamos un objeto para controlar el servo, al cual yo he llamado servo, para qué vamos a complicarnos

Servo servo;

Creamos una variable de tipo int que va a almacenar la posición del servo, es decir, el ángulo.

int angulo = 0;

En la funcion void setup() vinculamos el objeto servo con el pin 9.

servo.attach(9);

En la función void loop() vamos a programar que el servo se mueva de 0 a 180 grados y vuelva de 180 a 0 grados. Para ello, vamos a usar el bucle for()

 // De 0 a 180 grado
  for(angulo = 0; angulo <= 180; angulo++){ 
  servo.write(angulo); // Le decimos al servo la posición
  delay(15); 
  } 

  // De 180 a 0 grados 
  for(angulo = 180; angulo >= 0; angulo--){
    servo.write(angulo);   // Le decimos al servo la posición
    delay(15);
  }

Finalmente, el código nos ha queda así:

Barrido de un servo controlado con un potenciómetro

Esquema de conexión

Añadimos al circuito que hemos construído anteriormente un potenciómetro. Para ello, vamos a necesitar también una breadboard.
¿Has usado alguna vez un potenciómetro? Si no lo has hecho, te recomendamos echar un ojo a “Entradas analógicas con el potenciómetro”
Conectamos el servo a Arduino a través de la breadboard, así como el potenciómetro, yo lo he dejado el servo en el pin 9 y he conectado el potenciómetro al pin A0. El esquema es el siguiente:esquema de conexion servo y potenciometro

¿Listo? ¡Vamos con la programación!

Programación para controlar el barrido del servo con un potenciómetro: “knob”

Partiendo del código anterior, tenemos:

  1. Incluída la librería Servo.
  2. Creado el objeto servo.
  3. Variable int que almacena la posición del servo.

Vamos a añadir dos constantes para guardar los pines a los que hemos conectado tanto el servo como el potenciómetro:

const int PIN_SERVO = 9;

const int PIN_POTENCIOMETRO = A0;

Aprovechando que hemos creado estas constantes, vamos a mejorar la función void setup():

servo.attach(PIN_SERVO);

Queremos que la posición del servo dependa del potenciómetro, por tanto, debemos de conocer el valor del potenciómetro. En la función void loop() hacemos la lectura del potenciómetro, la cual, almacenamos en una varible.

int valorPotenciometro = analogRead(PIN_POTENCIOMETRO);

Como ya sabemos, el potenciómetro se mueve de 0 a 1023 y el servo de 0 a 180 grados, por lo que debemos de establecer la relación entre la posición del potenciómetro y la posición del servo, tenemos que escalar. Si dividimos la lectura del potenciómetro entre 6 tendremos un valor entre 0 y 170 grados, lo que para el servo ese rango de acción está muy bien, pues en los extremos se estaría forzando al componente, además de que consume más energía. Así pues, la siguiente línea detro de la función loop sería:

angulo = valorPotenciometro / 6;

Ya lo que nos queda es darle al servo la instrucción de la posición con una pequeña pausa entre lectura y lectura:

servo.writte(angulo);
delay(15);

Definitivamente, el código para controlar el servo con el potenciómetro (knob) nos ha quedado:

¡Cacharrea, crea y comparte tus proyectos!

Volver a: Servos y motores

©2017 Fábrica Digital desde Jerez de la Frontera, España.

956 05 77 07 (llamadas) / 717 717 452 (Whatsapp) / hola@fabricadigital.org

Horario de verano: de Lunes a Viernes de 09:00 a 13:00.

Calle Manuel Yélamo Crespillo, Edif. Los Ramos, 11401 Jerez de la Frontera, Cádiz. - Cómo llegar

Información Legal - Aceptamos

 

Inicia Sesión con tu Usuario y Contraseña

o    

¿Olvidó sus datos?

Create Account