Páginas

Control de Servomotor con dos pulsadores

En este proyecto se muestra la creacion de un control basado en dos botones para control de un servomotor de giro restringido.

Un servomotor es un tipo de motor ocupado ampliamente en aplicaciones robóticas. Las principales características que lo hacen especial son:
Alto torque generado por un sistemas de engranajes integrado
Control angular de la posición, lo que se consigue gracias a un sistema electrónico incorporado.

Con un microcontrolador como Arduino podemos controlar este tipo de motores, generando lo que se conoce como Modulación de Ancho de Pulso o PWM (en ingles).

Mediante el uso de la estructura "while" podemos crear un control para un servomotor de giro restringido. De forma que tendremos un botón que aumenta el ángulo y otro que lo disminuye.
Los materiales necesarios son:
1.- Servomotor de giro restringido
2.- 2 pulsadores
3.- 2 resistencias de 240 Ohm
4.- Protoboard
5.- Cables para conexión
6.- Arduino

A continuación se muestra el diagrama electrónico, que ha sido esquematizado con el software Fritzing.


 

 Luego de montar el circuito, lo que resta es la programación que haga funcionar todo.

El algoritmo tiene que hacer lo siguiente: cuando se apriete un pulsador el motor tiene que incrementar el ángulo de posición, lo que equivale a decir que gire hacia un lado. Al soltar ambos pulsadores el motor debe quedar fijo en la ultima posición  en la que estaba y finalmente al presionar el otro pulsador el motor debe girar en sentido contrario o disminuir el valor del ángulo de posición.

La restricción es que el motor acepta como valor mínimo 0 grados y como valor máximo 180 grados. Esta restricción también debe ser incluida en nuestro algoritmo.

Para ello se debe contar con el software de Arduino instalado. Si no lo tienes lo puedes encontrar aqui.


Luego de abrir el IDE de Arduino debes copiar el código que se muestra a continuación. 


#include <Servo.h>
Servo motor;

int estado1 = 0, angulo = 0, estado2 = 0;

void setup()
{

  Serial.begin(9600);
  pinMode(7,INPUT);
  pinMode(8,OUTPUT);
  motor.attach(6);
}

void loop()
{

  digitalWrite(8,HIGH);
  estado1 = digitalRead(7);
  estado2 = digitalRead(4);  
 
  if(estado1 == 1 && estado2 == 0)
  {
    motor.write(angulo);
    angulo = angulo + 1;
    restriccion();  
  }
 
  if(estado1 == 0 && estado2 == 1)
  {
    motor.write(angulo);
    angulo = angulo - 1;
    restriccion();
  }
 
  if(estado1 == 0 && estado2 == 0)
  {
    motor.write(angulo);
  }
}

void restriccion()
{

  if(angulo < 1)
  {
    angulo = 0;
  }
  if(angulo>179)
  {
    angulo = 180;
  }
}

Ya hemos creado un control que puede ser ampliado para controlar mas de un servomotor usando pulsadores. El montaje realizado en protoboard puede ser realizado en una placa PCB, de forma de eliminar los cables y deja todo mas compacto.