Управление множеством сервоприводов по Bluetooth: Arduino + Android-приложение
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino UNO (или Mega для >6 серв) | 1 | RobotDyn Uno |
| Bluetooth-модуль HC-06 | 1 | или любой другой |
| Сервоприводы (SG90 / MG996R и т.п.) | 6 | можно тестировать с 1 |
| Перемычки (набор MM/FF/MF) | 1 | |
| Android-смартфон | 1 |
О проекте
Ранее делал управление 1 сервой, теперь — мульти-управление. Приложение на Google Play (исходники по запросу).
Сборка
Подключите по схеме, загрузите скетч, установите приложение, свяжите Bluetooth (после пары). Важно: RXD модуля → TX Arduino, TXD → RX. Не подключайте Bluetooth при загрузке скетча!
Настройка HC-06 (опционально)
Для смены имени, PIN, baud rate нужен USB-TTL программатор:
- VCC→VCC, GND→GND, RXD→TX, TXD→RX
- В Serial Monitor (9600):
AT→ OK AT+NAMEnewname— имяAT+PIN1234— пин
Подробнее во вложенном PDF.
Скетч Arduino (до 10 серв)
/* Author: Danny van den Brande */
#include <Servo.h>
Servo servo[10];
byte serialA;
void setup() {
servo[0].attach(9); servo[1].attach(10); servo[2].attach(11);
servo[3].attach(3); servo[4].attach(5); servo[5].attach(6);
// servo[6].attach(...); // раскомментируйте для >6 серв (нужен Mega)
Serial.begin(9600); // baud rate модуля
}
void loop() {
if (Serial.available() > 2) {
serialA = Serial.read(); // служебный байт
unsigned int servopos = Serial.read();
unsigned int servopos1 = Serial.read();
unsigned int realservo = (servopos1 * 256) + servopos;
if (realservo >= 1000 && realservo < 1180) { // Серво 1
int pos = map(realservo, 1000, 1180, 0, 180);
servo[0].write(pos); Serial.println("Servo 1"); delay(10);
}
else if (realservo >= 2000 && realservo < 2180) { // Серво 2
int pos = map(realservo, 2000, 2180, 0, 180);
servo[1].write(pos); Serial.println("Servo 2"); delay(10);
}
else if (realservo >= 3000 && realservo < 3180) { // Серво 3
int pos = map(realservo, 3000, 3180, 0, 180);
servo[2].write(pos); Serial.println("Servo 3"); delay(10);
}
else if (realservo >= 4000 && realservo < 4180) { // Серво 4
int pos = map(realservo, 4000, 4180, 0, 180);
servo[3].write(pos); Serial.println("Servo 4"); delay(10);
}
else if (realservo >= 5000 && realservo < 5180) { // Серво 5
int pos = map(realservo, 5000, 5180, 0, 180);
servo[4].write(pos); Serial.println("Servo 5"); delay(10);
}
else if (realservo >= 6000 && realservo < 6180) { // Серво 6
int pos = map(realservo, 6000, 6180, 0, 180);
servo[5].write(pos); Serial.println("Servo 6"); delay(10);
}
// Для серв 7-10 добавьте блоки 7000-7180, 8000-8180, 9000-9180, 10000-10180
}
}
Схема подключения
Производственный процесс
- Simple Pi Robot — Сборка 2WD автономного ровера на Raspberry Pi
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Android-управляемая робот-платформа на Raspberry Pi и Motor Shield
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- Серводвигатели: принцип работы и значение
- Сервоприводные редукторы: функции, преимущества и применение