MOVIENDO UN SERVOMOTOR

 

En esta ocasión vamos a programar un servomotor que se posicione en el ángulo que le indiquemos introduciéndolo por teclado.    

  1. ¿Qué es un servomotor?
  2. Circuito: Cómo conectar un servomotor a Arduino
  3. Programación con Mblock
  4. Programación con Arduino IDE

1.  ¿Qué es un servomotor?

Un servomotor es un motor cuya posición podemos controlar y mantener en un punto constante en función de un ángulo de posicionamiento.

El servomotor de 180º que vamos a emplear en esta práctica solo puede girar su eje realizando media vuelta, de 0 a 180º.

2. Circuito: Cómo conectar un servomotor a Arduino

Para realizar esta práctica necesitaremos el siguiente material

Conectar servomotor a Arduino

Conectamos el servomotor a un pin digital de la placa Arduino (no es preciso que sea un pin PWM), por ejemplo el pin 7.

¡Ya sólo nos queda programar! Para programar la placa Arduino puedes utilizar diferentes lenguajes. Nosotros nos vamos a centrar en dos opciones

  • MBlock – programación basada en bloques
  • Arduino IDE – programación basada en líneas de código

3.  Programación con Mblock

El objetivo de este programa es muy sencillo: el personaje panda pregunta al usuario en qué posición debe colocar el servomotor. Cuando se recibe el ángulo, la placa posiciona el motor en ese ángulo.

El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Mblock: primeros pasos«  Una vez configurada la tarjeta comenzamos con la programación.

Empezamos programando el objeto panda. Pulsa sobre la pestaña objetos y luego sobre el dibujo del panda. El hacer clic en la bandera, el panda realiza una pregunta (en la sección sensores encontrarás el bloque) incitando al usuario a introducir un ángulo por teclado

El personaje pregunta…

A continuación guardamos la respuesta introducida por teclado en una variable que hemos creado para almacenar el ángulo. Redondeamos el ángulo para evitar ángulos con decimales.

Guarda la respuesta

Es importante controlar que el ángulo se encuentre entre 0º y 180º, añadimos un bucle que haga repetir la pregunta mientras que el ángulo no esté dentro del rango indicado.

Repite la pregunta

Una vez programada la interacción con el teclado, pasamos a programar el movimiento del motor. Para programar esa acción, pulsamos en dispositivos y en la placa Arduino Uno para empezar a programar.

Al presionar bandera, el programa se quedará a la espera de recibir un ángulo que se encuentre entre los valores 0 y 180º.

Espera hasta que se cumpla la condición

Una vez recibido el ángulo correcto posiciona el motor utilizando el bloque «mueve el servo» que localizarás en la sección pines.

Mueve el servo

 Pulsa en la bandera verde y comprueba el resultado.

4.  Programación con Arduino IDE

Vamos a realizar el mismo programa, utilizando líneas de código con Arduino IDE El primer paso es configurar la tarjeta, sigue los pasos que te indicamos en «Arduino IDE: primeros pasos«. Una vez configurada la tarjeta comenzamos con la programación. Recuerda que al trabajar con código debemos respetar la sintaxis: Cuidado con las letras mayúsculas y minúsculas y con los signos de puntuación. ¡Son importantes!.

Como hicimos en la práctica con display «lectura de números por teclado» vamos a utilizar la comunicación Serie para solicitar el ángulo al usuario y que éste lo pueda introducir.

Para el control del servomotor, utilizamos la librería Servo.h.

Creamos el objeto servo y lo llamaremos myServo. En setup, asignamos el pin 7 al servo con la instrucción myServo.attach(7) y en loop movemos el servo utilizando la instrucción myServo.write(ángulo).

#include <Servo.h>

int angulo;

Servo myServo;                        // crea el objeto servomotor

void setup(){
   myServo.attach(7);                // asigna el pin 7 al servo
   Serial.begin(9600);               // configura el puerto serie
}

void loop(){

   if(Serial.available()>0){         // si el puerto serie esta disponible
      angulo=Serial.parseInt();      // lee un dato entero por teclado

      if(argulo>0 && angulo<181){    // si el ángulo está entre 0 y 180º
         myServo.write(angulo);      // mueve el servo al ángulo
         delay(15);
      }
   }   
}

Pulsa en el icono subir, y comprueba el resultado.