Controlar Múltiples Servos por Bluetooth: Arduino y App Android
Componentes y suministros
| Componente | Cantidad | Notas |
|---|---|---|
| Arduino UNO | 1 | Usa Mega si necesitas >6 servos |
| Módulo Bluetooth HC-06 | 1 | O cualquier compatible |
| Servomotores (estándar o micro) | 6 | Probable con 1 para test |
| Cables jumper (MM/FF/MF) | 1 set | |
| Smartphone Android | 1 | Para la app de control |
Sobre el proyecto
Hice una app para 1 servo ayer y prometí versión multi-servo. ¡Aquí está! También mejoré el código Arduino.
App en Google Play (buscar "Bluetooth Servo Control Multi"). Código fuente de la app: contactar al autor.
Paso 1: Lista de componentes y montaje
Conecta todo según el esquema, sube el código, descarga la app, empareja Bluetooth y listo.
Importante: Conecta RXD del HC-06 a TX del Arduino y TXD del HC-06 a RX del Arduino. No conectes el módulo Bluetooth al subir el sketch.
Paso 2: Cambiar nombre, PIN y baudrate del HC-06 (opcional)
Necesitas un programador USB-TTL:
- VCC → VCC, GND → GND, RXD → TX, TXD → RX
- Conecta, abre Serial Monitor (9600 baud, NL & CR)
- Envía
AT→ respondeOK AT+NAMEnuevo_nombre→OKsetnameAT+PIN1234→OKsetPIN- Para baudrate:
AT+BAUD4(9600),AT+BAUD6(38400), etc. Ver PDF adjunto.
Código Arduino: Control multi-servo
/* Autor: Danny van den Brande
* Controla múltiples servos vía app Android Bluetooth.
* Añade tantos servos como pines tengas.
*/
#include <Servo.h>
Servo servo[10]; // Array para hasta 10 servos
byte serialA;
void setup() {
// Asigna pines (ejemplo para 6 servos)
servo[0].attach(9); // Servo 1
servo[1].attach(10); // Servo 2
servo[2].attach(11); // Servo 3
servo[3].attach(3); // Servo 4
servo[4].attach(5); // Servo 5
servo[5].attach(6); // Servo 6
// servo[6].attach(...); // Descomenta para más
Serial.begin(9600); // Ajusta al baudrate de tu HC-06
}
void loop() {
if (Serial.available() > 2) {
serialA = Serial.read(); // Byte de identificación (no usado en esta versión)
Serial.println(serialA);
unsigned int servopos = Serial.read(); // Byte bajo
unsigned int servopos1 = Serial.read(); // Byte alto
unsigned int realservo = (servopos1 * 256) + servopos;
Serial.println(realservo);
// Cada servo usa un rango de 180 valores: 1000-1179, 2000-2179, etc.
for (int s = 0; s < 6; s++) {
unsigned int base = (s + 1) * 1000;
if (realservo >= base && realservo < base + 180) {
int angle = map(realservo, base, base + 179, 0, 180);
servo[s].write(angle);
Serial.print("Servo "); Serial.print(s+1); Serial.println(" ON");
delay(10);
break;
}
}
// Para más servos, extiende el bucle o añade más condiciones
}
}
Nota: El código original usaba múltiples if repetitivos. Esta versión con bucle es más limpia y escalable.
Esquemático
Ver imagen adjunta: HC-06 TX→RX (pin 0), RX→TX (pin 1), VCC→5V, GND→GND. Servos en pines PWM (3,5,6,9,10,11) con alimentación externa recomendada si son muchos.
Proceso de manufactura
- Simple Pi Robot: Construye un Rover Autónomo 2‑WD con Raspberry Pi
- Mando universal Android con Arduino, 1Sheeld y control IR
- Centro de Control de Potencia Arduino: N-FET, P-FET, Relé y RTC
- Vehículo Controlado por Android con Raspberry Pi, Arduino y Motor Shield: Guía Completa
- Robot evasor de obstáculos con servo: Construcción con Arduino y HC-SR04
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Controlador de Humidificador DIY con Arduino y Relé: Configuración Segura de Alto Voltaje
- Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
- Control remoto de coche con Arduino Uno y Bluetooth: Guía paso a paso
- Motores servo: funcionamiento, tipos y por qué son importantes
- Entendiendo los reductores para servomotores: funciones, beneficios y aplicaciones