Depuración y calibración de servos SCS0009
La versión SCS0009 tiene dos contenidos de depuración:
- Montaje TTL y depuración de la posición central: cableado, configuración del ID de servo, fijación de la bocina del servo, ajuste fino de la posición central y ejecución de pruebas.
- Herramienta de depuración SCS0009: GUI en Python + PySide6 para escanear el bus, leer/escribir todos los registros, control de posición, velocidad en baudios/restauración de fábrica y copia de seguridad xdat EEPROM.
Los detalles de los registros del protocolo están en Tabla de memoria del protocolo SCS0009.
El cableado Arduino/extensiones está en Arduino Nano.
1. Depuración TTL: montaje, ID y posición central
Primero, descarga el paquete de depuración de la mano diestra «灵巧手调试.zip» (enlace); tras descomprimirlo, puedes seguir el documento «使用arduio程序调试灵巧手过程(TTL舵机)» (proceso de depuración de la mano diestra con el programa Arduino para servos TTL) para configurar el ID de servo, calibrar, ajustar la posición central y ejecutar el programa de demostración, o consultar el código oficial de código abierto.
Con el producto sin desmontar (el ID de servo, la calibración y la posición central ya vienen ajustados de fábrica), puedes pasar directamente al punto 6, ejecutar el «programa de demostración 02» y al seguimiento de manos.

1. Métodos de cableado para depurar la mano diestra
Uno es usar un PC con software de escritorio en Python, como la aplicación de escritorio de servos Feetech o código Python.
El otro es usar un microcontrolador como el MEGA328P, una placa de desarrollo comprada por separado u otro controlador.
El cableado es el siguiente:
(1) Cableado al depurar por Python (solo se conecta la placa controladora de servos):

(2) Cableado al depurar con la placa de desarrollo MEGA328P (placa controladora de servos + placa 328P):
¡Fíjate bien en la posición de los pines de la placa de desarrollo MEGA328P!




Lo que se describe a continuación es el proceso de depuración con microcontrolador; el microcontrolador ejecuta el programa de demostración en bucle continuo y basta con desconectar el cable de datos para detenerlo.
2. Configurar el ID de servo
Una sola mano diestra usa 8 servos en total; el ID de la mano derecha debe configurarse como 1-8 y el de la mano izquierda como 11-18.
Calibración de la posición central; valores de fábrica por defecto: mano derecha [451,571,451,571,451,571,451,571], mano izquierda [571,451,571,451,571,451,571,451]
- Conexión: conecta sucesivamente un solo servo y la placa controladora de servos.

- Usa el software de escritorio FD1.9.8.2 proporcionado por el fabricante del servo para configurarlo
FD.rar



3. Fijar la bocina del servo
- Carga el programa «安装白色伺服喇叭时使用» (para instalar la bocina blanca del servo) en la placa de desarrollo
Función del programa: colocar la posición de los engranajes del servo aproximadamente en el centro; los ángulos de movimiento posteriores se basan en esta posición intermedia.
(1) Instala el software Arduino; según tu sistema, consulta el tutorial de instalación. Para compilar y descargar el programa Arduino, primero hay que instalar las bibliotecas FTServo y SCServo en el «Administrador de bibliotecas».

(2) Tipo de placa de desarrollo: selecciona "Arduino Nano"

- Depurar los servos 1, 2
(1) Editar: según el ID de servo que quieras depurar, modifica la posición siguiente. Por ejemplo, para depurar el índice, configura los valores de ID como 1 y 2

(2) Cargar el programa en la placa de desarrollo
(3) Conexión: conecta la placa de desarrollo con la placa controladora de servos y los servos 1 y 2; se oirá cómo el engranaje del servo gira un cierto ángulo y se detiene.

(4) Instala la bocina del servo sobre el engranaje, manteniéndola lo más paralela posible

- Depurar los servos 3, 4
(1) Desconecta el cable entre la placa de desarrollo 328P y la placa controladora de servos (de lo contrario no se podrá cargar)
(2) Editar: configura los valores de ID como 3 y 4

(3) Cargar el programa en la placa de desarrollo
(4) Conexión: conecta la placa de desarrollo con la placa controladora de servos y los servos 3 y 4; se oirá cómo el engranaje del servo gira un cierto ángulo y se detiene.
(5) Instala la bocina del servo sobre el engranaje, manteniéndola lo más paralela posible
- Depurar los servos 5, 6
Mismos pasos que arriba
- Depurar los servos 7, 8
Mismos pasos que arriba
4. Ajuste fino del valor intermedio
Carga el programa «01 微调MiddlePos值时使用» (para ajustar el valor de MiddlePos) en la placa de desarrollo
Cuando el dedo esté en la posición cerrada, detén el programa inmediatamente (basta con desconectar el cable de datos) y comprueba si la bocina del servo está correctamente alineada (ver la figura siguiente). Si no está alineada, ajusta los valores MiddlePos_1 y MiddlePos_2 del programa hasta que quede alineada. Anota ese valor (8 valores para 8 servos); se usará en el programa final.


5. Ejecutar el programa de prueba
- Introduce los valores MiddlePos_1 y MiddlePos_2 guardados arriba en el array siguiente y descarga el programa.

6. Ejecutar el «programa de demostración 02»
(1) Instala el software Arduino; según tu sistema, consulta el tutorial de instalación
(2) En el directorio 灵巧手调试\00 TTL串口舵机\arduino程序(MEGA328P开发板)\02 演示程序, abre el archivo .ino correspondiente según la mano izquierda o derecha

(3) Para compilar y cargar el programa Arduino en la placa de desarrollo, primero hay que instalar las bibliotecas FTServo y SCServo en el «Administrador de bibliotecas»

(4) Tipo de placa de desarrollo: selecciona "Arduino Nano"

(5) Compilar y cargar
Nota: en este momento el PC solo está conectado a la placa de desarrollo, y la placa de desarrollo no debe estar conectada a la placa controladora de servos (es decir, no conectada a la mano diestra).
Tras cargarlo correctamente, conecta la placa de desarrollo a la placa controladora de servos con tres cables de puente y conecta los servos a la placa controladora; consulta Método de cableado al depurar con la placa de desarrollo MEGA328P.
La mano diestra ejecutará el «programa de demostración 02» en bucle continuo.
El resultado de la ejecución es el siguiente:

2. Herramienta de depuración SCS0009
Aplicable a Windows 10 / 11; las diferencias con Linux y macOS están en la sección 8. Este tutorial cubre todos los pasos, desde la instalación del entorno hasta la depuración completa.
⚠️ Nota de compatibilidad: esta herramienta actualmente solo admite servos Feetech SCS0009 (serie SCS, realimentación de posición por potenciómetro, resolución de 10 bits 0–1023). La tabla de registros y el formato de parámetros xdat están diseñados para el Feetech SCS0009; no se garantiza la compatibilidad con otras marcas/modelos.
1. Requisitos del entorno
| Dependencia | Versión | Descripción |
|---|---|---|
| Python | >= 3.8 | Se recomienda 3.10+, descárgalo de python.org |
| PySide6 | >= 6.0 | Framework de la GUI |
| pyserial | >= 3.5 | Comunicación por puerto serie |
| Sistema | Win10 / Win11 | Cualquier versión |
2. Instalar Python
- Visita https://www.python.org/downloads/
- Descarga el instalador de Python 3.10+
- Durante la instalación, asegúrate de marcar "Add Python to PATH" (de lo contrario, la línea de comandos no encontrará python)
Verificar la instalación:
python --version3. Instalar dependencias
Se recomienda instalarlas en un entorno virtual para no contaminar el Python del sistema:
# entrar en el directorio del proyecto
cd SCS0009_ServoController
# crear el entorno virtual
python -m venv .venv
# activar el entorno virtual (Windows)
.venv\Scripts\activate
# instalar dependencias
pip install -r requirements.txt⚠️ El entorno virtual solo hay que crearlo una vez. Ejecutarlo repetidamente sobrescribe el entorno original (borra las dependencias instaladas). Después basta con
activatecada vez.
Consejo: tras activar, aparecerá el prefijo
(.venv)en la línea de comandos.
4. Comprobar el entorno
python setup.pySi ves [OK] 环境检查通过,可以运行项目, el entorno es correcto.
5. Conectar el hardware
- Conecta el adaptador USB-serie (como CH340 / CP2102) al PC
- Conecta el controlador de servos (placa controladora del brazo robótico)
- Alimenta los servos (se recomienda DC 5V 5A; versión Pro DC 12V 5A)
Abre el Administrador de dispositivos (Win+X → Administrador de dispositivos) y confirma el número de puerto:
端口 (COM 和 LPT)
└─ USB-SERIAL CH340 (COM3) ← 你的舵机串口Anota el número COM; lo necesitarás al iniciar el programa.
6. Iniciar la GUI
python -m src.gui.factory_calibration_toolO especifica el puerto manualmente (si el puerto serie está ocupado):
python -m src.gui.factory_calibration_tool --port COM3Ver los puertos disponibles:
python -m src.gui.factory_calibration_tool --list-ports7. Flujo de operación de la interfaz
La interfaz tiene un diseño de panel único; cuando la altura de la ventana es insuficiente aparece una barra de desplazamiento automáticamente y, al maximizar, se adapta estirándose.
7.1 Conexión del puerto serie
- Selecciona el puerto y la velocidad en baudios (1M por defecto) y pulsa Conectar
- El estado muestra
🟢 已连接
7.2 Escanear servos
- Pulsa Escanear servos para detectar los servos en línea con ID 1-254
- Los resultados del escaneo se muestran en tiempo real en la lista de servos (con modelo)
- Al pulsar una fila de la lista de servos → se rellena automáticamente en el desplegable de servo
7.3 Lectura/escritura de parámetros
- Leer parámetros: lee los 44 registros (EEPROM + SRAM); el registro muestra los resultados en tiempo real
- Tabla de parámetros: 5 columnas (dirección/registro/valor/zona de almacenamiento/lectura-escritura); EPROM/SRAM/DEFAULT se distinguen por color
- Selección vinculada: al pulsar una fila de la tabla de parámetros → se rellenan automáticamente «dirección de escritura», «longitud» y «valor»
- Escritura: tras modificar el valor, pulsa escribir; el programa desbloquea/escribe/bloquea automáticamente
- Ventana de resultado de escritura: si tiene éxito muestra un aviso verde «✅ 已成功写入»; si falla, un aviso rojo «❌ 写入失败» (con el motivo)
7.4 Modificar el ID de servo
- Conecta al bus solo este servo, el que se va a cambiar de ID, para evitar conflictos con IDs existentes.
- En la tabla de parámetros, localiza la fila «ID de servo» (dirección
0x05) y selecciónala. - Cambia el «valor» por el ID objetivo y pulsa ✏️ Escribir; el programa desbloqueará → escribirá → volverá a bloquear automáticamente.
- Tras cambiarlo, vuelve a escanear el bus para confirmar. Mano derecha 1–8, mano izquierda 11–18.
7.5 Control de posición
- Arrastra el deslizador o introduce directamente la posición objetivo (0–1023); la caja numérica y el deslizador están sincronizados.
- Pulsa ▶ Mover; la barra de estado muestra «Moviendo…».
- Al llegar, avisa «Movimiento completado, desactiva el par»; pulsa ⏹ Par off.
7.6 Velocidad en baudios/restauración de fábrica
- Modificar la velocidad en baudios: elige la nueva velocidad (38400–1000000 bps) y escríbela; el programa cambia la velocidad del puerto serie y verifica con ping, y revierte automáticamente si falla.
- Restaurar de fábrica: restaura los valores de fábrica (ID=1, velocidad 1M); después hay que volver a escanear.
7.7 Parámetros xdat (solo guarda EEPROM)
💾 保存当前舵机: guarda los parámetros EEPROM del servo con el ID actual en un archivo xdat (copia de seguridad)📂 打开 xdat: carga el archivo de copia de seguridad📤 恢复参数到舵机: escribe la copia de seguridad de vuelta en el servo
8. Diferencias entre Linux y macOS
Linux
- Fuentes:
sudo apt install fonts-noto-cjk fonts-noto-color-emoji; de lo contrario la interfaz en chino puede aparecer en blanco y los emoji como cuadrados. - Permisos del puerto serie:
sudo usermod -a -G dialout $USER, cierra sesión y vuelve a entrar para que surta efecto;groupsdebe incluirdialout. Temporalmente puedes usarsudo chmod 666 /dev/ttyUSB0. - Nombre del dispositivo:
/dev/ttyUSB*(CH340 / CP2102 / PL2303) o/dev/ttyACM*(puerto serie USB integrado); usalsusb,dmesg | grep -i ttypara averiguar el fabricante. - Nombre de dispositivo fijo (opcional): escribe en
/etc/udev/rules.d/99-servo.rulesSUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyServo"y después usa/dev/ttyServo. - Inicio:
python -m src.gui.factory_calibration_tool --port /dev/ttyUSB0. - Preguntas frecuentes: si
pipda externally-managed-environment, usa venv o añade--break-system-packages.
macOS
- Python: se recomienda instalarlo con Homebrew (
brew install python); no uses la versión antigua del sistema. - Nombres de puerto serie: usa
/dev/cu.*, no/dev/tty.*(este último puede bloquearse); consulta conls /dev/cu.*. - Controlador USB: CH340 / CP2102 / FTDI suelen ser plug-and-play; los CH340 de lotes antiguos necesitan el controlador WCH; puedes diagnosticar con
system_profiler SPUSBDataType. - Inicio:
python -m src.gui.factory_calibration_tool --port /dev/cu.usbserial-0001. - Apple Silicon: usa Python 3.10+ nativo, evita el Python antiguo bajo Rosetta; si en la primera ejecución aparece «no se puede verificar al desarrollador», permítelo en «Privacidad y seguridad».
- Ahorro de energía: la suspensión de macOS puede desconectar el puerto serie; mantén el equipo despierto durante la operación.
9. Notas
- La escritura es persistente: tras escribir en la EEPROM, el valor original se sobrescribe y no se puede deshacer; haz antes una copia xdat.
- Alimentación estable: una alimentación insuficiente provoca pérdida de pasos, fallos de comunicación o desconexión de los servos; alimenta según los requisitos de Cableado y alimentación SCS0009.
- Puerto serie exclusivo: un mismo puerto no puede abrirse desde dos programas a la vez; cierra antes el monitor serie, la aplicación de escritorio u otros programas que lo ocupen.
- Riesgo al cambiar el ID: conecta al bus solo un servo, el que se va a cambiar de ID; si tras el cambio se pierde la conexión, prueba «Restaurar de fábrica» (el ID vuelve a 1).
- Sobrecalentamiento/sobretensión: la herramienta monitoriza voltaje y temperatura (aviso si la temperatura > 60 °C); si la temperatura alta persiste, detén y deja enfriar.
- Conexión en caliente: al desconectar el USB el programa intenta reconectarse; tras volver a conectarlo, pulsa actualizar puertos.
- Caracteres ilegibles en la consola de Windows: si la herramienta de línea de comandos muestra emojis ilegibles, configura
PYTHONIOENCODING=utf-8y vuelve a ejecutar.
10. Preguntas frecuentes
| Problema | Solución |
|---|---|
| No se encuentra el puerto serie | Comprueba el controlador en el Administrador de dispositivos; cambia el puerto USB; instala el controlador CH340 |
| El puerto serie está ocupado | Cierra el monitor serie y otros programas; reinicia la herramienta |
| La fuente china se muestra en blanco | La fuente predeterminada del sistema es Microsoft YaHei; si hay problemas, instala una fuente china |
| No se detectan servos | Comprueba alimentación/cableado; confirma la velocidad 1M |
| Fallo de escritura | Comprueba la alimentación y conexión del servo; confirma que el registro objetivo se pueda escribir |
| PermissionError al abrir el puerto serie | Asegúrate de que ningún otro proceso ocupe ese puerto COM |
Linux: Permission denied: /dev/ttyUSB0 | No se ha añadido al grupo dialout; ver la sección de Linux arriba |
macOS: se bloquea con un puerto serie con nombre tty. | Usa el dispositivo /dev/cu.* correspondiente |
11. Línea de comandos (opcional)
# listar los puertos disponibles
python -m src.gui.factory_calibration_tool --list-ports
# iniciar con un puerto concreto
python -m src.gui.factory_calibration_tool --port COM3
