Visão Geral
Funcionalidades
Tecnologias Utilizadas
Estrutura do Projeto
Pré-requisitos
Instalação e Configuração
Como Usar
Arquitetura do Sistema
Documentação Técnica
Exemplos de Uso
Solução de Problemas
Contribuição
Licença
Este projeto inovador combina visão computacional e robótica para criar um sistema que permite controlar um braço robótico através de gestos manuais. Utilizando a câmera do computador, o sistema detecta a posição dos dedos da mão em tempo real e traduz esses movimentos em comandos para servomotores conectados a uma placa Arduino.
-
Controle intuitivo de dispositivos robóticos
-
Sistemas de reabilitação física
-
Interface homem-máquina natural
-
Educação em robótica e visão computacional
-
Detecção em Tempo Real: Reconhecimento de mãos usando MediaPipe
-
Controle de Múltiplos Servos: Controle individual de 5 dedos robóticos
-
Interface Visual: Feedback visual dos pontos de referência da mão
-
Lógica Intuitiva: Mapeamento natural entre gestos humanos e movimentos robóticos
-
Configuração Flexível: Fácil adaptação para diferentes hardware
-
Arduino Uno (ou compatível)
-
5x Servomotores (SG90 ou similar)
-
Webcam ou câmera USB
-
Conexões e cabos
-
Python 3.9 (recomendado)
-
OpenCV - Processamento de imagem
-
MediaPipe - Detecção de mãos
-
PyFirmata - Comunicação com Arduino
-
Arduino IDE - Para upload do Firmata
projeto-braco-robotico/
│
├── main.py # Script principal com detecção de mãos
├── servo_braco3d.py # Controle dos servomotores
├── testar-dedos.py # Script de teste dos servos
├── requirements.txt # Dependências do projeto
├── README.md # Documentação
└── assets/ # Imagens e recursos
├── diagrama.png
├── setup_fisico.jpg
└── demonstracao.gif-
Arduino Uno/Nano
-
5x Servomotores
-
Webcam
-
Cabos jumper
-
Protoboard
-
Python 3.9
-
Arduino IDE
-
Bibliotecas listadas em requirements.txt
-
Configuração do Arduino https://via.placeholder.com/600x400/FF6B6B/FFFFFF?text=Configura%C3%A7%C3%A3o+Arduino
-
Instale a Arduino IDE download aqui
-
Conecte o Arduino via USB
-
Carregue o StandardFirmata:
-
Abra Arduino IDE
-
Vá em Arquivo → Exemplos → Firmata → StandardFirmata
-
Selecione a porta correta em Ferramentas → Porta
-
Faça o upload para o Arduino
# Clone o repositório
git clone https://github.com/seu-usuario/controle-braco-robotico.git
cd controle-braco-robotico
# Crie um ambiente virtual (opcional mas recomendado)
python -m venv venv
source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
# Instale as dependências
pip install -r requirements.txthttps://via.placeholder.com/600x400/4ECDC4/FFFFFF?text=Conex%C3%B5es+dos+Servos
Servo1 12 Polegar
Servo2 11 Indicador
Servo3 10 Médio
Servo4 9 Anelar
Servo5 8 Mínimo
Teste dos Servomotores
python testar-dedos.pyEste script testa cada servo individualmente, movendo-os sequencialmente.
Execução do Sistema Principal
python main.pyhttps://via.placeholder.com/600x400/45B7D1/FFFFFF?text=Interface+de+Detec%C3%A7%C3%A3o
Gestos Ação do Robô
Mão aberta -> Todos os dedos abertos
Mão fechada -> Todos os dedos fechados
Dedo estendido -> Dedo correspondente aberto
Dedo dobrado -> Dedo correspondente fechado
Diagrama de Fluxo
[Webcam] → [OpenCV] → [MediaPipe] → [Processamento] → [PyFirmata] → [Arduino] → [Servomotores]
↓
[Feedback Visual]- Captura de Vídeo (main.py)
-
Acesso à webcam via OpenCV
-
Pré-processamento de frames
- Detecção de Mãos (main.py)
-
MediaPipe para landmarks da mão
-
Extração de coordenadas dos dedos
- Lógica de Controle (main.py)
-
Cálculo de distâncias entre pontos
-
Mapeamento para estados abertos/fechados
- Controle de Servos (servo_braco3d.py)
-
Interface com Arduino
-
Movimentação suave dos servos
Pontos de Referência da Mão https://via.placeholder.com/600x400/F7B731/FFFFFF?text=Landmarks+da+M%C3%A3o
O MediaPipe identifica 21 pontos de referência na mão:
-
Polegar: Pontos 1-4
-
Indicador: Pontos 5-8
-
Médio: Pontos 9-12
-
Anelar: Pontos 13-16
-
Mínimo: Pontos 17-20
-
Base: Ponto 0
# Cálculo de distâncias para cada dedo
distPolegar = abs(pontos[17][0] - pontos[4][0])
distIndicador = pontos[5][1] - pontos[8][1]
distMedio = pontos[9][1] - pontos[12][1]
distAnelar = pontos[13][1] - pontos[16][1]
distMinimo = pontos[17][1] - pontos[20][1]# Configuração dos pinos
pin1 = 12 # Polegar
pin2 = 11 # Indicador
pin3 = 10 # Médio
pin4 = 9 # Anelar
pin5 = 8 # Mínimo# Abre todos os dedos
for pin in [12, 11, 10, 9, 8]:
mao.abrir_fechar(pin, 1) # Abrir# "Onda" com os dedos
for pin in [8, 9, 10, 11, 12]:
mao.abrir_fechar(pin, 1)
time.sleep(0.5)
mao.abrir_fechar(pin, 0)- Arduino não detectado
-
Verifique a porta COM no código
-
Teste com testar-dedos.py primeiro
- Servos não se movem
-
Verifique alimentação elétrica
-
Confirme conexões dos pinos
- Detecção de mãos instável
-
Melhore a iluminação do ambiente
-
Ajuste posição da câmera
- Erros de importação
-
Reinstale requirements: pip install -r requirements.txt
-
Verifique versão do Python (3.9 recomendado)
# Adicione no main.py para debug
print(f"Distâncias: P:{distPolegar}, I:{distIndicador}, M:{distMedio}")Contribuições são bem-vindas! Por favor:
1. Fork o projeto
2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
4. Push para a branch (git push origin feature/AmazingFeature)
5. Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Desenvolvido por OctaTelecom
Email: **
GitHub: @OctaTechProject
Vídeo Tutorial:
