Control de posición de servomotor 2016 - jorgerivera/ULCR-BINGE61 GitHub Wiki

Descripción de la práctica.

El objetivo primordial de esta práctica es realizar el control de la posición angular de un servomotor mediante un potenciómetro con la ayuda una placa de desarrollo Arduino/Genuino Uno. Para lograr el objetivo de esta práctica se pretende leer un valor analógico de 0 a 5 voltios proveniente del divisor de voltaje que se puede realizar con el potenciómetro, seguidamente, mediante la programación trasformamos este dato en un valor de 0° a 180° para poder determinar la posición del servo.

Listado de materiales.

  • Placa de desarrollo Arduino/Genuino Uno.

  • Un servomotor de 5 v de alimentación.

  • Un potenciómetro de 5 k ohm.

  • Tableta de montaje.

  • Cables jumper.

Diagrama y funcionamiento del circuito.

En la siguiente imagen se muestra un diagrama del circuito construido en esta práctica.

El primer paso es generar el divisor de voltaje mediante el potenciómetro, para ello conectamos una de las terminales externas del potenciómetro a la alimentación de 5 voltios, la otra terminal externa a tierra, y la terminal del centro la conectamos al pin A0 del Arduino.

Ahora debemos conectar el servo, para ello conectamos la línea de alimentación del servo a la fuente de 5 voltios, y la línea de tierra a su respectivo pin, finalmente la línea de la señal PWM que va a controlar la posición del servo debe ir conectada a uno de los pines capases de salida analógica del Arduino (3, 5, 6, 9, 10, 11), en este caso en particular yo utilicé el pin 10 por comodidad.

#Código de funcionamiento.

#include <Servo.h>    
Servo servo1;         
 
void setup() {
  servo1.attach(10);   
}
 
void loop() {
  int pot = analogRead(A0);                
  int angulo = map(pot, 0, 1023, 0, 180);   
  servo1.write(angulo);                    
}

Ahora vamos con el código del sketch para esta práctica. La primera línea de debemos tener es #include <Servo.h>, con esta función estamos incluyendo la librería de servomotores de Arduino, esta librería simplifica mucho las cosas, luego debemos poner un nombre al servo que vamos a utilizar, en este caso el nombre va a ser “servo1”, para esto utilizamos la función Servo servo1, ahora en el setup debemos asociar el servo al pin con que lo vamos controlar con la función servo1.attach(10). A partir de ahora vamos a trabajar dentro del void loop. Lo primero en esta arte es hacer la lectura analógica del divisor de voltaje, la función int pot = analogRead(A0) nos da esta lectura y a la misma vez la guarda en la variable llamada “pot”, es importante mencionar que el valor de 0 a 5 voltios pasa por un ADC por lo que este valor se transforma en un valor de 0 a 1024, ahora para que el valor leído en el pin A0 nos determine un valor dentro del rango de 0° a 180° debemos utilizar la función int angulo = map(pot, 0, 1023, 0, 180), ya con esta función hacemos la conversión y además guardamos el valor obtenido en la variable “angulo”, finalmente debemos decir al servo que lo queremos en la posición angular guardada en la variable “angulo” para ello utilizamos la función servo1.write(angulo).

#Resultados obtenidos.

Al cargar el sketch a la placa arduino vemos que el sistema funciona según lo planeado, es evidente como el potenciómetro controla la posición del servo con una precisión aceptable. El único problema que se podría presentar es que el servo tiene una rotación máxima de 0° a 180°, sin embargo, en esta práctica eso no representa ninguna limitante, ya que el potenciómetro presenta un rango de rotación igual a la del servo.

Autor: Urías Cascante Serrano.

⚠️ **GitHub.com Fallback** ⚠️