ARD09 – Servomotores

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Con Arduino es posible manejar, prácticamente, cualquier dispositivo. En este capítulo vamos a trabajar con servomotores. Son un tipo de motores eléctricos que llevan tres cables para conectar: los dos típicos de masa y alimentación y un tercero para control de giro. Es a través de este tercer cable que controlaremos la posición del servomotor.

Aunque en el mercado hay gran cantidad de modelos para distintos usos, el objetivo general de un servomotor no es mover grandes cargas, sino actuar sobre otros mecanismos, como cerrojos, válvulas hidráulicas, etc.

Su giro está limitado a 180 grados, es decir, no dan vueltas continuamente, como un motor convencional, sino que dan media vuelta (o una fracción de esa media vuelta), y luego vuelven a su posición. Con ese giro es suficiente para mover una leva que actúe sobre otro mecanismo, como hemos mencionado. Por ejemplo, algunos vehículos llevan el acelerador conectado eléctricamente a un servomotor y la leva de este actúa sobre la válvula que regula el paso de combustible.

Aunque en realidad, el giro de la leva siempre permite, físicamente, algo más de los 180 grados (unos 190, más o menos), en la práctica el giro que podemos controlar eléctricamente es de 180, y eso es lo que tendremos en cuenta en nuestros proyectos.

En la figura 9.1 vemos el aspecto de un servomotor, con su leva giratoria.

Figura 9.1. Un servomotor típico.

Figura 9.1. Un servomotor típico.

La leva puede ser de cuatro aspas, como en la imagen, de una o de dos. En el mercado hay para cubrir todas las necesidades. Además, es intercambiable, ya que encaja a presión sobre el eje del motor.

Figura 9.2. Símbolo esquemático de un servomotor.

Figura 9.2. Símbolo esquemático de un servomotor.

En los esquemas electrónicos los servomotores se representan con el símbolo que vemos en la figura 9.2.

Figura 9.3. Una tira de pines macho-macho universal.

Figura 9.3. Una tira de pines macho-macho universal.

Este tipo de servomotores llevan el conector hembra, es decir, con agujeritos, en lugar de pines. Para poder conectarlo a nuestra placa protoboard podemos comprar, por unos pocos céntimos, tiras de pines, de las que podemos cortar los tres que necesitamos. Estas tiras tiene el aspecto que ves en la figura 9.3.

En el mercado existen otros tipos de motores de movimiento controlable, como son, por ejemplo, los típicos “paso a paso”, que se emplean en impresoras y otros dispositivos, cuyo ángulo de giro no está limitado a 180 grados, pero de esos hablaremos posteriormente.

En el montaje de este artículo vamos a aprender, también, el uso de otro componente electrónico: los condensadores. Son dispositivos que, cuando se someten a una cierta tensión eléctrica almacenan energía. Después, cuando se necesita, puede descargarse esta energía sobre otro dispositivo. No se pueden considerar acumuladores, ya que la carga y la descarga son muy rápidas, y su capacidad de carga es muy limitada. Se emplean, básicamente, para absorber picos de tensión, es decir, excesos puntuales de tensión que podrían dañar un dispositivo. La unidad de medida de la capacidad en el Faradio, pero los condensadores comerciales tienen una capacidad tan pequeña que se mide en microfaradios (millonésimas de faradio), nanofaradios (milmillonésimas de faradio) o picofaradios (billonésimas de faradio).

Aunque existen distintos tipos de condensadores eléctricos, se dividen en dos grandes clases: los que tienen polaridad (electrolíticos), y los que no la tienen (cerámicos, de papel, etc). Los electrolíticos suelen ser de más capacidad (se mide en microfaradios) y los demás suelen tener menos capacidad (nano o picofaradios). Con los electrolíticos, dado que tienen polaridad, hay que tener cuidado de no conectarlos “al revés”, ya que de destruirían y, según capacidad y tensión, pueden, incluso, explotar, derramando un ácido que tienen en su interior y que puede causarnos lesiones. Sin embargo, si respetamos la polaridad y la tensión máxima que soportan (especificadas por el fabricante en el encapsulado, junto a la capacidad), son completamente seguros de utilizar. En la figura 9.4 vemos un condensador electrolítico como los que emplearemos en este montaje.

Figura 9.4. Un condensador electrolítico.

Figura 9.4. Un condensador electrolítico.

Su capacidad es de 10 microsfaradios (µF) y la tensión máxima que soporta (a la que nunca llegaremos en una placa Arduino) es de 25 V. El terminal más corto es el negativo, y también está macado con una banda negra en el encapsulado azul. El color del encapsulado y de la banda puede variar, pero siempre es claramente distinguible.

En los esquemas electrónicos, los condensadores se representan con los símbolos que vemos en la figura 45 (el condensador electrolítico se puede representar (indistintamente, con cualquiera de los dos símbolos de la derecha).

Figura 9.5. Símbolos esquemáticos de condensadores.

Figura 9.5. Símbolos esquemáticos de condensadores.

Los condensadores sin polaridad (cerámicos) tienen, como decíamos, menor capacidad que los electrolíticos pero, como ventaja, se pueden conectar sin tener en cuenta el patillaje. En la figura 9.6 vemos algunos (aunque, en este montaje no vamos a emplearlos).

Figura 9.6. Un par de condensadores cerámicos.

Figura 9.6. Un par de condensadores cerámicos.

El número que aparece impreso se refiere a la capacidad, mediante el sistema 101. Las dos primeras cifras son significativas y la tercera indica el número de ceros a añadir. En el ejemplo de la imagen 103 expresa 10000 (picofaradios).

Si quieres aprender más sobre condensadores, te sugiero que visites la wikipedia (concretamente, la página https://es.wikipedia.org/wiki/Condensador_eléctrico).

 

 

EL CIRCUITO

Ya conocemos los componentes necesarios. Veamos el esquema que vamos a montar. Mira la figura 9.7.

Figura 9.7. El esquema teórico de este montaje.

Figura 9.7. El esquema teórico de este montaje.

El circuito real de Arduino puede verse en la figura 9.8.

Figura 9.8. El montaje cableado de este artículo.

Figura 9.8. El montaje cableado de este artículo.

Como puedes ver, tanto en el esquema como en el montaje, hemos usado dos condensadores electrolíticos para absorber eventuales “picos” de tensión (uno en la alimentación del servomotor y el otro en el potenciómetro). Cuando carguemos el sketch y lo pongamos en marcha veremos que, al girar el potenciómetro, el servomotor responde a este giro, de modo que la posición de la leva siempre dependerá de la posición del potenciómetro.

EL SKETCH

Veamos primero el código entero a vuelapluma, y luego entraremos en detalles sobre el funcionamiento.

Empecemos por la primera línea:

El lenguaje de Arduino cuenta con unos complementos llamados, genéricamente, librerías. Una librería es una colección de funcionalidades cuyo uso es necesario en repetidas ocasiones, y que se encuentran programadas en módulos reutilizables, para que no tengamos que programarlas cada vez que las necesitemos. Lo único que tenemos que hacer es importar la librería o librerías que nos hagan falta a nuestro sketch Arduino. Para ello usamos la instrucción #include. Al contrario de lo que ocurre en otros lenguajes, como Python, el símbolo # no convierte la línea en un comentario. Después de esta instrucción añadimos, entre los símbolos < y > el nombre de la librería que queremos importar. Los nombres de las librerías de Arduino acaban con la extensión .h, cómo vemos en el código. En concreto, la librería Servo.h incluye funcionalidades programadas para la gestión, por parte de Arduino, de servomotores como el que empleamos en este artículo. Al final del mismo, entraremos en más detalles sobre esta librería en concreto.

A continuación encontramos lo siguiente:

Para los que estéis familiarizados con programación orientada a objetos, lo que hace esta línea es crear un objeto llamado miServoMotor (con el que manejaremos el servomotor del montaje), de la clase Servo, que forma parte de la librería Servo.h.

Aquellos de vosotros que no estéis familiarizados con los conceptos de programación orientada a objetos podéis leer el contenido recuadrado a continuación, que os permitirá sentar los conceptos básicos necesarios.

La Programación Orientada a Objetos (en adelante, POO, o bien OOP, en inglés) es un paradigma de desarrollo de aplicaciones concebido para permitir la flexibilización y reutilización de códigos específicos que contienen funcionalidades que podemos necesitar en múltiples ocasiones, de modo que no tengamos que reescribir un código que ya está escrito, probado y funcionando, bien sea que lo hayamos escrito y depurado nosotros mismos o que lo haya hecho otro desarrollador.

Las funcionalidades se agrupan en paquetes (que me perdonen la expresión los puristas de Java) con otras relacionadas.

Hay algunos conceptos básicos, relativos a la POO que vamos a definir aquí:

  • Clase. Se trata de una plantilla de código, que incluye todas las funcionalidades que queremos agrupar y que están relacionadas por su uso.
  • Objeto. Por la propia naturaleza de las clases, estas son plantillas. Sus funcionalidades, como norma general, no se usan directamente en nuestro código. En su lugar, lo que hacemos es lo que se llama instanciar la clase en un objeto. Un objeto incluye todas las funcionalidades que tiene la plantilla. En nuestro ejemplo, con la instrucción

    hemos creado un objeto llamado miServoMotor, de la clase Servo. Este objeto será el que nos permita manejar el servomotor del circuito mediante las prestaciones de la clase Servo. La calse Servo está incluida en la librería Servo.h, que hemos importado, previamente, en nuestro sketch.
  • Herencia. La forma en que un objeto adquiere las prestaciones de la clase de la que instancia se conoce como herencia. Para ser exactos la herencia es el mecanismo por el que podemos crear una clase a partir de otra, de forma que la clase que creamos tiene las misma prestaciones que aquella de la que partimos, sin necesidad de volver a programarlas. Por lo tanto, hablamos de herencia entre clases y herencia de clase a objeto. Los puristas sólo reconocen como herencia la que es entre clases. Bien. Eso es una cuestión personal de criterio y no vamos a entrar en esas disquisiciones.
  • Propiedades. Son los datos que puede almacenar un objeto (ya sean de lectura o de lectura y escritura, y que están definidos en la clase de la que se ha instanciado.
  • Métodos. Son las funciones (procesos) que puede llevar a cabo un objeto, y que están definidas en la clase de la que se ha instanciado. Cuando una clase hereda de otra, en la clase “hija” podemos definir funcionalidades y datos que no existieran en la clase original, o redefinir el código de algunos de los que ya existían. Esto último se conoce como sobrescritura de métodos y o propiedades.

Todos estos conceptos parecerán un poco arcanos ahora, si es la primera vez que topas con ellos, pero, al final de este artículo, los tendrás mucho más claros.

El resto de las líneas de la primera sección, ya no tienen ningún misterio:

En la sección setup encontramos una línea que nos llama la atención:

Utilizamos el método attach() para asociar el servomotor al pin al que está conectado el cable de control. El objeto miServoMotor tiene este método porque lo ha heredado de la clase a la que pertenece (Servo). Este método, cuyo argumento es el número de pin que vamos a usar para controlar el servomotor, se separa, como ves, con un punto del nombre del objeto al que pertenece. En general, la notación de punto siempre es así:

o bien

Y aquí podemos apreciar lo bueno del paradigma POO. Usamos el método attach() para establecer el pin de control del servomotor. No tenemos que preocuparnos de cual es el código de ese método. Está definido en la clase, está probado, sabemos que funciona y, simplemente, lo utilizamos.

La siguiente línea ya la conocemos:

Como sabemos, lo que hace es abrir una línea de comunicación con la consola del IDE de Aruino, a través del USB, a 9600 baudios.

Fíjate que, con lo que estamos viendo en este capítulo, ya podemos decir que Serial es una clase de Arduino. Sin embargo, existen diferencias entre la clase Serial y la clase Servo:

En primer lugar, la clase Serial forma parte del núcleo de Arduino. No necesitamos importar una librería para poder usarla, como en el caso de Servo.

Además, no necesitamos instanciar un objeto para poder usar los métodos de esta clase, sino que los llamamos directamente desde Serial.

En la sección loop encontramos una línea que lee el valor de tensión aplicado, mediante el potenciómetro, al pin analógico A0. Luego, escribe este valor en la consola, mediante el método print() de la clase Serial. Después usamos la función map(), que ya conocemos, para mapear un angulo entre 0 y 179 (que es el ángulo de giro del servomotor), a partir de la entrada analógica que, como sabemos, en un valor entre 0 y 1023. Ya tenemos el ángulo. Ahora usamos el método write() del objeto miServoMotor, para “escribir” ese ángulo en el servomotor, es decir, para que la leva gire hasta ese ángulo, así:

Por último, un retraso de 50 milisegundos, y vuelta a empezar. Así, cada vez que giremos el potenciómetro, girará la leva del servomotor.

LA CLASE Servo

La clase Servo se encuentra en la librería del mismo nombre, que forma parte del IDE de Arduino. Puedes ver la descripción en detalle de la misma en este artículo.

     

2 comentarios:

  1. Pingback: LA LIBRERÍA Servo » eldesvandejose.com

  2. Pingback: ARD-SYN 02 – Sintaxis (II). Las secciones setup y loop » eldesvandejose.com

Deja un comentario

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