
Control de un servo de rotación continua mediante un botón con la ZUM Core 2.0 Arduino IDE C++
Introducción
En esta práctica vamos a utilizar un botón para controlar el funcionamiento de un servo de rotación continua conectado a la placa ZUM Core 2.0.
El objetivo es muy sencillo:
- Al pulsar el botón por primera vez, el servo comenzará a girar.
- Al pulsarlo una segunda vez, el servo se detendrá.
- Cada nueva pulsación alternará entre encendido y apagado.
Además, aprenderemos a utilizar variables booleanas, una herramienta fundamental para almacenar estados dentro de un programa.
Material necesario
- 1 placa ZUM Core 2.0
- 1 módulo botón BQ/ZUM
- 1 servo de rotación continua
- Cables de conexión
- Arduino IDE
Conexiones
Botón BQ/ZUM
Conectaremos el botón utilizando uno de los conectores digitales de la ZUM Core 2.0.
- G → GND
- V → 5V
- S → D4
Servo de rotación continua
El servo dispone de tres cables:
- Marrón o negro → GND
- Rojo → 5V
- Naranja o amarillo → D9
La conexión al pin D9 permitirá controlar el movimiento del servo mediante programación.
Código completo
#include <Servo.h>
Servo servo;
const int boton = 4;
bool motorEncendido = false;
int estadoAnterior = HIGH;
void setup()
{
pinMode(boton, INPUT);
servo.attach(9);
servo.write(90);
Serial.begin(9600);
}
void loop()
{
int estadoActual = digitalRead(boton);
if (estadoActual == LOW && estadoAnterior == HIGH)
{
motorEncendido = !motorEncendido;
if (motorEncendido)
{
servo.write(180);
Serial.println("Servo ENCENDIDO");
}
else
{
servo.write(90);
Serial.println("Servo APAGADO");
}
delay(200);
}
estadoAnterior = estadoActual;
}
Explicación del código
Inclusión de la librería Servo
#include <Servo.h>
La librería Servo permite controlar servomotores de forma sencilla mediante Arduino IDE.
Creación del objeto servo
Servo servo;
Creamos un objeto llamado servo que utilizaremos posteriormente para controlar el motor.
Declaración de variables
const int boton = 4;
Indica que el botón está conectado al pin digital D4.
bool motorEncendido = false;
Esta variable almacena el estado del sistema:
- false → servo apagado.
- true → servo encendido.
Las variables de tipo bool solamente pueden almacenar dos valores:
- true (verdadero)
- false (falso)
Por ello son ideales para representar estados de encendido y apagado.
int estadoAnterior = HIGH;
Esta variable guarda el estado anterior del botón.
Nos permitirá detectar cuándo se ha producido una nueva pulsación.
Configuración inicial
Configuración del botón
pinMode(boton, INPUT);
Configuramos el pin D4 como entrada digital.
Configuración del servo
servo.attach(9);
Conectamos el servo al pin D9.
Posición inicial
servo.write(90);
En los servos de rotación continua:
- 90 → parado.
- 180 → gira en un sentido.
- 0 → gira en el sentido contrario.
Por ello iniciamos el programa con el servo detenido.
Comunicación serie
Serial.begin(9600);
Activa la comunicación con el Monitor Serie para visualizar mensajes de estado.
Lectura del botón
int estadoActual = digitalRead(boton);
Esta instrucción lee el estado actual del botón.
Puede devolver:
- HIGH → botón sin pulsar.
- LOW → botón pulsado.
Detección de una pulsación
if (estadoActual == LOW && estadoAnterior == HIGH)
Esta condición detecta el instante exacto en el que se pulsa el botón.
Gracias a ello evitamos que una única pulsación genere múltiples cambios de estado.
Cambio de estado
motorEncendido = !motorEncendido;
Esta es una de las líneas más interesantes del programa.
El símbolo:
!
significa “contrario”.
Por tanto:
- Si el motor estaba apagado, pasa a encendido.
- Si estaba encendido, pasa a apagado.
Encendido del servo
if (motorEncendido)
{
servo.write(180);
Serial.println("Servo ENCENDIDO");
}
Cuando la variable vale true:
- El servo comienza a girar.
- Se muestra un mensaje en el Monitor Serie.
Apagado del servo
else
{
servo.write(90);
Serial.println("Servo APAGADO");
}
Cuando la variable vale false:
- El servo se detiene.
- Se informa del cambio mediante el Monitor Serie.
Antirrebote
delay(200);
Introduce una pequeña pausa para evitar que una única pulsación sea interpretada varias veces.
Actualización del estado
estadoAnterior = estadoActual;
Al finalizar cada ciclo guardamos el estado actual para poder compararlo en la siguiente iteración.
Funcionamiento del sistema
El comportamiento del programa puede resumirse así:
Pulsación 1 → Servo ENCENDIDO
Pulsación 2 → Servo APAGADO
Pulsación 3 → Servo ENCENDIDO
Pulsación 4 → Servo APAGADO
Cada pulsación cambia el estado del servo.

Conclusión
Esta práctica introduce conceptos fundamentales de programación y robótica:
- Entradas digitales.
- Botones.
- Variables booleanas.
- Detección de eventos.
- Servomotores.
- Comunicación serie.
Además, muestra cómo una única pulsación puede utilizarse para alternar entre distintos estados, una técnica muy utilizada en sistemas de automatización, robótica y domótica.
Etiqueta:arduino, Arduino IDE, c++, Servo, zum core



