Mano es un sistema de control de servomotores que replica la posición de los dedos de una mano humana en tiempo real. Utiliza visión por computadora con MediaPipe y OpenCV para detectar los gestos, y envía comandos vía serial a un microcontrolador Arduino que controla cinco servos, uno por cada dedo.
- Seguimiento en tiempo real de la mano con cámara web.
- Detección de cada dedo usando MediaPipe.
- Cálculo proporcional de la flexión de los dedos.
- Comunicación vía Serial con Arduino para controlar servomotores.
- Código modular y fácil de extender.
- Instala las dependencias:
pip install opencv-python mediapipe numpy pyserial- Ejecuta el script principal:
python main.pyAsegúrate de que el archivo
hand.pyesté en el mismo directorio.
- Abre el archivo
.inoen el IDE de Arduino. - Sube el código a tu placa (ej: Arduino Uno).
- Asegúrate de tener los servos conectados en los pines:
| Dedo | Pin |
|---|---|
| Pulgar | D4 |
| Índice | D5 |
| Medio | D6 |
| Anular | D7 |
| Meñique | D8 |
- Detección: Se detectan los landmarks de la mano con
mediapipe.solutions.hands. - Distancia y normalización: Se calcula la distancia entre las puntas de los dedos y sus respectivas articulaciones MCP. Estas distancias se normalizan con una regla de tres basada en la distancia entre la muñeca y el MCP del dedo medio.
- Mapeo a ángulos: El valor resultante se convierte a un ángulo entre 0 y 180 grados.
- Serial: Se envía un byte con el dedo (
T,I,M,R,P) y tres dígitos representando el ángulo (003a180) al Arduino. - Servo: El Arduino interpreta el comando y mueve el servo correspondiente.
T090 # Pulgar a 90 grados
I045 # Índice a 45 grados
main.py: Script principal que lee la cámara y envía comandos.hand.py: Clasehandque implementa funcionesthumb(),index(), etc., para enviar datos seriales.Mano.ino: Código de Arduino que recibe comandos y mueve servos.
Este proyecto está licenciado bajo la licencia MIT. Consulta el archivo LICENSE para más información.