Arduino: Moviendo un Micro Servo SG90 9g

servo1El Kit de Arduino que obra en mi poder viene acompañado con los sensores básicos, mi objetivo es conocerlos todos y probarlos antes de seguir con otros proyectos.

Hoy le ha tocado a uno de los componentes más interesantes de la caja, un servomotor.

En concreto el modelo del kit es el siguiente: Tower Pro Micro Servo 9g SG90 (sg90servo).

servo2

Los servo normalmente no están ideados para un giro continuo como los motores convencionales (por ejemplo para hacer girar un rueda que mueva nuestro Arduino), los servos están diseñados para que se muevan un determinado angulo y se mantengan en una posición en respuesta a una señal. Nuestro modelo puede rotar 180 grados, 90º en cada sentido.

El servo se conecta usando 3 hilos:

  • 5V (rojo)
  • GND (negro/marrón)
  • Control (amarillo/blanco) conectado al PIN nº7 en este ejemplo.

servo5

El control de un servo se facilita en forma de librería con funciones especiales, en el IDE de desarrollo debemos asegurarnos de que esta instalada (menú Programa > Incluir librería).

servo4

Para usar la librería sólo debemos añadir el fichero de cabecera:

#include <Servo.h>

Para probar abriremos un proyecto de ejemplo para servos llamado Sweep (tutorial oficial en arduino.cc). Es muy sencillo, va enviando la orden de mover el motor del servo grado a grado desde 0 hasta 180 (con una pequeña espera o delay), luego realiza la misma operación de forma inversa.

Referencias al lenguaje usado para el código:

Primero declaramos un objeto de tipo Servo.  En el bloque de código Setup() usamos el método attach() pasando como parámetro de entrada el pin al que tenemos conectado el hilo amarillo con la señal de control.

El método write() escribe un valor al servo con el angulo de rotación.

#include <Servo.h>

#define SERVO_PIN 7
#define SERVO_MX_ANGLE 180
#define SERVO_DELAY_MS 100

Servo myservo; 

int pos = 0; 

void setup() {
 myservo.attach(SERVO_PIN); 
}

void loop() {
 
 myservo.write(45);
 delay(1000);
 myservo.write(90);
 delay(1000); 
 myservo.write(180);
 delay(1000); 
 myservo.write(0);
 
 for (pos = 0; pos <= SERVO_MX_ANGLE; pos++) { 
 myservo.write(pos); 
 delay(SERVO_DELAY_MS); 
 }
 for (pos =SERVO_MX_ANGLE; pos >= 0; pos--) { 
 myservo.write(pos); 
 delay(SERVO_DELAY_MS); 
 }
}

 

Arduino external_led: Encender un led usando un pin de salida

Este ejercicio es similar al anterior (Arduino ledblink: Hacer parpadear el led de la placa) pero voy a usar una luz led incluido en el kit DFRduino Beginner Kit For Arduino (SKU:DFR0100) conectada a un pin (nº 8).

Los pins digitales se pueden configurar como entradas o salidas (por defecto están configurados como entradas, si lo queremos usar así no es necesario llamar a la función pinMode()).

 

arduino8

El esquema del circuito es como el siguiente pero usando la salida Nº 8.

arduino9

La patilla más larga del led es el ánodo (el polo positivo) y la otra el cátodo, debemos conectar la resistencia (yo he usado una de 1.0K ohm) a la patilla más larga y el otro extremo a la salida Nº 8. La otra patilla del led va directamente a la señal GND.

arduino10

 

A nivel de código es igual que el ejercicio anterior.

arduino11

Enlaces: