Práctica 6. Controlar un servomotor a través de un potenciómetro.

6.1  Objetivo General: 

Controlar el movimiento de giro del eje de un servomotor utilizando un potenciómetro.

6.2  Materiales y Métodos: 

  1. Una tarjeta Arduino Uno-R3 o Arduino Mega 2560.
  2. Un cable USB impresora.
  3. Un computador.
  4. Cables para el montaje del circuito.
  5. Tarjeta Protoboard.
  6. Un Potenciómetro rotatorio.
  7. Un servomotor.

Un servomotor (también llamado servo) es un dispositivo similar a un motor de corriente continua pero que tiene la capacidad de ubicarse en una posición específica dentro de su rango de operación. Además, puede mantenerse estable en dicha posición ya que dispone de un circuito electrónico de control. Dependiendo del tipo de servomotor, este  puede ser controlado tanto en velocidad como en posición.
Los servomotores hacen uso de la modulación por ancho de pulsos (PWM) para controlar la dirección o posición de los motores de corriente continua. La mayoría trabaja en la frecuencia de los cincuenta hertz, así las señales PWM tendrán un periodo de veinte milisegundos. La electrónica dentro del servomotor responderá al ancho de la señal modulada. Si los circuitos dentro del servomotor reciben una señal de entre 0,5 a 1,4 milisegundos, éste se moverá en sentido horario; entre 1,6 a 2 milisegundos moverá el servomotor en sentido antihorario; 1,5 milisegundos representa un estado neutro para los servomotores estándares.

6.3  Montaje de la práctica:

Con el fin de comprender de una manera más fácil el funcionamiento del circuito, así como verificar todas las conexiones existentes, se realiza en primer lugar el montaje del circuito mediante el uso del programa Fritzing.
Los servomotores tienes tres cables: alimentación (rojo), tierra (que puede ser negro o marrón) y señal (que puede ser blanco o amarillo). Normalmente cable señal va a un pin en arduino que permita señales con PWM.

Figura 1. Montaje del circuito en el programa Fritzing.

De la figura se puede observar que el cable rojo va conectado al pin de 5V la cual  envía la alimentación al servomotor. El cable amarillo que sale del servo al Arduino va conectado al pin 9. Se eligió el pin 9 ya que en la tarjeta Arduino al lado del pin hay un símbolo ( ̴ ) , esos puertos o pines que tienen al lado este tipo de símbolo nos permiten mandar señal modulada. Luego el cable blanco que sale del potenciómetro al Arduino va conectado al pin A5 y finalmente los cables rojos desde el servo al potenciómetro hasta llegar al Arduino van conectados a tierra.

Figura 2. Servomotor utilizado en la práctica.

Luego de conocer como se construye el circuito en el programa Fritzing, se  desarrolla el programa en el IDE de Arduino.

6.4 Código IDE Arduino:

– Se debe seleccionar en la IDE de Arduino el tipo de tarjeta con el que vamos a trabajar siendo Arduino Uno-R3 o Arduino Mega 2560.
– Se selecciona el Puerto Serial, es decir el puerto USB se va a conectar la tarjeta Arduino con el computador.

– Se realiza el código:

  • Inicialmente debemos identificar el programa que se esta desarrollando, por tanto se asigna un nombre al programa, esto se hace empleando el símbolo //. Tambien permite colocar comentarios a lo largo del código para poder facilitar la comprensión de la instrucción que realiza cada línea
  • Se deben declarar las variables globales que serán utilizadas en el programa. Antes de eso debemos llamar a un paquete dentro de la IDE de Arduino llamado Servo (#include<Servo.h>), con esta instrucción se cargan comandos que trabajan solamente con este tipo de dispositivo; a esto se le llama programación orientada a objetos. El comando para llamar al  paquete es #include, y luego se indica el nombre del paquete.
  • Luego es necesario crear un objeto del tipo Servo (Servo myServo;), además se declara la constante de tipo entero llamada PotPin y se le asigna el pin A5. Seguidamente, se declara de tipo entero el valor que ya vaa a leer el potenciómetro PotVal. Por último, se declara una variable angle de tipo entero, ya que se va a emplear un potenciómetro rotatorio y se requiere  saber en qué posición está midiendo el potenciómetro en 0 grados, 180 grados, etc.
  • Seguidamente se realiza la declaración de las configuraciones de las variables o la inicialización de la comunicación serie dentro de los corchetes que delimitan el bloque de programa void setup (). Se debe indicar al programa donde está conectado el servomotor mediante la instrucción myServo.attach(9);
    , es decir, esa señal que se le suministra estará en el pin 9. Para la realización de esta práctica, se trabaja con la monitor o puerto serie, es decir, la comunicación de datos con el computador. Para abrir el puerto serie, se utiliza el comando Serial.begin(9600) indicando dentro de los paréntesis la velocidad de comunicación con el computador, esta generalmente es 9600 bits por segundo, aunque otras tasas pueden ser soportadas.
  • Luego de inicializada la comunicación serie, se procede con el bloque de programación que se encuentra ubicado en el interior de los corchetes del comando void loop () el cual se ejecuta continuamente leyendo las entradas y generando las salidas. En las primeras instrucciones del bloque de programa se quiere leer la señal enviada por el Potenciómetro al pin A5 y mostrar a través del monitor la señal captada. Para realizar estas acciones, primero se necesita declarar una variable la cual será llamada PotVal. Para ejecutar la lectura de la señal, se realiza mediante el comando PotVal=analogRead(PotPin); (debido a que se trata de una señal analógica), indicándole además el pin en el que debe leer la entrada, la cual se almacena en la variable PotVal. Posteriormente se empleara la funciónSerial.print() para imprimir el valor medido a través del monitor, en el interior de los paréntesis se debe colocar el valor, si se quieren escribir palabras o frases estas deben ir delimitadas mediante los comillas, es decir Serial.print(“PotVal:”);. Seguidamente para que pueda mostrar el valor de la señal debemos imprimir la variable, es decir Serial.print(PotVal);
  • Para  mostrar en el monitor el valor del ángulo correspondiente con la posición en que se encuentra el potenciómetro se utiliza la rutina para “mapear”, es decir, que el leerá la señal de cero (0) a 1023;  y un ángulo de cero (0) hasta 179.  Se utiliza el valor guardado en la variable PotVal la cual está a una escala de cero (0) a 1023 y se requiere  a una escala de cero (0) a 179. Se mapea mediante el comando angle=map(PotVal,0,1023,0,179);. Se utilizará nuevamente el comando Serial.print ();
    para permitir la visualización de los datos. Para enseñar el valor medido a través del monitor, en el interior de los paréntesis se debe colocar el valor, si se quieren escribir palabras o frases estas deben ir delimitadas mediante los comillas, es decir Serial.print (“angle= “), y luego para que pueda mostrar el valor de la señal debemos leer la variable, es decir Serial.println (angle). Note que  println se utiliza para indicar que el siguiente valor a imprimir en el puerto serial lo realice en la siguiente línea.
  • Para la práctica se debe indicar que los valores del ángulo los enviará al servomotor a través del comandomyServo.write(angle). Por ultimo, se indica un delay para poder dar tiempo a visualizar  los valores verdaderos enviados al monitor serial.
  • Finalmente se debe verificar que al final de cada instrucción se haya colocado el respectivo punto y coma, de lo contrario habrán errores a la hora de compilar.
  • Una vez compilado el programa se ejecuta el mismo. Si las conexiones se hicieron de manera correcta el señor capta y envía las señal a la tarjeta y esta posteriormente al monitor. Sin embargo, para poder observar estos datos es necesario activar el monitor serial, esto se realiza oprimiendo click izquierdo en la barra de herramientas del IDE de Arduino que señaliza el monitor serial en la parte superior derecha (Figura 3).

NOTA: Para quel IDE de Arduino pueda entender los comandos es necesario que al final de cada instrucción se coloque punto y coma (;).

En la siguiente algoritmo se muestra como quedo plasmado en el IDE de Arduino, los procedimientos anteriormente señalados:

// Uso de potenciometro y señales analógicas
#include<Servo.h>
Servo myServo;
int const PotPin=A5;
int PotVal;
int angle;
void setup(){
myServo.attach(9);
Serial.begin(9600);
}
void loop(){
PotVal=analogRead(PotPin);
Serial.print("PotVal:");
Serial.print(PotVal);
angle=map(PotVal,0,1023,0,179);
Serial.print ("angle= ");
Serial.println (angle);
myServo.write(angle);
delay (15);
}

Algoritmo 1. Código de Lectura de un valor de tensión en un pin analógico a través de un Servomotor a través de un potenciómetro.

Implementación del algoritmo 1 en el simulador https//123d.circuits.io:

https://circuits.io/circuits/2896092-practica-6-laboratorio-mecabot/

Figura 3. Botón para activar el Monitor Serial. 

6.5 Conclusión:

El control de un servo se reduce a indicar su posición mediante una señal PWM de voltaje. El ángulo de ubicación del motor depende de la duración del nivel alto de la señal. Cada servomotor, dependiendo de la marca y modelo utilizado, tiene sus propios márgenes de operación. Para utilizar los servos se debe tener los catálogos (datasheet) disponibles, el catálogo indica las especificaciones en cuanto a la capacidad para trabajar. El catalogo indica las especificaciones de la velocidad máxima hasta dónde puede llegar el servo, el par torsor máximo y su velocidad especifica que cuenta al estar conectado a una fuente de poder.

Si nuestro contenido te fue de utilidad, por favor considera dar tu apoyo a lo que hacemos: