Arduino – Capítulo 7 – Indicador de estado de ánimo

Bueno, ¿que elementos conocemos hasta ahora? Resistencias, fotorresistencias, leds, sensores de temperatura, pulsadores… Ya llevamos unos cuantos, pero todavía quedan muchísimos más. En este capítulo por ejemplo vamos a aprender que es y para que sirve un servo motor.

Un servo motor es un tipo especial de motor cuya particularidad es que no da vueltas sin parar, si no que gira hasta una posición determinada y permanece en ella hasta que le indiquemos que se vuelva a mover. Normalmente un servo motor solo puede realizar giros de 180 grados (medio círculo). Si combinamos esto con un pequeño trozo de cartulina, podemos crear un indicador que sirva para informar a la gente si estamos de humor para recibir visitas.

Servo motorEjemplo de servo motor

De forma similar a la técnica MAP utilizada en el proyecto de la lámpara de colores, un servo motor espera recibir una cantidad de pulsos que le indiquen en que ángulo ha de posicionarse. Dichos pulsos siempre tienen el mismo intervalo de tiempo, pero su amplitud varía entre 1000 y 2000 microsegundos, o lo que es lo mismo, entre 1 y 2 milisegundos. Aunque es posible escribir el código que genere los pulsos, el software de Arduino incluye una librería que nos permite controlar fácilmente dicho servo motor.

Como un servo motor solo gira 180 grados y nuestra entrada analógica está comprendida entre 0 y 1023, necesitaremos utilizar una función llamada map() para cambiar la escala de los valores provenientes del potenciómetro.

Una de las grandes cosas que tiene la comunidad de Arduino, es la gente con talento que extiende la funcionalidad del mismo a través de nuevo software. Está al alcance de cualquiera escribir librerías que aumenten las funcionalidades de Arduino. De hecho, los usuarios han aportado a la comunidad librerías para toda una variedad de sensores, actuadores y otros dispositivos. Una librería es un conjunto de software que expande las funcionalidades del entorno de desarrollo. El software de Arduino incluye muchas de ellas, las cuales, son de gran utilidad para trabajar con elementos de hardware o datos. Una de las librerías que se incluye, está diseñada para trabajar con servo motores. En nuestro programa, tendremos que importar dicha librería y poder así disponer de toda su funcionalidad.

Montando el circuito

Para montar el circuito de este proyecto necesitamos los siguientes componentes:

– 1 servo motor.

– 1 potenciómetro.

– 2 condensadores de 100μF.

Una vez tenemos los componentes necesarios, debemos seguir los siguientes pasos:

1 – Conectamos la alimentación de 5v y la tierra de la placa Arduino a la protoboard.

2 – El potenciómetro tiene tres patillas, dos en un lado y una en el lado contrario. De las dos patillas que están juntas, conectaremos una a la alimentación y la otra a tierra. De hecho, un potenciómetro no es más que un divisor de tensión. Al hacerlo girar, cambiamos el valor de la tensión que cae entre el pin del medio (el que se encuentra solo) y el pin que se encuentra conectado a la alimentación. Podemos leer este valor en una entrada analógica de nuestro Arduino, es por ello que conectaremos el pin del medio al pin analógico A0. Con esto podremos controlar la posición de nuestro servo motor.

PotenciometroEjemplo de potenciómetro

3 – El servo motor posee tres cables. Uno es la alimentación (color rojo), otro es la conexión a tierra (color negro) y el tercer cable es el que recibe la información proveniente del Arduino. Como el conector del servo motor no nos sirve para conectarlo a la protoboard, tendremos que utilizar un adaptador de tres pins que nos permita hacerlo.

Adaptador machoAdaptador que nos hará falta para poder conectar el servo motor a la protoboard

Una vez tengamos puesto el adaptador, conectaremos cada pin a una hilera diferente de la protoboard. El cable rojo irá conectado a la alimentación, el negro a tierra y el cable blanco al pin 9 del Arduino.

4 – Siguiente paso: colocar los condensadores. Cuando un servo motor se empieza a mover, necesita más corriente que cuando ya está en marcha, lo que provoca una caída de tensión en nuestra placa. Para evitar este problema de variación de la tensión, colocaremos un condensador de 100 μF conectado al positivo y al negativo de nuestro servo motor, tal y como se muestra en la figura de más abajo. Del mismo modo, conectaremos un condensador a la alimentación y a la tierra del potenciómetro.

A los condensadores conectados de tal forma, se les denomina condensadores separadores, porque reducen o separan los cambios producidos por ciertos componentes del resto del circuito. Hay que ser muy cuidadosos a la hora de conectar dichos condensadores, ya que al tener polaridad, debemos conectar el cátodo a tierra  y el ánodo a la alimentación. De lo contrario, al estar conectados inversamente, podrían explotar.

Siempre que un condensador tiene polaridad, esta viene indicada en la carcasa del mismo. Normalmente el cátodo suele venir indicado por una franja de color negro, o si el condensador ya es de por si de color negro, por una franja blanca.

CondensadorCondensador de 1000μF en donde el cátodo (la patilla más corta) viene indicado por una franja de color blanco en la carcasa del componente.

Terminado de montar el circuito, deberíamos de tener algo parecido al mostrado en la siguiente figura.

Diseño de protoboard

El esquema eléctrico correspondiente sería:

Esquema electrico

El código

Comencemos por comentar paso a paso el código fuente con el que vamos a programar nuestro Arduino.

Para usar la librería del servo motor, primero tendremos que importarla. Esto nos permite acceder a las funcionalidades incorporadas en dicha librería.

#include <Servo.h>

Para hacer referencia al servo motor, necesitamos crear una instancia de la librería en una variable. A esto se le denomina objeto. Cuando hayamos creado dicho objeto, tendremos una palabra única que poseerá todas las funciones y capacidades que ofrece la librería del servo motor. A partir de este punto del programa, cada vez que hagamos referencia a myServo, estaremos hablando del objeto servo.

Servo myServo;

A continuación, crearemos una constante para el pin al que está conectado el potenciómetro y variables para guardar el valor de la entrada analógica y el ángulo al que queremos desplazar el servo motor.

int const potPin = A0;
int potVal;
int angle;

Seguidamente, en la función setup(), necesitamos decirle al Arduino a que pin hemos conectado el servo motor. Del mismo modo, incluiremos una conexión serie para que podamos comprobar los valores procedentes del potenciómetro y ver como mapea los ángulos en el servo motor.

void setup() {

    myServo.attach(9);

    Serial.begin(9600);
}

En la función loop(), la entrada analógica será leída y su valor mostrado en el monitor serie.

void loop() {

    potVal = analogRead(potPin);
    Serial.print("potVal: ");
    Serial.print(potVal);

Para que el valor que obtenemos del servo motor a través de la entrada analógica nos sirva, lo más fácil es utilizar la función map(). Esta útil función escala números para nosotros. En este caso, nos cambiará los valores comprendidos entre 0 y 1023 por valores de entre 0 y 179. La función posee cinco argumentos:

– El número a escalar (en nuestro caso el contenido de la variable potVal).

– El valor mínimo de entrada (en este caso es 0).

– El valor máximo de entrada (en este caso es 1023).

– El valor mínimo de salida (en este caso es 0).

– El valor máximo de salida (en este caso es 179).

Almacenaremos el nuevo valor en la variable angle. A continuación, mostraremos el valor mapeado por el monitor serie.

angle = map(potVal, 0, 1023, 0, 179);
Serial.print(", angle: ");
Serial.println(angle);

Finalmente, es el momento de mover el servo motor. El comando servo.write() desplaza el servo al ángulo que le hayamos especificado. Para acabar, pondremos un delay al final de la función loop(), de esta manera el servo motor tendrá tiempo de moverse a su nueva posición.

    myServo.write(angle);
    delay(15);
}

Puesta en marcha

Una vez que hallamos alimentado y programado nuestro Arduino, abriremos el monitor serie. Podremos ver una serie de valores parecidos a estos:

potVal : 1023, angle : 179
potVal : 1023, angle : 179

Cuando hagamos girar el potenciómetro, veremos como los números cambian. Aunque más importante aún es el hecho de ver como el servo se desplaza a su nueva posición. Prestemos atención a la relación entre el valor de potVal, el ángulo en el monitor serie y la posición del servo motor. Deberíamos ver valores congruentes como resultado de hacer girar el potenciómetro.

Un hecho positivo derivado de usar potenciómetros como entradas analógicas, es que nos proporcionan un amplio abanico de valores comprendidos entre 0 y 1023. Esto nos puede ser de gran ayuda a la hora de hacer pruebas en proyectos que utilicen la entrada analógica.

Para finalizar y con el objetivo de que el circuito que hemos construido se asemeje a un indicador de estado de ánimo, podemos utilizar papel o cartulina para construir un cartel que sirva a tal efecto. Un ejemplo sería el mostrado en la figura siguiente:

Indicador de papel

Bien. En este proyecto hemos aprendido a utilizar un servo motor y a importar una librería para añadir funcionalidades a nuestro programa. Del mismo modo, hemos aprendido que es, como funciona y como podemos utilizar un potenciómetro a modo de elemento de entrada para que nos proporcione información del exterior. Pero… ¿y si en lugar de un potenciómetro utilizamos un sensor de temperatura o una fotorresistencia?

Espero que os haya gustado.

Un saludo y muchas gracias por leer este artículo.  ^_^

Referencias

– Artículo basado en el capítulo “Project 05 – Mood Cue” del libro “Arduino Projects Book” distribuido por Arduino.cc junto con su “The Arduino Starter Kit“.

– Tutorial sobre la función map().

– Explicación de que es un potenciómetro, un condensador y un servo motor.

Anuncios

2 pensamientos en “Arduino – Capítulo 7 – Indicador de estado de ánimo

  1. Pingback: Arduino – Capítulo 13 – Bola mágica | El gato inquieto

  2. Muchas Gracias por el estas guías en español para iniciarse en el mundillo de la programación para arruino, saludos y nuevamente Gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s