|   FOROS      |         |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 WAMP - PHP - MySQL
   Elastix - VoIP Cosas de Windows Webs interesantes Arduino
  Estación meteorológica Visual Basic Script (VBS) Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando

-- Tutorial de iniciación a Arduino --

Volver al índice del tutorial

____________________________

28.- Servomotor.

- Se trata de mover un pequeño servo con el Arduino, en este caso nuestro servo es un motorcito que se puede mover paso a paso desde 0 hasta 180º. Hay servos que se pueden mover 360º, pero el nuestro solo permite 180º

- Compro el servo en Dealextreme: SG90 Mini Servo with Gears and Parts

http://www.dealextreme.com/p/sg90-mini-servo-with-gears-and-parts-2kg-torque-35764
- Tiene un precio de 3,50 €, el pedido tardó unos 20 días en llegar.

Lo puedes encontra más barato en Aliexpress.

Viene con tres cables de conexión y varios elementos de giro.

El cable rojo es el positivo (5 V), el marrón el negativo y el naranja el de control (3,3 V).

Es conveniente alimentar al servo con una fuente de 5 V externa ya que si se conecta directamente a los 5V del Arduino pueden surgir averías.

En mi caso, para hacer pruebas he conectado el servo directamente a la placa del Arduino y no he tenido problemas ni en el servo ni en la placa. Para hacer pruebas ligeras tal vez se podría conectar directamente a la placa del Arduino, pero para un trabajo más contínuo sería conveniente una fuente distinta.

El Servo va a funcionar con PWM a una frecuencia aproximada de 490 Hz

 

Hoja de datos.

 

 

____________________
- Conexiones.

Voy a realizar un montaje con dos pulsadores, el Arduino Uno y el servo anteriormente mencionado.

El IDE que estoy utilizando es el 1.0.6, por eso la extensión de los archivos es .ine en vez de pde.

Al pulsar un pulsador se incrementará el giro en 10 grados y al pulsar el otro se decrementara también en 10 grados.

Los pulsadores están conectado según este esquema...

   

 


Pulsa sobre la imagen para verla a mayor tamaño

 

Cada vez que pulsemos un pulsador, el servo girará 10 grados en un sentido.
Cuando pulsemos el otro pulsador girará 10 grados en sentido contrario.

 

Recuerda que este servo solo gira 180º.

 

En este ejemplo, como se ve en la foto, estoy alimentando al Servo (5 V) desde la misma placa del Arduino, para esta prueba es válida, pero para otras pruebas da problemas esta forma de alimentarlo.

 

________________
- Código.


Aquí está el programa, he utilizado en IDE 1.0, con este IDE los archivos llevan la extensión .ino, en cambio en otros IDE la extensión será .pde

El control del servo está en el pin 3.

Es necesario la librería "Servo.h", pero problamente ya está instalada en la carpeta libraries.

Código

// Juan Antonio Villalpando
// kio4.com

// agosto 2012 


#include <Servo.h>
Servo servoMain;

const int boton8 = 8; // Un botón en el pin 8
const int boton9 = 9; // Otro botón en el pin 9
const int pwmPin = 3; // El servo en el pin 3

// variables
int buttonState8 = 0;
int buttonState9 = 0;
int grados;

void setup() {
Serial.begin(9600);
pinMode(boton8, INPUT); 
pinMode(boton9, INPUT); 
pinMode (pwmPin, OUTPUT); 
servoMain.attach(pwmPin);
}

void loop(){

buttonState8 = digitalRead(boton8);
buttonState9 = digitalRead(boton9);

if (buttonState8 == HIGH) { 
grados = grados - 10;
if (grados<0){grados=0;}
servoMain.write(grados);
Serial.println(grados);
} 

if (buttonState9 == HIGH) { 
grados = grados + 10;
if (grados>180){grados=180;}
servoMain.write(grados);
Serial.println(grados);
} 

delay(100);
}

_______________________
- Monitor Serial.

- Es conveniente abrir el "Monitor Serial", para ver cómo evolucionan los número de grados.
- Cuando los grados cambian desde 0 a 180, el brazo del servo gira.
- En este programa didáctico no está contemplado cuando los grados sobrepasan los 180 o son negativos. Se podrían poner limitadores mediante IF.

_______________________
- Servo.

- Al servo motor podemos enviarle órdenes de tipo: posición 24º y el eje se pondría a 24º. Posición 145º y se posicionaría en ese ángulo.
Es decir, le podemos dar la orden para posicionar el eje donde queramos en cualquier momento.

if (buttonState8 == HIGH)
grados = 24;
servoMain.write(grados);
Serial.println(grados); }
if
(buttonState9 == HIGH) {
grados = 145;
servoMain.write(grados);
Serial.println(grados);
}

- En los ejemplos de la librería hay uno en donde al mover un potenciómetro se mueve el servo a su posición correspondiente. Otro es un barrido automático total a izquierda y a derecha.

___________________________________

Es importante que el servo esté alimentado con 5 V de una fuente distinta del Arduino.

Una forma sencilla para realizar las prácticas sería tomar un cable USB, cortar un extremo y sacar su cable rojo (5 V) y negro (GND). Con estos dos cables alimentamos al Servo. Además el cable negro se ha de conectar a un pin GND del Arduino. Este cable USB lo conectamos al ordenador.

El cable naranja que controla al servo va, en este caso al pin 3 del Arduino .

 

_________________________________
- Aumentar el ángulo de movimiento.

Tendríamos que desenroscar los 4 tornillos traseros, sacar el módulo y quitar el engranaje indicado en la foto. Es fácil.

Luego con un cutter, cortamos el tope de este engranaje. Lo volvemos a montar.

No es aconsejable hacerlo porque ahora cuando baje de los 0º o suba de los 180º funcionará de forma extraña. Pero en fin... como prueba se puede hacer. Siempre consulta el "Monitor Serial". Aumenta hasta más de los 1400 y disminuye a valores negativos y consulta cómo evoluciona.

Si lo quieres hacer bien, debes añadirle tres resistencias en su interior, busca vídeos de cómo hacerlo.

_________________________________
- Servo sin librería.

Al servo le suministramos pulsos con un periodo de 20 ms. Según el estado alto, así se desplazará el eje.

En Internet puedes encontrar la manera de mover el servo sin utilizar la librería.

Supongamos que nuestro servo funciona con un periodo de 20 ms = 20.000 us

Queremos que se desplace a 90º

digitalWrite(Pin3, HIGH)
delayMicroseconds(2000)
digitalWrite(Pin3,LOW)
delayMicroseconds(20000-2000)

Como ves, comienza en 1 ms. Desde 1 ms a 2 ms desarrolla 180º


1 ms------------- 180º

t -------------- grados

Pulso en alto

t = (grados * 1 / 180) + 1

Pulso en bajo

20 ms - t

________________________________

 

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información