Controlando um Motor de Passo 5v com Arduino 157

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 de um motor de passo

Um motor de passo é um dispositivo electromecânico que converte os impulsos elétricos em movimentos discretos mecânicos. O eixo de um motor de passo 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 motor de passo é 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 de passo. 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 motor de passo com Arduino:

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? Dê uma nota para este post nas estrelas abaixo. Confira em na loja virtual FILIPEFLOP este produto e mais outros componentes eletrônicos.

Posts Relacionados

157 Comentários

  1. 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!

  2. 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!

  3. 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?

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

  5. 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??

    Elaine Correa Acosta
    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!

  6. 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??

    Elaine Correa Acosta
    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!

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

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

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

  10. 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!

  11. 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!

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

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

  14. 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!

  15. 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!

  16. 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!

  17. 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!

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

  19. 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!

  20. 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…

  21. 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!

  22. 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!

  23. 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!

  24. 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 FILIPEFLOP

  25. 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 FILIPEFLOP

          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 FILIPEFLOP

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

  27. 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 FILIPEFLOP

      1. valeu FILIPEFLOP

  28. 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 FILIPEFLOP

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

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

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

  32. 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 FILIPEFLOP

    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.

  33. 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 FILIPEFLOP

    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º

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

  35. Amigo do filipeflop. 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 FILIPEFLOP

      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 FILIPEFLOP

        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º…

  36. 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 FILIPEFLOP

  37. 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 FILIPEFLOP

  38. 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 FILIPEFLOP

  39. 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 FILIPEFLOP

  40. 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 FILIPEFLOP

  41. Olá Filipeflop, 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 😀

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

    adalton pereira pedrosa
  43. 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;’.

  44. 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 FILIPEFLOP

  45. 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 FILIPEFLOP

  46. 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();
      }
      }

      1. Parabéns !!!

    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

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

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

  49. 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 FILIPEFLOP

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

    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 FILIPEFLOP

  50. 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 FILIPEFLOP

  51. 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 FILIPEFLOP

      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

  52. 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!

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

  54. 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 FILIPEFLOP

      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 FILIPEFLOP

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

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

  57. 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 FILIPEFLOP

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

    Filipe Soares da Silva
  59. 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

  60. 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!

  61. 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 🙂

  62. 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 ).

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

  64. 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!

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

  66. 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 FILIPEFLOP

    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.

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

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

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

  70. 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?

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

    obrigado desde já!

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

  73. 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.filipeflop.com/pd-3cc1a3-placa-wemos-d1-r2-wifi-esp8266.html?ct=&p=1&s=1 )

    O que acha?

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

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

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

    1. Também quero saber!!

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

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

  78. 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?

  79. 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!

  80. 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?

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

Trackbacks and Pingbacks

  1. […] no blog, neste post, já falamos sobre como controlar um motor de passo 5v utilizando o driver de controle […]

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *