Control de servomotor desde un ordenador

En este artículo vamos a controlar un servomotor conectado a Arduino desde el ordenador a través de la comunicación serie (USB).

controlar servomotores con arduino

Un servomotor es un motor de corriente continua que puede ubicarse en cualquier posición dentro de su rango, los más comunes van desde 0 a 180 grados.
El servomotor hace uso del PWM para controlar los grados establecidos, en este caso el servomotor utilizado, cada pulso de 100ms gira 60 grados (1,6 ms cada grado).

Necesitáremos tener instalado el software de processing (se puede descargar desde su web totalmente gratuito) con librería controlP5 (Se instala desde el programa), que es el que utilizaremos en el ordenador para crear nuestro pequeño programa que controle el servomotor. Para aquellos que nunca hayan visto el software de processing solo decir que es muy similar al de Arduino (Arduino se basa en processing).

Material necesario:
•    Una placa Arduino
•    Un servomotor

Esquema de montaje:

Esquema servomotor arduino

En el programa de Arduino las condiciones de while significan que se ejecutan mientras la operación que hay dentro del paréntesis sea verdadera, se cambia de un grado en un grado para evitar el pico de intensidad del motor.

En el programa de Processing el envió por puerto USB se realiza cuando hay un cambio en los grados asignados para no saturar la comunicación.

Programa Arduino:

#include <Servo.h> //Cargamos la librería de control de servo
byte val = 0; //Asignamos variable para el valor de grados
Servo servo1; //Asignamos variable del servo
byte pos = 0; //Asignamos variable para el control progresivo
void setup() {
  Serial.begin(9600); //Empezamos la comunicación serie y su velocidad
  servo1.attach(9); //Asignamos el servo al PIN 9
  servo1.write(0); //Movemos el servo a 0 grados
}
void loop() {
  if (Serial.available()) { //Condición para ver si a llegado datos al buffer del puerto serie
  val = Serial.read();  //Cargamos el valor de grados en val
  Serial.flush();    //Limpiamos el buffer
  }
  while(pos < val)  //Condición para que se ejecute mientras pos sea mas pequeño que val
  {
     pos++;               // incremento de grados para que sea progresivo (de 1 en 1)
    servo1.write(pos);    // Movemos el servo a ese grado     
    delay(25);           // Paramos el programa 25ms
  }
  while(pos > val)       //Condición para que se ejecute mientras pos sea mas grande que val
  {
     pos–;              // Disminución de grados para que sea progresivo (de 1 en 1)  
    servo1.write(pos);   // Movemos el servo a ese grado         
    delay(25);     // Paramos el programa 25ms
  }
  }

Programa Processing:

import controlP5.*;  //importamos la librería controlP5
import processing.serial.*;  //importamos la librería para la comunicación serie
Serial port;  //Asignación de la variable port de comunicación serie
ControlP5 cp5; //Asignación de la variable cp5 de librería ControlP5
int Grados = 0; //Variable para el valor de los grados
int V = 0; //Variable para identificar cuando cambiamos los grados
void setup() {
  size (800, 600); //Tamaño del programa en pixeles
  smooth();
  background(200,130,0); //Color del fondo del programa
    String arduinoPort = Serial.list()[1]; //Asignamos el numero de puerto de nuestro Arduino
  port = new Serial(this, arduinoPort, 9600); //Establecemos el puerto y su velocidad
    cp5 = new ControlP5(this); //Establecemos variable de la librería controlP5

  cp5.addSlider(“Grados”) //función para barra deslizadora
   .setPosition(50,230)  //Posición en pixeles de la barra
   .setRange(0,180)      //Rango de la barra
   .setSize(200,20)      //Tamaño de barra
   ;
  fill(0); //Establecemos color negro
  textSize(30); //Tamaño de texto 30
  text(“Servomotor”, 50, 200); //texto (color negro, tamaño 30) y posición
}

void draw()
{
  Grados = ceil(Grados); //Obtenemos los grados de la barra
  if (V != Grados) { //Condición para ver si los grados recientes son diferentes a los anteriores
    port.write(Grados); //Enviar grados a Arduino por el puerto serie
    V = Grados; //los grados antiguos se igualan con los recientes
  } 

}

Demostración:

2 pensamientos en “Control de servomotor desde un ordenador

  1. Wk3

    Buenas, para empezar es mejor la placa Arduino uno, en la pagina web de Arduino puedes encontrar la información de donde la venden y las diferencias entre las placas.

    Saludos

    Responder
  2. navara

    Hola, me encanta tu web, y quisiera probar lo de manejar los servos con el ordenador , que placa Arduino debo comprar y que me sirva para mas cosas y lo mas inportante donde se puede comprar online.

    Un saludo y gracias

    Responder

Deja un comentario