El servo es un tipo especial de motor que convierte señales eléctricas en posiciones de eje.
Los servos se pueden clasificar en términos generales como servos industriales y servos para aficionados.
Los servos industriales son generalmente servos de CA o CC de alta potencia y alta resistencia, ampliamente utilizados para brazos robóticos de precisión.
Los servos de nivel aficionado se utilizan ampliamente en pasatiempos de RC, como aviones RC, automóviles, helicópteros, multirrotores, barcos, embarcaciones flotantes, etc.
Se utilizan principalmente para controlar superficies de control (aviones RC) o para mecanismos de vectorización de empuje (aerodeslizadores, barcos, multirotores) o para mecanismos de dirección (coches RC).
Los servos de nivel aficionado se clasifican en micro, estándar y gigante según el par que pueden proporcionar; sin embargo, su principio de funcionamiento es el mismo. B Según la velocidad de funcionamiento, se clasifican como servos analógicos o digitales. Los servos digitales proporcionan mayor velocidad pero consumen más energía.
La velocidad de un servomotor se define como el tiempo que tarda el eje en pasar de 0 0 a 60 0 después de aplicar la señal.
En este artículo utilizaremos una placa clonada ARDUINO , a saber. FREEDUINO.
La placa freeduino utilizada se basa en la placa arduino duemilanove y utiliza un microcontrolador IC atmega 328PA.
La característica más llamativa de una plataforma Arduino es su facilidad de uso, ya que Arduino fue diseñado para artistas en lugar de ingenieros, se vuelve más interesante y divertido aprender a programar Arduino y realizar proyectos basados en ella.
Consejos de Freeduino:

Descripción
Descripción:
Servo es el actuador más utilizado en proyectos como brazos robóticos, aviones RC, autoequilibradores, etc.
Utiliza un mecanismo de retroalimentación negativa para mantener la posición del eje con un error mínimo.
El servomotor tiene tres cables, a diferencia de los motores PMDC normales que tienen dos cables.
Entre estos 3 cables, 2 cables suministran energía al motor y uno se usa para enviar señales al motor para las posiciones requeridas del eje.
Estas señales son señales PWM con ciclo de trabajo variable y frecuencia de 40-50 Hz (servos analógicos) o 400-500 Hz (servos digitales).
Los servos analógicos son más baratos y consumen menos energía, y los servos digitales proporcionan un par y una velocidad relativamente altos y normalmente se utilizan como servos de cola de helicóptero.
El eje gira en ángulo dependiendo del tiempo de activación del pulso.
1 ms = 0 0
1,5 ms = 90 0
2 ms = 180 0
Entrada (ADC):
Arduino tiene un convertidor analógico a digital (ADC) de 10 bits incorporado, por lo que puede proporcionar valores digitales de 0 a 1023 (ya que 2^10 = 1024)
También podemos configurar el voltaje de referencia del ADC en Arduino, pero aquí dejaremos que use el valor predeterminado.
La resistencia variable (preestablecida o potenciómetro) tiene tres pines; los dos pines exteriores están conectados a tierra y Vcc.
Esto forma un divisor de potencial y obtenemos el voltaje (Vout) correspondiente al botón de resistencia. 

A medida que giramos la perilla de resistencia variable, el voltaje en el pin del medio pasa de 0-5V y el Arduino ADC lo convierte en 1024 valores, es decir, 0-1023 valores digitales.
Ahora usaremos estos 1024 valores para controlar nuestro servomotor.
Salida (PWM):
Para controlar un servo necesitamos obtener una señal PWM de la placa, esto generalmente se hace usando la función de temporizador del microcontrolador, pero Arduino lo hace muy fácil.
Arduino proporciona una biblioteca de servos en la que tenemos que asignar solo el ángulo del servo y el servo gira en ese ángulo, todos los cálculos de PWM son manejados por la biblioteca de servos y obtenemos una señal PWM limpia según el ángulo deseado.
Arduino dispone de un generador PWM de 8 bits, por lo que podemos obtener hasta 256 señales PWM distintas
Necesitamos 0-180 grados de rotación del servo.
Ahora, dado que obtenemos 1024 valores del ADC que necesitamos usar para rotar el eje del servo de 0 a 180 grados, usaremos una función llamada mapeo para asignar estos 1024 valores distintos a 180 valores.
La función Mapa tiene una sintaxis: mapa(mapping_values,(rango de valores),(rango al que se asignará)
Ejemplo: en nuestro caso, la función de mapa se verá así: ángulo=map(pot_value,0,1023,0,180);
 si desea cambiar la dirección del ángulo del servo en relación con la perilla del potenciómetro, cambie el cableado o escriba la función de mapeo como ángulo=map(pot_values,0,1023,180,0);
 Ahora, a medida que cambiamos la resistencia variable, el voltaje en la entrada del ADC pasará de 0 a 5 V (analógico), de 0 a 1023 (digital) y luego se asignará a 0-180 (ángulo del servo).
 
El potenciómetro es un dispositivo más sencillo para entender el funcionamiento de un dispositivo analógico, después de familiarizarnos con él podemos utilizar otros dispositivos analógicos como LDR, sensores de distancia infrarrojos, sensores de temperatura, acelerómetros como nuestro dispositivo de entrada y realizar otros proyectos interesantes como el autoequilibrio. robot, seguidor de línea, evita obstáculos, seguidor solar, etc.
Componentes y circuito
Componentes:
Placa Freeduino (Atmega 328)
Características:
| Microcontrolador | ATmega328 | 
| Tensión de funcionamiento | 5V | 
| Voltaje de entrada (recomendado) | 7-12V | 
| Tensión de entrada (límites) | 6-20V | 
| Pines de E/S digitales | 14 (de los cuales 6 proporcionan salida PWM) | 
| Pines de entrada analógica | 6 | 
| Corriente CC por pin de E/S | 40mA | 
| Corriente CC a pin de 3,3 V | 50 mA | 
| Memoria flash | 32 KB (ATmega328) de los cuales 0,5 KB utilizados por el gestor de arranque | 
| SRAM | 2KB (ATmega328) | 
| EEPROM | 1KB (ATmega328) | 
| Velocidad de reloj | 16MHz | 
Servo: Microservo Tower pro 9G.
Potenciómetro: Resistencia variable de 10K (preestablecida o potenciómetro)
EL CIRCUITO


Imágenes
IMÁGENES:

Placa de pruebas con resistencia variable

Placa de pruebas y servomotor.

circuito basado en arduino
Video
Código fuente del proyecto
###
#incluir
//incluye biblioteca de servos para controlar los servos 
Siervo sajidservo; // define tu sirviente
int olla=0; //potenciómetro conectado al pin 0 del ADC
configuración nula
{
sajidservo.attach(9); //conecta tu servo a un pin PWM (aquí pin #9)
Serie.begin(9600); //elimina esto si no quieres ver los valores de ADC en el monitor serie
}
bucle vacío
{
int val=analogRead(pot); // Lee los valores del ADC y los guarda en la variable val
int pos=mapa(val,0,1023,0,180); // mapea el rango de ADC con pwm
sajidservo.write(pos); //escribir al sirviente
Serie.println(val); //eliminar si no quieres ver los valores de ADC
}
###
 
              