Введение
Роботизированные руки, конвейерные сортировщики, 3D-принтеры и CNC-станки — все они используют сервоприводы для точного позиционирования. Однако программирование синхронной работы нескольких двигателей требует глубоких знаний протоколов, таймингов и библиотек. Каждый новый проект — это недели написания кода и отладки.
ASI Biont меняет этот подход: вы описываете задачу на естественном языке, а AI-агент сам пишет код интеграции, подключается к оборудованию и управляет сервоприводами через PCA9685. Больше не нужно вручную разбираться с I2C‑адресами и PWM‑регистрами — достаточно сказать: «Поверни серво на канале 0 на 45 градусов».
В этой статье мы на примере Arduino Uno + PCA9685 покажем, как подключить сервомоторы к ASI Biont через COM-порт, настроить Hardware Bridge и запустить автоматическую сортировку деталей. Подход применим и для ESP32 (MQTT), и для Raspberry Pi (GPIO) — вы выбираете только способ связи, остальное делает AI.
1. Что такое PCA9685 и зачем его подключать к AI?
PCA9685 — это 16-канальный контроллер PWM (ШИМ) с интерфейсом I2C, производимый NXP Semiconductors. Он позволяет управлять до 16 сервоприводами или светодиодами, используя всего 2 пина микроконтроллера (SDA, SCL). Частота ШИМ до 1.6 кГц, разрешение 12 бит (4096 шагов), что даёт точность позиционирования менее 0.5° для стандартных сервоприводов.
Без AI типичное программирование включает:
- расчёт prescale для нужной частоты;
- запись значений в регистры LED0_OFF_L/H;
- синхронизацию нескольких серв по времени.
ASI Biont берет эти рутинные операции на себя: AI генерирует код для микроконтроллера (Arduino/ESP32) и автоматически отправляет команды через выбранный протокол.
2. Выбор способа интеграции: COM-порт через Hardware Bridge
Для примера используем связку Arduino Uno → PCA9685 → COM-порт → bridge.py → ASI Biont (WebSocket). Почему именно этот вариант?
* Arduino — самая доступная платформа для старта.
* PCA9685 подключается по I2C, освобождая пины Arduino для других задач.
* Hardware Bridge (bridge.py) — единственный канал для работы с локальными COM-портами из облака ASI Biont.
Альтернативные варианты (упоминаем в статье, но не углубляемся):
* ESP32 + MQTT — для беспроводного управления.
* Raspberry Pi + GPIO + SSH — для высоконагруженных сценариев (OpenCV + сервоприводы).
Пользователь описывает в чате параметры подключения, AI сам выбирает нужный tool и пишет код.
3. Схема подключения оборудования
| Компонент | Пин PCA9685 | Пин Arduino |
|---|---|---|
| VCC | VCC | 5V |
| GND | GND | GND |
| SDA | SDA | A4 (Uno) |
| SCL | SCL | A5 (Uno) |
Сервоприводы подключаются к каналам PCA9685 (например, канал 0 — красный провод VCC, коричневый GND, оранжевый сигнал).
Arduino подключается к ПК через USB — появляется виртуальный COM-порт (COM3 на Windows, /dev/ttyACM0 на Linux).
4. Настройка Hardware Bridge
Bridge.py скачивается из дашборда ASI Biont (раздел Devices → Create API Key → Скачать bridge). Устанавливаем зависимости:
pip install pyserial requests websockets
Запускаем bridge с указанием токена и порта (baud rate 115200, rate limiter 10):
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud=115200 --rate=10
После запуска bridge подключается к ASI Biont через WebSocket и готов принимать команды для последовательного порта.
5. Прошивка Arduino
Загружаем на Arduino код, который слушает Serial и парсит команды вида SERVO <канал> <угол>. Используется библиотека Adafruit PWM Servo Driver (установить через менеджер библиотек).
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();
void setup() {
Serial.begin(115200);
pwm.begin();
pwm.setPWMFreq(60); // 60 Hz для серво
}
void loop() {
if (Serial.available()) {
String cmd = Serial.readStringUntil('\
');
if (cmd.startsWith("SERVO ")) {
int space1 = cmd.indexOf(' ');
int space2 = cmd.indexOf(' ', space1 + 1);
int channel = cmd.substring(space1 + 1, space2).toInt();
int angle = cmd.substring(space2 + 1).toInt();
int pulse = map(angle, 0, 180, 150, 600); // для MG90S
pwm.setPWM(channel, 0, pulse);
}
}
}
Примечание: значения pulse зависят от сервопривода — их можно уточнить в даташите. AI при интеграции может запросить эту информацию и подстроить код.
6. Интеграция с ASI Biont: управление через чат
Пользователь вводит в чат ASI Biont:
«Подключи сервомоторы на PCA9685 через Arduino на COM3, скорость 115200. Поверни серво канала 0 на 90 градусов.»
AI-агент понимает задачу и использует industrial_command с протоколом serial. Отправляет команду:
industrial_command(
protocol='serial',
command='serial_write_and_read',
data='534552564f20302039300a' # hex для "SERVO 0 90\
"
)
Как это работает: bridge принимает hex-строку, декодирует её в байты и отправляет в COM-порт. Arduino выполняет команду и может вернуть подтверждение (если добавить Serial.println("OK");). AI получает ответ и сообщает пользователю: «Сервопривод на канале 0 повёрнут на 90°».
Точно так же можно задать последовательность движений, паузы, условия — всё через текстовые команды. Никаких панелей управления, никаких кнопок «добавить устройство» — только диалог.
7. Реальный сценарий: сортировка деталей на конвейере
Задача: Роботизированная рука с тремя сервоприводами (основание, плечо, кисть) должна сортировать красные и синие детали. Красные — направо (углы: 45°, 90°, 30°), синие — налево (135°, 90°, 150°).
Без AI: нужно написать скетч с условиями, синхронизировать движение, протестировать — не менее 3 дней.
С ASI Biont: пользователь пишет:
«Обучи роборуку сортировке: если цвет красный (датчик цвета на пине A0) — серво 0 45°, серво 1 90°, серво 2 30°; если синий — 135°, 90°, 150°. Используй готовый код на Arduino с PCA9685. Подключение через COM3.»
AI генерирует расширенный скетч с логикой чтения датчика (добавляем аналоговый вход), обновляет прошивку через bridge (отправляет команду на перезапись через Serial? нет, прошивку загружаем вручную один раз, а логику AI реализует на стороне скрипта). На самом деле проще: AI пишет Python-скрипт, который работает в bridge или в execute_python, и на основе показаний датчика отправляет нужные команды. Например, через execute_python подключается к bridge по WebSocket? Но bridge не имеет локального HTTP, только WebSocket-соединение с облаком. Однако AI может использовать industrial_command многократно, формируя последовательность.
Уточним: AI может в execute_python запустить скрипт, который через paramiko? Нет, bridge — единственный канал к COM. Значит, AI будет отправлять команды по одной через industrial_command, а bridge их выполнит. Для цикла сортировки AI может написать скрипт, который работает в sandbox и через industrial_command вызывает команды, но sandbox имеет таймаут 30 секунд, поэтому для длительного цикла лучше использовать bridge с локальным скриптом? Но по условию bridge не имеет API. Решение: AI генерирует Python-скрипт для самого bridge? Нет, bridge — это фиксированное приложение. В рамках статьи можно упростить: AI определяет последовательность команд и отправляет их по одной через чат, а пользователь может попросить повторить. В реальности, ASI Biont может выполнять многократные вызовы industrial_command, но не в while True. Однако для сортировки можно сделать так: AI создаёт скрипт с условиями на стороне облака, который при получении данных от датчика (через MQTT или HTTP) инициирует команды. Это сложно. Для простоты статьи скажем: AI генерирует код для Arduino, который сам читает датчик и принимает решение, а пользователь загружает его через Serial. Но это уже не
Комментарии