Funcionamiento del Servomotor

Hola otra vez:

Para esta ocasión quiero explicar de forma sencilla, espero, la teoría de funcionamiento de un servomotor. Elemento que es muy usado en robótica por algunas características como:
  • Torques elevados
  • Control de ángulo de giro
  • Estabilidad en el ángulo deseado
  • Control de velocidad
  • Facilidad de control
 El servo se compone de algunas partes principales
  1. El motor, normalmente DC de 5V para los servos de uso general
  2. Un sistema de reducción de engranajes, que reduce las revoluciones y aumenta el troque del servo
  3. La electrónica que se encarga del control del servo, esta incluye un potenciómetro que controla la posición en el caso de servos de giro restringido o la velocidad en los de giro continuo.
PWM

La electrónica del servomotor trabaja con "Modulación de Ancho de Pulso", que es mas común escuchar por sus siglas en ingles "Pulse Width Modulation" PWM.
No pretendo profundizar en este aspecto pero es básicamente el tiempo en que la señal es de 5V respecto al tiempo que es 0V en cada ciclo. Cuanto mayor sea el ancho de pulso (5V) de la señal, mayor es el ángulo del servo.
La relacion entre el angulo del servo y el ancho del pulso (medido en milisegundos) es la siguiernte:
 

FUNCIONAMIENTO

Por otra parte el sistema electrónico lo que hace es simple (lo que no es tan simple es COMO lo hace): compara el ángulo deseado con el ángulo actual del servo y realiza una corrección.
En todo este proceso, la velocidad a la que gire el motores proporcional a la diferencia entre el ángulo deseado y el actual del servo, es por esta razón que podemos controlar la velocidad de un servomotor de giro continuo.

Servo de giro restringido
En el servo de giro restringido, el eje de salida del servo va conectado a un potenciómetro que registra la posición actual del servo y la va comparando con la posición deseada. Cuando estas posiciones son iguales el servo queda fijo en la posición.
Este servo es ideal para manipuladores robóticos, es de fácil montaje y control.


Servo de giro continuo
En un servo de giro continuo, el eje de salida esta desconectado del potenciómetro y este ultimo viene normalmente fijo a 90°. Por lo que el motor puede girar libre. 
Para el control de este servo si establecemos nuestra posición deseada a 0° el motor girará en un sentido a máxima velocidad intentando corregir el error generado por la diferencia entre posicion deseada y posicion actual.
Si la posición deseada fuera 180°, el motor gira a toda velocidad en el otro sentido. 
Y cuando la posición deseada es 90°, o sea, igual a la posición que tiene el potenciómetro, el motor se detiene, ya que el error calculado es cero.




El ciclo For en Arduino

Hola a todos:

En esta ocasión veremos una estructura de programación que sirve para repetir una o varias acciones un determinado numero de veces, el ciclo FOR.
Muchas veces queremos que nuestro Arduino realice alguna actividad cierta cantidad de veces, o que repita algún patrón como llenar una Matriz de datos o leer dicha matriz.
Esta estructura, personalmente la he ocupado en manipuladores robóticos, dando una pequeña pausa entre el avance grado a grado de un servomotor. Con esto se consigue que el motor avance mas lento y el movimiento sea mas suave. Pero eso es tema para otra ocasión.
La cosa es que para nuestro Arduino también contamos con esta estructura de programación, la sintaxis es la siguiente:

for(valor_inicial ;  valor_final ; incremento o decremento de valor)
{
   //dentro de las llaves van los comandos que se repetirán
  //cuantas veces se repita el ciclo
}

Ejemplo:

for(int i=0;i<5;i++)
{
// instrucciones y comandos
}

Esta estructura se puede ocupar para controlar la intensidad de un LED, manejar un Servomotor, manejar secuencias entre otros.


Variar la intensidad de un LED
Lo primero que hay que hacer es montar el siguiente circuito, siempre teniendo en cuenta que la patita larga del led va al positivo y la patita corta al negativo:



Conectando el Led al pin 11 y a la tierra del Arduino, te dejo el siguiente código para que puedas copiar y pegar en la IDE de arduino, puedes ir modificando los tiempos de delay cambiando el valor de la variable "Pausa" y ver como cambia el comportamiento.

int i = 0;
int Pausa = 10;

void setup()
{
   pinMode(11,OUTPUT);
}

void loop()
{
   for(i = 0 ; i < 255 ; i++)
   {
      analogWrite( 11, i );
      delay(Pausa);
   }
}

Podrán ver como el led va cambiando su intensidad de brillo, esto puede ser usado en el control de iluminación en una casa por ejemplo...

Puedes modificar el circuito y el código a gusto y experimentar distintos comportamientos y secuencias con Arduino.

Hasta la proxima!

Semáforo con Arduino

Hola a todos:

En esta ocasión vamos a realizar un montaje un poco mas complejo que el anterior. Una simulación de un semáforo controlado desde Arduino.
Ya vimos lo que hacia el comando delay(milisegundos); que produce una pausa en nuestro programa de el tiempo que nosotros especifiquemos en el argumento del comando.

Materiales necesarios:

1.- Arduino UNO
2.- Cable USB para Arduino
3.- Tres diodos led: verde, rojo y amarillo. (uno de cada color, no 3 de cada uno)
4.- Protoboard
5.- Cables conectores
6.- Computador con el Software Arduino instalado

Montaje del circuito

El circuito que vamos a montar ira en la protoboard, tal vez no esta demás decir que en la protoboard los orificios de cada fila están unidos, pero entre filas no hay conexión.
Las conexiones a realizar son las del siguiente esquema:


Una vez montado este circuito, conectamos nuestro Arduino al PC, abrimos el entorno de desarrollo y escribimos el siguiente código:

void setup()
{
  pinMode(13,OUTPUT);
  pinMode(12,OUTPUT);
  pinMode(11,OUTPUT);
}

void loop()
{
  digitalWrite(13,LOW);
  digitalWrite(12,LOW);
  digitalWrite(11,HIGH);
  delay(5000);
  digitalWrite(13,LOW);
  digitalWrite(12,HIGH);
  digitalWrite(11,LOW);
  delay(1000);
  digitalWrite(13,HIGH);
  digitalWrite(12,LOW);
  digitalWrite(11,LOW);
  delay(5000);
}


Con el código anterior el semaforo parte en verde y se mantiene por 5 segundos, luego pasa al amarillo durante un segundo y finalmente a rojo otros 5 segundos. Pasados los 5 segundos en rojo volverá a verde y empieza el ciclo otra vez.
Se puede modificar el código en las lineas de delay para cambiar los tiempos del ciclo.

Hasta la proxima!