Tutorial Arduino Basico (Parte 3) Deja un comentario

Ejercicio 3: Servos

Vamos a empezar a hacer ejercicios con un nivel de dificultad algo mayor y vamos a empezar a utilizar la protoboard para ir pinchando en ella algunos componentes y cables para hacer conexiones. Todos los materiales necesarios para este ejercicio están contenidos en el Kit WorkShop.

Primero haremos un mando para un servo de radio control.
Utilizaremos un potenciómetro para controlar el movimiento de giro del eje de un servomotor.
Circuito:

servo arduino ardumania ardutienda
Imagen generada con Fritzing.

Los servomotores tienes tres cables: alimentación (rojo), GND (que puede ser negro o marrón) y señal (que puede ser blanco o naranja). El cable de alimentación debe ser conectado al pin 5V de la placa Arduino. El cable GND debe ser conectado al pin GND de la placa Arduino. El pin de señal se conecta al pin 9 de la placa Arduino UNO para este ejercicio.

AVISO: En este ejercicio vamos a utilizar un micro servo de 9g cuyo consumo es tolerado por la placa, para otros montajes en los que el servo utilizado sea mayor NO se pueden conectar la tierra y la alimentación del servo a la placa Arduino si no directamente a la fuente de alimentación o a una batería.

El potenciómetro debe ser conectado de manera que los dos pines exteriores estén conectado a alimentación (+5V) y a GND, el pin central lo conectaremos a la entrada analógica 0 en el Arduino UNO.

En este ejercicio vamos a ver como se incluye una librería para hacernos más fácil el interactuar con un dispositivo, en este caso el servo.

Código:

// Controlando la posición de un servo usando un potenciómetro (resistencia variable)
// Por Michal Rinott

#include <Servo.h> // Carga la librería Servo.h que contiene métodos para trabajar con servos

Servo myservo;  // Crea un objeto servo para controlar el servomotor
int potpin = 0; // Pin analógico usado para conectar el potenciómetro
int val;        // variable para leer el valor del pin analógico

void setup()
{
myservo.attach(9); // asocia el servo al pin 9
}

void loop()
{
val = analogRead(potpin);  // lee el valor del potenciómetro (valor
                           //entre 0 y 1023)
val = map(val, 0, 1023, 0, 179);  // escala el valor para usarlo con el
                           //servo (valor entre 0 y 180)
myservo.write(val);        // fija la posición del servo de acuerdo
                           //al valor escalado
delay(15);                 // espera a que el servo se posicione
}

Con un código tan sencillo haremos que el servo se mueva según movamos el potenciómetro de modo que al estar el potenciómetro en el límite inferior de su recorrido el servo estará en la posición de 0º, si centramos el potenciómetro el servo estará en la posición de 90º y si llevamos el potenciómetro a su límite superior el servo alcanzará la posición de 180º.

Vamos a aprovechar este ejercicio para introducir un método que puede ser utilizado tanto para el de depurado de código como el calibrado de un actuador o un sensor.

Imaginemos que tenemos hecho nuestro Sketch, lo subimos a la placa y, a pesar de estar correctamente escrito (no da errores el compilador), no hace lo que nosotros queremos. El error puede estar en la forma en que trabajamos con los valores de forma interna y eso no lo podemos ver a menos que los mostremos por el monitor serie.

Otro caso puede ser que, una vez realizado nuestro montaje, queramos que el servo comience su recorrido desde una posición determinada y no sabemos cual es. Entonces podemos utilizar el monitor serie para calibrar nuestro servo y su recorrido.

Para ello activaremos el puerto serie incluyendo en el setup() la línea:

Serial.begin(9600);

Esta instrucción inicializará la comunicación con el ordenador a través del puerto serie.

Luego iremos al final del Sketch, justo a la última línea, donde está el comando delay(15) y antes de ella insertaremos el comando que dará salida a los datos que veremos en el monitor serie:

Serial.println(val);

Por último, y para darle tiempo al monitor serie a mostrar los datos sin que estos bailen a toda velocidad cambiaremos el valor del comando delay() a 500ms. De esta forma nuestro Sketch moverá el servo y nos mostrará la posición en la que se encuentra cada medio segundo, así podemos dejar el servo en la posición exacta que queramos viendo el número contenido dentro de la variable val.

Subiremos el Sketch a la placa y activaremos el monitor serie. No pongo el ejercicio resuelto para que os esforcéis un poquito.

El tipo de señal que se le envía al servo desde la placa Arduino UNO es la señal de control que se utiliza en todos los mecanismos de radio control (servos, receptores, variadores, etc). Es tipo de señal muy concreto que aunque se pueda etiquetar con unas siglas que aquí no voy a utilizar tiene unas características que me impiden etiquetarla como tal, en breve publicaré el apéndice de este ejercicio en el que explicaré y definiré con todo lujo de detalles y ejemplos como son las señales de control de RC.

Este ejercicio está basado en los ejemplos de la página oficial:
http://arduino.cc/en/Tutorial/Knob
http://arduino.cc/es/Tutorial/Knob

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?