Práctica 4

La práctica 4 es la primera donde usaremos algo distinto a los leds como “salidas de información”: servomotores. Un servomotor, normalmente llamado servo (lo llamaremos así a partir de ahora), es simplemente un motor con unos topes que le permiten girar en un rango de 180º (media vuelta), y que puede ubicarse y mantenerse estable en cualquier posición de este rango. Aprenderemos lo que son las librerías, su importancia, y a hacer un bucle condicional for.

Librerías

Podemos imaginarnos las librerías tal como suenan: una gran estantería llena de libros, al que acudimos cuando necesitamos saber o usar algo. En programación, son códigos ya escritos que podemos incluir en nuestro código, para añadirle muchas funcionalidades, como controlar hardware, etc…  Por ejemplo:  queremos usar un servo ahora, pero hacer la programación desde cero para usar un servo no estaría a nuestro alcance, por lo que acudimos a la librería del servo para simplificarnos la vida.

Vienen algo más de una decena de ellos instalados de serie con el IDE de Arduino, pero podemos instalar (¡o hacer nosotros mismos!) todas las que queramos.

La manera de incluir una librería en nuestro código es con:

#include <nombredelalibrería.h>

Servos

Ya hemos explicado lo que son los servos, asi que vamos a aprender a usarlos.

Servo

Servo

 

Podemos observar que de los servos salen tres cables: El más oscuro (Marrón o negro normalmente) es siempre el de tierra, es decir, GND. El rojo será el que hay que conectar a 5V, y el sobrante es el llamado de señal, el que le dice en que posición tiene que estar.

Vamos a ver ahora como usar uno en Arduino.

Primero, incluimos la librería del servo:

#include <Servo.h>

Después, llamaremos a nuestro servo algo, para poder tener varios a la vez y poder distinguirlos:

Servo nombredelservo;

En void setup, tendremos que inciar el servo, diciendo en que pin está conectado el cable de señal:

nombredelservo.attach(pinseñal);

Ahora, solo quedaría girarlo, metiendole un valor entre 0 y 179:

nombredelservo.write(valor)

Bucle Condicional : For

Un bucle es un proceso que se repite una y otra vez (¡Como el void loop!). Son importantísimos en la programación, porque simplifican mucho la vida y nos hacen los códigos más cortos.

Lo que vamos a aprender es a hacer un bucle condicional: Un bucle que se repite solo cuando se cumple una condición. Usaremos la estructura for para ello:

for (Inicialización; Condición; Incremento){
 Código a realizar
}

Vamos a ver esto de una forma más gráfica:

En este bucle: Empezariamos con una variable x=0. La condición para que se vaya repitiendo el bucle es que x sea menor que 100. Mientras se cumpla esta condición, vamos a irle añadiendo 1 a x en cada vuelta. (NOTA: x++ es igual a x=x+1). Cada vez que se repite el bucle, estamos imprimiendo por el serial el valor x, por lo que contaremos de 0 a 99.

Map

Al leer el potenciómetro, nos llega un valor en el rango de 0 a 1023. El servo solo puede girar de 0 a 180 grados, ¿Que hacemos?. Podríamos simplemente dividir 180/1023 y multiplicar esto por el valor del potenciómetro, y obtener un valor “escalado”, pero vamos a ver que hay un método más cómodo: La función map. Tiene la siguiente estructura:

map(nombrevariable, desdevalorbajo, desdevaloralto, hastavalorbajo, hastavaloralto)

Vamos a ver un ejemplo con números. Si tenemos que x=10, y hacemos lo siguiente:

x = map(x, 0, 20, 0, 100)

Obtendríamos x = 50 

Componentes necesarios para esta práctica

 

Los ejercicios a realizar en esta práctica son:

  1. El ejercicio a consiste en simplemente abrir un ejemplo  preinstalado en arduino (Sweep), y cargarlo. El servo empezará a girar de un lado a otro.
  2. El ejercicio b usa un ejemplo preinstalado también (Knob). Ahora se controlará el giro del servo con un potenciómetro.

Código ejercicio a

Código ejercicio b

Archivos .ino

Descarga el ejercicio a haciendo click aquí 
Descarga el ejercicio b haciendo click aquí

Comentario final y RETO SEMANAL

El reto de este semana es modificar el ejercicio b para que el potenciómetro, a la vez que se determine la posición del servo, determine cuántos LEDs se encienden (usar 5 LEDs). Esto es, construir un indicador de posición del servo mediante LEDs. Ningún LED encendido si estamos en 0 grados, todos encendidos si estamos en 180 grados (habrá que usar una estructura if para dividir en cinco segmentos la lectura analógica 0-1023 y aplicar una estructura for para encender los LEDs).

Según lo vayáis completando, mandad el código (y si queréis, fotos o vídeos) a la siguiente dirección: practicas@thinkbit.org

Enlaces relacionados

Página oficial Arduino(ENG): Servo with knob
Página oficial Arduino(ENG): Include
Tronixstuff(ENG): entre otras cosas...servos
Arduteka: El servomotor
BricoGeek: Control de servomotores
Adafruit(ENG): Lesson 14: servomotors
Instructables(ENG): Using servos
Instructables(ENG): Arduino+Servo+potentiometer
Instructables(ENG): How to #Arduino servo
ArduinoArts(ENG): Servo on IKEA lamp
Página oficial Arduino : Función map

 

Share Button

Un pensamiento en “Práctica 4

  1. Pingback: Práctica 4. Servo | ThinkBit | tecno4 | ...

Comentarios cerrados.