Aqueles que pretendem construir um projeto mais complexo (neste caso, quero dizer com mais DOFs, como um bípede humanóide, hexapod, e outros) podem encontrar dificuldades se estiverem usando um Arduino UNO ou similar, a menos que tenham um Mega. Foi o que aconteceu comigo quando eu estava trabalhando no meu projeto bípede.
Depois de pesquisar várias alternativas, sem mudar a placa, eu encontrei este IC: TLC5940.
Ele é vendido como um LED driver de 16 canais, mas com esta biblioteca pode controlar 16 servo motores, tão fácil quanto o "servo sweep". Mas não só é isso: pode-se conectar vários ICs em série e expandir ainda mais (eu ainda não tentei, mas parece ser muito fácil). O que você perde de sua placa são 5 pinos.
Você pode encontrar este IC em um breakout e também em um PWM shield, ou fazer o seu próprio com custo muito baixo (menos de R$ 4,00 por chip). Isto significa que você pode comprar 20 chips pelo preço de um PWM shield. :)
Bem pessoal, o material necessário para fazer este trabalho está abaixo:
• Arduino (utilizei o ONU);
• 1x TLC5940 IC (16 canais);
• resistores de 2.2k;
• jumpers;
• alimentação externa para os servos;
• protoboard;
• servos (quantos você quiser controlar ou sua necessidade de projeto).
No meu exemplo, eu utilizei apenas 6 servos. Mas você pode facilmente adicionar mais nos canais restantes.
Que confusão de fios! É um pouco difícil de entender as conexões na foto acima. Devido a isso eu fiz um esquema no Fritzing. Mas, antes disso, vamos dar uma olhada nos pinos do IC.
Agora, vamos às conexões... Siga a sequência de cores e pinos abaixo.
• IC pinos 1 até o 15 e o pino 28: são os canais de saída, onde você conecta o fio de sinal do servo. Você tem que adicionar um resistor pull-up de 2.2k em cada canal e ligar ao 5V, para tornar possível o controle dos servos.
• IC pino 16 - XERR (não utilizado neste caso).
• IC pino 17 - SOUT (não utilizado neste caso).
• IC pino 18 - GSCLK: fio marrom ligado ao pino 3 do Arduino;
• IC pino 19 - DCPRG: ligado a 5V;
• IC pino 20 - IREF: colocar nele um resistor de 2,2 k e conectar ao GND;
• IC pino 21 - VCC: ligado a 5V;
• IC pino 22 - GND: conectado a GND;
• IC pino 23 - BLANK: fio laranja ligado ao pino 10 do Arduino;
• IC pino 24 - XLAT: fio amarelo ligado ao pino 9 do Arduino;
• IC pino 25 - SCLK: fio azul conectado ao pino 13 do Arduino;
• IC pino 26 - SIN: fio verde ligado ao pino 11 do Arduino;
• IC pino 27 - VPRG: conectado a GND.
Como você vai utilizar muitos servos, vai precisar de uma fonte de alimentação externa para eles. Não se esqueça de ligar o GND dos servos ao GND do Arduino, para ter um GND comum.
Nota: No início eu estava tendo problemas para fazer os servos girarem de 0 a 180 º (eles apenas iam de 0 a 90º). Eu pesquisei em muitos fóruns e encontrei algumas pessoas com o mesmo problema. Mas ninguém tinha a solução. Depois de mudar alguns valores no arquivo tlc_servos.h, eu resolvi este problema. Assim, se alguém tiver o mesmo problema, deve mudar o SERVO_MIN_WIDTH de 204 para 120 e o SERVO_MAX_WIDTH de 410 para 475.
Por enquanto, é isso aí...
P.s.: o vídeo fiz apenas para mostrar que isto realmente funciona. Realizei os testes apenas com 6 servos de cada vez, mas funcionou perfeitamente em todos os canais.
Tags:
Isso eu já fiz, mas não deu certo, preciso de um comando para ler a posição
se não deu certo, é porque perdeu a informação no meio do programa, e isso tu resolve usando programação. Se tu passa o angulo 50 para uma variável ex: motor_9, tanto o motor como a vaariável vai ter esta posição. Se a variável ficar com um valor diferente de 50, é porque no meio do programa teve uma nova atribuição. Como não te conheço, desconheço o que sabe de programação. Se estiver falando uma coisa muito óbvia, esquece. Mas aí não sei como ajudar.
Acho que você não entendeu o que eu quero fazer, quero posicionar o servo em uma angulação e pedir para que me mostre este angulo que está
Olá, Raphael!
Existe uma forma alternativa hackeando cada servo, conectando um fio ao potenciômetro do servo e ligando a uma porta analógica, aí você lê o valor de entrada. Não é difícil de fazer, dá uma olhada: http://letsmakerobots.com/content/sensing-your-servos-position
Olá,
Se puder ajudar a alguém, segue link do vídeo do meu canal.
https://www.youtube.com/watch?v=gg_uEYo9u7I
Abs.
Olá José,
Seque PDF da ligação e e arquivo de simulação ambos gerados pelo Proteus.
Compare e tire suas duvidas.
Abs.
CK
Veja as ligações que fiz no proteus com as informações que você passou J . Eduard Dickel.
Verifica por favor se é isto mesmo.
Coloquei um zener na entrada da alimentação para tentar proteger os servos na alimentação independente. Será que funciona?
Muito obrigado.
Qual será a alimentação dos servomotores?
Você vai utilizar um Arduino como microcontrolador? Não saquei muito bem teu esquema... J5, J6 e J7 são conectores que vão para o Arduino? Não tem como dizer se está correto se eu não vejo aonde estes conectores irão. Siga o esquema que fiz no Fritzing.
De onde virão os 6V? Baterias? Pilhas?
Dica: comece simples em uma protoboard... teste com um canal e depois expanda seu projeto.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por