Controlando um Motor de Passo 5v com Arduino 273

Neste tutorial vamos explicar como conectar um Motor de Passo 28BYJ-48 5v ao Arduino Uno usando um driver ULN2003. A montagem e programação do Arduino é muito simples, mas vamos explicar primeiro o que é um motor de passo.

Princípio de funcionamento

Um motor de passo é um dispositivo electromecânico que converte os impulsos elétricos em movimentos discretos mecânicos. O eixo do mesmo gira em incrementos discretos quando os impulsos de comando eléctricos são aplicados a ele na sequência correta.

A rotação dos motores tem várias relações diretas a estes pulsos de entrada aplicados. A sequência dos impulsos aplicados está diretamente relacionada com a direção de rotação do eixo do motor, a velocidade de rotação do motor com a frequência dos impulsos de entrada e o comprimento de rotação com o número de impulsos de entrada. Ou seja, Para controlar o motor de passo precisa-se aplicar tensão a cada um a das bobinas em uma sequência específica.

Uma das vantagens mais significativas de um dispositivo como o abaixo é a sua capacidade de ser controlado com precisão num sistema de circuito aberto. Controle de circuito aberto significa que nenhuma informação de feedback sobre a posição é necessária. Este tipo de controle elimina a necessidade de caros sistemas de detecção, tais como codificadores ópticos. Sua posição é conhecida simplesmente através do controle dos impulsos de entrada.

Circuito Arduino Motor de Passo ULN2003

Conectando o Motor de Passo ao Arduino

A maneira mais simples de fazer interface com um motor de passo unipolar com Arduino é a utilização do chip ULN2003A, presente no driver ULN2003. Este CI contém sete transistores Darlington e é como se houvesse sete transistores TIP120 tudo em um pacote, suportando até 500 mA por canal e com uma queda de tensão interna de cerca de 1V quando ligado.

Alimente o motor de passo com +5V e o GND provenientes do Arduino.  Abaixo você pode conferir um esquema de ligação das bobinas e cores dos fios do motor. Para mais informações confira o Datasheet 28BYJ-48.

Para utilizar o motor com o programa que vamos mostrar, conecte-o ao Arduino na seguinte sequência:

  • IN1 ao pino 8 do Arduino
  • IN2 ao pino 9 do Arduino
  • IN3 ao pino 10 do Arduino
  • IN4 ao pino 11 do Arduino

O circuito de ligação do motor ao Arduino Uno ficará assim:

Circuito Arduino Uno Motor de Passo 5V

 

Controle de Motor de Passo com Arduino

O ambiente de programação Arduino vem com uma biblioteca de funções para controlar um motor de passo. Para utilizar a biblioteca, baixe no Editor Arduino na barra de menu superior: Sketch > Import Library > Stepper. Copie o código de exemplo abaixo para controlar o dispostivo com Arduino:

#include <Stepper.h> 

const int stepsPerRevolution = 2048; 
 
//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); 
}

O programa acima fará com que o motor de passo gire no sentido horário 4 vezes em ângulos de 90 graus, depois 3 vezes no sentido horário, em ângulos de 120 graus, e por último vai girar o motor e aumentar a velocidade gradativamente. Depois de 2 segundos, o processo é reiniciado.

Se você tiver um Arduino Motor Shield, confira este post sobre Como conectar o Motor de Passo 28BYJ-48 com Arduino Motor Shield L293D.

 Gostou? Deixe seu comentário logo abaixo.

Faça seu comentário

Acesse sua conta e participe

273 Comentários

  1. Como eu faço para o motor ficar apenas girando, na mesma velocidade, sem parar?

    1. Olá Eduardo,

      Para isso com motores de passo você pode utilizar esta biblioteca: https://github.com/bblanchon/ArduinoContinuousStepper/

      Abraços!
      Vinícius – Equipe MakerHero

  2. Como consigo armazenar a posição do motor em uma EEPROM?

    1. Olá!

      Temos este post aqui falando sobre armazenamento de dados na EEPROM: https://www.makerhero.com/blog/wachdog-e-eeprom-do-arduino/

      Dependendo da aplicação acredito que não seria uma boa ideia, pois a EEPROM possui um limite finito de escritas conforme diz o post.

      Abraços!
      Vinícius – Equipe MakerHero

  3. Boa tarde, estou tendo dificuldades em fazer o motor de passo se mover para o ângulo de 90 graus esperar 2 segundos e retornar ao inicio.
    Alguém poderia me auxiliar?

    1. Olá Guilherme,

      Basicamente você usaria os comandos myStepper.step(-512); e delay(2000); para girar 90 graus e depois o comando myStepper.step(512); para voltar à posição inicial.

      Abraços!
      Vinícius – Equipe MakerHero

  4. Olá, pessoal! Tudo bem?

    Qual seria a velocidade máxima do motor de passo e que eu poderia colocar no programa?
    Outra dúvida, seria possível eu ter uma resposta, um retorno, feedback do motor de passo? Por exemplo, um número de quantas voltas ele deu ou algo do tipo?

    Desde já agradeço! 🙂

    1. Olá Beatriz!

      A velocidade máxima vai depender do motor, do programa e da carga que tem no motor, você pode ir testando e ver a maior velocidade que sua aplicação aceita.
      Em termos apenas de código e de variável, o máximo seria 2147483647 que pode ser colocado (variável do tipo long).

      Quanto a receber feedback do motor de passo não é possível sem algum outro componente, caso não haja perda de passos, é possível saber pelo número de passos que o motor deu. Esse motor tem 4096 passos/volta.

      Abraços!
      Vinícius – Equipe MakerHero

  5. Uma pergunta: o esquemático mostra o +5V do Arduino ligado ao pino -5V do Driver, e o GND do Arduino ligado ao pino +12V do Driver. É isso mesmo? O driver ULN2003 não precisa de alimentação 12V? Se precisa, qual o jeito certo de fazer esta ligação? Tenho uma fonte chaveada de 12V e um stepdown regulável pra 5V, então não teria problemas quanto a isso!

    1. Olá Vinicius!

      A indicação ali na verdade é + e -, indicando positivo e negativo da alimentação e a marcação 5-12V quer dizer que o driver aceita entradas entre 5 a 12 V.
      Ele pode ser alimentado com qualquer tensão DC entre 5 e 12 V, e a ligação deve respeitar o + e – da polaridade.
      A ligação é essa mesma que mostra o esquemático.

      Abraços!
      Vinícius – Equipe MakerHero

  6. nossa agora desanimei ;
    e tudo em inglês ? , não entendo bolufas nenhuma , achei que era mais pratico a programação

    Algum de vcs tem algo mais pratico pra iniciante , pq nao tenho tempo pra fazer faculdade , apesar de me interessar muito e ja ate comprei motor , driver e outros .

    Obrigado pela Atenção

    Silvio G. Sousa

    1. Olá Silvio,

      Temos esse post aqui no nosso blog: https://www.makerhero.com/blog/programacao-arduino-portugues-brasil/

      Que fala justamente sobre a “tradução” dos comandos para português

      Abraços!
      Vinícius – Equipe MakerHero

      1. Pessoal.
        Uma duvida que eu tou é como deixar o motor do arduino sempre na mesma posicao quando ligar? visto que ele nao tem feedback? precisaria de um sensor adicional para isso?
        Em maquinas seria como fazer o home do motor.

        1. Olá Luiz,

          Sim, é preciso um sensor adicional para isso.

          Até por isso em máquinas a perda de passo nos motores é um problema tão crítico, pela falta de feedback.

          Abraços!
          Vinícius – Equipe MakerHero

  7. Ola boa tarde, queria saber a ligação de um motor de 4 fios. obrigado

    1. Olá Roberto,

      Vai depender muito do tipo de motor (servo, de passo, DC..) que está sendo utilizado.

      Abraço!
      Rosana – Equipe MakerHero

  8. Adilson parabéns pela explicação

    Pergunta:

    Se faltar energia no momento em que o motor de passo estiver trabalhando e parar no meio do percurso da CNC…

    quando o sistema reiniciar, como garantir que o motor reconhecer o ponto zero de repolso?

    1. Olá Ricardo!

      No void setup(), inclua a instrução com a posição que deseja que o servo esteja ao iniciar o programa.

      Abraço!
      Rosana – Equipe MakerHero

  9. Adilson parabéns pela aula!

    Considere que o motor de passo fique em zero grau e gira 120 reais para direita e esquerda.

    Se faltar energia enquanto faz a rotina e parou no ponto +80 graus.

    Quando reiniciar o sistema, eu preciso garantir que comece sempre do ponto zero.

    O que devo programar para iniciar partindo do ponto zero?

  10. Adilson, parabéns pela explicação.

    Ajude-me na seguinte situação.

    Programar o motor de passo. Partindo do (zero) 0° teremos:

    Se o comando for HIGH, gira 120° para diteita;
    Se o comando for LOW gira 120° esquerda, e finaliza aguardando novo comando.

    Esta é a rotina deste motor.

    Se durante o movimento faltar energia e parar em qualquer ponto…

    Como posso fazer ele retornar no ponto zero 0° quando o sistema for reiniciado?

    Note que é importante que comece e depois terminar a tarefa no zero 0°.

    Conto com sua ajuda,

    Muitissimo obrigado!

  11. Tentei fazer um alimentador de animais, mas no primeiro grão que ele enrosca, o motor já patina e não entrega e ração. Alguma ideia de um motor mais forte, que não tem esse problema de patinar, que ao mesmo tempo não seja muito grande?

    1. Olá Paulo,

      Dá uma olhadinha nos motores de passo NEMA. Eles são um pouco maiores, mas acredito que atendem o que você deseja.

      Abraço!
      Rosana – Equipe MakerHero

  12. Como fazer um radar com o Motor de Passo + Driver Uln2003 Arduino? Comprei mas não consigo programar ele.

  13. Tenho um motor de passo unipolar de impressora (PM55L – 048 – HP69) e não consigo de forma alguma fazê-lo funcionar; já tentei com o driver l298n e tb com esse driver do seu tutorial mas nada acontece. Não sei se é a sequência dos fios das bobinas que não estou sabendo fazer mas, já inverti os fios e nada.

    1. Daniel,

      As chances de serem as sequências de fios são bem grandes. Caso estejam errados, podem girar estranho ou nem girar.

      Abraços!
      Diogo – Equipe MakerHero

  14. Boa tarde!
    Tenho alguns motores de passo de impressoras. Uns tem 4 fios e outros tem 6. Será que é possível controlar dessa forma? Percebi que esse motor de passo usado na explicação, tem um módulo drive … seria necessário ter um para o controle dos motores? Uma ponte h l298 ou um motor shield l293d controlaria!?

    1. Luivan,

      Sim, você vai precisar de um driver para fazer o controle desses motores.

      Abraços!
      Diogo – Equipe MakerHero

  15. Bom dia amigo, desejo montar uma mini cnc onde o eixo de cima só vai subir e descer 10mm para furar os buracos, o eixo X vão andar até 25cm e o y 15cm… Vc teria algo nesse sentido? Que possa me servir de base…

    1. Roldão,

      Você pode dar uma olhada nesse shield: https://www.makerhero.com/produto/cnc-shield-v3-para-arduino-impressora-3d/

      Abraços!
      Diogo – Equipe MakerHero

  16. Olá, estou tentando fazer este circuito, mas quando energizo, dois leds ( A,C) começam a piscar e emitir sinal sonoro, o que pode ser?

  17. Como posso antes de iniciar o comando do motor de passo coloca-lo numa posição especifica?

    1. No setup, adicione o comando myStepper.step(Aqui você coloca a posição desejada);

      Abraços!
      Diogo – Equipe MakerHero

      1. eu fiz assim, sempre que liga ele vai para o ajuste, basta mudar o valor de ajuste inicial. isso serve para testar se gira para os dois lados também.

        #include // motor de teste “28BYJ-48” com uln2003 alimentado externamente
        CustomStepper stepper(4, 5, 6, 7, (byte[]){8, B1000, B1100, B0100, // mude caso sejam diferentes os pinos 4, 5, 6, 7.
        B0110, B0010, B0011, B0001, B1001}, 2048, 12, CW); // mude caso seja diferente no seu motor para 4096 ou 4077
        int rotate1 = 0;
        boolean rotatedeg = 0;
        boolean crotate = 0;
        int botao0 = 10; // mude caso sejam diferentes os pinos
        int botao1 = 11; // mude caso sejam diferentes os pinos
        int botao2 = 12; // mude caso sejam diferentes os pinos
        void setup()
        {
        pinMode (botao0, INPUT_PULLUP);
        pinMode (botao1, INPUT_PULLUP);
        pinMode (botao2, INPUT_PULLUP);
        stepper.setRPM(12); // max 20, é recomendado usar um teclado numerico para definir os valores da variavel setRPM, recomendado 12, caso tenha problemas 6
        stepper.setSPR(2048); // mude caso seja diferente no seu motor
        rotate1=0;
        // para entrar no primeiro parametro ou segundo, substituir a gosto do teste
        // é recomendado usar botoes para definir os estados da variavel rotatel a seguir, mas comece pelo ajuste sempre
        // nesta configuração ira entrar no ajuste e parar
        }
        void loop()
        {
        if (digitalRead (botao0) == LOW)
        {
        rotate1 = 0;
        }
        //____________________________________________________________________________________
        if (digitalRead (botao1) == LOW)
        {
        rotate1 = 1;
        }
        //____________________________________________________________________________________
        if (digitalRead (botao0) == LOW)
        {
        rotate1 = 2;
        }
        //____________________________________________________________________________________
        if (stepper.isDone() && rotate1 == 0) // nesta configuracao fara um movimento bobo para um lado e o outro
        {
        stepper.setDirection(CW);
        stepper.rotateDegrees(1); // mude o valor de ajuste para o angulo desejado caso tenha um mpu 6050
        stepper.setDirection(CCW);
        stepper.rotateDegrees(1); // mude o valor de ajuste para o angulo desejado caso tenha um mpu 6050
        rotate1 = 3; // 0 = Juste, 1 = executar o primeiro, 2 = executar o segundo e 3 = parar
        }
        if (stepper.isDone() && rotate1 == 1)
        {
        stepper.setDirection(CW);
        stepper.rotateDegrees(360); // mude o valor de ajuste para o angulo desejado, pode ser substituido por: stepper.rotate(1); para numero de voltas, onde 1 = uma volta
        rotate1 = 3;
        }
        if (stepper.isDone() && rotate1 == 2)
        {
        stepper.setDirection(CCW);
        stepper.rotateDegrees(360); // mude o valor de ajuste para o angulo desejado
        rotate1 = 3;
        }
        stepper.run();
        }

  18. Olá pessoal. Estou precisando de um programa para o Arduino Uno para controlar o Stepper Motor JK57HS76-2804 que contenha o seguinte: Potenciômetro para controle de velocidade e 4 sensores indutivos NPN para controlar o sentido de rotação do motor.
    Quem estiver disposto fazer este programa, entra em contato. E-mail [email protected]

  19. Professor estou com duvida, tenho uma webcam yoosee, de uso residencial quando ela liga , o motor ocorre travamento, aonde pode estar o problema no motor ou na placa?

    1. tente a velocidade, se estiver alta ele trava, comece em 6 e vá subindo no teste

  20. Boa tarde Adilson da Felipeflop, estou fazendo um Display de mesa que gira 90º e dá uma parada de 10 segundos, daí gira mais 90° e para por mais 10 segundos, no sentido horario. O prato que gira tem 4 produtos que são mostrados a cada giro, estes produtos são separados por uma placa de pvc. Portanto só vemos o produto que está na frente, quando gira vem o proximo produto. Ví pelos comentários que houve erros nesse código apresentado. Quero saber se vou poder esse código no meu caso. Desde já agradeço a atenção.

    1. Rene,

      É possível usá-lo sim. Basta você alterar com o tipo de giro que deseja 😉

      Abraços e cuide-se com o COVID-19!
      Diogo – Equipe MakerHero

  21. Como se chegou aos valores de -512 e 682??

    Estou tentando escrever um código simples que em um motor rotaciona 90° no sentido horário ao clicar no botão b1 e rotacionar 90° no sentido anti-horário clicando num botão 2.

  22. Em meu projeto tenho um Motor de Passo 28BYJ-48. Ele gira 120 graus, dependendo da minha programação: pra direita ou pra esquerda. Ele gira 120 graus perfeitamente, mas quando eu desligo o Motor de Passo ele para eu outro ponto. O meu problema é que o Motor de Passo não para no mesmo ponto. Como eu resolvo isso?

    1. Edson,

      Você está usando o mesmo código do post?

      Abraços!
      Diogo – Equipe MakerHero

  23. Tenho uma dúvida: Só posso usar os pinos 8, 9, 10 e 11 porque? E se eu quizer ligar 3 motores num Arduino mega 2560 que tem uma abundância de pinos, então não vou conseguir?

    1. Sergio,

      Você pode usar outros pinos sem problema, mas não deve esquecer de alterar os pinos na programação!

      Abraços!
      Diogo – Equipe MakerHero

  24. Boa noite Adilson,

    Sou iniciante do Arduíno e programação, gostaria de fazer uma pequena programação igual a desse tutorial, porém incluindo dois botões. Um botão para rodar no sentido horário (1/2 volta) e para; e o outro botão para o sentido anti-horario, também em meia volta e depois para. Cada aperto de botão o motor da meia volta e para. Já tentei com pequena aulas no YT. Mas não estou conseguindo concluir… Poderia me ajudar ?

    1. Bruno,

      Sugiro que você leve sua dúvida para o nosso fórum, lá é mais fácil de prestar ajuda 🙂

      Abraços!
      Diogo – Equipe MakerHero

  25. E como que faz para controlar 3 motores sendo 2 girando no mesmo sentido e 1 girando pra frente por 10 segundos e pra traz por 10 segundos,. pois a biblioteca stepper só funciona com 1 motor de passo.

    1. Dayner,

      Você pode usar o shield do link abaixo com os respectivos drivers:
      https://www.makerhero.com/produto/cnc-shield-v3-para-arduino-impressora-3d/

      Com ele você tem a opção de controlar até 4 motores de passos.

      Abraços!
      Diogo – Equipe MakerHero

  26. Ótima explicação estou estudando no curso de eletrotécnica .fiquei muito interessado neste assunto .

    1. Olá, Hemersom!

      Que bom que curtiu! Continue explorando esse universo maker! 🙂

      Abraços!
      Diogo – Equipe MakerHero

  27. boa tarde me chamo Alessandro

    Vcs teriam algo para controle motor passo nema 17, tenho um projeto braço robotico com o uso de nema17.

    Quero fazer a programação dele via computador ou potenciometro e gravar estas posições no eeprom arduino. É possivel

  28. ola Adilson, estou tentando fazer um seguidor solar 2 eixos com dois motores de passo e arduino mega, poderia me dar uma luz como faço pra ligar os dois drives no arduino mega.

  29. Olá, posso programar para ele fazer 30 movimentos de poucos cm de acordo com um time? Depois de pronto a placa arduíno fica limitado a apenas 1 produto, ou seja se eu quiser fazer igual mais vezes , será 1 placa dessas p cada 1?

    ANDERSON RAMIRO RANGEL CARNELLI
    1. Olá, Anderson,

      É possível sim fazer esses movimentos. Você precisa montar isso no código 🙂

      Temos um post sobre controlar vários servos: https://www.makerhero.com/blog/como-usar-modulo-pwm-servo-16-canais/

      Abraços!
      Diogo – Equipe MakerHero

  30. olá gostaria de saber se esse driver que veio com o motor pode ser usado no arduino mega também, se o seu codigo fonte pode ser usado no mega também

    1. Olá Yuri,

      Sim, pode ser usado também o Arduino Mega.

      Abraço!
      Rosana – Equipe MakerHero

  31. Como se sabe que -512 eh 90 graus? ou que 682 eh 20 graus? Agradecia se mostrasse como, para que tambem possamos explicar aos outros.

  32. teria códigos para controlar 3 motor de passo deste modelo com Joystick 3 eixos?

    Emanuel - Selecione - veiga
    1. Olá Emanuel,

      Não temos um código pronto para o que você precisa. Mas você pode adaptar o código deste tutorial para sua necessidade, sem problemas.

      Abraço!
      Rosana – Equipe MakerHero

  33. É possível conectar a esta mesma placa de drive um motor de 4 fios?, e o programa seria o mesmo?

    1. Olá,

      Vai depender do modelo de motor que está usando.

      Abraço!
      Rosana – Equipe MakerHero

  34. Bom dia
    Queria programar um só motor de passo para uma operação repetida, para acoplar a um dispositivo mecânico.
    O motor de passo com alguma força.
    O que eu preciso comprar para ter esse funcionamento, na porta de saída de um PC?
    agradeço

    1. Preciso do conjunto completo para conectar no PC, cabo, fonte, o que mais?

      1. Olá,

        Vai precisar também de um Arduino e um driver para motor (como sugerido nos tutoriais)

        Abraço!
        Rosana – Equipe MakerHero

  35. MESTRE BOM DIA, PARABENS PELA PAGINA , GOSTARIA DE SABER SE PODE AJUDAR
    PRECISO MUDAR A ROTAÇAO DO MOTOR VIA PROGRAMAÇAO, MAS JA NO SETUP
    ESSE E O PROGRAMA

    #include
    #include

    byte const enablePin = 8;

    AccelStepper stepper(AccelStepper::FULL3WIRE, 1, 3, 6);

    void setup()
    {

    pinMode (enablePin, OUTPUT);
    digitalWrite (enablePin, LOW);
    stepper.setMaxSpeed(20000.0);
    stepper.setAcceleration(19000);
    pinMode(12, INPUT_PULLUP);
    pinMode(12, LOW);
    stepper.setSpeed(20000.0);

    }

    void loop()

    {

    while (digitalRead(12) == LOW) stepper.runSpeed();
    {

    stepper.setCurrentPosition(0);

    }

    stepper.runToNewPosition(10000);

    stepper.setMaxSpeed(20000.0);
    stepper.setAcceleration(2000.0);

    delay(100);

    }

    1. Olá Kleber,

      Acredito que isso só seja possível no loop.

      Abraço!
      Rosana – Equipe MakerHero

  36. Voce esta alimentando o motor através do arduino diretamente , pode ferrar o arduino . Acho que alimentação do motor deve ser feita de forma independente através de uma fonte de 5V.
    A especificação do motor esta incompleta , falta a sequencia de energização das bobinas

    1. Olá Flávio!

      Depende da corrente que o motor vai exigir.

      Abraços!

      André – Equipe MakerHero

  37. Show, gostaria de obter para um controlador drive 488

    1. Olá Alvimar!

      Você pode comprar neste link:
      https://www.makerhero.com/produto/driver-motor-de-passo-a4988/

      Abraços!

      André – Equipe MakerHero

  38. Olá, sou novato na utilização do arduino, mas gostaria de saber se é essa mesma conexão é valida para um motor de passo bipolar, senão, poderia disponibilizar o código e o esquema de ligação?

  39. Oi Adilson, tudo bem?

    O código funcionou muito bem, melhor até que os exemplos da própria biblioteca.

    O que gostaria de entender são os parâmetros:

    myStepper.step(682);
    myStepper.step(-512);

    Como chegou nestes valores? Tinha tentado (120) e (-120) pensando que eram referente aos graus, mas não ia e nem mudava o sentido. Precisava dessa explicação pra montar uma aula (citando vocês nas referências).

    Obrigada!

    1. Eu perguntei e eu mesmo vou responder (risos).

      Usei uma regra de 3 para descobrir

      Se para 90 graus temos 512, para 30:

      x = (512*30) / 90
      x = 171 (aproximado)

      Para uma volta completa, usamos 2048 e damos o sentindo com sinal (-).

      Obrigada pelo post.

      1. Olá Gedeane!

        Obrigado por nos referenciar nas suas aulas!

        Abraços!

        André – Equipe MakerHero

  40. Me interessei pelo programa. ..

    1. Olá Francisco!

      Ficamos bem felizes em saber que o nosso trabalho ajuda as pessoas 🙂

      Sugiro você por em prática as coisas, só pondo a mão na massa que se aprende de verdade!

      Abraços!

      André – Equipe MakerHero

  41. Boa noite. Gostaria de saber se voce poderia me ajudar a fazer a comunicação do dispositivo android com o motor de passo do arduino. Estou fazendo um trabalho em minha casa e gostaria de fazer um alimentador para gato automatizado, podendo ser acionando de onde eu estiver. Grato,

    1. Olá Denis!

      Acho que a melhor forma seria através de um módulo bluetooth.

      Dê uma olhada nesse tutorial:
      https://www.makerhero.com/blog/tutorial-arduino-bluetooth-hc-05-mestre/

      Abraços!

      André – Equipe MakerHero

  42. perfeito
    muito bom para entender os passos de programação

    1. Olá Francisco!

      Ficamos bem felizes em saber que o nosso trabalho ajuda as pessoas 🙂

      Abraços!

      André – Equipe MakerHero

  43. Olá. estou com um trabalho da faculdade e estou tendo com um problema não tenho muita experiencia com Arduíno e motor de passo. no meu trabalho quero usar o motor de passo para fazer um mini portão eletrônico consegui criar o comando de abrir e fechar o portão. o que eu não consigo é a partir desse comando criar um botão que quando pressionado abra e se pressionado novamente feche teria como ajudar desde já agradeço. segue o comando que fiz .

    #include //biblioteca para controle de motor de passo

    #define in1 8 //entrada 1 do ULN2003
    #define in2 9 //entrada 2 do ULN2003
    #define in3 10 //entrada 3 do ULN2003
    #define in4 11 //entrada 4 do ULN2003

    const int stepsPerRevolution = 200;

    Stepper myStepper(stepsPerRevolution, in1, in3, in2, in4);

    void setup()
    {
    // set the speed at 120 rpm:
    myStepper.setSpeed(120);

    } //end setup

    // — Loop Infinito —
    void loop()
    {
    delay(2000);
    for (int i = 0; i <= 26; i++)
    {
    myStepper.step(-stepsPerRevolution); //ABRE

    }

    delay(2000);

    for (int i = 0; i <= 26; i++) //fecha
    {
    myStepper.step(stepsPerRevolution);
    delay(20);
    }
    delay(1000);

    } //end loop

    1. Olá Lucas!

      Parece que no seu código está faltando a biblioteca!

      Abraços!

      André – Equipe MakerHero

  44. Boa noite,

    Porque a constnte “stepsPerRevolution” está com valor igual a 500 no código?
    Não deveria ser 4096?

    Muito Obrigado,

    1. Olá Cleder!

      É o número de passos por volta do motor utilizado no exemplo. Dependendo de quantos passos por volta tem o seu motor você altera o valor ali.

      Abraços!

      André – Equipe MakerHero

      1. Olá André,

        Muito obrigado pela resposta.
        Mas queria somente confirmar quantos passos tem o motor de passo 28BYJ-48 (que é o motor do post) porque estou usando um igual a este.
        No datasheet está meio estranho, mas achei que fosse 4096.

        Abs,

        1. Olá Cleder!

          É que tem a redução do motor junto, que deve ser considerada. O motor tem 64 passos com uma redução de 1:64. Aí fica 64 *64 que dá 4096 por volta.

          Estamos aí pra resolver essas dúvidas mesmo 🙂

          Abraços!

          André – Equipe MakerHero

  45. Para aqueles que estiverem com dificuldades com o sentido de rotação:
    No meu conjunto, não sei se por diferenças de fabricação do stepper motor ou do driver, funcionou tudo OK com a seguinte ligação:
    IN1-pin8
    IN2-pin10
    IN3-pin9
    IN4-pin11

  46. Show de bola. Muito fácil de entender.

    1. Olá Marcelo!

      Ficamos muito felizes em saber que nosso trabalho realmente ajuda as pessoas!

      Você já viu o nosso fórum? É um espaço aberto onde todos podem colaborar. Lá você pode postar seus projetos, tirar suas dúvidas, ajudar outras pessoas e contribuir para a comunidade 🙂

      https://www.makerhero.com/forum/

      Abraços!

      André – Equipe MakerHero

  47. Ola comprei o Driver  para motor de passo, o Gerador de sinal que tenho só tem 2 saídas, como fazer funcionar nesse driver uln 2003? no Diver tem 4 entradas. Obrigado.

  48. E possível através de botões do visual basic para um servo motor 360º em 60º/90ª120ª(cada botão coloca uma posição)?

  49. Obrigado, pelo o conhecimento transmitido, com certeza todos que tiverem acesso ao seu conteúdo ficaram satisfeito.

  50. Gostaria de saber qual a rotação máxima em RPM desse motor (sem carga ou baixa carga),para controlar usando um Arduino (Motor de Passo 28BYJ-48).

  51. Testei o código e depois de alguns tropeços, finalmente o “bichinho” andou e voltou. Mas está LONGE de ser preciso. O 28BYJ-48 perde vários passos durante o percurso. Fazer duas voltas completas iguais para o 28BYJ-48 é algo impossível. Para brincar e aprender, serve… nada mais que isso.

  52. Boa Tarde,

    Gostaria de saber se consigo fazer esse controle com algum modulo wifi arduino?

  53. Caro Adilson Thomsen, estou usando o NodeMCU como faço para realizar esta ligação, daria para você passar quais GPIO devo utilizar.

  54. Boa noite.
    Obrigado pelo artigo..
    eu estou carregando o código e não apresenta erros na IDE mas o motor de passos não da um sinal de vida..eu liguei conforme o diagrama posta aqui..

  55. É possível ligar um motor de passo bipolar (4fios) ao MotorShild L293D ?

  56. Olá. Gostaria de saber mais ou menos qual a maior velocidade que consigo nesse motor.
    O que preciso é que ele de uma volta completa em 1s. Ele vai?

  57. Nessa programação o tempo q ele fica parado e de 2 segundos para retornar os movimentos, para aumentar esse tempo é só alterar o delay? Como faço? Obrigado e boa tarde

  58. Boa tarde . Usei este codigo tentado montar um controle de válvula que atua de 0 a 100 % de um registro aberto, podendo regular a abertura da válvula de 10 em 10%. Vocês poderiam com código agradeço desde já

  59. oi amigos, estou fazendo um elevador de andares utilizando uma shield Ponte H e um sensor ultrassonico, alguma sugestao de como fazer a programação?

  60. Eu consigo simular um motor de passo no tinkercad ou em outra ferramenta?

  61. boa tarde, estou iniciando com arduino e montei esse vosso projeto com o motor de passo e deu tudo certo funciona certinho.
    a minha duvida é que testei outras programas e nenhum funcionada ceto o motor vibra mais nao giro só esse programação de voces da certo me podem ajudar porque nos outros so treme?

  62. Boa noite,

    Precisei usar esse motor para fazer uma catraca de seleção em uma esteira, porém toda vez que a peça da esteira encostava na parte que o motor movimentava o motor de passo mudava o seu percurso. O seja qualquer coisa que o motor de passo encoste e impeça a movimentação dele o percurso muda, gira para outro sentido. Como faço pra resolver isso?

    Qual é o peso máximo que esse motor consegui movimentar? Você sabe?

  63. A minha pergunta vai ser um pouco diferente das que foram feitas aqui, o se eu quisesse, sei que não é a função dele, mas mantê-lo com um giro constante como de um moto CC, como deveria ser feito a ligação dele? E mais ainda como poderia implementá-lo manualmente, sem ajuda do arduino?

  64. Filipe preciso fazer esse projeto em assembly, vc conhece algum site q ajude nesse linguagem?
    caso vc conheça poderia me ajudar a entender como ficaria esse acionamento em assembly

  65. boa tarde amigos.

    tou montando um prototipo de uma makina e consegui desenvolver este sketck.
    nele o motor parte de um ponto inicial, vai e volta e da a volta completa voltando ao ponro inicial novamente
    e sempre executa isso quando e precionado um botao de start.

    porem preciso por um reed-switch pra ser o ponto de partida inicial caso ele rode saindo da posicao certa. poderiam me ajudar nisso ? tou um pouco perdido em conseguir fazer esta parte.
    tudo que aprendi foi apenas em pesquisas em sites e vendo video aulas. mas nao estou conseguindo fazer esta parte. obrigado

    #include

    int B = A2; // botao

    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);

    pinMode(B, INPUT);

    }

    void loop() {

    int VB = digitalRead(B); // VB valor botão

    if (VB == 1){
    myStepper.step(400);
    delay(100);

    myStepper.step(-400);
    delay(100);

    myStepper.step(400);
    delay(100);

    myStepper.step(-2448);
    delay(0);

    }

    }

  66. Excelente Tutorial!

    Como posso fazer ele girar continuamente? Qual seria o comando?
    Em meu projeto preciso fazer ele girar continuamente no sentido horário ao pressionar o botão1 e anti-horário ao pressionar o botão2.

    Poderia me ajudar?

  67. Olá, quero fazer um velocimetro com o motor de passo no painel e sensor hall na roda do carro, como posso montar o esquema eletrico e a linguagem? obrigado

  68. ola, estou fazendo um projeto de tcc em quer deveria usar um portão na maquete comandado por Bluetooth, usando o motor de passo, gostaria que ele começasse desligado e quando recebesse o comando ligasse, e quando recebesse o segundo comando fechasse , alguém poderia me ajudar?

  69. Olá..
    É possível estabelecer tempos para acionamento do motor? Por exemplo:
    No tempo 10s motor gira 30º na velocidade de 2s
    No tempo 15s motor gira 180º na velocidade de 5s
    etc..
    Agradeço a ajuda!

  70. estou fazendo um projeto de tcc e preciso de um programa, meu projeto é uma esteira seletora com eletro imã, que separa peças de metal e plastico , se for metal ele vai indetificar pelo sensor indutivo e tirar pra algum recipiente, se for plastico ira passar reto , alguem pode ajuda?

  71. Olá galera!
    Estou precisando muito da ajuda de vocês para esse projeto, realizei todas as recomendações postadas aqui, mas nenhuma obteve sucesso.
    Meu problema é o seguinte, meu motor de passo esta travado, ele vibra mas não gira. O que deve estar acontecendo. Se alguém poder me ajudar ficarei muito agradecido.
    Meu email: [email protected]

  72. Boa noite, gostaria de tirar uma dúvida: Eu posso alterar os pinos? No caso, utilizar do 0 ao 3? Ou essa pinagem é especifica da biblioteca?
    Abraços.

    1. ola pode sim, na linha seguinte
      Stepper myStepper(stepsPerRevolution, 8,10,9,11);
      altere conforme a ordem para nao ter problemas e caso queira usar as portas de 0 a 3 certifique-se de tirar os conectores das portas 0 e 1 pois estao interligadas no microcontrolador e sao usadas para comunicacao serial TX e RX ou seja ao gravar um codigo ou usar a Serial.begin() essas portas que sao usadas entao cuide para nao ter conflito

  73. como faço para mudar os ângulos
    preciso de ajuda
    obigado

    1. myStepper.step(VALOR);

      Dentro do parênteses indique o valor desejado:
      Onde 2048 = 360°, depois faça a regra de três pra movimentar o ângulo desejado.
      – Valores positivos – sentido horário,
      – valores negativos – sentido anti-horário.

  74. Boa tarde
    É possivel alguém ajudar?

    Recebi ontem da china um jeep telecomandado, mas quando carrego no comando para baixo o carro vai para a frente e vice versa, apesar de já ter reclamado e ir receber o reembolso, como posso resolver esta questão?

    Obg

    1. inverta a polaridade dos fios do motor.

  75. Bom dia, amigo. Gostaria de saber como você desenhou o motor e o driver, pois estou precisando urgentemente para o meu TCC e não achei no Fritzing. Obrigada.

  76. Boa tarde.
    Gostaria de trabalhar em um projeto que tenha um webservice sem utilizar cabo de rede e que gire um motor de passo.

    Pesquisei aqui e pensei em trabalhar parecido com esse projeto do post porem com essa placa ( https://www.makerhero.com/pd-3cc1a3-placa-wemos-d1-r2-wifi-esp8266.html?ct=&p=1&s=1 )

    O que acha?

  77. olá, preciso fechar a malha desse projeto, tem como?

  78. Boa tarde, gostaria de saber se necessita usar mesmo 3 portas PWM? ou foi escolhidas aleatoriamente e posso usar portas normais?

    obrigado desde já!

  79. Olá poderia me dizer se posso ligar o mesmo motor em outras portas. Preciso colocar um display e não estou conseguindo. Quando coloco o motor em outros pinos ele não faz dois sentidos. Poderia me ajudar?

  80. Boa noite,

    Gostaria de saber se seria possível fazer com que esse driver aguentasse a 24V apenas trocando o CI. Preciso conectá-lo a um motor que trabalha com essa tensão e gostaria de aproveitar o driver.

    Obrigado.

  81. Boa Noite a Todos!!

    tenho esse motor juntamente com o Drive e estou usando o Raspberry Pi 2 , não estou conseguindo fazer a rotação em 120 graus alguem pode me ajudar por favor ! Motor esta ligado Gpio no Raspberry

    Obrigado

    1. Estou com o mesmo problema, acho que o motor que é muito ruim mesmo, o meu também não gira 120 graus, tenho que ajudar com a mão. pode ser a alimentação também estou usando os 5v do arduino, pode ser que com 12 melhore. nao fiz o teste.

  82. ola, este tutorial me ajudou bastante.
    quero saber se é possivel colocar um dispay lcd 16×2, para mostrar o avanço do motor

  83. Olá pessoal, sei que a postagem é meio antiga, mas vim parar aqui por que estou verificando a viabilidade de uma ideia com o Arduíno….

    Poderiam me dizer quantos motores de passo um único arduíno conseguiria comandar? Somente um será acionado a cada vez, mas seria possível por exemplo 10 motores?

    Obrigado!

    Everton

    1. Bom dia Everton,

      Não fizemos testes com tantos motores de passo, mas creio que você possa fazer isso com a biblioteca Stepper ou Customstepper do Arduino. Recomendo apenas utilizar alimentação externa para os motores.

      Abraço!

      Adilson – Equipe MakerHero

    2. Everton, sua duvida ja deve ter sido esclarecida, mas vou deixar aqui para que outros possam encontrar
      acredito que daria sim , sem utilizar 40 pinos para dez motores. Estou incluindo esta opção agora em meu TCC de mecatrônica.
      o que estou fazendo é ligar 2 motores em 4 portas do PIC, destas portas saem 2 fios de cada, um para cada ULN (vc pode escolher entre bifurcar a saida da porta lógica ou do ULN) para encurtar os cabos utilizei dois modulos ULN e com dois outros pinos do pic e transistores, escolho qual modulo será ligado e uso as mesmas 4 portas para os dois, só que apenas um recebe o sinal porque o outro está desligado.
      caso faça com um modulo apenas, é só usar os dois transistores para lig/desl os fios COM de cada motor.

      1. Outra possibilidade, é utilizar 4 demultiplex 74151, e controlar 15 motores de passos, utilizando 8 saídas do arduíno.

  84. Bom dia, gostava que me pudessem ajudar nas ligações de um motor dc ligado ao arduino com um servo motor, isto porque tou tentando fazer um carro telecomandado atraves de arduino e android.
    É possivel ajudarem com as ligações??
    Obrigado !!!
    Abraço

    1. Cristiano, não é recomendável ligar um motor DC diretamente ao Arduino, pois este geralmente não pode fornecer a potência necessária nesses casos, podendo vir até mesmo a queimar. Pesquise sobre a Ponte H, a forma correta de controlar motores DC utilizando Arduino.

  85. Opa, mto boa essa página! Estou com uma dívida: é normal o motor esquentar tanto a ponto de não dar para tocar nele? Fiz a ligação como mostra figura e copiei o código sem fazer nenhuma alteração e mesmo assim ele ficar extremamente quente após algum tempo.
    Obrigado

    1. Toledo, comprei o mesmo motor de passo e não conseguia funcionar.

      Em comentário mais embaixo cita que a ligação está errada no desenho e realmente está (os pinos 9 e 10 estão trocados), a ligação que funcionou foi:

      IN1 ao pino 8 do Arduino
      IN2 ao pino 9 do Arduino
      IN3 ao pino 10 do Arduino
      IN4 ao pino 11 do Arduino

      Não houve problema com o código. Acertando a ligação, funcionou sem problema.

      1. Opa, vlw, Joseph. Já tinha lido seu comentário mais abaixo afim de ver se tinha mais alguém com esse problema e tentei oq vc flou, tbm achei que o código estava estranho mas enfim…Tentei dos dois jeito e esquentou mto em ambos, por isso perguntei.

        Msm assim, obrigado pela resposta!

  86. Preciso de um help seu em programação.
    To a fazer o meu Tcc e apresentação dia 11 quinta que vem to apanhar uma porrada na programação fera
    To a usar o Arduíno uno
    O meu Tcc é o mapeamento através de web CAM (por exemplo seguir o movimento de objeto )
    Eu estou usar:
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Um servo motor no plano Y (tem que girar 0 a 180 também e depois volta pro inicio)
    linguagem do servo “Aonde fica a Web Cam”
    ‪#‎include‬
    Servo myservo; // create servo object to control a servo
    // twelve servo objects can be created on most boards
    int pos = 0; // variable to store the servo position
    void setup()
    {
    // pinMode(6,OUTPUT);
    // digitalWrite(6,1);
    myservo.attach(9); // attaches the servo on pin 9 to the servo object
    }
    void loop()
    {
    for(pos = 0; pos =0; pos-=1) // goes from 180 degrees to 0 degrees
    {
    myservo.write(pos); // tell servo to go to position in variable ‘pos’
    delay(10); // waits 15ms for the servo to reach the position
    }
    }
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Um motor de passo no plano X ( tem que girar 0 a 180 e volta para mesma posição )
    minha programação do motor de passo
    /* Exemplo de Ligacao
    * ——————–
    * Arduino – Modulo
    * ——————–
    GND GND
    VCC VCC
    PINO 08 08
    PINO 09 09
    PINO 10 10
    PINO 11 11
    */
    int motorPin1 = 7; // arduino pino 7 segue 8 do ULN2003A e sai bobina 4 azul
    int motorPin2 = 8; //arduino pino 8 segue 9 do ULN2003A e sai bobina 3 Amarelo
    int motorPin3 = 12; //arduino pino 12 segue 10 do ULN2003A e sai bobina 2 Verde
    int motorPin4 = 13; //arduino pino 13 segue 11 do ULN2003A e sai bobina 1 Vermelho
    int delayTime =15;//tempo de giro
    int Y =180 ;
    //int X =0;
    int X =180;
    //int Y =180 ;
    //int Y =0 ;
    String inputString = “”; // a string to hold incoming data
    boolean stringComplete = false; // whether the string is complete
    void setup()
    {
    Serial.begin(9600);
    pinMode(motorPin1, OUTPUT);
    pinMode(motorPin2, OUTPUT);
    pinMode(motorPin3, OUTPUT);
    pinMode(motorPin4, OUTPUT);
    // reserve 200 bytes for the inputString:
    inputString.reserve(200);
    //trocar o inicio de 0 a 180 e de 180 a 0
    giraesquerda(180);
    giradireita(180);
    // giraesquerda(0);
    // giradireita(0);
    }
    void sobe(int graus)
    {
    }
    void desce(int graus)
    {

    }
    void giraesquerda(int quatropassos) {
    for (int i = 0 ; i <= quatropassos; i ++) {//apenas alterou se o incremento de i=+1 para i++
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);

    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    }
    }
    void giradireita(int quatropassos)
    {
    for (int i = 0 ; i <= quatropassos; i += 1) {
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, HIGH);
    digitalWrite(motorPin4, LOW);
    delay(delayTime);
    digitalWrite(motorPin1, LOW);
    digitalWrite(motorPin2, HIGH);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    digitalWrite(motorPin1, HIGH);
    digitalWrite(motorPin2, LOW);
    digitalWrite(motorPin3, LOW);
    digitalWrite(motorPin4, HIGH);
    delay(delayTime);
    }
    }
    void loop()
    {
    serialEvent(); //call the function
    if (stringComplete) {
    Serial.println(inputString);
    // clear the string:
    inputString = "";
    stringComplete = false;
    }
    //giros do motor de passos
    //ver este laço para o giro
    if (X180)
    {
    giradireita(1);
    }
    if (Y180)
    {
    desce(1);
    }
    //termina aqui os giros
    //Duplicidade do laço de repeticao inicializacao por =
    if (X>180)
    {
    giradireita(1);
    }
    if (Y320)
    {
    desce(1);
    }
    //termina aqui os giros

    }
    void serialEvent() {
    while (Serial.available()) {
    // get the new byte:
    char inChar = (char)Serial.read();
    X=inChar;
    // add it to the inputString:
    inputString += inChar;
    // if the incoming character is a newline, set a flag
    // so the main loop can do something about it:
    if (inChar == ‘n’) {
    stringComplete = true;
    }
    }
    }
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    vou t mandar o link que to a seguir pra você ter mais ou menos uma ideia do que eu estou a falar
    Acompanha o quarto numero vídeo para ter uma ideia
    http://aleksandarkrstikj.com/
    Ai esta mano
    A ideia é o seguinte como vou interligar na logica os três componentes a Web,servo motor e o motor de passo.

    por favor

  87. Cara. Gostaria de saber quanto a motor de passo, eu sei que é um dos melhores motores para precisão, mas em relação a velocidade. Eles são rápidos é ideia para um carinho… ou recomendam outro tipo de motor(levando em consideração a precisão ).

  88. To quebrando a cabeça aqui e ainda não consegui entender porque você usou o valor stepsPerRevolution = 500.
    Tenho o mesmo motor que vc usou no tutorial. Pelo que eu entendi no datasheet e nas informações que pesquisei, esse motor tem 64 passos por revolução. Então de onde veio o valor 500? =/

    1. Esse motor tem um “Gear ratio” de 64 , e um “Stride Angle 5.625°”
      steps = Numero de steps em uma Revolucao * Gear ratio .
      steps= (360°/5.625°)*64″Gear ratio” = 64 * 64 =4096

      tambem nao sei de onde veio o 500 🙂

  89. ola boa tarde!
    eu comprei um motor desse de passo e ele não esta funcionando o que posso fazer? o codigo deu certo mais é o motor mesmo que não esta girando! espero respostas obrigado!

  90. 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

  91. Gostaria de saber qual capacitor ceramico vai no shied do ULN 2003 esse de 5V

  92. Olá, seus tutoriais me ajudaram a fazer um projeto na faculdade, muito obrigada.
    Gostaria de saber qual software vc usa para fazer os esquemas do arduino.

    1. Ele usa o Fritzing

    2. Boa tarde Kelleni,

      Muito obrigado, ficamos realmente felizes em ajudar. 🙂

      O software que utilizamos para o circuito é o Fritzing: http://fritzing.org/home/

      Abraço!

      Adilson – Equipe MakerHero

  93. Olá… Gostaria de saber o esquema de alimentação para esse driver em 12v.

  94. Será que seria possível controlar o ângulo de rotação com um teclado numérico?

  95. Olá Filipe!
    Cara teu mateiral é muito bacana, parabéns.
    O problema nesse post sáo as ligações, o bug é no esquema , as ligações de 1N2 e 1N3 estão invertidas!
    1N2 vai na porta 9 e o 1N3 na 10. funciona direitinho com esse código.

    Abraçao!

    1. Bom dia Olavo,

      Obrigado. O programa está correto. Foi o mesmo programa que utilizamos para testar e gravar o vídeo.

      Abraço!

      Adilson – Equipe MakerHero

      1. Bom dia Adilson,

        Sim, notei isso, no vídeo e na foto os fios estão ligados corretos, Mas a imagem que voces postaram do esquema elétrico estão com estes fios invertidos e montando como está este esquema o motor trava, recebe comandos inversos e esquenta demais. pf, de uma verificada.

        Abração,

        Olavo

      2. Olá, o código está correto, mas a ligação do esquema realmente está errado.

        Os pinos 9 e 10 estão trocados, a ligação que funcionou foi citada pelo Olavo.

        IN1 ao pino 8 do Arduino
        IN2 ao pino 9 do Arduino
        IN3 ao pino 10 do Arduino
        IN4 ao pino 11 do Arduino

        Não houve problema com o código. Acertando a ligação, funcionou sem problema.

        1. Bom dia,

          Vamos revisar essa ligação e testar, já que esse post foi feito à um bom tempo.

          Abraço e obrigado!

          Adilson – Equipe MakerHero

  96. Pessoa queria uma ajuda tenho que fazer um Motor de passo unipoar – configuração Half Step – sentido horário, tudo isso programando pelo Arduino 1.0.6 e simulando no Simulide , por favor queria toda a programação.

  97. Bom dia,

    A sequência correta é : Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

    A sequência de vocês não estava permitindo o motor girar no sentido anti-horário. Trocando a sequência irá corrigir o problema. =)

    Abraço!

  98. Olá,
    Como faço para adicionar nessa Programação um potenciometro para apenas ligar e desligar o motor.
    Obrigada desde já.

    1. Boa tarde Luana,

      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

      Adilson – Equipe MakerHero

      1. Para declarar o potenciômetro usando essa biblioteca eu sigo o mesmo esquema que na biblioteca ?
        Eu preciso ter o potenciômetro no meu esquema por mais que a programação faça tudo sozinho.

      2. Como faço pra usando essa biblioteca,meu motor gire em sequência 45° até fechar em 360°.
        E depois gire 360° direto.
        Só consigo com que ele gire 45° uma vez depois 360° 3 vezes

  99. amigo, eu gostaria de saber se posso ligar 3 motores desses no arduino, e se eu posso montar uma mine CNC só pra testes com esses motores e um arduino UNO.

    1. Bom dia Jhonatan,

      Teoricamente sim, mas talvez fique um pouco “apertado” no Arduino Uno, principalmente se você precisar colocar mais algum sensor, botôes, etc.

      Abraço

      Adilson – Equipe MakerHero

  100. meu kit chegou a menos de 24 horas, peguei o motor de passo para testar, com essa programação e fazendo tudo exatamente igual, mas o motor só executa a ultima volta completa, o resto ele só treme e não reage, quero uma ajuda nisso, defeito ou não? entrem em contato por favor! [email protected] muito obrigado, kit excelente

    1. Tive o mesmo problema no início e foi resolvido diminuindo a velocidade do stepper. Com o stepsPerRevolution = 500, acima de 40 o motor começa a dar algumas “travadas” e a partir de 45 ele já não gira. stepsPerRevolution e stepSpeed são inversamente proporcionais, mas ainda não entendi a exata relação entre eles. Espero ter ajudado. Abraço

      1. Obrigado Raphael !

        Abraço

        Adilson – Equipe MakerHero

  101. Boa tarde. Gostaria de saber se é possível, como em um servo motor, criar um ponto no motor de passo para que ele se inicialize sempre em uma determinada posição sem a necessidade de sensor de posição.
    Agradeço desde já.

    1. Boa tarde Carlos,

      O motor de passo funciona de forma diferente do servo. Quando você liga o motor de passo, ele assume a posição atual como “zero”. Você até consegue movimentar o motor de passo determinando o angulo, mas para setar a posição inicial seria indicado um sensor de posição.

      Abraço.

      Adilson – equipe MakerHero

    2. Olá Carlos…. Estou com o mesmo problema.
      Conseguiste resolver?

  102. Colega, estou fazendo um projetinho com motor de passo e quando ligo o sistema preciso iniciar ele sempre na mesma posição (mesmo ângulo), tu sabe como faço isso por software? uso a mesma eletronica que vc usou.

  103. Ola,
    sou iniciante no mundo do arduino, comecei a estudar linguagem C e C ++, comprei o UNO e vários sensores, tenho interesse em fazer um alimentador automático para os cachorros da minha esposa, como recomendado devemos alimentá-los duas vezes ao dia, a tarde e a noite, gostaria que o motor girasse 10º por vez e em determinado horário. Desde já agradeço.

    1. Amigo, vc conseguiu fazer esse projeto, eu estou iniciando agora e estou montando um projeto similar, comprei o módulo de relógio e um motor de passo como dessa matéria, ainda não chegaram para eu testar mas estou com dúvidas de como fazer o motor funcionar em determinados horários na programação, se já tiver realizado e puder compartilhar o código q utilizou eu agradeço.

  104. Preciso de ajuda
    Gostaria de comandar o MOTOR DE PASSO 5V com RFid RC522, que o codigo de acesso do Rfid gire no sentido horario e delay 3000 gire sentido anti horario ,tem como fazer isso? esse meu codigo esta errado?

    #include
    #include
    #include
    //Define os parametros de ligacao do motor de passo
    CustomStepper stepper(4,5,6,7);

    #define SS_PIN 10
    #define RST_PIN 9
    // Definicoes pino modulo RC522
    MFRC522 mfrc522(SS_PIN, RST_PIN);
    // Leds indicadores acesso liberado ou negado
    int led_liberado = 2;
    int led_negado = 3;

    char st[20];

    void setup()
    {
    pinMode(led_liberado, OUTPUT);
    pinMode(led_negado, OUTPUT);
    Serial.begin(9600); // Inicia a serial
    SPI.begin(); // Inicia SPI bus
    mfrc522.PCD_Init(); // Inicia MFRC522
    Serial.println(“Aproxime o seu cartao do leitor…”);
    Serial.println();

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

    void loop()
    {
    // Look for new cards
    if ( ! mfrc522.PICC_IsNewCardPresent())
    {
    return;
    }
    // Select one of the cards
    if ( ! mfrc522.PICC_ReadCardSerial())
    {
    return;
    }
    //Mostra UID na serial
    Serial.print(“UID da tag :”);
    String conteudo= “”;
    byte letra;
    for (byte i = 0; i < mfrc522.uid.size; i++)
    {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
    conteudo.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
    conteudo.concat(String(mfrc522.uid.uidByte[i], HEX));
    }
    Serial.println();
    Serial.print("Mensagem : ");
    conteudo.toUpperCase();

    if (conteudo.substring(1) == "41 C1 D9 0E")
    {
    Serial.println("Cartao1 – Acesso liberado !");
    Serial.println();
    delay(2000);
    //Define o sentido de rotacao (CW = Horario)
    stepper.setDirection(CW);
    stepper.rotate(90);
    delay(2000);
    stepper.setDirection(CCW);
    stepper.rotate(90);
    digitalWrite(led_liberado, LOW);
    }
    if (conteudo.substring(1) == "87 4B DC 8A")
    {
    Serial.println("Cartao2 – Acesso negado !!!");
    Serial.println();
    // Pisca o led vermelho
    for (int i= 1; i<5 ; i++)
    {
    digitalWrite(led_negado, HIGH);
    delay(200);
    digitalWrite(led_negado, LOW);
    delay(200);
    }
    }
    //Comando obrigatorio para funcionamento da biblioteca
    stepper.run();
    }

    1. Ta ai renato, agora para de vadiagem e vamos continuar a maquete.

      #include
      #include
      #include

      #define SS_PINO 53
      #define RST_PINO 5
      #define intervalo 1000

      /*Numero de passo por volta*/
      #define rotacaoCompleta 64

      long int ultimaLeitura = 0;
      /*Tempo em mili segundos*/

      /*Cria um objeto cartão do tipo MFRC522*/
      MFRC522 cartao(SS_PINO, RST_PINO);

      /*Valor do chaveiro*/
      long int RFID = 0;

      /*Valor que deve estar no RFID*/
      #define codigo 6541193

      /* Faz a inicialização da Biblioteca*/
      Stepper motor(rotacaoCompleta, 8,9,10,11);

      /*Função que liga o motor*/
      void ativaMotor(int codigoRFID, int CodigoSetado)
      {
      if(codigoRFID == CodigoSetado)
      {
      /*sentido anti-horario*/
      for (int i = 0; i < 64; i++)
      {
      motor.step(rotacaoCompleta);
      }
      /*sentido horario*/
      for (int i = 0; i = intervalo)
      {
      if (cartao.PICC_IsNewCardPresent())
      {
      if ( cartao.PICC_ReadCardSerial())
      {
      String conteudo = “”;
      /*Faz a leitura serial do cartão e grava dentro de conteudo*/
      for (byte i = 0; i < cartao.uid.size; i++)
      {
      conteudo.concat(String(cartao.uid.uidByte[i]));
      conteudo.concat(String(cartao.uid.uidByte[i], HEX));
      }
      /*Convertendo do tipo String para o tipo int*/
      RFID = conteudo.toInt();
      ativaMotor(RFID, codigo);
      }
      }
      ultimaLeitura = millis();
      }
      }

    2. Renato estou precisando de um código do mesmo jeito do que você quer montar, você ja conseguiu?
      se tiver conseguido tem como me passa o código…
      att Darlles Nunes

  105. como fazer a programação do arduino para ligar e desligar um motor de 12vc (motor bamba de agua ).

    1. Boa noite Phillip,

      Existem várias possibilidades. Você pode simplesmente ligar os botões no Arduino, e controlar as saídas, como também adicionar um módulo DS1307 (relógio), e ligar e desligar a bomba em horários específicos.

      Aqui no blog temos tutoriais para utilização desses componentes.

      Abraço.

      Adilson – Equipe MakerHero

  106. Olá estou fazendo um alimentador automático para cães e estou montando o projeto com um motor de passo + um RTC. O programa está girando o motor na hora programada, o problema é que ao concluir a volta 2 das luzes do stepper continuam ligadas. Daí queria saber se é possível desligar o stepper após as voltas programadas.

    Segue o código para entendimento.

    //Programa Alimentador de Cães Automático
    //Autor: Bruno Ananias

    #include
    #include
    #include “RTClib.h”

    const int stepsPerRevolution = 64;
    Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

    int hora;
    int minuto;
    int segundo;

    RTC_Millis rtc;

    void setup () {

    myStepper.setSpeed(200);

    Serial.begin(57600);
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.begin(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));

    }

    void loop () {
    DateTime now = rtc.now();

    hora = now.hour();
    minuto = now.minute();
    segundo = now.second();

    if(((hora == 07) && (minuto == 00) && (segundo == 00)) || ((hora == 12) && (minuto == 00) && (segundo == 00))){
    Serial.println(“Girando Motor!”);
    for (int i = 0; i < 32; i++){
    myStepper.step(64);
    }

    }

    Serial.print(now.day(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.year(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.println();
    delay(1000);
    }

    1. Boa tarde,

      Tente usar a biblioteca CustomStepper : http://playground.arduino.cc/Main/CustomStepper

      Adilson – Equipe MakerHero

  107. Não estou conseguindo rotacionar anti-horário.
    O programa aparenta não ler o sinal negativo. Já tentei multiplicar por -1, criar variável diferente, e nada. Será a verão da IDE? É a mais atual perante a data de hoje.
    O meu rotaciona com ‘const int passosPorVolta = 64;’.

  108. boa tarde , Felipe. amigo preciso de sua ajuda. estou com uma placa arduino mega 2560 + ramps 1.4 + lcd. já testei a placa do arduino do arduino sem a ramps e deu ok. já testei a ramps sem nada e deu ok. colocquei os drives e o motor de passo e o lcd e chamei no arduino o codigo que voce postou. não rodou. porque me diz.
    os meus motores são de 06 fios, já indiquei e separei o fio comun, no senai o professor savio disse que nos fios comuns deveria entrar energia + (12 volts coloquei) e nada me diga o que pode ser.

  109. Olá MakerHero, eu tenho um motor de passo 28BYJ-48, queria saber como eu poderia definir a velocidade de rotação dele para 1 RPM, preciso que 360º sejam executados em exatamente 60s (ou bem proximo disso) . To fazendo uma base pra fotos de longa exposição do céu e quero controlar com meu arduino :DD

    Caso nao de pra fazer com esse driver dele, tenho um motor shield L293D 😀

  110. Ola bom dia,

    Preciso inverter o sentido de rotação do meu motor e não faço a mínima ideia de como fazer. Estou fazendo um projeto que usa um projeto de outra pessoa que já esta pronto, e que faz o motor girar em um sentido, e assim uma mesa é movida com o movimento do motor.

    Porém, preciso inverter o sentido de rotação do motor para que a mesa volte a posição original.
    Já tentei mexer no programa do arduino, e nao funcionou. Gostaria de saber se tem como me ajudar, pois preciso andar com meu projeto e não estou conseguindo resolver esse problema “básico”.

    Thainá

    1. Boa tarde Thaina,

      O programa deste post inverte o sentido de rotação do motor, você só precisa fazer as adaptações para o seu projeto.

      Abraço.

      Adilson – Equipe MakerHero

  111. Olá Pessoal! Muito Legal Esse Site e Muito Interessante o Conteúdo e Interação Com Os Usuários.

    Sou Novo No Assunto e Não Conheço Muito Sobre Arduíno. Sou Fotógrafo e Gostaria De Criar Um Prato Giratório Comandado Eletricamente Para Fotografar Objetos 360 Graus, Ou Seja, Girar Um Prato Com o Objeto e Realizar Disparos Da Câmera a Cada 10 Gruas. É Possível Criar Um Prato Giratório Com Essas Caracteristicas Utilizando Um Arduíno Para Controlar o Motor?

    1. Bom dia Juliano,

      Obrigado. Com o motor adequado e alguns sensores, é possível sim.

      Abraço !

      Adilson – Equipe MakerHero

  112. Muito legal seu Post… Contudo tenho uma dúvida:
    É possível ligar vários (10 a 20) motores de passo em uma única placa (fazendo o mesmo movimento sempre para um lado) onde estes motores dariam uma ou duas voltas a cada 3 horas?
    Sou leigo no assunto e estou me interessando bastante pelo assunto.
    Obrigado e parabéns pelo Blog.

    1. Oi Fábio,

      Nunca vi nenhuma ligação desse tipo, mas talvez para o seu caso seja mais indicado trabalhar com servo motores, utilizando uma porta do Arduino para cada motor e alimentando cada um com uma fonte externa. É só uma hipótese, já que eu não tenho detalhes do seu projeto. 🙂

      Abraço !

      Adilson – Equipe MakerHero

  113. Olá,
    Tenho uma duvida… Esse programa consegue controlar o motor de passo com movimentos discretos ( pequenos ângulo, ex: 1º, 2º) ?
    se sim, isso é possível por causa do conjunto código fonte + drive? ou somente o código fonte?

    1. Bom dia João

      Tente usar a biblioteca CustomStepper :

      http://playground.arduino.cc/Main/CustomStepper

      Abraço.

      Adilson – Equipe MakerHero

  114. Boa Dia
    estou a desenvolver um projeto em que utilizo um motor de passo, mas nao consigo por o motor a dar uma volta completa.
    podem me ajudar?

    #include

    const int stepsPerRevolution = 360; // define os passos por volta

    // Definindo os pinos de comunicação
    // (8 e 9 de um lado, 10 e 11 do outro)
    Stepper myStepper(stepsPerRevolution, 8,9,10,11);

    void setup() {
    //definindo velocidade (80 RPM):
    myStepper.setSpeed(80);
    // Inicializa a serial port
    Serial.begin(9600);
    }
    //inicia o loop de repetição girando vamos definir para girar em sentido horário e anti horário
    void loop() {
    // rotação em sentido horario clockwise
    Serial.println(“clockwise”);
    myStepper.step(stepsPerRevolution);
    delay(150);

    // anti horário counterclockwise
    Serial.println(“counterclockwise”);
    myStepper.step(-stepsPerRevolution);
    delay(150);

    }

    1. Bom dia Tiago,

      Veja se o valor dessa linha corresponde ao número de passos do motor que você possui :

      const int stepsPerRevolution = 360; // define os passos por volta

      Grato.

      Adilson – Equipe MakerHero

      1. Olá Tiago, me tira uma dúvida? Olhei em alguns sites e vi os valores de 500 e de 200 para “const int stepsPerRevolution”, mas isso não deveria ser a quantidade de passos por uma volta? Tipo, o motor possui 64 passos segundo o datasheet, e mesmo com a redução que é de 1/64, não dá esses valores… Não entendo o motivo deles estarem sendo usados…

  115. Amigo do MakerHero. Bem estou começando a utilizar o Arduíno, e não tenho muita pratica, estou desenvolvendo o projeto de uma cancela com motor de passo, com base em um código encontrado em outro site, eu montei uma logica, com dois botões, uma gira 90° e o outro volta 90°, mas não estou conseguindo intertravar os dois botões, para quando um for acionado, o outro só acione quando o motor terminar o ciclo de 90°. Se poder me ajudar agradeço desde já. Abaixo segue o código.
    #include
    int pinobotao_ah = 3;
    int pinobotao_h = 2;
    int passos = 511;
    int leitura = 0;
    int leitura2 = 0;
    const int stepsPerRevolution = 500;
    Stepper myStepper(stepsPerRevolution, 8,9,10,11);
    void setup()
    {
    pinMode(pinobotao_h, INPUT);
    pinMode(pinobotao_ah, INPUT);
    myStepper.setSpeed(60);
    }
    void loop()
    {
    leitura = digitalRead(pinobotao_h);
    if (leitura != 0)
    {
    myStepper.step(-passos);
    }
    leitura2 = digitalRead(pinobotao_ah);
    if(leitura2 != 0)
    {
    myStepper.step(passos);
    }
    }

    1. Boa noite Guilherme,

      Tente acrescentar mais alguma condição no IF para que o segundo botão seja ignorado.

      Abraço.

      Adilson – Equipe MakerHero

      1. Bom dia Adilson.
        Vou te incomodar outra vez, estou tentando fazer com que assim que o botão seja acionado o motor só gire 90°, é pare independente se o botão continue pressionado, mas não estou conseguindo o motor fica girando direto. O que eu posso fazer? Muito obrigado, pela ajuda.

        1. Boa tarde Guilherme,

          Crie um “loop” que não faz nada (sem comandos) enquanto o botão estiver sendo pressionado, assim o motor vai continuar se movimentando até os 90 graus que você precisa.

          Abraço.

          Adilson – Equipe MakerHero

        2. Crie um flag e sete ele apenas quando o botão for acionado, faça uma lógica que toda vez que este flag mudar de valor seu motor se mova 90º…

  116. Boa Noite,
    Preciso conversar com você sobre uma programação bem grande com 7 motores de passo, utilizando um
    arduino ATMEGA2560 que comprei de vocês.
    Poderia me auxiliar com a programação?
    Você tem email para conversarmos e combinar valores?
    Obrigado.

  117. Boa tarde a todos,
    Gostaria de saber se é possível controlar a rotação por ângulo com esse programa, ou seja, em vez dele gira por 0.5s ele gira por 30º, por exemplo.

    Desde já agradeço

    1. Boa noite Lili,

      Tente a biblioteca Customstepper. Ela tem a função de rotacionar apenas por determinados angulos.

      Abraço.

      Adilson – Equipe MakerHero

    2. A quantidade de passos que vc setou lá no código equivale a quantidade de passos necessários para uma volta completa do motor, não sei se é gambiarra ou não, mas divida este número por 360 e vc verá quantos passos equivale a 1º

  118. Ola
    Recentemente comprei 3 motor 28BYJ-48 com o ULN2003 para um projeto, mas ele não roda anti-horário a não se se eu mudar a saída dos pinos do motor
    Ex:
    Stepper myStepper(passosPorVolta, 8, 9, 10, 11);
    código como esta o tutorial

    No meu caso teria que ser assim
    Stepper myStepper(passosPorVolta, 8, 9, 10, 11); //Horário

    Stepper myStepper(passosPorVolta, 8, 11, 10, 9); // Anti-Horario
    E os passo não volta ao ponto de origem
    Poderia me ajudar ?
    Grato

    1. Boa noite Jorge,

      Por favor verifique se não é algum outro problema, pois com o código desse post funcionou normalmente.

      Grato.

      Adilson – Equipe MakerHero

    2. Estou com o mesmo problema. Comprei 3 motores + controlador e nenhum rotaciona no sentido anti-horário.

      1. Consegui arrumar da seguinte forma:

        IN 1 – Porta 8
        IN 2 – Porta 11
        IN 3 – Porta 9
        IN 4 – Porta 12

        Assim, o motor consegue tirar corretamente para os dois lados.

  119. Bom Dia, estou com um grande problema, preciso ligar o motor de passo, porém não no arduino. Funciona do mesmo jeito ? Montamos um circuito quase igual só que com o CI ULN2803, também temos o 2003, o que fazer ? rs tem foto do circuito para nos ajudar? Precisamos disso pra ontem… pois temos uma apresentação quinta, e sem o motor funcionar, não tem projeto :/
    Obrigado

  120. Bom Dia, estou com um grande problema, preciso ligar o motor de passo, porém não no arduino. Funciona do mesmo jeito ? Montamos um circuito quase igual só que com o CI ULN2803, também temos o 2003, o que fazer ? rs tem foto do circuito para nos ajudar? Precisamos disso pra ontem… pois temos uma apresentação quinta, e sem o motor funcionar, não tem projeto :/
    Obrigado

  121. Caro amigos que possam me ajudar, estou querendo fazer um projeto simples, tenho 10 leds em sequencia e gostaria de acender um led atraves de um botao por bluetooth e em seguida pressionar novamente o botão e passar para outro led, lembrando que tem que apagando o primeiro e acendendo o próximo.

    1. Xará, me desculpe pelo duro golpe que irei lhe aplicar com as próximas palavras: já experimentou raciocinar?

      É tão ofensivo para quem lê quando alguém pede para dizer como fazer tudo sem precisar raciocinar, quanto te fazer essa pergunta assim, dessa maneira direta.

      A maior parte da diversão da vida, é aprender.

  122. Boa tarde, gostaria de saber se voce pode me ajudar no meu tcc com a parte do circuito eletrico.
    desde ja agradeço

    1. Boa tarde Matheus,

      Podemos ajudar você com problemas pontuais, como dúvida em alguma parte do código que apresentamos no blog, ou na ligação dos componentes.

      Abraço.

      Adilson – Equipe MakerHero

  123. Gostaria de saber como faço para controlar mais de um motor de passo utilizando botões com o arduino

    1. Boa noite,

      Você pode utilizar o programa do post, criando comandos para os outros motores. ONde você tem essa linha :

      Stepper myStepper(passosPorVolta, 8, 9, 10, 11);

      você pode criar mais uma para o segundo motor :

      Stepper myStepper2(passosPorVolta, 2, 3, 4, 5);

      E utilizar essa mesma nomenclatura (myStepper2) para os outros comandos :

      myStepper2.setSpeed(60);

      E assim por diante.

      Abraço !

      Adilson – Equipe MakerHero

  124. Bom dia amigos,

    Tenho um projeto mas estou remando por falta de conhecimento, alguém poderia dar uma ajuda?
    Estou fazendo um equipamento para enrolar linha em um carretel, com debanador, o que preciso:
    Curso do motor de passo é de 25cm em loop;
    Parar sempre no mesmo ponto;
    Ligar um motor 220v quando iniciar;
    Ligar dois switches: um para parada de emergencia e o outro para finalizar o processo onde cada um liga uma luz diferente, 220v ou pode ser Led;
    Botão de pulso para iniciar o processo.
    Vi que tem vários projetos, mas ao tentar juntar todos no mesmo sistema eu me perco!
    Vi o projeto dos switches, do motor de passo e da lâmpada, porêm precisa de mais duas portas para controlar os 25cm que eu não sei como ligar!
    Adquiri de vocês a placa Arduino Leonardo e o drive com motor acima (tenho tbm motores de impressoras Hp se necessário), tenho em mãos contator, switches, botão de pulso, resistores, transistores, relé, placa de CI, acredito ter tudo para montar o sistema, só me falta o conhecimento de programação e ligação na placa de CI

  125. Olá, gostaria de saber como deve ser o código de programação para que quando eu aperte um botão o arduino inicie a rotação, quando aperto novamente o mesmo botão ele pare, quando aperto novamente o mesmo botão ele inicie a rotação em outro sentido, quando aperto o botão novamente ele pare, quando aperto novamente ele volte para o outro sentido novamente e assim sucessivamente. Sei que posso estar sendo incômodo solicitando esse tipo de coisa, mas eu tentei programar e não consegui então procurei algo parecido na internet mas não encontrei nada. Desde já agradeço.

    1. Olá,
      Você pode colocar para ler o botão com o comando “digitalRead” e depois uma sequencia de comandos “if()” de acordo com suas condições e brincar com o comando “myStepper.step()”.
      Abraço!

      1. Fiz como você me aconselhou, Filipe, entretanto eu não consigo criar mais condições de valores para serem lidos além de 1 e 0 para o “digitalRead”. E eu preciso que ele entenda que quando eu apertar o botão pela segunda vez o comando “digitalRead” leia 2 e ele inicie a rotação em sentido anti-horário e quando aperte pela terceira vez o comando “digitalRead” leia 2 e ele pare mais uma vez e que depois da terceira, apertando uma quarta vez ele volte ao valor 0 para o número de vezes que o botão foi pressionado, para que ele volte a fazer tudo novamente. Olha o que eu fiz (neste caso quando eu ligo o motor ele já inicia no sentido horário):

        #define pin1 8
        #define pin2 10
        #define pin3 9
        #define pin4 11

        #define delaytime 8

        int Botao = 2;
        int EstadoBotao = 0;
        void setup() {

        pinMode(pin1, OUTPUT);
        pinMode(pin2, OUTPUT);
        pinMode(pin3, OUTPUT);
        pinMode(pin4, OUTPUT);
        pinMode(Botao, INPUT);
        }

        void loop(){
        EstadoBotao = digitalRead(Botao);
        if (EstadoBotao == 0){
        forward();
        }
        if (EstadoBotao == 1){
        step_OFF();

        1. Boa tarde George,

          Creio que o que você precisa é criar um contador de 1 a 4 (ou 0 a 3, fica à seu critério), para que a cada vez que o botão seja pressionado ele tome uma ação, ficaria mais ou menos assim, usando o comando switch…case :

          EstadoBotao = digitalRead(botao);
          contador = contador+1;
          switch(contador)
          {
          case 1:
          //Move motor para frente
          break;
          case 2:
          //Para o motor
          break;
          case 3:
          //Move motor sentido contrario
          break;
          case 4;
          //para motor
          contador = 0;
          break;
          }

          Abraço

          Adilson – Equipe MakerHero

          1. Filipe, muito obrigado pela sua paciência e sua ajuda, seus conselhos foram fundamentais para o meu projeto, o qual finalmente concluí. No fim das contas a programação ficou da seguinte forma:

            #define pin1 8 //Pinos do Arduinos conectados ao motor.
            #define pin2 10
            #define pin3 9
            #define pin4 11

            #define delaytime 8

            const short int ButtonPin = 2; //Botao conectado ao pino 2.
            int CurrentState; //Armazena o estado atual do botao.
            int LastState = 0; //Armazena o ultimo estado do botao.
            int short count = 0; //Armazena o numero de vezes que o botao foi pressionado.
            void setup()
            {
            //Programa os pinos como saidas.
            pinMode(pin1, OUTPUT);
            pinMode(pin2, OUTPUT);
            pinMode(pin3, OUTPUT);
            pinMode(pin4, OUTPUT);
            Serial.begin(9600); //Inicia a comunicacao com o computador.
            pinMode(ButtonPin,INPUT); //Programa o botao como entrada.
            }
            void loop()
            {
            Serial.println(count); //Informa quantas vezes o botao foi pressionado.
            CurrentState = digitalRead(ButtonPin); //Le o estado do botao.
            if(CurrentState != LastState)
            {
            if(CurrentState == 1) //Se o botao e pressionado
            //Aumenta em 1 a contagem
            {
            count++;
            }
            }
            LastState = digitalRead(ButtonPin);
            if (count >= 4) //Zera a contagem depois de pressionar o botao 4 vezes.
            count = 0;

            if (count == 0)
            forward(); //Motor inicia movimento no sentido horario

            if (count == 1)
            step_OFF(); //Motor para

            if (count == 2)
            backward(); //Motor inicia movimento no sentido anti horario

            if (count == 3)
            step_OFF(); //Motor para
            }

            Em outra aba ficaram os seguintes comandos:

            void Step_A(){
            digitalWrite(pin1, HIGH);//turn on coil 1
            digitalWrite(pin2, LOW);
            digitalWrite(pin3, LOW);
            digitalWrite(pin4, LOW);
            }
            void Step_B(){
            digitalWrite(pin1, LOW);
            digitalWrite(pin2, HIGH);//turn on coil 2
            digitalWrite(pin3, LOW);
            digitalWrite(pin4, LOW);
            }
            void Step_C(){
            digitalWrite(pin1, LOW);
            digitalWrite(pin2, LOW);
            digitalWrite(pin3, HIGH); //turn on coil 3
            digitalWrite(pin4, LOW);
            }
            void Step_D(){
            digitalWrite(pin1, LOW);
            digitalWrite(pin2, LOW);
            digitalWrite(pin3, LOW);
            digitalWrite(pin4, HIGH); //turn on coil 4
            }
            void step_OFF(){
            digitalWrite(pin1, LOW); //power all coils down
            digitalWrite(pin2, LOW);
            digitalWrite(pin3, LOW);
            digitalWrite(pin4, LOW);
            }

            //these functions run the above configurations in forward and reverse order
            //the direction of a stepper motor depends on the order in which the coils are turned on.
            void forward(){//one tooth forward
            Step_A();
            delay(delaytime);
            Step_B();
            delay(delaytime);
            Step_C();
            delay(delaytime);
            Step_D();
            delay(delaytime);
            }

            void backward(){//one tooth backward
            Step_D();
            delay(delaytime);
            Step_C();
            delay(delaytime);
            Step_B();
            delay(delaytime);
            Step_A();
            delay(delaytime);
            }

          2. Gostaria de agradecer ao Adílson também, quase me esquecia. Hehe

          3. Boa noite George,

            🙂 Valeu, estamos à disposição.

            Abraços !

            Adilson – Equipe MakerHero

  126. Boa noite, gostaria de esclarecer algo antes de comprar o motor,. Vou usa um outro microcontrolador com corrente de ate 20mA, é possivel?? Teria alguma tabela relacionando os valores nas entradas do CI com o funcionamento do motor? Pois vou programar em Assembly. Muito obrigado pela ajuda.

    1. Boa tarde Marcos,

      Talvez você precise de algum circuito auxiliar. O que eu tenho com relação ao ULN2003 é o datasheet, nesse link :

      http://www.ti.com/lit/ds/symlink/uln2003a.pdf

      Abraço !

      Adilson – Equipe MakerHero

  127. O motor de passo só funciona se tiver o Drive Uln2003?

    1. Olá Reynan. Você pode usar outro controlador para o motor de passo, necessariamente não precisa ser o Uln2003.
      Abraço!

  128. Olá Matheus. O post do modo que está funcionou normalmente com as configurações colocadas. Já com esta alteração que sugeriu não cheguei a testar. Confira um post semelhante do blog parceiro nosso e veja se consegues resolver. (http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html)
    Fico no aguardo do seu feedback.
    Abraço!

  129. Olá Matheus. O post do modo que está funcionou normalmente com as configurações colocadas. Já com esta alteração que sugeriu não cheguei a testar. Confira um post semelhante do blog parceiro nosso e veja se consegues resolver. (http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html)
    Fico no aguardo do seu feedback.
    Abraço!

  130. kara, tenho fonte de 12volts+ arduino uno+ uln 2003+ cabos…porém não funcionou nada. Liguei tensão positiva (fonte 12volts) no pino 9 do uln 2003 e no pino 8 negativo (fonte12volts) na nas saidas do uln 2003 liguei o motor e nada funcionou….da uma força na ligação do motor e arduino…

  131. o código funcionou mas eu preciso que esse motor so gire 90º e parre de rodar como eu faço vocês podem me ajudar
    obrigado

    1. Olá Roni. Tentou alterar a quantidade de passos que o motor dá? Lembrando que Ângulo do Passo: 5,625° e Taxa de velocidade de variação: 1/64.
      Abraço!

  132. o código funcionou mas eu preciso que esse motor so gire 90º e parre de rodar como eu faço vocês podem me ajudar
    obrigado

  133. nao estou conseguindo fazer o motor girar, toda vez que eu ligo o modulo uln2003a na alimentação de 5V ele sofre uma queda brusca,que até o LED indicador da fonte de alimentação fica fraco.gostaria de saber uma solução para isso

    1. Olá Lucas, peço que confira as ligações que você fez pois este post foi testado várias vezes e não acontecia isto. Caso o problema persista entre em contato por e-mail. Abraço!

  134. nao estou conseguindo fazer o motor girar, toda vez que eu ligo o modulo uln2003a na alimentação de 5V ele sofre uma queda brusca,que até o LED indicador da fonte de alimentação fica fraco.gostaria de saber uma solução para isso

    1. Olá Lucas, peço que confira as ligações que você fez pois este post foi testado várias vezes e não acontecia isto. Caso o problema persista entre em contato por e-mail. Abraço!

  135. ola amigo fucinou bem?gostaria controlar esse motor com dois botoes?para gira o motor a direita e depois a equerda?onde posso encontra esse circuito mas o codigo?se poder me ajudar agradeço?tenho placa do motor.;arduino e [email protected]

    1. Olá Marcone. Sim está funcionando normalmente mas neste caso você teria que estudar como fazer esta alteração, infelizmente não temos recursos para disponibilizar códigos para todas as dúvidas.
      Abraço e boa sorte!

  136. ola amigo fucinou bem?gostaria controlar esse motor com dois botoes?para gira o motor a direita e depois a equerda?onde posso encontra esse circuito mas o codigo?se poder me ajudar agradeço?tenho placa do motor.;arduino e [email protected]

    1. Olá Marcone. Sim está funcionando normalmente mas neste caso você teria que estudar como fazer esta alteração, infelizmente não temos recursos para disponibilizar códigos para todas as dúvidas.
      Abraço e boa sorte!

  137. o que esse programa fara o meu motor fazer?

  138. o que esse programa fara o meu motor fazer?

  139. Olá, como vão. Também tive problemas em sentido anti-horário usando o Stepper do Arduino (horário tudo bem). Acho que isto acontece porque ele faz uma energização com as bobinas opostas, que nem sempre impulsiona o motorzinho para frente. A solução, até então que tenho, é fazer o programa controlar full-step (1/2/3/4/1/2/…), half-step (1-2/2-3/3-4/4-1/1-2…) ou até fouth-step (1/1-2/2/2-3/3/3-4/4/1-4/1/1-2…) invertendo a ordem para o anti-horário (aí funciona legalzinho!!!)

    A speed maxima que tenho também é 7. Qualquer valor acima disso, o motor ‘estola’; usando o código direto, é conveniente um delay de 5msec…

    Outra coisa que percebi (e testei) é que usando a biblioteca do arduino (stepper), tenho uma necessidade de 2040 passos por volta (testei com 2039, 2041, 2048… mas é 2040 mesmo!)… Mesmo considerando 1/4 step, é muito mais que os 1/64 de volta da datasheet.

    Isso me leva a crer que no 4-step, temos 360/ (5.625º / 64), que nos dá… 4096 steps por revolução… Estranho, né!? Estou divagando? porque se são 360º de rotação em 1/4-step e estou usando 1/2-step, temos 2048 – valor muito próximo ao que obtive acima. Por um lado acho bom, é extremamente preciso; porém alguns projetos podem ter necessidade de serem revistos.

    Comentários?

    1. Obrigado pelo o teu comentário Marco!
      Testamos o código do jeito que está e funcionou, mas ao alterar a velocidade de rotação o movimento anti-horário não ocorreu. Vamos deixar então o seu comentário para fomentar a discussão. Abraço!

  140. Olá, como vão. Também tive problemas em sentido anti-horário usando o Stepper do Arduino (horário tudo bem). Acho que isto acontece porque ele faz uma energização com as bobinas opostas, que nem sempre impulsiona o motorzinho para frente. A solução, até então que tenho, é fazer o programa controlar full-step (1/2/3/4/1/2/…), half-step (1-2/2-3/3-4/4-1/1-2…) ou até fouth-step (1/1-2/2/2-3/3/3-4/4/1-4/1/1-2…) invertendo a ordem para o anti-horário (aí funciona legalzinho!!!)

    A speed maxima que tenho também é 7. Qualquer valor acima disso, o motor ‘estola’; usando o código direto, é conveniente um delay de 5msec…

    Outra coisa que percebi (e testei) é que usando a biblioteca do arduino (stepper), tenho uma necessidade de 2040 passos por volta (testei com 2039, 2041, 2048… mas é 2040 mesmo!)… Mesmo considerando 1/4 step, é muito mais que os 1/64 de volta da datasheet.

    Isso me leva a crer que no 4-step, temos 360/ (5.625º / 64), que nos dá… 4096 steps por revolução… Estranho, né!? Estou divagando? porque se são 360º de rotação em 1/4-step e estou usando 1/2-step, temos 2048 – valor muito próximo ao que obtive acima. Por um lado acho bom, é extremamente preciso; porém alguns projetos podem ter necessidade de serem revistos.

    Comentários?

    1. Obrigado pelo o teu comentário Marco!
      Testamos o código do jeito que está e funcionou, mas ao alterar a velocidade de rotação o movimento anti-horário não ocorreu. Vamos deixar então o seu comentário para fomentar a discussão. Abraço!

    2. Amigo, sua percepção me salvou, mas no caso 2048 são 360 graus, então use 1/4 de 2048 que vc terá 90 graus. Abraços

    3. Eu coloquei assim e está igual um relógio… preciso

      #include
      const int stepsPerRevolution = 512;
      //Inicializa a biblioteca utilizando as portas de 8 a 11 para
      //ligacao ao motor
      Stepper myStepper(stepsPerRevolution, 4,5,6,7);
      void setup()
      {
      //Determina a velocidade inicial do motor max = 20
      myStepper.setSpeed(22); // max 22
      }
      void loop()
      {
      //Gira o motor no sentido horario a 90 graus
      for (int i = 0; i<=3; i++)
      {
      // (2048 = 360 / 1536 = 270 / 1024 = 180 / 512 = 90)
      myStepper.step(2048);
      delay(2000);
      }
      }

      e no outro coloquei assim, testem pls… abraço.

      #include
      CustomStepper stepper(4, 5, 6, 7, (byte[]){8, B1000, B1100, B0100,
      B0110, B0010, B0011, B0001, B1001}, 4096, 12, CW);
      int rotate1 = 0;
      boolean rotatedeg = 0;
      boolean crotate = 0;
      int i;
      void setup()
      {
      stepper.setRPM(10); // max 15, é recomendado usar botoes para definir os estados da variavel setRPM
      stepper.setSPR(4096);
      rotate1=0; // para entrar no primeiro parametro ou segundo, substituir a gosto do teste
      // é recomendado usar botoes para definir os estados da variavel rotatel
      // 0 para o primeiro, 1 para executar o segundo, 2 para parar
      // nexta configuração ira entrar no primeiro if e parar
      }
      void loop()
      {
      if (stepper.isDone() && rotate1 == 0)
      {
      stepper.setDirection(CW);
      stepper.rotate(1);
      rotate1 = 2; // 0 para loop infinito, 1 para executar o segundo, 2 para parar
      }

      if (stepper.isDone() && rotate1 == 1)
      {
      stepper.setDirection(CCW);
      stepper.rotate(2);
      rotate1 = 2; // 0 para executar o primeiro, 1 para loop infinito, 2 para parar
      }
      stepper.run();
      }

  141. O código foi corrigido Lafaiete. Confira agora.
    Abraço!

  142. Resolvemos o problema inicial que tinha no código. Testamos e está aprovado.
    Abraço!

  143. Obrigado pela alternativa aabb. Iremos verificar o problema no código e corrigiremos.
    Abraço!

  144. olá galera tentei rodar este codigo mas deu erro nesta instrução clockwise, como não tenho muita experiencia não soube resolver alguem tem alguma ideia de como resolver??

    1. Olá Elaine. Tente rodar o código fornecido pelo “aabb” nos comentários abaixo. Se funcionar entre em contato e iremos substituir o código atual.
      Abraço!

  145. olá galera tentei rodar este codigo mas deu erro nesta instrução clockwise, como não tenho muita experiencia não soube resolver alguem tem alguma ideia de como resolver??

    1. Olá Elaine. Tente rodar o código fornecido pelo “aabb” nos comentários abaixo. Se funcionar entre em contato e iremos substituir o código atual.
      Abraço!

  146. Ótimo, foi o que me esclareceu nessa minha empreitada. Obrigado.

  147. Não funciona. A declaração do stepper tem que ser antes do setup, e essa modificação faz o código compilar, mas o código só esta fazendo rodar em um sentido.

    1. Olá Galdir. A declaração da biblioteca stepper.h está antes da void setup. Confere?

  148. olá.

    meu motor não gira no sentido anti-horário. será q está com defeito?

    1. Olá Manoel. Recomendamos revisar as ligações e seu código. Se puder testar com outro motor seria interessante, assim poderias tirar esta conclusão.
      Abraço e boa sorte!

    2. Manoel, tive o mesmo problema com esse código.

      Segue abaixo que vai funcionar!!

      Motor Connections
      The Arduino should be connected to the ULN2003 driver board as shown below:
      5V+ connect to +5V
      5V- connect to 0V (Ground)
      IN1: to Arduino digital input pin 8
      IN2: to Arduino digital input pin 9
      IN3: to Arduino digital input pin 10
      IN4: to Arduino digital input pin 11

      Driving the Motor
      You should drive the motor by enabling the pins in an 8-phase order as shown to the left (Clockwise movement):
      Drive IN4 only
      Drive IN4 and IN3
      Drive IN3 only
      Drive IN3 and IN2
      etc.
      For anti-clockwise motion, simply follow the sequence in reverse

      Example Code
      // This Arduino example demonstrates bidirectional operation of a
      // 28BYJ-48, using a ULN2003 interface board to drive the stepper.
      // The 28BYJ-48 motor is a 4-phase, 8-beat motor, geared down by
      // a factor of 68. One bipolar winding is on motor pins 1 & 3 and
      // the other on motor pins 2 & 4. The step angle is 5.625/64 and the
      // operating Frequency is 100pps. Current draw is 92mA.
      ////////////////////////////////////////////////

      //declare variables for the motor pins
      int motorPin1 = 8; // Blue – 28BYJ48 pin 1
      int motorPin2 = 9; // Pink – 28BYJ48 pin 2
      int motorPin3 = 10; // Yellow – 28BYJ48 pin 3
      int motorPin4 = 11; // Orange – 28BYJ48 pin 4
      // Red – 28BYJ48 pin 5 (VCC)

      int motorSpeed = 1200; //variable to set stepper speed
      int count = 0; // count of steps made
      int countsperrev = 512; // number of steps per full revolution
      int lookup[8] = {B01000, B01100, B00100, B00110, B00010, B00011, B00001, B01001};

      //////////////////////////////////////////////////////////////////////////////
      void setup() {
      //declare the motor pins as outputs
      pinMode(motorPin1, OUTPUT);
      pinMode(motorPin2, OUTPUT);
      pinMode(motorPin3, OUTPUT);
      pinMode(motorPin4, OUTPUT);
      Serial.begin(9600);
      }

      //////////////////////////////////////////////////////////////////////////////
      void loop(){
      if(count < countsperrev )
      clockwise();
      else if (count == countsperrev * 2)
      count = 0;
      else
      anticlockwise();
      count++;
      }

      //////////////////////////////////////////////////////////////////////////////
      //set pins to ULN2003 high in sequence from 1 to 4
      //delay "motorSpeed" between each pin setting (to determine speed)
      void anticlockwise()
      {
      for(int i = 0; i = 0; i–)
      {
      setOutput(i);
      delayMicroseconds(motorSpeed);
      }
      }

      void setOutput(int out)
      {
      digitalWrite(motorPin1, bitRead(lookup[out], 0));
      digitalWrite(motorPin2, bitRead(lookup[out], 1));
      digitalWrite(motorPin3, bitRead(lookup[out], 2));
      digitalWrite(motorPin4, bitRead(lookup[out], 3));
      }

      1. Obrigado pela alternativa aabb. Iremos verificar o problema no código e corrigiremos.
        Abraço!

      2. Resolvemos o problema inicial que tinha no código. Testamos e está aprovado.
        Abraço!

  149. o que h´ade errado nesse código que não funciona?

    1. Lafaiete não tivemos nenhum problema com este código amigo. Confira as ligações e conexões de seu projeto.
      Caso tenha encontrado algum erro no código por favor nos informe.
      Abraço!

    2. O código foi corrigido Lafaiete. Confira agora.
      Abraço!

Trackbacks and Pingbacks

  1. […] para motor de passo ou drivers de motor DC. Para saber mais, acesse os posts post do nosso blog “Controlando um Motor de Passo 5v com Arduino” e “Controlando motor de passo 5V 28BYJ-48 com Arduino Motor Shield […]

  2. […] no blog  já falamos sobre Como controlar um motor de passo 5v utilizando o driver de controle […]

  3. […] Controlando um Motor de Passo 5v com Arduino176 […]