Construa um braço robótico de 4 DOF: PCA9685, servos e cinemática
Um braço robótico de mesa que alcança as poses comandadas, controlado por PCA9685 e parametrizado pela cinemática inversa compreendida na simulação antes de conectar um servo.
Um braço robótico é o primeiro projeto em que um robô para de se deslocar e começa a fazer alguma coisa no mundo. Um robô seguidor de linha segue; um robô com desvio de obstáculos desvia; um braço alcança, posiciona e realiza a preensão. Essa mudança — de locomoção para manipulação — traz a ideia sobre a qual todo manipulador robótico é construído: a cinemática, a geometria que conecta os ângulos que você pode comandar ao ponto no espaço que realmente deseja.
Este caminho de construção trata o braço exatamente assim: uma aula de cinemática que você pode segurar. Você começa entendendo como um braço de dois elos transforma ângulos de junta em posição da ferramenta e volta, reúne as peças de que um braço com servo precisa e aprende o que cada uma faz; depois, antes de gastar dinheiro ou estripar uma engrenagem, explora o alcance, as duas soluções de cotovelo e as poses fora de alcance no simulador do navegador. Só então você conecta o braço real, calibra os servos à mão e executa a cinemática inversa no protótipo.
Siga a árvore tecnológica abaixo de cima para baixo. Cada nó é liberado quando seus pré-requisitos são concluídos, e seu progresso é salvo neste dispositivo, para que você possa construir o braço durante um fim de semana sem perder o ponto.
Lista de materiais
| Peça | Qtd. | Custo aproximado | Observações |
|---|---|---|---|
| Arduino Uno | 1 | US$ 5–8 | Qualquer placa funciona — aqui ela se comunica por I²C |
| PCA9685, driver de 16 canais | 1 | US$ 3 | Não é estritamente necessário para quatro servos, mas é a ferramenta certa |
| Servo SG90 | 4 | US$ 8 | Compre um MG90S para o ombro — engrenagens metálicas, e é a junta que falha |
| Kit de braço robótico de 4 DOF | 1 | US$ 12–25 | Acrílico serve para aprender; alumínio flexiona muito menos |
| Fonte de 5–6 V, ≥3 A | 1 | US$ 8 | Quatro servos em travamento simultâneo consomem ~2,6 A |
| Capacitor de 1000 µF | 1 | US$ 1 | Em paralelo com V+, perto do terminal |
| Braços do servo de reserva | 1 conjunto | US$ 2 | Você acabará instalando um na posição errada. Isso acontece com todo mundo |
Total: aproximadamente US$ 40–60.
Vale pensar em duas compras antes de aceitar as padrão. Um MG90S com engrenagens metálicas no ombro custa um dólar a mais e é a junta que suporta o peso de todas as outras — engrenagens de nylon ali quebram sob carga contínua, não sob impacto. E uma fonte dimensionada para o travamento, porque uma falha característica de um braço ocorre quando, ao colidir com a própria estrutura ou ao preender algo rígido, todos os servos entram em travamento ao mesmo tempo.
Meça o braço antes de escrever qualquer código
A cinemática inversa é aritmética sobre comprimentos de elos. Estes quatro números constituem toda a entrada do cálculo, e obtê-los de uma ficha de produto em vez de medir com uma régua é o motivo mais comum de um braço chegar ao lugar errado com convicção.
| Símbolo | Medir de | Até | Típico |
|---|---|---|---|
L1 |
Eixo da junta do ombro | Eixo da junta do cotovelo | 90–105 mm |
L2 |
Eixo da junta do cotovelo | Ponto real de preensão da garra | 80–95 mm |
A última linha faz mais trabalho do que parece. O “ponto real de preensão da garra” muda quando as mandíbulas fecham, e dimensionar a própria garra é um problema separado de posicioná-la — com sua própria geometria, seus cálculos e seus modos de falha. Se seu braço alcança a peça e depois a derruba ou esmaga, a resposta não está nesta página: comece pelo simulador de garras.
| h | Superfície da mesa | Eixo da junta do ombro | 50–70 mm |
| d | Eixo de giro da base | Eixo do ombro, horizontalmente | 0–15 mm |
Meça entre eixos das juntas, não nas bordas dos suportes. O eixo é o centro do acoplamento estriado de saída do servo, muitas vezes 5–10 mm dentro do suporte visível. Em um elo de 95 mm, um erro de 10 mm supera 10% e produz um braço sistematicamente curto de uma maneira que nenhum ganho corrige.
Esses dois comprimentos dão imediatamente o espaço de trabalho:
alcance máximo = L1 + L2 ex.: 100 + 90 = 190 mm
alcance mínimo = |L1 - L2| ex.: |100 - 90| = 10 mm
O espaço de trabalho é um anel, não um disco. Há um vazio no centro que o braço não alcança fisicamente, e um alvo próximo à base ser identificado como “fora de alcance” é comportamento correto, não um bug.
Construa em marcos
A ordem de montagem aqui contém uma etapa quase impossível de desfazer, e é a etapa 2.
| # | Marco | O teste | Um resultado aprovado |
|---|---|---|---|
| 1 | O driver responde | Varra o barramento I²C | 0x40 aparece; V+ tem sua própria fonte |
| 2 | Servos na posição zero antes da montagem | Comande todos os servos para 90° antes de encaixar qualquer braço do servo | Cada braço do servo fica na pose zero pretendida |
| 3 | Limites por servo | A partir do centro, avance em uma direção até o servo zumir | Você tem contagens mínima e máxima por servo, não os padrões da biblioteca |
| 4 | Mapa das juntas registrado | Comande cada junta por toda a faixa | Deslocamento, sinal e limites mecânicos anotados para as quatro |
| 5 | Verificação de colisão | Percorra lentamente toda a faixa de cada junta | Nada atinge a estrutura; os limites refletem o que você observou |
| 6 | Cinemática direta | Defina ângulos conhecidos, calcule a posição da ferramenta e meça | Os valores calculados e medidos concordam dentro de poucos milímetros |
| 7 | Ida e volta | Passe a posição calculada de volta pelo IK | Os ângulos de saída correspondem aos de entrada |
| 8 | Os quatro quadrantes | Solicite alvos à frente, atrás, à esquerda e à direita | Todos funcionam — se dois forem espelhados, você usou atan em vez de atan2 |
| 9 | Alcançabilidade | Solicite um alvo bem além de L1 + L2 |
Um “fora de alcance” claro — não um NaN, nem um movimento brusco |
| 10 | Movimento suave | Comande um deslocamento amplo | Interpole em etapas, todas as juntas juntas, sem trancos |
| 11 | Repetibilidade | Volte à mesma pose dez vezes vindo de direções diferentes | Meça a dispersão das chegadas — esse número é sua folga |
O marco 2 não pode ser refeito depois. Um braço do servo tem cerca de 20 dentes e só encaixa em posições discretas, aproximadamente a cada 18°. Se montar primeiro e calibrar depois, pode encontrar uma junta cuja faixa útil esteja deslocada em 40° sem nenhuma maneira mecânica de corrigir. Ligue cada servo, comande 90° e então encaixe o braço do servo.
Mova-o suavemente, sempre
Um servo comandado para um novo ângulo vai até lá em velocidade máxima. Em um braço, isso significa um movimento violento, um pico de corrente nos quatro servos e um choque mecânico nas engrenagens de nylon, multiplicado pela alavanca mecânica do próprio braço.
// Interpolate every joint together, so the tool takes a sensible path and
// no single servo carries the whole transition.
void moveTo(float base, float shoulder, float elbow, int steps, int stepMs) {
static float cur[3] = {0, 0, 0};
const float target[3] = {base, shoulder, elbow};
for (int s = 1; s <= steps; s++) {
const float t = (float)s / steps;
for (int j = 0; j < 3; j++) {
const float a = cur[j] + (target[j] - cur[j]) * t;
pwm.setPWM(JOINT[j].channel, 0, countsFor(JOINT[j], a));
}
delay(stepMs);
}
memcpy(cur, target, sizeof(cur));
}
Interpolar todas as juntas juntas importa tanto quanto o próprio movimento suave. Mover as juntas uma de cada vez faz a ferramenta percorrer um arco estranho pelo espaço de trabalho — mais devagar e com muito mais chance de colidir com algo no caminho.
Como fica um bom resultado
| Medição | Kit de acrílico, SG90 | Alumínio, MG90S |
|---|---|---|
| Repetibilidade, mesma direção de aproximação | ±3–5 mm | ±1–2 mm |
| Repetibilidade, direções de aproximação mistas | ±8–15 mm | ±3–5 mm |
| Carga útil utilizável em extensão total | 20–30 g | 40–60 g |
| Deformação em extensão total, sem carga | 3–8 mm | 1–3 mm |
A diferença entre as duas linhas de repetibilidade é a folga, e ela é a maior fonte de erro de um braço simples. Quatro graus de folga no ombro, com um alcance de 190 mm, equivalem a mais de 13 mm na garra. A solução prática não são cálculos melhores — é sempre abordar um alvo pela mesma direção, o que elimina completamente a mudança de sinal e transforma um erro de ±13 mm em um desvio repetível que pode ser calibrado.
Solução de problemas
| Sintoma | Causa provável | Correção |
|---|---|---|
| O braço alcança o ponto errado | Braço do servo instalado em um ângulo arbitrário | Leve todos os servos a 90° antes de instalar os braços do servo |
| A faixa de uma junta está deslocada ~18° | O braço do servo está encaixado um dente fora | Remova e reinstale — o software não corrige isso |
| Alcança corretamente à frente, espelha atrás | atan em vez de atan2 |
atan2 resolve os quatro quadrantes |
| O IK retorna NaN e o braço avança bruscamente | Argumento de acos fora de −1..1 |
Teste a alcançabilidade antes da trigonometria |
| Alvos perto da base falham | Dentro do vazio de alcance mínimo | Comportamento correto — o espaço de trabalho é um anel |
| A placa reinicia quando o braço se move | Corrente dos servos passando pelo Arduino | Fonte V+ separada, terra comum, capacitor de 1000 µF |
| O braço cede em extensão total | Ombro além do torque confortável | MG90S no ombro; compense com uma borracha |
| Zumba ao manter uma pose | Servo lutando contra uma carga no limite | Reduza a carga ou use detach quando não for necessário manter a pose |
| A velocidade da junta dispara perto da extensão total | Ao atravessar uma singularidade | Mantenha os caminhos planejados dentro de uma margem do limite |
| Chega de modo diferente conforme a direção | Folga | Sempre se aproxime pela mesma direção |
| Todos os ângulos ficam sistematicamente curtos | Oscilador do PCA9685 não é exatamente 25 MHz | Meça a frequência real de saída e chame setOscillatorFrequency |
Para onde seguir
Adicione um movimento em linha reta. Interpolar no espaço de juntas, como o código acima faz, faz a ferramenta seguir uma curva. Interpolar no espaço cartesiano — calcular o IK em cada etapa ao longo de uma linha reta — faz a ferramenta viajar em linha reta, como qualquer sistema real de coleta e posicionamento precisa. É uma pequena mudança, e é aqui que as singularidades deixam de ser teóricas: um caminho reto quase totalmente estendido exige velocidades de junta enormes.
Adicione uma câmera e feche o laço de controle. Tudo aqui funciona com controle aberto: o braço vai para a posição comandada e nunca verifica. Uma câmera que lê um marcador ArUco no objeto permite que o braço corrija os erros deixados pela folga e pela deformação — é assim que um braço barato se torna preciso.
Melhore os componentes quando atingir o limite. Elos de alumínio removem quase toda a flexão, servos MG90S removem quase toda a folga, e um braço de 6 DOF adiciona um punho, de modo que o ângulo de aproximação da ferramenta passa a poder ser escolhido por você. Nada disso altera a matemática: o solucionador de dois elos que você escreveu aqui é o mesmo que um braço melhor usa, e é exatamente por isso que valeu a pena começar pela estrutura barata.
Roteiro do projeto
O caminho de construção
Siga a árvore tecnológica das peças até um robô funcionando. Cada nó é desbloqueado quando seus pré-requisitos são concluídos, e seu progresso fica salvo neste dispositivo.
0 / 13 concluídos
Componentes
- ControladorArduino UnoA placa de 8 bits que tolera erros de ligação, pela qual a maioria das pessoas começa na robótica.
- DriverDriver de servomotores PCA9685Acione 16 servomotores por dois pinos I²C—a placa por trás da maioria dos braços robóticos e hexápodes.
- AtuadorServomotor SG90O servomotor de nove gramas presente na maioria dos braços, garras e direções de robôs.
- ChassiKit de braço robótico de 4 DOFEstrutura para um manipulador de mesa com quatro servomotores, base, ombro, cotovelo e garra.
- AlimentaçãoBateria e fonte de alimentação do robôA diferença entre um robô que funciona e outro que fica reiniciando.
Tutoriais deste caminho
- Avançado · 22 min de leituraCinemática inversa de um braço robótico de dois elosPor que um braço de dois elos tem duas soluções, onde pode e não pode alcançar e o que uma singularidade realmente é.
- Intermediário · 18 min de leituraAcione servos com o PCA9685 (driver PWM I²C)Defina a frequência, converta ângulos em larguras de pulso e mova dezesseis servos por dois pinos I²C com segurança.
Pratique antes de fazer a fiação
Ajuste no simulador ao vivo
O caminho de construção passa por um laboratório no navegador. Acerte o comportamento aqui e depois transfira suas configurações para o robô real.
Perguntas frequentes
Como faço um braço robótico com Arduino?
Monte quatro servos em uma estrutura de 4 DOF — base, ombro, cotovelo e garra — e controle-os com um PCA9685 por I²C para que o Arduino não fique sem pinos PWM. Calibre a faixa de ângulo para pulso de cada servo e forneça pontos alvo a um solucionador de cinemática inversa de dois elos que retorna os ângulos do ombro e do cotovelo. Este caminho percorre toda a cadeia, e você ajusta a geometria em um simulador antes de conectar qualquer coisa.
Quantos servos um braço robótico de 4 DOF precisa?
Quatro — um por grau de liberdade: uma base giratória, um ombro, um cotovelo e uma garra. Cada servo precisa do seu próprio canal PWM, e é exatamente por isso que um braço de múltiplas juntas usa um driver PCA9685 em vez dos poucos pinos PWM dedicados do Arduino.
Preciso de um PCA9685 para um braço robótico?
Ele é a ferramenta certa, embora não seja estritamente necessário. Quatro servos podem funcionar em um Arduino se forem alimentados separadamente, mas o PCA9685 libera os temporizadores do microcontrolador, controla cada junta por dois pinos I²C e encaminha a corrente dos servos por sua própria fonte V+ — mantendo a corrente alta longe da sua lógica e evitando que a placa sofra queda de tensão.
Preciso comprar peças antes de começar este projeto?
Não. A cinemática e a resolução de poses rodam no simulador do navegador, então você pode entender e explorar o alcance do braço, suas duas soluções e as poses fora de alcance antes de comprar qualquer coisa. Somente as etapas finais — fiação, calibração e execução do IK — precisam do Arduino físico, do PCA9685, dos servos, da estrutura do braço e da fonte de alimentação.
Como a cinemática inversa é usada em um braço robótico?
A cinemática direta informa onde a ferramenta fica dados os ângulos das juntas; a cinemática inversa faz o inverso útil — dado um ponto alvo, retorna os ângulos das juntas que o alcançam. Neste braço, o ombro e o cotovelo formam um solucionador planar de dois elos, a base orienta esse plano e a garra realiza a preensão. O simulador permite ver o solucionador funcionando, inclusive onde um alvo está fora de alcance.