Arduino - Control de Servo con Potenciometro


Arduino - Control de Servo con Potenciometro



En post anteriores he hablado sobre los Servomotores y la forma en la que podemos utilizarlos con programas simples en nuestro Arduino, esta vez veremos un ejemplo un poco más avanzado, vamos a controlar un Servo usando un potenciometro. Esto les puede servir para algún proyecto en el que necesiten cambiar la posición de un servo manualmente. Aquí dejare toda la información necesaria para ello, si quieres aprender un poco más sobre los Servos puedes ver mi post anterior en el siguiente enlace.

Materiales

1 Servo Motor
1 Potenciometro (No importa la resistencia)
1 Arduino
1 Protoboard
Cables o Jumpers.

Conexiones

Las conexiones son bastante sencillas como se muestran en la siguiente imagen. Solo debemos conectar el Servo a 5VCC, GND y la Señal al pin 3 de nuestro Arduino. El potenciometro a de igual forma a 5VCC, GND y  la Señal al pin A0 del Arduino. 

Código

Una vez hagan las conexiones deberán cargar el siguiente código en nuestro Arduino. Como siempre en cada línea del código encontraran un comentario para ver como funciona el programa.
//TecnoloGhost.com
//Uso de potenciometro y señales analógicas
#include<Servo.h>
Servo Servo1;  //Nombramos al Servo "Servo 1".

int PotVal = 0;  //Variable del Potenciometro. 
int Angulo = 0;  //Variable del Angulo.

void setup(){
Servo1.attach(3);  //Servo 1 conectado al pin 3.
Serial.begin(9600);  //Inicia la Comunicación Serial.
}

void loop(){
PotVal = analogRead(A0);  //Lee el pin A0 y guarda el valor en PotVal.
Angulo = map(PotVal, 0, 1023, 0, 179); //Convertimos el valor del potenciometro. 
                                   //A un valor que podamos darle a nuestro Servo.
                                   //Se guarda el nuevo valor en la variable Angulo.
Servo1.write(Angulo);  //Ponemos al Servo en la posicion.
Serial.print(PotVal);   //Imprime el valor de Potenciometro.
Serial.print("  "); //Espacio entre los valores.
Serial.print(Angulo); //Imprime el valor del Angulo. 
Serial.println();
delay(50);   //Delay de 50 mili-segundos.
}


Funcionamiento

Para que el Servo se posicione en un angulo respecto al potenciometro, dependerá de nuestro programa. En él le decimos a nuestro Arduino que lea la señal que manda el potenciometro en en el pin análogo A0. La señal llega con un valor en un rango de 0 a 1024. Lo que hacemos es utilizar la función MAP para convertir el valor leído, a otro valor en un diferente rango, esta vez de 0 a 180, que son los grados de libertad que tiene un Servomotor. 

El Código tiene unas lineas que sirven para mostrar los datos en el monitor serie. Vemos que si abrimos el monitor serie se muestra del lado izquierdo la señal que sale del Potenciometro y del lado derecho el Angulo que tiene nuestro Servo.

En resumen, el valor que nos da el Potenciometro con ayuda de nuestro Arduino, lo convertimos a un nuevo valor el cual será el angulo de nuestro Servo.

En el siguiente GIF les dejo una muestra del funcionamiento.

Espero que les haya servido de ayuda el post, no olviden comentar sus dudas y sugerencias aquí abajo.

Comentarios