01 abril 2014

Controlando motor de passo 28BYJ-48 utilizando CustomStepper

Além da tradicional biblioteca Stepper do Arduino, uma outra biblioteca bastante utilizada para controle de motores de passo, e que vamos utilizar com o motor de passo 28BYJ-48 e driver ULN2003, é a CustomStepper, que tem funções como rotacionar o motor determinado número de vezes, rotacionar apenas em um ângulo específico, ou rotacionar até que um novo comando seja enviado ao motor.

Motor de passo 28BYJ-48 e driver ULN2003


Atenção : Para mais informações sobre o funcionamento do 28BYJ-48, assim como a utilização do mesmo com a biblioteca Stepper, consulte o artigo Ligando Motor de passo 28BYJ-48 e ULN2003.

O download da biblioteca CustomStepper pode ser feito nesse link, e a instalação segue o procedimento da maioria das bibliotecas do Arduino : descompacte o arquivo zip e colque a pasta CustomStepper na pasta LIBRARIES da IDE do seu Arduino. Não esqueça de reiniciar a IDE para que a biblioteca seja carregada.

Vamos demonstrar as funções desta biblioteca utilizando dois programas diferentes. Primeiramente, monte o circuito abaixo, que utiliza o motor de passo 28BYJ-48 e o driver ULN2003 juntamente com o Arduino Uno :

motor de passo customstepper Arduino


O primeiro exemplo é o controle do número de rotações do motor. Carregue o programa abaixo, que rotaciona o motor 3 vezes no sentido horário, aguarda 2 segundos e rotaciona 2 vezes no sentido anti-horário :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// Programa : Controle motor de passo 28BYJ-48 - Rotacoes  
// Autor : Arduino e Cia  
   
#include <CustomStepper.h>  
   
//Define os parametros de ligacao do motor de passo  
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, 
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);  

boolean rotate1 = false;  
boolean rotatedeg = false;  
boolean crotate = false;  
   
void setup()  
{  
  //Define a velocidade do motor  
  stepper.setRPM(12);  
  //Define o numero de passos por rotacao  
  stepper.setSPR(4075.7728395);  
}  
   
void loop()  
{  
  if (stepper.isDone() && rotate1 == false)  
  {  
    delay(2000);  
    //Define o sentido de rotacao (CW = Horario)  
    stepper.setDirection(CW);  
    //Define o numero de rotacoes  
    stepper.rotate(3);  
    rotate1 = true;  
  }  
    
  if (stepper.isDone() && rotate1 == true)  
  {  
    delay(2000);  
    //Define o sentido de rotacao (CCW = Anti-horario)  
    stepper.setDirection(CCW);  
    //Define o numero de rotacoes  
    stepper.rotate(2);  
    rotate1 = false;  
  }  

  //Comando obrigatorio para funcionamento da biblioteca  
  stepper.run();  
}  

O segundo exemplo é o controle do motor de passo pelo ângulo de rotação. A cada 2 segundos, o motor rotaciona 90 graus :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Programa : Controle motor de passo 28BYJ-48 - Angulo  
// Autor : Arduino e Cia  
   
#include <CustomStepper.h>  
   
//Define os parametros iniciais de ligacao do motor de passo  
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, 
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);  
   
void setup()  
{  
  //Define a velocidade do motor  
  stepper.setRPM(12);  
  //Define o numero de passos por rotacao  
  stepper.setSPR(4075.7728395);  
}  
   
void loop()  
{  
 if (stepper.isDone())  
 {  
   //Intervalo entre acionamentos  
   delay(2000);  
   //Define o sentido de rotacao (CW = Horario)  
   stepper.setDirection(CW);  
   //Define o angulo de rotacao  
   stepper.rotateDegrees(90);  
  }  

  stepper.run();  
}  

Você pode adaptar esse programa para outros motores de passo, observando a sintaxe do comando CustomStepper no inicio do programa :

CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW)

onde :

8, 9, 10 e 11 : são as portas utilizadas para ligação ao motor/driver

byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001} : Refere-se à sequência de ativação das bobinas do motor. O número 8 corresponde ao número de passos, que no caso do 28BYJ-48 segue a tabela abaixo:

Sequencia de ativação - 28BYJ-48


4075.7728395 = Numero de passos necessários para uma rotação completa do motor. O valor refere-se ao motor de passo 28BYJ-48, e deve ser ajustado para outros tipos de motores.

12 = Velocidade de rotação

CW = O último parâmetro é o sentido de rotação, que pode ser CW = Horário, CCW = Anti-horário, ou STOP = Parado

Como vimos, a utilização da biblioteca CustomStepper é bem simples e se mostra uma boa alternativa para controle de motores de passo.


61 comentários:

  1. Amigo, como eu poderia usar esse circuito usando botões para, por exemplo, apertando o botão 'X' o motor rode para a esquerda e apertando o botão "Y" o motor rode para a direita?
    obrigado e parabéns pelo blog

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Veja se este artigo te ajuda, pois usa 2 push-button para controlar o sentido de rotação do motor :

      http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html

      Abraço !

      Excluir
  2. Como corrigir esses erros ?

    sketch_may07a.ino: In function 'void setup()':
    sketch_may07a:12: error: 'myStepper' was not declared in this scope
    sketch_may07a:14: error: 'stepper' was not declared in this scope
    sketch_may07a.ino: In function 'void loop()':
    sketch_may07a:19: error: 'stepper' was not declared in this scope
    sketch_may07a:24: error: 'CW' was not declared in this scope
    sketch_may07a:28: error: 'stepper' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Boa noite Leandro,

      Pelo erro, parece que está faltando a biblioteca. Verifique a instalação, por favor.

      Abraço.

      Excluir
  3. Gostaria de uma ajuda, queria que ao mesmo tempo que o motor rotacionasse 180º com o 2º codigo que voce passou, ele executasse esses comandos:

    if(contador2++==20)
    digitalWrite(led2, HIGH);


    if(contador3++==40)
    digitalWrite(led3, HIGH);

    if(contador4++==60)
    digitalWrite(led2, LOW);

    if(contador5++==80)
    digitalWrite(led1, HIGH);

    if(contador6++==100)
    digitalWrite(led2, HIGH);

    if(contador7++==120)
    digitalWrite(led3, LOW);


    if(contador8++==140)
    digitalWrite(led2, LOW);

    if(contador9++==160){
    digitalWrite(led1, LOW);


    como seria possivel? ja tentei e nao consegui, gostaria de ajuda!

    Grato

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Que erro apresenta na IDE ?

      abraço.

      Excluir
  4. Gostaria de parabenizar seu baita trabalho caro amigo, interessante iniciativa! muto bem feitas suas postagens, sou estudante de engenharia mecânica, mas apaixonado por eletrônica.
    Comprei um arduino para começar um aprendizado com micro controladores, quando mais jovem não pude desenvolver por serem na época 2001~2003 muito caro os pics e as ide muito complexas para desenvolver.
    Hoje podemos contar com um site como o seu que possui vários exemplos( já utilizei vários) e sempre muito bem simples mas em um nível exelente, basta ler pra não lhe fazer perguntas obvias ou desncessarias como vi em alguns posts.

    Desculpe mas realmente não vi seu nome, então agradeço a Arduino e Cia pelo fantástico trabalho! e sempre que possível poste novidades. já sou um seguidor !

    ResponderExcluir
    Respostas
    1. Bom dia Maik !

      Agradeço mutissimo a sua mensagem. A ideia do site é justamente essa, mostrar como os componentes funcionam, na maioria das vezes com exemplos simples para que as pessoas consigam depois usar esse conhecimento para desenvolver seus próprios projetos.

      Todos os circuitos mostrados nos posts são montados e testados, pois quero ter certeza que estou passando as informações corretas. Claro que erros acontecem, às vezes falta um detalhe aqui e ali, mas vamos aprimorando.

      Meu nome é Adilson e realmente falta uma página "sobre o Autor" no site, mas vou providenciar. rs.

      Obrigado por reconhecer o meu trabalho. É um estímulo para continuar escrevendo.

      Grande abraço !

      Excluir
  5. como eu fasso para corrigir esses erros
    sketch_may24a:7: error: 'CustomStepper' does not name a type
    sketch_may24a:8: error: expected unqualified-id before ',' token
    sketch_may24a:8: error: expected unqualified-id before numeric constant
    sketch_may24a.ino: In function 'void setup()':
    sketch_may24a:17: error: 'stepper' was not declared in this scope
    sketch_may24a.ino: In function 'void loop()':
    sketch_may24a:24: error: 'stepper' was not declared in this scope
    sketch_may24a:28: error: 'CW' was not declared in this scope
    sketch_may24a:34: error: 'stepper' was not declared in this scope
    sketch_may24a:38: error: 'CCW' was not declared in this scope
    sketch_may24a:45: error: 'stepper' was not declared in this scope

    ResponderExcluir
    Respostas
    1. Bom dia Marcos,

      Isso me parece ser erro na instalação da biblioteca CustomStepper.

      Abraço !

      Excluir
  6. Parabéns meu colega!!! vc tem um trabalho muito bom mesmo!!! e uma ótima iniciativa em compartilhar o conhecimento, coisa que nem todos sabem fazer!!!!Que todos os seus planos e projetos venha a se realizar!!! Parabéns!!!

    ResponderExcluir
    Respostas
    1. Bom dia Wallace !!!

      Muito obrigado, e aguardo sua visita ao Arduino e Cia sempre que possível. :-)

      Abraço !

      Excluir
  7. Boa tarde!

    Como que eu faria para enviar e receber informações para para o motor usando Bluetooth e android?

    Obrigado.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Creio que nesse artigo tem o que você precisa :

      http://www.arduinoecia.com.br/2014/01/controlando-um-servo-motor-utilizando.html

      Abraço !

      Excluir
  8. Bom dia Adilson,
    Tenho esse kit, está em uma placa Leonardo, tentei configurar para 11 voltas frente e reverso, para frente consigo chegar a 6,5 voltas e no reverso ela dá as vezes 7, 8 , assim coloquei para duas voltas (720°) no seu padrão e o bichinho faz 405°!
    1) Isso é problema em alguma placa, motor ou componente?
    2) eu preciso aumentar esta rotação, é possível?
    3) eu modifiquei o setSPR para 4215 e agora ele dá uma completa para frente e meia volta no reverso, to ficando maluco, como sou novato preciso de um help!

    ResponderExcluir
    Respostas
    1. Boa noite Alex !

      Você consegue me passar o programa que usou ? é muito grande ? Se for, me mande por email, utilizando o formulário de contato no lado direito da página.

      Eu tenho esse kit e um Arduino Leonardo aqui, posso testar e ver o que acontece. ;-)

      Abraço !

      Excluir
  9. Amigos, sou iniciante, absolutamente iniciante. Quero começar a construir uma CNC e gostaria de fazer testes com um motor pequeno, o BYJ-48 com a sua respectiva plaquinha controladora, tal como consta no esquema deste post. Gostaria de configurá-lo para receber instruções GRBL diretamente pelo arduino e não consigo descobrir a pinagem ou nem mesmo seu se é possível... Se for possível, como posso proceder para ligar mais de um motor, talvez três? Uma mini-mini cnc já me deixaria bastante feliz, por enquanto. Alguém pode ajudar??

    ResponderExcluir
  10. É normal esse motor ficar tão quente, que fica desagradável segurar na mão, quando usado por 05 minutos?

    ResponderExcluir
    Respostas
    1. Bom dia,

      No meu não acontece isso. Observe se o motor não está com alguma barulho estranho, talvez algum defeito nas engrenagens esteja forçando o motor.

      Abraço.

      Excluir
  11. Eu consigo usar esse 12 cw de velocidade também no devc ++ se tiver como, por favor me falem, obrigado.

    ResponderExcluir
  12. Boa tarde Kenedy,

    Não entendi a sua pergunta. Pode explicar melhor, por favor ?

    Abraço !

    ResponderExcluir
  13. Como eu faço para colocar um potenciometro pra regular a velocidade?
    E um botao que inverta o sentido do motor?

    ResponderExcluir
    Respostas
    1. Boa noite André,

      O potenciômetro você pode ligar em uma das portas analógicas, ler o valor de 0 a 1024 e transferir esse valor para a variável que regula a velocidade. Eu tenho um artigo que fala sobre o uso do potenciômetro para regular a luminosidade de um led. Você pode utilizar praticamente o mesmo exemplo para o motor :

      http://www.arduinoecia.com.br/2013/07/dimmer-usando-portas-analogicas-para.html

      Já o botão você pode implementar no circuito e mexer na programação para que a cada toque do botão ele inverta o valor de uma variável :

      if (botao = 1)
      {
      variavel = !variavel;
      }

      Abraço !

      Excluir
  14. Preciso de uma ajuda, gostaria de apertar um botão o motor rodar para um lado e apertar outro ele rodar para outro...

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Acho que este artigo tem o que você precisa :

      http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html

      Abraço !

      Excluir
  15. Olá, por acaso você tem a "versão Fritzing" destes componentes? Revirei na internet, mas não encontrei.

    Desde já Agradeço!

    ResponderExcluir
    Respostas
    1. Bom dia !

      Infelizmente não tenho, algumas coisas acabo desenhando por conta própria.

      Abraço !

      Excluir
    2. Parabéns pelo trabalho.
      gostaria de saber a velocidade máxima desse motor(4 voltas completas por segundo)?
      se segurar com a mão o pino que roda, para ou esse motor tem força?
      28BYJ-48 é polar ou uni polar?
      obrigado!

      Excluir
    3. Boa tarde Hugo,

      Tudo vai depender do uso, mas esse motor tem um bom torque. Não é tão fácil pará-lo com a mão. Uma volta completa leva mais ou menos uns 4 segundos. E o motor é unipolar.

      Abraço e obrigado !

      Excluir
  16. Bom Dia
    tem como mudar a rotação do moto com o toque de um botão gostaria de implementar nesse código
    é possível
    // Programa : Controle motor de passo 28BYJ-48 - Rotacoes
    // Autor : Arduino e Cia

    #include

    //Define os parametros de ligacao do motor de passo
    CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    boolean rotate1 = false;
    boolean rotatedeg = false;
    boolean crotate = false;

    void setup()
    {
    //Define a velocidade do motor
    stepper.setRPM(12);
    //Define o numero de passos por rotacao
    stepper.setSPR(4075.7728395);
    }

    void loop()
    {
    if (stepper.isDone() && rotate1 == false)
    {
    delay(2000);
    //Define o sentido de rotacao (CW = Horario)
    stepper.setDirection(CW);
    //Define o numero de rotacoes
    stepper.rotate(3);
    rotate1 = true;
    }

    if (stepper.isDone() && rotate1 == true)
    {
    delay(2000);
    //Define o sentido de rotacao (CCW = Anti-horario)
    stepper.setDirection(CCW);
    //Define o numero de rotacoes
    stepper.rotate(2);
    rotate1 = false;
    }

    //Comando obrigatorio para funcionamento da biblioteca
    stepper.run();
    }

    ResponderExcluir
    Respostas
    1. Bom dia Maycon,

      Creio que nesse artigo aqui tem o que você precisa, ele mostra o controle do mesmo motor de passo, o 28BYJ-048, por meio de 2 botões :

      http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html

      Abraço !

      Excluir
  17. Bom dia
    sim já conferi esse artigo, só que eu preciso que ele inverta a rotação com um botão. não estou conseguindo implementar essa logica no programa acima..
    poderia me ajudar

    ResponderExcluir
  18. olha estou usando essa logica que utilizei em outro projeto com motor dc e funcionou legal
    int btInverter = A1; //Botão de inversao
    int tempPress = 0; //temporario de verificacao de botao pressionado
    int direcao = 0; //direcao do motor (1 e 0)

    void setup() {

    }

    void loop() {

    if(digitalRead(btInverter)==HIGH){ //se o botao de inversao for pressionado
    if(tempPress == 0){ //verifica se o botao ja nao estava pressionado.
    if(direcao == 0){ //verifica a direcao atual e inverte
    //execuçao
    direcao = 1;
    }else{
    //execução
    direcao = 0;

    }
    tempPress = 1;
    }
    }else{
    tempPress = 0;
    }

    delay(100);
    }
    agora com motor de passo não estou conseguindo
    poderia me dar uma ajuda

    Abraços....

    ResponderExcluir
    Respostas
    1. Oi Maycon,

      Tente usar os comandos stepper.setDirection(CW) e stepper.setDirection(CCW) ao inves da direcao, assim vc movimenta o motor no sentido horario ou anti-horario.

      Abraço !

      Excluir
  19. Prezados do arduino e cia., bom dia!
    Trabalho fantástico. Parabéns. Gostaria de ter menos idade para me divertir mais com este tal de arduino.

    É possível os senhores me informarem se o arduino consegue ler (capturar uma curva (gráfico) feita numa planilha em excel e transportá-la para uma peça em madeira, por exemplo?), como se fosse um CNC, uma fresa?
    É que hoje, após obter uma curva gerada numa planilha, transfiro a mesma manualmente numa peça em madeira através de lima, lixamento, enfim. O que pretendo é automatizar este trabalho fazer com que o arduino leia a curva e execute numa peça de forma automática utilizando-se de motores de passo. Já vi um projeto de um CNC com este arduino, mas não sei como fazer para ele capturar o gráfico, curva do excel. Você tem alguma diga sobre isso, é possível utilizar alguma biblioteca para fazer isso?

    Grato pela atenção dospensada.

    Ricardo

    ResponderExcluir
    Respostas
    1. Boa tarde,

      É possível sim. Além da biblioteca, você vai precisar de um programa que "converse" com o CNC, transferindo os dados do computador para os motores e assim fabricar a peça.

      Eu também estou atrás disso, quem sabe em breve eu não lance um artigo sobre esse assunto.

      Abraço e obrigado !

      Excluir
  20. Olá amigo, com este seu artigo eu decidi efetuar a compra de um kit Motor de Passo + Driver Uln2003 e começar com alguns testes...

    Antes mesmo de meu kit chegar poderia me esclarecer como ligar mais de um motor e utilizar o mesmo programa?
    Eu entendo que na linha referente CustomStepper stepper eu deveria fazer algo como
    CustomStepper stepperX (8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    CustomStepper stepperY (4, 5, 6, 7, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    CustomStepper stepperZ (0, 1, 2, 3, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    E na sequencia trocar suas informações, correto?
    Além de mudar o número das portas não necessito realizar nenhuma outra mudança?
    Por favor me corrija e me ajude a aprender está questão.

    Sobre a leitura de um arquivo "CNC" eu sempre vi o pessoal utilizando a biblioteca open source grbl que eu sei que é compatível com os chip atmega328

    ResponderExcluir
    Respostas
    1. Boa tarde Elvis,

      Teoricamente as alterações são essas, mas só ligando no Arduino para ver qual tipo de problema pode aparecer. :-)

      Para o seu caso, eu até recomendo conectar tudo isso à um Arduino Mega.

      Abraço !

      Excluir
  21. Recentemente adquiri 2 motores de passo 28BYJ-48 (o mesmo desse tutorial) para controle de um circuito girassol montado numa placa Arduino MEGA 2560. Cada motor executou perfeitamente os programas testes desse tutorial. Alimentei cada motor numa das portas digitais de 5V. Em seguida substituí as portas 8,9, 10 e 11 pelas digitais 24, 26, 28 e 30 para um dos motores e 36, 38, 40 e 42 para o outro, respectivamente. Então, modifiquei o código do teste 1 para estas portas e transferi o código para a placa Arduino. Contudo, um dos motores ficou parado enquanto o outro executou o código em sua totalidade. Ao comentar os códigos do motor que girou corretamente, o motor que estava parado passou a girar corretamente enquanto o outro ficou parado. A dúvida é como girar ambos os motores ao mesmo tempo utilizando Arduino MEGA 2560.
    #include

    //Define os parametros de ligacao do motor de passo
    CustomStepper stepper(24, 26, 28, 30, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    CustomStepper stepper2(36, 38, 40, 42, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);


    boolean rotate1 = false;
    boolean rotate2 = false;
    // boolean rotatedeg = false;
    // boolean crotate = false;

    void setup()
    {
    //Define a velocidade do motor
    stepper.setRPM(12);
    stepper2.setRPM(12);
    //Define o numero de passos por rotacao
    stepper.setSPR(4075.7728395);
    stepper2.setSPR(4075.7728395);
    }

    void loop()
    {
    if (stepper.isDone() && rotate1 == false)
    {
    delay(1000);
    //Define o sentido de rotacao (CW = Horario)
    stepper.setDirection(CW);
    //Define o numero de rotacoes
    stepper.rotate(3);
    rotate1 = true;
    }

    if (stepper.isDone() && rotate1 == true)
    {
    delay(1000);
    //Define o sentido de rotacao (CCW = Anti-horario)
    stepper.setDirection(CCW);
    //Define o numero de rotacoes
    stepper.rotate(2);
    rotate1 = false;
    }
    //Comando obrigatorio para funcionamento da biblioteca
    stepper.run();

    if (stepper2.isDone() && rotate2 == false)
    {
    delay(1000);
    //Define o sentido de rotacao (CW = Horario)
    stepper2.setDirection(CW);
    //Define o numero de rotacoes
    stepper2.rotate(3);
    rotate2 = true;
    }

    if (stepper2.isDone() && rotate2 == true)
    {
    delay(1000);
    //Define o sentido de rotacao (CCW = Anti-horario)
    stepper2.setDirection(CCW);
    //Define o numero de rotacoes
    stepper2.rotate(2);
    rotate2 = false;
    }

    //Comando obrigatorio para funcionamento da biblioteca
    stepper2.run();
    }

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Vi que você tem dois comandos stepper.run() no programa, não sei se isso está fazendo com que apenas o primeiro funciona. Tente deixar apenas o último.

      Abraço.

      Excluir
  22. boa tarde, como faço para acionar o motor com rfid?
    ler o cartão e em seguida fazer uma rotação anti-horário e depois horário?

    ResponderExcluir
    Respostas
    1. Boa noite Lucas,

      Você pode usar este mesmo programa, adaptando para uso com o RFID, que eu uso neste artigo:

      http://www.arduinoecia.com.br/2014/12/controle-de-acesso-modulo-rfid-rc522.html

      Abraço !

      Excluir
  23. Primeiramente gostaria de agradecer o tópico, esta me ajudando muito!!! Parabéns!

    será que poderia me dar uma ajudinha?
    estou montando um circuito onde vou utilizar um led um ldr e o motor, no caso o motor funciona conforme o tanto de lumens que o ldr indentifica e faz as cordenadas, mas gostaria que cada cordenada que faço acendesse o led, porem quando coloco o código do led o motor nao funciona mais, o código segue abaixo, se tira o código do led ele funciona de novo, será q nao pode utilizar o led junto com o motor???

    obrigado!

    #include

    //Define os parametros de ligacao do motor de passo
    CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    boolean led = false;
    int sensor = 0;
    int ledPin = 3;

    int valorSensor = 0;

    void setup()
    {
    pinMode (ledPin, OUTPUT);
    Serial.begin(9600);
    //Define a velocidade do motor
    stepper.setRPM(12);
    //Define o numero de passos por rotacao
    stepper.setSPR(4075.7728395);
    }

    void loop()
    {
    int valorSensor = analogRead(sensor);

    Serial.println(valorSensor);

    delay(1000);

    if (stepper.isDone() && valorSensor < 800)
    {
    delay(2000);
    //Define o sentido de rotacao (CW = Horario)
    stepper.setDirection(CW);
    //Define o numero de rotacoes
    stepper.rotateDegrees(90);
    digitalWrite(3, HIGH); // liga o LED
    delay(3000); // aguarda um segundo
    digitalWrite(3, LOW); // desliga o LED
    delay(1000);

    }


    if (stepper.isDone() && valorSensor > 800)
    {
    delay(2000);
    //Define o sentido de rotacao (CCW = Anti-horario)
    stepper.setDirection(CCW);
    //Define o numero de rotacoes
    stepper.rotateDegrees(90);
    digitalWrite(3, HIGH); // liga o LED
    delay(3000); // aguarda um segundo
    digitalWrite(3, LOW); // desliga o LED
    delay(1000);
    }

    //Comando obrigatorio para funcionamento da biblioteca
    stepper.run();
    }

    ResponderExcluir
  24. Como faço pra nessa Programação adicionar um potenciometro para apenas ligar e desligar o motor?



    #include

    const int stepsPerRevolution = 500;

    //Inicializa a biblioteca utilizando as portas de 8 a 11 para
    //ligacao ao motor
    Stepper myStepper(stepsPerRevolution, 8,10,9,11);

    void setup()
    {
    //Determina a velocidade inicial do motor
    myStepper.setSpeed(60);
    }

    void loop()
    {
    //Gira o motor no sentido horario a 90 graus
    for (int i = 0; i<=3; i++)
    {
    myStepper.step(-512);
    delay(2000);
    }

    //Gira o motor no sentido anti-horario a 120 graus
    for (int i = 0; i<=2; i++)
    {
    myStepper.step(682);
    delay(2000);
    }

    //Gira o motor no sentido horario, aumentando a
    //velocidade gradativamente
    for (int i = 10; i<=60; i=i+10)
    {
    myStepper.setSpeed(i);
    myStepper.step(40*i);
    }
    delay(2000);
    }

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Você pode fazer um IF simples para parar o motor quando o potenciômetro estiver com um determinado valor (abaixo de 50, por exemplo), mas creio que você terá melhores resultados se usar a biblioteca CustomStepper. Dê uma olhada neste link, por favor: http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      Abraço

      Excluir
  25. Boa tarde !

    Já revirei a net procurando um programa parecido q eu consiga entender e modificar... mas até agora nada...

    Estou usando um EasyDriver e quero colocar 2 botões, Um para o motor girar rápido e o outro para girar de vagar... Os dois nunca serão apertados ao mesmo tempo... Alguém já viu algum programa assim ? Desde já, obrigado !

    ResponderExcluir
  26. como posso proceder para ligar mais de um motor, talvez três? Uma mini-mini cnc já me deixaria bastante feliz, por enquanto. Alguém pode ajudar??

    ResponderExcluir
  27. Ola colega. to com um problema,meu da erro "compilation terminated. exit status 1
    Erro compilando." me ajuda.

    ResponderExcluir
  28. Olá pessoal, gostaria de saber se pode colocar um comando para o motor parar de rodar msm no meio da rotação e dps mandar ele continuar, e se tb é possível fazer com que o motor rode apenas uma vez assim que atingir um ponto que eu quero? Obrigado

    ResponderExcluir
  29. BOA NOITE necessito de uma ajuda pois , preciso que de um programa que faça o motor dar quantas voltas eu quiser ex : uma volta e igual a 360 eu quero que ele de o tanto de voltas e graus (ex 5 voltas e 38 graus ) que eu quiser .

    ResponderExcluir
  30. estou com esse erro como corrigir ??

    5d07f802b423c87d43f.tmp/core\core.a" "-LC:\Users\Danrlei\AppData\Local\Temp\build2b55427c451a15d07f802b423c87d43f.tmp" -lm
    collect2.exe: error: ld returned 5 exit status

    Usando biblioteca CustomStepper na pasta: C:\Program Files (x86)\Arduino\libraries\CustomStepper (legacy)
    exit status 1
    Erro compilando para a placa Arduino/Genuino Uno

    ResponderExcluir
    Respostas
    1. Oi Danrlei,

      Você está usando o mesmo programa do post ? Qual versão da sua IDE ?

      Abraço!

      Excluir
    2. usei o arduino 1.6.9
      copiei a sua ´programação normal para fazer testes no motor ..
      este e o erro que da ..
      estou sofrendo com este erro em qualquer programação que faço , pode me ajudar ?
      collect2.exe: error: ld returned 5 exit status

      exit status 1
      Erro compilando para a placa Arduino/Genuino Uno

      Excluir
    3. Oi Danrlei,

      Tentou algum programa básico, tipo o blink, que já vem com a IDE ? Dá o mesmo problema ?

      Abraço!

      Excluir
  31. Boa Tarde , eu estou tendo um problema e não sei como resolver ! o meu projeto consiste numa ponte autónoma onde utilizo um ultrasónico que irá identificar objetos a X distancia e por sua vez irá dar uma ordem ao motor de passo 28BYJ-48, mas simplesmente o ultrasonico assume as distancias , faz com que os leds mudem consoante a distancia , mas o motor não roda

    ====================================================================

    #include

    #include

    Ultrasonic ultrasonic(6,7);

    //Define os parametros de ligacao do motor de passo
    CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
    B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);

    boolean rotate1 = false;
    boolean rotatedeg = false;
    boolean crotate = false;

    //Declaracao das constantes referentes aos pinos digitais.
    const int ledVerde = 2;
    const int ledVermelho = 3;

    long microsec = 0;
    float distanciaCM = 0;

    void setup()
    {
    //Define a velocidade do motor
    stepper.setRPM(5);
    //Define o numero de passos por rotacao
    stepper.setSPR(4075.7728395);

    Serial.begin(9600); //Inicializando o serial monitor

    //Definindo pinos digitais
    pinMode(ledVerde,OUTPUT); //2 como de saída.
    pinMode(ledVermelho,OUTPUT); //3 como de saída.
    }

    void loop()
    {
    //Lendo o sensor
    microsec = ultrasonic.timing();

    //Convertendo a distancia em CM
    distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM);

    Serial.print(distanciaCM);
    Serial.println(" cm");


    //Acende o led quando a distancia lida no sensor
    if (distanciaCM >= 35.00) {

    digitalWrite(ledVerde,HIGH);
    digitalWrite(ledVermelho,LOW);

    }

    else {

    digitalWrite(ledVerde,LOW);
    digitalWrite(ledVermelho,HIGH);

    delay(1000);

    if(stepper.isDone() && rotate1 == false) {

    delay(200);
    //Define o sentido de rotacao (CW = Horario)
    stepper.setDirection(CW);
    //Define o numero de rotacoes
    stepper.rotate(3);
    rotate1 = true;
    }

    if (stepper.isDone() && rotate1 == true) {

    delay(200);
    //Define o sentido de rotacao (CCW = Anti-horario)
    stepper.setDirection(CCW);
    //Define o numero de rotacoes
    stepper.rotate(3);
    rotate1 = false;
    }
    }
    //Comando obrigatorio para funcionamento da biblioteca
    stepper.run();

    }

    ==========================================================================
    se me puderem ajudar agradecia muito

    ResponderExcluir
  32. fico aguardando uma ajuda com urgencia

    ResponderExcluir
  33. Gostaria de ajuda para o meu problema, no meu projeto preciso mover um objeto usando o motor controlado pelo computador usando um shield de ethernet, mas quando uso a biblioteca CustomStepper, o motor não gira e só fica vibrando, mas ao usar a biblioteca Stepper, o motor gira normalmente. A problema é que eu preferiria usar a CustomStepper, pois com ela é mais fácil controlar a distancia que o objeto vai mover.
    Gostaria de saber também quanto peso esse motor aguenta mover.

    Desde já agradeço.

    ResponderExcluir
  34. Gostaria de uma ajuda com meu projeto. Eu preciso controlar um motor pela internet usando um shield de ethernet, mas o motor só gira quando uso a biblioteca Stepper, ele gira com muita dificuldade. Quando tento usar a Custom Stepper o motor não gira, ele só vibra. Meu motor é igual esse do post. Eu estou alimentando ele com uma bateria de 9v.

    Desde já agradeço.

    ResponderExcluir
  35. Preciso ligar 8 motores de passo 28BYJ-48 ULN2003 no Arduino MEGA R3. É tranquilo ? Ou só posso ligar nas portas PWM ? Portas digitais tem bastante, mas não sei se posso usar qualquer porta. Sou novo na área. Alguém tem um exemplo ou imagem de como ligar mais de 4 motores de passo no arduino ? Obrigado.

    ResponderExcluir
  36. Oi tudo bem, muito bom seu trabalho, eu não conheço muito bem a linguagem de Arduíno, como seria a programação se eu quisesse que o motor girasse para ângulos específicos, tipo 90, 80 e 45 graus ?

    ResponderExcluir
  37. Bom dia, você poderia me explicar o por que de o 4075.7728395 ser o Numero de passos necessários para uma rotação completa do motor ? como achou esse número ?

    ResponderExcluir