Vamos a probar dos códigos de ejemplo con los que comprobar el correcto funcionamiento del Servomotor en el que tenemos instalado el sensor de proximidad.
Se va a mover el servo-motor desde el ángulo 0 al ángulo 180, y viceversa, de manera indefinida
// Para poder programar servo-motores se debe incluir la librería Servo.h
#include <Servo.h>
// Pin de la tarjeta Arduino donde se ha conectado el pin de señal del servo
int pinServo1 = 7;
// Variable que hace referencia al servo-motor
Servo servo1;
// Almacena el ángulo en el que se encuentre el servo-motor en cada momento
int anguloServo = 90;
// Incremento que se va a ir asignado al ángulo del servo-motor
int incrementoAngulo = 1;
void setup() {
// Indicar con qué pin está asociado el servo-motor
servo1.attach(pinServo1);
// Posicionar inicialment el servo-motor en un ángulo concreto
servo1.write(anguloServo);
}
void loop() {
anguloServo += incrementoAngulo;
// Si el servo-motor ha alcanzado el ángulo máximo, empezar a decrementarlo
if(anguloServo == 180) {
incrementoAngulo = -1;
}
// Si el servo-motor ha alcanzado el ángulo mínimo, empezar a incrementarlo
if(anguloServo == 0) {
incrementoAngulo = 1;
}
// Mover el servo-motor hasta el ángulo que se ha calculado
servo1.write(anguloServo);
// Esperar en esa posición un tiempo
delay(10);
}
Se va a mover el servo-motor entre 3 posiciones alternativamente: centro - derecha - centro - izquierda - centro - derecha ...
// Para poder programar servo-motores se debe incluir la librería Servo.h
#include <Servo.h>
// Pin de la tarjeta Arduino donde se ha conectado el pin de señal del servo
int pinServo1 = 7;
// Variable que hace referencia al servo-motor
Servo servo1;
// En este ejemplo, el servo-motor se va a ir posicionando sucesivamente
// para mirar al centro, derecha e izquierda, por lo que se van a
// almacenar en 3 constantes los ángulos que debe tomar el servo-motor
// para tomar las posiciones deseadas
const int ANGULO_CENTRO = 100;
const int ANGULO_IZQUIERDA = 50;
const int ANGULO_DERECHA = 150;
// Almacena el ángulo en el que se encuentre el servo-motor en cada momento
int anguloServo = ANGULO_CENTRO;
// En este ejemplo, si el servo-motor está posicionado en el ángulo central, hay que conocer
// si se está girando hacia la derecha o hacia la izquierda para poder establecer
// el siguiente ángulo, que podrá ser hacia la derecja o hacia la izquierda según
// el sentido de giro actual
boolean haciaDerecha = true;
void setup() {
// Indicar con qué pin está asociado el servo-motor
servo1.attach(pinServo1);
// Posicionar inicialment el servo-motor en un ángulo concreto
servo1.write(ANGULO_CENTRO);
}
void loop() {
// Actuar de manera manera diferente según el ángulo en el que se encuentre
// actualmente el servo-motor
switch(anguloServo) {
case ANGULO_DERECHA:
// Si está hacia la derecha, girarlo hacia el ángulo del centro
anguloServo = ANGULO_CENTRO;
// El sentido de giro se establece hacia la izquierda
haciaDerecha = false;
break;
case ANGULO_CENTRO:
// Si el servo-motor está en la posición central, hay que averiguar si queremos
// girarlo hacia la derecha o hacia la izquierda, en función del sentido en el que
// actualmente está girando
if(haciaDerecha) {
anguloServo = ANGULO_DERECHA;
} else {
anguloServo = ANGULO_IZQUIERDA;
}
break;
case ANGULO_IZQUIERDA:
// Si está hacia la izqueirda, girarlo hacia el ángulo del centro
anguloServo = ANGULO_CENTRO;
// El sentido de giro se establece hacia la derecha
haciaDerecha = true;
break;
}
// Mover el servo-motor hasta el ángulo que se ha calculado
servo1.write(anguloServo);
// Esperar en esa posición un tiempo
delay(500);
}