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.

Exibições: 17049

Responder esta

Respostas a este tópico

 olá boa noite estou tentando montar um  hexapod só que na hora de carregar no arduino está dando erro no programa que estou usando. aparece isto de erro ( "tlc_initservo'was not declared in this scope )

Olá!

tlc_initServos(); deve ser declarado dentro do void setup()

Se não der certo posta teu código aí pra gente dar uma olhada.

ola bom dia desculpe-me pela demora de resposta mas e este o código ele tem 18 motores nas pernas e mais um no ultrason tenho 2 multiplicador de portas tlc5940 pra usar no arduino uno. obrigado pela atenção.

#include //for v1.6
#include "Tlc5940.h"
#include "tlc_servos.h"

PS2X ps2x; // create PS2 Controller Class
int error = 0;

byte type = 0;

int ini = 0;
int esq = 0;
int ligado = 1;
int selecao= 0;

int SERVO_CHANNEL = 1;
int DELAY_TIME = 50;
int velocidade = 10;
int PASSO = 15;
int volta = 0;

int volta_fre ;
int volta_esq ;
int volta_dir ;

int pressionado=0;

int eixo12 = 90;
int eixo10 = 90;
int eixo8 = 90;
int eixo6 = 96;
int eixo4 = 90;
int eixo2 = 90;

int eixo13= 90;
int eixo14= 95;
int eixo15= 80;
int eixo16= 90;
int eixo17= 90;
int eixo18= 90;

int eixo1= 15;
int eixo3= 15;
int eixo5= 15;
int eixo7= 15;
int eixo9= 15;
int eixo11= 15;

void setup()
{

Serial.begin(57600);
error = ps2x.config_gamepad(7,8,6,12, true, true); //setup pins and settings: GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

tlc_initServos(); // Note: this will drop the PWM freqency down to 50Hz.
//---------------------------------
tlc_setServo(1, 0);
tlc_setServo(3, 0);
tlc_setServo(5, 0);
tlc_setServo(7, 0);
tlc_setServo(9, 0);
tlc_setServo(11, 0);

tlc_setServo(2, 30);
tlc_setServo(4, 30);
tlc_setServo(6, 30);
tlc_setServo(8, 30);
tlc_setServo(10, 30);
tlc_setServo(12, 30);

tlc_setServo(13, 89);
tlc_setServo(14, 95); // desregulado
tlc_setServo(15, 80);
tlc_setServo(16, 89);
tlc_setServo(17, 89);
tlc_setServo(18, 89);

int nr=1;
int volta2=0 ;

while (volta2< 10){
ps2x.read_gamepad(false, 0);
if (ps2x.Button(PSB_START)== 1){
volta2++;
}

delay(50);

}

//----------------------------------------------------
pinMode(2, OUTPUT);
delay(1000);

digitalWrite(2, 1);
Tlc.update();
delay(30);

digitalWrite(2, 0);
delay(30);

digitalWrite(2, 1);
delay(30);
Tlc.update();
//----------------------------------------------------
delay(1000);

ligando();

//-------------------------------

}

int lig=1;

void loop()
{
ps2x.read_gamepad(false, 0); //read controller and set large motor to spin at 'vibrate' speed

//--------------------------------------------------------------------------------------------------------------------------------
if(ps2x.Button(PSB_L1)==1 and volta==1 and lig==1 and selecao <=0) { if(ps2x.ButtonPressed(PSB_PINK)==1 and volta==1){ if (velocidade > 6){
velocidade= velocidade - 5;
}}

if(ps2x.ButtonPressed(PSB_GREEN)==1 and volta==1){
if (velocidade < 35)
{velocidade= velocidade + 5;}

}

if(ps2x.Button(PSB_BLUE)==1 and volta==1){
sobe();
}

if(ps2x.Button(PSB_RED)==1 and volta==1){
desce();
}

//-----------------------------------------------------------------------------------------------------------------------------
if(ps2x.Button(PSB_PAD_LEFT)==1 and ps2x.Button(PSB_PAD_RIGHT)==0 and ps2x.Button(PSB_PAD_UP)==0){
esquerda();
volta=0;
}

if(ps2x.Button(PSB_PAD_RIGHT)==1 and ps2x.Button(PSB_PAD_LEFT)==0 and ps2x.Button(PSB_PAD_UP)==0 ){
direita();
volta=0;
}

if(ps2x.Button(PSB_PAD_UP)==1 and ps2x.Button(PSB_PAD_RIGHT)==0 and ps2x.Button(PSB_PAD_LEFT)==0 ){
frente();
volta=0;
}

if(ps2x.Button(PSB_PAD_DOWN)==1 and ps2x.Button(PSB_PAD_RIGHT)==0 and ps2x.Button(PSB_PAD_LEFT)==0 ){
atras();
volta=0;
}

}
//--------------------------------------------------------------------------------------------------------------------------------

if(ps2x.ButtonPressed(PSB_START)==1 and volta==1 and selecao > 0 and lig==1 ){
resetar();
pressionado = 0;
selecao = 0;
volta=0;
}

if(ps2x.ButtonPressed(PSB_START)==1 and volta==1 and selecao <=0 and ps2x.Button(PSB_PAD_UP)==0 and ps2x.Button(PSB_PAD_RIGHT)==0 and ps2x.Button(PSB_PAD_LEFT)==0 ) //LIGA / DESLIGA { if (lig==1){ resetar(); desligando(); volta=0; lig=0; velocidade=10; } else { ligando(); pressionado = 0; selecao = 0; volta=0; lig=1; }} if(ps2x.ButtonPressed(PSB_SELECT)==1 and volta==1 and lig==1 ){ pressionado =3; myselect(); volta=0; } myselect2(); delay(50); volta=1; } //--------------------------------------------------------------------------------------------------------------------------------------------------- void resetar() { eixo12 = 90; eixo10 = 90; eixo8 = 90; eixo6 = 96; eixo4 = 90; eixo2 = 90; eixo13= 90; eixo14= 95; eixo15= 80; eixo16= 90; eixo17= 90; eixo18= 90; eixo1= 15; eixo3= 15; eixo5= 15; eixo7= 15; eixo9= 15; eixo11= 15; tlc_setServo(1, eixo1); tlc_setServo(2, eixo2); tlc_setServo(3, eixo3); tlc_setServo(4, eixo4); tlc_setServo(5, eixo5); tlc_setServo(6, eixo6); tlc_setServo(7, eixo7); tlc_setServo(8, eixo8); tlc_setServo(9, eixo9); tlc_setServo(10, eixo10); tlc_setServo(11, eixo11); tlc_setServo(12, eixo12); tlc_setServo(13, eixo13); tlc_setServo(14, eixo14); tlc_setServo(15, eixo15); tlc_setServo(16, eixo16); tlc_setServo(17, eixo17); tlc_setServo(18, eixo18); Tlc.update(); delay(50); } void myselect(){ if(selecao==5 and pressionado == 3){ selecao=6; eixo12=eixo12-20; tlc_setServo(12, eixo12); Tlc.update(); delay(500); eixo12=eixo12+20; tlc_setServo(12, eixo12); Tlc.update(); pressionado=0; } if(selecao==4 and pressionado == 3){ selecao=5; eixo10=eixo10-20; tlc_setServo(10, eixo10); Tlc.update(); delay(500); eixo10=eixo10+20; tlc_setServo(10, eixo10); Tlc.update(); pressionado=0; } if(selecao==3 and pressionado == 3){ selecao=4; eixo8=eixo8-20; tlc_setServo(8, eixo8); Tlc.update(); delay(500); eixo8=eixo8+20; tlc_setServo(8, eixo8); Tlc.update(); pressionado=0; } if(selecao==2 and pressionado == 3){ selecao=3; eixo6=eixo6-20; tlc_setServo(6, eixo6); Tlc.update(); delay(500); eixo6=eixo6+20; tlc_setServo(6, eixo6); Tlc.update(); pressionado=0; } if(selecao==1 and pressionado == 3){ selecao=2; eixo4=eixo4-20; tlc_setServo(4, eixo4); Tlc.update(); delay(500); eixo4=eixo4+20; tlc_setServo(4, eixo4); Tlc.update(); pressionado=0; } if(selecao==0 and pressionado == 3){ selecao=1; eixo2=eixo2-20; tlc_setServo(2, eixo2); Tlc.update(); delay(500); eixo2=eixo2+20; tlc_setServo(2, eixo2); Tlc.update(); pressionado=0; } } void myselect2(){ //-------------------------------seleção1---------------------------------------------------------------------------------- if(selecao == 1){ if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo2>21){
eixo2 = eixo2-3;
}
tlc_setServo(2, eixo2);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo2<159){ eixo2 = eixo2+3; } tlc_setServo(2, eixo2); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo13<132){ eixo13 = eixo13+3; } tlc_setServo(13, eixo13); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo13>42){
eixo13 = eixo13-3;
}
tlc_setServo(13, eixo13);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo1<120){ eixo1 = eixo1+3; } tlc_setServo(1, eixo1); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo1>3){
eixo1 = eixo1-3;
}
tlc_setServo(1, eixo1);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção1----------------------------------------------------------------------------------

//-------------------------------seleção2----------------------------------------------------------------------------------
if(selecao == 2){

if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo4>21){
eixo4 = eixo4-3;
}
tlc_setServo(4, eixo4);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo4<159){ eixo4 = eixo4+3; } tlc_setServo(4, eixo4); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo14<132){ eixo14 = eixo14+3; } tlc_setServo(14, eixo14); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo14>42){
eixo14 = eixo14-3;
}
tlc_setServo(14, eixo14);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo3<120){ eixo3 = eixo3+3; } tlc_setServo(3, eixo3); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo3>3){
eixo3 = eixo3-3;
}
tlc_setServo(3, eixo3);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção2----------------------------------------------------------------------------------

//-------------------------------seleção3----------------------------------------------------------------------------------

if(selecao == 3){

if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo6>21){
eixo6 = eixo6-3;
}
tlc_setServo(6, eixo6);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo6<159){ eixo6 = eixo6+3; } tlc_setServo(6, eixo6); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo15<132){ eixo15 = eixo15+3; } tlc_setServo(15, eixo15); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo15>42){
eixo15 = eixo15-3;
}
tlc_setServo(15, eixo15);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo5<120){ eixo5 = eixo5+3; } tlc_setServo(5, eixo5); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo5>3){
eixo5 = eixo5-3;
}
tlc_setServo(5, eixo5);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção3----------------------------------------------------------------------------------

//-------------------------------seleção4----------------------------------------------------------------------------------
if(selecao == 4){

if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo8>21){
eixo8 = eixo8-3;
}
tlc_setServo(8, eixo8);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo8<159){ eixo8 = eixo8+3; } tlc_setServo(8, eixo8); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo16<132){ eixo16 = eixo16+3; } tlc_setServo(16, eixo16); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo16>42){
eixo16 = eixo16-3;
}
tlc_setServo(16, eixo16);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo7<120){ eixo7 = eixo7+3; } tlc_setServo(7, eixo7); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo7>3){
eixo7 = eixo7-3;
}
tlc_setServo(7, eixo7);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção4----------------------------------------------------------------------------------

//-------------------------------seleção5----------------------------------------------------------------------------------
if(selecao == 5){

if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo10>21){
eixo10 = eixo10-3;
}
tlc_setServo(10, eixo10);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo10<159){ eixo10 = eixo10+3; } tlc_setServo(10, eixo10); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo17<132){ eixo17 = eixo17+3; } tlc_setServo(17, eixo17); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo17>42){
eixo17 = eixo17-3;
}
tlc_setServo(17, eixo17);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo9<120){ eixo9 = eixo9+3; } tlc_setServo(9, eixo9); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo9>3){
eixo9 = eixo9-3;
}
tlc_setServo(9, eixo9);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção5----------------------------------------------------------------------------------

//-------------------------------seleção6----------------------------------------------------------------------------------
if(selecao == 6){

if(ps2x.Button(PSB_R2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo12>21){
eixo12 = eixo12-3;
}
tlc_setServo(12, eixo12);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_L2)==1 and volta==1){ //will be TRUE as long as button is pressed

if(eixo12<159){ eixo12 = eixo12+3; } tlc_setServo(12, eixo12); Tlc.update(); delay(50); } if(ps2x.Button(PSB_RED)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo18<132){ eixo18 = eixo18+3; } tlc_setServo(18, eixo18); Tlc.update(); delay(50); } if(ps2x.Button(PSB_BLUE)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo18>42){
eixo18 = eixo18-3;
}
tlc_setServo(18, eixo18);
Tlc.update();
delay(50);
}

if(ps2x.Button(PSB_GREEN)==1 and volta==1){ //will be TRUE as long as button is pressed
if(eixo11<120){ eixo11 = eixo11+3; } tlc_setServo(11, eixo11); Tlc.update(); delay(50); } if(ps2x.Button(PSB_PINK)==1 and volta==1){ //will be TRUE as long as button is pressed if(eixo11>3){
eixo11 = eixo11-3;
}
tlc_setServo(11, eixo11);
Tlc.update();
delay(50);
}
}

//------------------------------- FIM seleção6----------------------------------------------------------------------------------

}

void ligando(){

for (int angle = 30; angle < 65; angle++) {
tlc_setServo(2, angle);
tlc_setServo(4, angle);
tlc_setServo(6, angle);
tlc_setServo(8, angle);
tlc_setServo(10, angle);
tlc_setServo(12, angle);
Tlc.update();
delay(DELAY_TIME);
}

int angle2 = 0;

for (int angle = 65; angle < 90; angle++){

if (angle2 < 15){
angle2++;
}
tlc_setServo(2, angle);
tlc_setServo(4, angle);
tlc_setServo(6, angle+6);
tlc_setServo(8, angle);
tlc_setServo(10, angle);
tlc_setServo(12, angle);

tlc_setServo(1, angle2);
tlc_setServo(3, angle2);
tlc_setServo(5, angle2);
tlc_setServo(7, angle2);
tlc_setServo(9, angle2);
tlc_setServo(11, angle2);

Tlc.update();
delay(DELAY_TIME);
}
}

void desligando(){

int angle2 = 15;
for (int angle = 90; angle > 65; angle--){

if (angle2 > 0){
angle2--;
}
tlc_setServo(2, angle);
tlc_setServo(4, angle);
tlc_setServo(6, angle+6);
tlc_setServo(8, angle);
tlc_setServo(10, angle);
tlc_setServo(12, angle);

tlc_setServo(1, angle2);
tlc_setServo(3, angle2);
tlc_setServo(5, angle2);
tlc_setServo(7, angle2);
tlc_setServo(9, angle2);
tlc_setServo(11, angle2);

Tlc.update();
delay(DELAY_TIME);
}

for (int angle = 65; angle > 30; angle--) {
tlc_setServo(2, angle);
tlc_setServo(4, angle);
tlc_setServo(6, angle);
tlc_setServo(8, angle);
tlc_setServo(10, angle);
tlc_setServo(12, angle);
Tlc.update();
delay(DELAY_TIME);
}
}

void esquerda(){

for (int volta_esq = 0; volta_esq < 25; volta_esq++){

eixo15++; eixo17++; eixo13++; eixo18++; eixo14++; eixo16++;

tlc_setServo(16, eixo16);

tlc_setServo(14, eixo14);
tlc_setServo(15, eixo15);
tlc_setServo(17, eixo17);
tlc_setServo(13, eixo13);
tlc_setServo(18, eixo18);

Tlc.update();
delay(velocidade);
}

for (int volta_esq = 0; volta_esq < 25; volta_esq++){

eixo2--; eixo13--; eixo16--; eixo8--;

tlc_setServo(16, eixo16);
tlc_setServo(8, eixo8);
tlc_setServo(2, eixo2);
tlc_setServo(13, eixo13);

Tlc.update();
delay(velocidade);
}

for (int volta_esq = 0; volta_esq < 25; volta_esq++){

eixo2++; eixo17--; eixo10--; eixo8++; eixo4--; eixo14--;

tlc_setServo(14, eixo14);
tlc_setServo(4, eixo4);
tlc_setServo(17, eixo17);
tlc_setServo(10, eixo10);

tlc_setServo(2, eixo2);
tlc_setServo(8, eixo8);

Tlc.update();
delay(velocidade);
}

for (int volta_esq = 0; volta_esq < 25; volta_esq++){

eixo10++; eixo6--; eixo15--; eixo12--; eixo4++;

tlc_setServo(4, eixo4);
tlc_setServo(12, eixo12);
tlc_setServo(10, eixo10);
tlc_setServo(15, eixo15);
tlc_setServo(6, eixo6);

Tlc.update();
delay(velocidade);
}

for (int volta_esq = 0; volta_esq < 25; volta_esq++){

eixo6++; eixo12++; eixo18--;
tlc_setServo(6, eixo6);

tlc_setServo(12, eixo12);
tlc_setServo(18, eixo18);

Tlc.update();
delay(velocidade);
}

//--------------------------------------------------------------------------------------------------------------
}

void direita(){

for (int volta_dir = 0; volta_dir < 25; volta_dir++){

eixo15--; eixo17--; eixo13--; eixo18--; eixo14--; eixo16--;

tlc_setServo(16, eixo16);
tlc_setServo(14, eixo14);
tlc_setServo(15, eixo15);
tlc_setServo(17, eixo17);
tlc_setServo(13, eixo13);
tlc_setServo(18, eixo18);

Tlc.update();
delay(velocidade);
}

for (int volta_dir = 0; volta_dir < 25; volta_dir++){

eixo2--; eixo13++; eixo16++; eixo8--;

tlc_setServo(16, eixo16);
tlc_setServo(8, eixo8);
tlc_setServo(2, eixo2);
tlc_setServo(13, eixo13);

Tlc.update();
delay(velocidade);
}

for (int volta_dir = 0; volta_dir < 25; volta_dir++){

eixo2++; eixo17++; eixo10--; eixo8++; eixo4--; eixo14++;

tlc_setServo(14, eixo14);
tlc_setServo(4, eixo4);
tlc_setServo(17, eixo17);
tlc_setServo(10, eixo10);
tlc_setServo(2, eixo2);
tlc_setServo(8, eixo8);

Tlc.update();
delay(velocidade);
}

for (int volta_dir = 0; volta_dir < 25; volta_dir++){

eixo10++; eixo6--; eixo15++; eixo12--; eixo4++;

tlc_setServo(4, eixo4);
tlc_setServo(12, eixo12);
tlc_setServo(10, eixo10);
tlc_setServo(15, eixo15);
tlc_setServo(6, eixo6);

Tlc.update();
delay(velocidade);
}

for (int volta_dir = 0; volta_dir < 25; volta_dir++){

eixo6++; eixo12++; eixo18++;
tlc_setServo(6, eixo6);

tlc_setServo(12, eixo12);
tlc_setServo(18, eixo18);

Tlc.update();
delay(velocidade);
}

//---------------------------------------------------------------------------------------------------------------------
}

void desce(){
if(eixo2 > 90){
eixo12 = eixo12 -2;
eixo10 = eixo10 - 2;
eixo8 = eixo8 -2;
eixo6 = eixo6 -2;
eixo4 = eixo4 -2;
eixo2 = eixo2 -2;
}

if(eixo2 > 90){
eixo1=eixo1 -2;
eixo3=eixo3 -2;
eixo5=eixo5 -2;
eixo7=eixo7 -2;
eixo9=eixo9 -2;
eixo11=eixo11 -2;
}

Serial.print(eixo2);
Serial.print(" | ");
Serial.println(eixo1);

tlc_setServo(1, eixo1);
tlc_setServo(2, eixo2);
tlc_setServo(3, eixo3);
tlc_setServo(4, eixo4);
tlc_setServo(5, eixo5);
tlc_setServo(6, eixo6);
tlc_setServo(7, eixo7);
tlc_setServo(8, eixo8);
tlc_setServo(9, eixo9);
tlc_setServo(10, eixo10);
tlc_setServo(11, eixo11);
tlc_setServo(12, eixo12);

Tlc.update();

delay(50);

}

void sobe(){
if(eixo2 < 164){
eixo12 = eixo12 +2;
eixo10 = eixo10 + 2;
eixo8 = eixo8 +2;
eixo6 = eixo6 +2;
eixo4 = eixo4 +2;
eixo2 = eixo2 +2;
}

Serial.print(eixo2);
Serial.print(" | ");
Serial.println(eixo1);

if(eixo2 < 164){
if(eixo2 >= 90){
eixo1=eixo1 +2;
eixo3=eixo3 +2;
eixo5=eixo5 +2;
eixo7=eixo7 +2;
eixo9=eixo9 +2;
eixo11=eixo11 +2;
}}

tlc_setServo(1, eixo1);
tlc_setServo(2, eixo2);
tlc_setServo(3, eixo3);
tlc_setServo(4, eixo4);
tlc_setServo(5, eixo5);
tlc_setServo(6, eixo6);
tlc_setServo(7, eixo7);
tlc_setServo(8, eixo8);
tlc_setServo(9, eixo9);
tlc_setServo(10, eixo10);
tlc_setServo(11, eixo11);
tlc_setServo(12, eixo12);

Tlc.update();

delay(50);

}

void frente(){

//-----------------------------------inicio frente-----------------------------------------------------------------------------------------------------------

eixo12=eixo12-25; eixo4=eixo4-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo1--;} if(volta

Olá!

Desculpa a demora pra responder.

Já conseguiu resolver?

Longo o seu código... cortou uma parte no final (deve ter limite de caracteres pra postar comentários aqui).

Dá uma revisada... acredito que faltou um "tlc_initServos()" em algum lugar... manda o código inteiro que tento compilar aqui.


//-----------------------------------inicio frente-----------------------------------------------------------------------------------------------------------


eixo12=eixo12-25;  eixo4=eixo4-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo1--;}

if(volta<PASSO){
eixo14++;  eixo17++; eixo13--; eixo15--; eixo5++; eixo7++; eixo16++;
}
tlc_setServo(16, eixo16);
tlc_setServo(1, eixo1);
tlc_setServo(7, eixo7);
tlc_setServo(12, eixo12);
tlc_setServo(4, eixo4);
tlc_setServo(13, eixo13);
tlc_setServo(14, eixo14);
tlc_setServo(15, eixo15);
tlc_setServo(5, eixo5);
tlc_setServo(17, eixo17);
Tlc.update();
delay(velocidade);
}


eixo4=eixo4+25; eixo8=eixo8-25; eixo12=eixo12+25;
for (int volta = 0; volta < 25; volta++)

{
if(volta<PASSO){
eixo16--; eixo7--; eixo16--;
}
tlc_setServo(12, eixo12);
tlc_setServo(7, eixo7); 
tlc_setServo(4, eixo4);
tlc_setServo(8, eixo8);
tlc_setServo(16, eixo16);
Tlc.update();
delay(velocidade);
}


eixo8=eixo8+25; eixo2=eixo2-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo1++;}

if(volta<PASSO){
eixo13++;
}

tlc_setServo(1, eixo1); 
tlc_setServo(8, eixo8);
tlc_setServo(2, eixo2);
tlc_setServo(13, eixo13);
Tlc.update();
delay(velocidade);
}


eixo2=eixo2+25; eixo10=eixo10-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo11--;}

if(volta<PASSO){
eixo14--; eixo17--;  eixo18++; eixo16++; eixo15--;
}
tlc_setServo(15, eixo15); 
tlc_setServo(11, eixo11); 
tlc_setServo(2, eixo2);
tlc_setServo(10, eixo10);
tlc_setServo(14, eixo14);
tlc_setServo(17, eixo17);
tlc_setServo(18, eixo18);
tlc_setServo(16, eixo16);
Tlc.update();
delay(velocidade);
}

eixo10=eixo10+25; eixo6=eixo6-31;
for (int volta = 0; volta < 25; volta++)
{
if(volta<PASSO){
eixo15++; eixo5--;eixo15++;
}
 
tlc_setServo(6, eixo6);
tlc_setServo(10, eixo10);
tlc_setServo(15, eixo15);
tlc_setServo(5, eixo5);
Tlc.update();
delay(velocidade);
}


eixo6=eixo6+31; 
for (int volta = 0; volta < 25; volta++){


if(volta<15){eixo11++;}

if(volta<PASSO)
{
eixo18--;
}
tlc_setServo(11, eixo11);
tlc_setServo(6, eixo6);

tlc_setServo(18, eixo18);
Tlc.update();
delay(velocidade);
}
}

//--------------------------------------------------------------------------------------------------------------------------------------------


void atras(){

//-----------------------------------inicio frente-----------------------------------------------------------------------------------------------------------
eixo12=eixo12-25;  eixo4=eixo4-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo1++;} //--- alte

if(volta<PASSO){
eixo14--;  eixo17--; eixo13++; eixo15++; eixo5--; eixo7--; eixo16--;
}
tlc_setServo(16, eixo16);
tlc_setServo(1, eixo1);
tlc_setServo(7, eixo7);
tlc_setServo(12, eixo12);
tlc_setServo(4, eixo4);
tlc_setServo(13, eixo13);
tlc_setServo(14, eixo14);
tlc_setServo(15, eixo15);
tlc_setServo(5, eixo5);
tlc_setServo(17, eixo17);
Tlc.update();
delay(velocidade);
}


eixo4=eixo4+25; eixo8=eixo8-25; eixo12=eixo12+25;
for (int volta = 0; volta < 25; volta++)

{
if(volta<PASSO){
eixo16++; eixo7++; eixo16++;
}
tlc_setServo(12, eixo12);
tlc_setServo(7, eixo7); 
tlc_setServo(4, eixo4);
tlc_setServo(8, eixo8);
tlc_setServo(16, eixo16);
Tlc.update();
delay(velocidade);
}


eixo8=eixo8+25; eixo2=eixo2-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo1--;}//alte

if(volta<PASSO){
eixo13--;
}

tlc_setServo(1, eixo1); 
tlc_setServo(8, eixo8);
tlc_setServo(2, eixo2);
tlc_setServo(13, eixo13);
Tlc.update();
delay(velocidade);
}


eixo2=eixo2+25; eixo10=eixo10-25;
for (int volta = 0; volta < 25; volta++)
{
if(volta<15){eixo11++;}//alt

if(volta<PASSO){
eixo14++; eixo17++;  eixo18--; eixo16--; eixo15++;
}
tlc_setServo(15, eixo15); 
tlc_setServo(11, eixo11); 
tlc_setServo(2, eixo2);
tlc_setServo(10, eixo10);
tlc_setServo(14, eixo14);
tlc_setServo(17, eixo17);
tlc_setServo(18, eixo18);
tlc_setServo(16, eixo16);
Tlc.update();
delay(velocidade);
}

eixo10=eixo10+25; eixo6=eixo6-31;
for (int volta = 0; volta < 25; volta++)
{
if(volta<PASSO){
eixo15--; eixo5++; eixo15--;
}
 
tlc_setServo(6, eixo6);
tlc_setServo(10, eixo10);
tlc_setServo(15, eixo15);
tlc_setServo(5, eixo5);
Tlc.update();
delay(velocidade);
}


eixo6=eixo6+31; 
for (int volta = 0; volta < 25; volta++){


if(volta<15){eixo11--;}

if(volta<PASSO)
{
eixo18++;
}
tlc_setServo(11, eixo11);
tlc_setServo(6, eixo6);

tlc_setServo(18, eixo18);
Tlc.update();
delay(velocidade);
}

}

oi bom dia e ainda estou com dificuldade você conseguiu algo.

Olá, jose paulo marinho! Tudo bem?

Desculpa a demora pra responder. Ando muito ocupado.

Hoje tive um tempinho pra tentar compilar seu código. O erro que você mencionou em seu primeiro comentário não ocorreu para mim... na verdade, ocorreram vários outros erros que impediram a compilação total. Infelizmente não tive tempo para verificar todo seu código (ele é um pouco loooongo). ;)

Sugiro dar uma boa revisada. Recomece simples (com funções mais simples). Depois você vai adicionando o restante.

Bom dia, amigo! Você poderia disponibilizar o código-fonte que utilizou?

/*
This sketch sweeps a servo on channel 0.

To connect a servo:
1. Put a 2k-5k pull-up resistor (R0 below; I've tried with 3.3k) between the
servo control output pin and +5v.
2. Connect that same pin to the servo's control line like so

servo data pin
| _____
OUTn ----+----[_____]---+5v
R0

Steve Pomeroy , 2009-01-20 */

#include "Tlc5940.h"
#include "tlc_servos.h"

void setup()
{
tlc_initServos(); // Note: this will drop the PWM freqency down to 50Hz.
}

void loop()
{
for (int angle = 0; angle < 180; angle = angle + 3) {
tlc_setServo(0, angle);
tlc_setServo(1, (angle / 2));
tlc_setServo(2, (180 - angle));
tlc_setServo(3, (180 - (angle / 2)));
tlc_setServo(4, (angle / 3));
tlc_setServo(5, (angle / PI));
Tlc.update();
delay(20);
}
for (int angle = 180; angle >= 0; angle = angle - 3) {
tlc_setServo(0, angle);
tlc_setServo(1, (angle / 2));
tlc_setServo(2, (180 - angle));
tlc_setServo(3, (180 - (angle / 2)));
tlc_setServo(4, (angle / 3));
tlc_setServo(5, (angle / PI));
Tlc.update();
delay(20);
}
}

Muito obrigado! Eu estou usando um CI 74hc595, mas talvez dê pra aproveitar a lógica.

Preciso controlar VÁRIOS MOTORES DE PASSO (uns 40) em um RaspBarry PI, penso em usar as portas I2C (3 e 5) com extensores de portas. Como fazer a interface entre o RaspBarry PI e a controladora dos motores por I2C?

...ou ligar todos os fios dos motores de passo em paralelo, conecta-los ao RaspBarry PI e alimentar, com acionamento de relés, somente o que será ativado no momento para uso.

 

( motor de passo 28byj-48 5v/12v | controladora ULN2003 - 4 fase)

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço