Olá pessoal !!!

Estou no início de um projeto, no qual, pretendo confeccionar uma mini furadeira sequencial . Do tipo daquelas furadeiras utilizadas em fábricas de gaiolas.

Com isso, espero que consiga acertar os erros em meu sketch, pois, não tenho conhecimentos suficientes a fim de desmembrar e empregar o tal laço "FOR", ou talvez nem seja realmente esse o problema.

Pois bem, eu pretendo que a máquina que estou montando, desloque-se seu carro principal à esquerda e pare, dentro de distâncias de 10mm a cada parada, e isso eu já consegui.

Mas o problema é que ao realizar os 10 furos em suas respectivas paradas, o carro principal não pára no final da décima vez, e nem tão pouco retorna ao ponto zero.

Não estou conseguindo empregar o laço "for" nesse sketch a fim de se concluir esse feito.

Pois somente assim, farei com que o carrinho desloque-se pro lado e pare nos pontos onde estão designados a serem furadas as peças. E também, retorná-lo ao ponto zero posteriormente.

Caso alguem possa me ajudar, agradeço grandemente.

Utilizo um motor de passos de 200 passos e um driver tb 6600 + uma fonte de Pc, 

ABRAÇOS à TODOS !!!

O sketch que estou utilizando é este abaixo:

int pino_passo = 2;
int pino_direcao = 5;
int direcao = 1;
int passos_motor = 200;
int i = 0;

void setup()
{
pinMode(pino_passo, OUTPUT);
pinMode(pino_direcao, OUTPUT);

int i;
direcao = 1;
}
void loop() // sketch: desloca o carro para a lateral e pára (pretendendo-se atingir um ciclo de 10X),
{ // retornando o carro no ponto inicial, (HOME).
int i;

for (int i=0; i <= 10 passos_motor; i++){

direcao = 1;
digitalWrite(pino_direcao, direcao);
for (int p=0 ; p < passos_motor; p++)
{

digitalWrite(pino_passo, 1);
delay(1);
digitalWrite(pino_passo, 0);
delay(1);
}
delay(3000);
}

Exibições: 158

Anexos

Responder esta

Respostas a este tópico

André,

O for funciona basicamente assim:

#define valorDesejado 20

for(int contador; contador < valorDesejado; contador++)
{
    Serial.print("Valor Atual do contador: ");
    Serial.println(contador);
}

No seu código, você não utiliza os contadores do For para nada.

Para te ajudar melhor, preciso saber como funciona o seu drive de motor de passo e qual o tipo de motor de passo esta utilizando, creio que esteja utilizando um motor de passo.

Você sabe que o motor de passo funciona com incremento de passos certo ?

Preciso saber mais dados técnicos para te ajudar.

Ok caro Leonardo, agradeço sua atenção amigo.

Sim meu motor de passos é de 5 Vcc x 1,3 Amperes, bipolar, 4 (fios), 200 passos ou 1,8º graus de ângulos, sendo que estou utilizando um driver TB 6600, e alimentando todo circuito por uma fonte de PC.

Tem alguma informação ou configuração que ainda necessite ?

grato ,  

André.

Anexos

Boa noite ALP,

Na minha opinião seu code está correto, somente existem algumas linhas desnecessárias.

O que está ocorrendo é que ao final da 10 vez, o programa continua funcionado.

Isto ocorre porque você não informou para ele ou para ou voltar.

Precisa escrever uma rotina comando ou o retorno, ou a parada.

Se for retorno, vai retornar e refazer tudo novamente.

Se for para, vai precisar de comandar também o retorno e depois algo pra ele reinciar.

Rui

Boa noite Rui.

Então, aí eu mando compilar, e aparece o seguinte erro:

expected ';' before 'passos_motor'  //  em referência à linha:   for (int i=0; i <= 10 passos_motor; i++){ 

o que se dá a entender que está aguardando algo antes ...

Ainda acho que o que desejo da máquina, através de meu sketch, talvez não seja dessa forma que se escreve o programa, sei lá. Mas enfim, estou tentando de todas as formas possiveis.

Aliás, eu tenho 2 sketchs prontos, e ambos funcionam, um faz com que o carro se desloque pra frente, parando a cada 5 segundos e de 10 em 10 mm. e o outro programa, faz com que o carro retorne diretamente à Home. * Agora, quando tento conciliar ambos os programas, eles entram em conflito. Dá erro, não sei te dizer, onde estou pecando...

VEJA ISSO:

ESTE SKETCH EXECUTA O PRIMEIRO DESLOCAMENTO, COM AS PARADAS, TUDO CERTINHO ...

int pino_passo = 2;
int pino_direcao = 5;
int direcao = 1;
int passos_motor = 200;
int i = 0;
void setup()
{
pinMode(pino_passo, OUTPUT);
pinMode(pino_direcao, OUTPUT);
int i;
direcao = 1;
}
void loop() // sketch: desloca o carro para a lateral e pára (pretendendo-se atingir um ciclo de 10X),
{ // retornando o carro no ponto inicial, (HOME).
int i;
// for (int i=0; i <= 10 passos_motor; i++){

direcao = 1;
digitalWrite(pino_direcao, direcao);
for (int p=0 ; p < passos_motor; p++)
{

digitalWrite(pino_passo, 1);
delay(1);
digitalWrite(pino_passo, 0);
delay(1);
}
delay(3000);
}

JÁ ESSE SKETCH, RETORNA À HOME ... ... ...

int pino_passo = 2;
int pino_direcao = 5;

int direcao = 1;


// Quantidade de passos para uma volta completa
// Ajuste de acordo com o seu motor
int passos_motor = 100;

void setup()
{
// Define os pinos como saida
pinMode(pino_passo, OUTPUT);
pinMode(pino_direcao, OUTPUT);
}

void loop() // -------------------------------- sketch return sem parar, return à HOME ... ... ...
{

direcao = 0;
digitalWrite(pino_direcao, direcao);
for (int p=0 ; p < passos_motor; p++)
{
digitalWrite(pino_passo, 1);
delay(1);
digitalWrite(pino_passo, 0);
delay(1);

}
}

MAS ... NÃO CONSIGO UNI-LOS AMBOS OS PROGRAMAS, POIS DÁ-SE ERROS, E NÃO COMPILA, ENTENDEU ?

Rui, sabe isso que escreveu ? aqui nas linhas abaixo ?

Isto ocorre porque você não informou para ele ou para ou voltar.

Precisa escrever uma rotina comando ou o retorno, ou a parada.

Se for retorno, vai retornar e refazer tudo novamente.

Se for para, vai precisar de comandar também o retorno e depois algo pra ele reinciar.

Então, é bem isso mesmo que está acontecendo, voce entendeu perfeitamente, mas aí que está, não consigo fazer isso, ou seja, explicar essa linguagem pra máquina, entendeu ??

Aí pensava que era utilizando um laço "for", e não é.

VEJA A UNIÃO DE AMBOS OS SKETCHS COMO FICOU, mas ainda assim não funciona.

Ele apresenta erro na linha de (direcao = 0);

int pino_passo = 2;
int pino_direcao = 5;
int direcao = 1;
int passos_motor = 200;
int i = 0;
void setup()
{
pinMode(pino_passo, OUTPUT);
pinMode(pino_direcao, OUTPUT);
int i;
direcao = 1;
}
void loop() // sketch: desloca o carro para a lateral e pára (pretendendo-se atingir um ciclo de 10X),
{ // retornando o carro no ponto inicial, (HOME).
int i;
// for (int i=0; i <= 10 passos_motor; i++){

direcao = 1;
digitalWrite(pino_direcao, direcao);
for (int p=0 ; p < passos_motor; p++)
{

digitalWrite(pino_passo, 1);
delay(1);
digitalWrite(pino_passo, 0);
delay(1);
}
delay(3000);
}

direcao = 0;       // -------------------------------------  dá erro nessa linha aqui ...
digitalWrite(pino_direcao, direcao);
for (int p=0 ; p < passos_motor; p++)
{
digitalWrite(pino_passo, 1);
delay(1);
digitalWrite(pino_passo, 0);
delay(1);

}
}

Bom dia! modifiquei o codigo, nao testei ,mas veja se e isso que quer, codigo em anexo.

Anexos

Ok, bom dia caro Nelson, é isso mesmo amigo ...

Achei mesmo que esse raciocínio, tinha a ver com o tal laço "for", mas eu não estava encontrando uma forma de empregá-lo no sketch. (em função de não ter conhecimentos aprofundados no assunto).

O programinha que me passou, funcionou muito bem, dentro de minhas expectativas, porém, não sei porque, a primeira vez que ele começa rodar, se por exemplo estiver inserido o número "20", ele conta apenas 19 paradas e retorna ao Home.

Nas posteriores vezes, se normaliza as 20 idas e paradas e retorna ao seu padrão normal de funcionamento.

Mas valeu muito pela sua grandiosa ajuda, e também pelo empenho em reformar meu sketch, 

Só uma coisa que ainda me intrigou, é em relação ao que está escrito na linha abaixo:

for (p=0 ; p < passos_motor; p++), do programa ...

Procurei na GLOBAL,  e não encontrei declaração dessa variável, e o que ( P ), representa ?

Sem mais,

agradeço seus préstimos meu amigo !!!

André // (ALP).

Bom dia ALP.

Vejo que a sua barba é tão branca como a minha. Isto é bom kkkk

Agora uma dica boa.

Não cole seu sketchs ná área de texto do seu tópico.

Primeiro,

       ele fica muito extenso, e a preguiça natural do ser humano, dificulta passear pelo tópico,

       e alguns até desistem de lê-lo.

 Segundo,

      o sketch perde a formatação de identicão e pode até perder caracteres tais como os duplos < e duplos >.

      Sugiro você remover os que colou, e anexa-los como arquivo ou usando sites como o pastebin.

Terceiro,

    procure comentar as linhas do seu sketch, fica mais fácil para você no futuro saber pra que

   escreveu cada linha,  e para quem não o escreveu, entender o que você queria fazer.

Segue o seu sketch modificado . Teste e veja se é o que você precisa.

https://pastebin.com/GAKxb41z

Rui

Bom dia, rsrsrs ok caro RUI ...

É minha barbinha de estimação, branquinha como algodão rsrsrs, (cinquentão já rs).

Mas vamos lá ...

Gostaria de dizer que o nosso amigo Nelson, conseguiu desvendar o que eu desejava e também solucionar meu problema quanto ao uso do tal laço "for".

Pois bem, mas eu quero aqui, lhe agradecer também seus valorosos préstimos, quanto aos ítens dos quais me orientou.

Como por exemplo:

Não cole seu sketchs ná área de texto do seu tópico, e demais orientações.

Gostei muito de sua atitude, é de pessoas como você, que o mundo está precisando, das quais sabem como repassarem informações .


Agora, esse tal de https://pastebin.com/GAKxb41z

(PASTEBIN), sem comentários hein RUI, muito bom mesmo não é ?

Gostei, um novo recurso que aprendi, irei passar a usá-lo com ++ frequência.

Gostaria de fazer mais uma perguntinha, caso saiba e deseje respondê-la ...

Qual o significado de :  ("P"), na linha abaixo ?

for (p=0 ; p < passos_motor; p++)
{


Procurei ele na declaração GLOBAL e também na LOCAL, e não o encontrei ...

Como pode funcionar, se não está declarado ??

Ah sim, seu sketch,  funcionou, porém a cada retorno do carro, ele não volta ao ponto zero de Home, ele avança um ponto a mais a fim de se iniciar novo percurso.

Já o sketch que o Nelson me passou, funcionou sem esse avanço desejável.

Em suma, ambos me ajudaram em vários sentidos, muito obrigado caro Rui ...

E permaneço por aqui no aguardo da suposta pergunta sobre a linha:

for (p=0 ; p < passos_motor; p++)
{

Grande abraço amigo Rui !!!

Bom dia Andre, o "p" representa numero de passos que o motor da; 

Bom dia Grande Rui, obrigado por comentar o codigo, tentarei comentar nos proximos codigos,

Andre em questao do codigo da PASTEBIN , no meu codigo na ida tem for( i=0; i<10; i++ ) ; e na volta esta como for ( i=10; i>0; i--), se voce comparar os dois codigos vai perceber a difirenca.

Ok, compreendido a mensagem então ...

Darei uma observada melhor no sketch,

obrigado hein Nelson 

Oi ALP,

a linha está escrita assim:  for (int p = 0 ; p  <  (passos_motor * 10); p++).

Veja  " int p  ", aqui você definiu uma variável chamada p que pode receber valores inteiros

de  -32,768 até  32,767.

Esta variável só existe enquanto o for está sendo executado, pois foi definida dentro do for.

Rui

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2017   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço