01 novembro 2013

Ligando motor de passo 28BYJ-48 e ULN2003

Hoje o assunto é o Motor de Passo 28BYJ-48. Já fazia um tempo que eu queria escrever sobre motores de passo, que é um item quase que obrigatório na montagem de robôs. Outros usos incluem relógios, mostradores, painéis ou outros dispositivos que exijam algum tipo de deslocamento.

Atualizado : Veja também o artigo Controlando motor de passo 28BYJ-48 utilizando CustomStepper, onde mostro as funções da biblioteca CustomStepper para controle de ângulo e rotação do motor.

Vamos utilizar este conjunto Motor de passo 28BYJ-48 com driver ULN2003 ,que contém tudo o que você precisa para dar os primeiros passos (ops !) no assunto "motores".

Conjunto motor passo 28BYJ-48 e ULN2003

Um motor de passo funciona aplicando-se tensões específicas a cada uma das bobinas do motor, o que faz com que ele rode no sentido horário ou anti-horário, com maior ou menor velocidade, etc. No datasheet do motor você tem (quase) todas as informações sobre o componente, como por exemplo a disposição das bobinas :
Motor de passo 28BYJ-48 - Bobinas
Imagem : Modmypi

Esse experimento utiliza o módulo controlador com o chip ULN2003 (datasheet), um CI Driver de corrente que permite que, com o Arduino (que suporta corrente máxima de 50 mA por porta), sejam controlados motores que exijam correntes maiores, de até 500 mA. Este módulo aceita alimentação de 5 a 12 volts e possui leds indicadores que mostram o acionamento das bobinas.

Note que o ULN2003 somente auxilia no gerenciamento da tensão e corrente para as portas. Assim, toda a lógica de programação e sequência de bobinas que devem ser acionadas, é controlada pelo Arduino (ou outro microcontrolador que você esteja usando).

Para testes, montei um circuito utilizando dois push-buttons para controlar a rotação do motor. O botão da esquerda move o motor no sentido anti-horário, e o botão da direita, no sentido horário, sem alterar a velocidade:

Circuito motor de passo 28BYJ-48 e ULN2003 Arduino

E finalmente o programa, utilizando como base o exemplo da biblioteca Stepper com algumas alterações para tratamento das funções dos botões :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Programa : Controle de sentido de rotacao de motor de passo  
// Autor : Arduino e Cia  
   
#include <Stepper.h>  
int pinobotao_ah = 3; //Porta botao sentido anti-horario  
int pinobotao_h = 2;  //Porta botao sentido horario  
int passos = 50;      //Passos a cada acionamento do botao  
int leitura = 0;      //Armazena o valor lido do botao horario  
int leitura2 = 0;   //Armazena o valor lido do botao anti-horario  
   
const int stepsPerRevolution = 500;   
 
// Inicializa a biblioteca utilizando as portas de 8 a 11 para  
// ligacao ao motor  
Stepper myStepper(stepsPerRevolution, 8,9,10,11);        
   
void setup()   
{  
  pinMode(pinobotao_h, INPUT);  
  pinMode(pinobotao_ah, INPUT);  
  myStepper.setSpeed(60); //Determina a velocidade do motor  
}  
   
void loop()  
{  
  //Gira o motor no sentido horario  
  leitura = digitalRead(pinobotao_h);   
  if (leitura != 0)
  {
    myStepper.step(-passos);   
  }  

  //Gira o motor no sentido anti-horario  
  leitura2 = digitalRead(pinobotao_ah);  
  if (leitura2 != 0)  
  {  
    myStepper.step(passos);   
  }   
}  

Por último uma observação : este motor possui uma caixa de redução embutida (daí o eixo aparente do motor não estar no centro do mesmo). A falta de algumas especificações das engrenagens da redução geram uma certa confusão na definição dos parâmetros, principalmente no número de passos para uma volta completa, o que exige atenção se você for utilizar este motor em tarefas mais precisas.

Se você tem ou pretende adquirir um motor shield, veja no artigo Controlando motores de passo 28BYJ-48 com o Arduino Motor Shield L293D como controlar 2 motores de passo de uma maneira muito simples.


103 comentários:

  1. Qual seria valor dos resistores?

    ResponderExcluir
    Respostas
    1. Boa tarde, usei resistores de 330 ohms.

      Excluir
    2. Valeu .Obrigado pela visita. Abraço !

      Excluir
    3. Dá pra fazer uma mini CNC com esses motores?

      Excluir
    4. Boa noite,

      Dá sim, esse motor é mais forte do que parece.

      Abraço !

      Excluir
  2. Qual foi o material usado para o DRIVE ?

    ResponderExcluir
    Respostas
    1. Bom dia. Basicamente o driver é formado pelo CI ULN2003 e alguns resistores, leds para indicar funcionamento e os conectores. Comprei o meu kit pronto nesse link :

      http://www.filipeflop.com/pd-6b7fd-motor-de-passo-drive-uln2003.html?ct=&p=1&s=1

      Abraço !

      Excluir
  3. Bom dia!
    Funcionou perfeitamente! É exatamente o que eu preciso, porém, meu projeto exige que o motor pare quando chegar a um determinado ponto, independentemente do botão que o acionou continuar pressionado.
    Para melhor esclarecer, eu preciso que o motor de passo gire um potenciômetro, sentido horário (botão/pino 2) e sentido anti-horário (boato/pino 3) no total de 270º. Para não precisar usar chave fim de curso, preciso que o motor pare ao chegar no limite do giro do potenciômetro, mesmo que o botão/pino 2 esteja acionado, mas gire no sentido oposto caso o botão/pino 3 seja apertado. OK?
    OBS; Já fiz este experimento com servo motor e funcionou, mas preciso testar com o motor de passo para avaliar os resultados.

    Obrigado e aguardo,
    José Carlos

    ResponderExcluir
    Respostas
    1. Boa tarde José,

      Entendi o que você precisa, mas acho que fica mais fácil se você fizer com um servo motor, dá pra controlar melhor o ângulo.

      Com o motor de passo, até onde eu sei, vai precisar de alguma chave de fim de curso, porque você até consegue controlar o ângulo, mas, por exemplo, ao desligar e ligar o Arduino, o motor vai perder a referência, ou seja, ele não vai saber em quantos graus ele estava.

      Espero não ter complicado. rs. Se precisar de ajuda ou quiser explicar melhor o que precisa, pode deixar um comentário.

      Abraço !

      Excluir
    2. Olá, bom dia!

      Antes de mais nada, gostaria de acrescentar que sou iniciante neste campo. Tenho alguns componentes e quando dá, faço algumas experiências, mas coisas simples. Minha maior dificuldade é com o código. Demoro dias para escrever um simples código que, quem tem um pouco de conhecimento, escreveria em minutos. Mas vou tentando... (leia-se apanhando...)
      Quanto ao motor de passo, já espera por isso.

      O que estou fazendo, ou pelo menos parte dele, é controlar por controle RF dois motores DC ligados a uma Ponte H + Arduino. Como eu quero, inclusive, controlar a velocidade dos motores e o sinal RF recebido é digital, preciso que, em algum momento este sinal digital seja “convertido” em analógico para comandar a variação de velocidade.
      Eu consegui, através do código no Arduino, “transformar” o sinal digital recebido em analógico, ou seja, o Arduino simula o sinal analógico fazendo a conversão dos valores digitais, assim eu tenho basicamente um potenciômetro digital. Isso funciona muito bem com Leds para variar intensidade, mas como potenciômetro o resultado é uma variação inconstante e muito pouco sensível, já que não tenho a variação de 0 a 1023, mais sim de 0 a 255, sem falar que as medidas de 0 até +- 160 praticamente não são reconhecidas, não sei porque.
      Construí também um sistema em que a velocidade do motor é controlada por um potenciômetro (ideal) que por sua vez é movimentado por um servomotor que, por fim é comandado por sinais digitais recebidos por RF. Não gostei do resultado: 1º) meu servo tem um giro de 180º e o eixo do potenciômetro pode variar até +- 270º. Então, sem um sistema de engrenagens não consigo fazer a utilização plena do potenciômetro. 2º) não sei por que, mais meu servo (Sg90) sofre muita interferência quando funciona com os outros componentes do sistema. Vibra muito!
      Como tenho um motor de passo e portas disponíveis no Arduino, achei que poderia controlar o potenciômetro com o motor de passo. Ainda não descartei a ideia. Vou tentar montar o motor com micro chaves fim de curso. Vai ficar meio arcaico, ou melhor, mais arcaico ainda, mas acredito que o resultado será o melhor possível.

      Até mais,

      José Carlos

      Excluir
  4. O meu motor parece travado, fica zumbindo mas não gira, ele é duro para girar com os dedos, é normal?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      O seu motor é o mesmo do post ? Isso geralmente acontece quando o número de passos por volta está setado errado no programa. Tente alterar o valor desta linha :

      const int stepsPerRevolution = 500;

      Esse travamento acontece com o meu motor quando eu tento, por exemplo, setar um valor maior do que 500. Faça um teste e veja se funciona, por favor. Quanto a girar com os dedos, é normal sim, devido ao sistema de engrenagens do motor.

      Abraço !

      Excluir
  5. Olá, amigo,

    Adquiri dois kits iguais aos abordados nesta postagem (28BYJ-48 + ULN2003), que chegaram hoje. Irei testá-los hoje mesmo ou amanhã me baseando em seu esquema (um de cada vez), mas gostaria de saber se o Arduino sozinho conseguiria alimentar esses dois kits.

    Desde já o agradeço por compartilhar conosco suas experiências e seu conhecimento.

    Atenciosamente,
    Guilherme Caeiro de Mattos.

    ResponderExcluir
    Respostas
    1. Boa noite Guilherme,

      Pelos meus testes aqui, o Arduino consegue alimentar sim, até porque o ULN2003 dá conta da demanda de corrente dos motores, sem transferir isso pro Arduino.

      Grande abraço e obrigado !

      Excluir
    2. Boa tarde, amigo,

      Testei aqui e, assim como escreveu, consegui utilizar os dois motores simultaneamente (cada um com um ULN2003). Realmente o agradeço pelo retorno.
      Além disso, gostaria de colaborar e sugerir, para quem se interessar, o uso da biblioteca "CustomStepper", que se saiu melhor que a biblioteca padrão, Stepper, no controle dos motores.

      Novamente, muito obrigado por sua resposta e por compartilhar seu conhecimento e suas experiências.

      Atenciosamente,
      Guilherme Caeiro de Mattos.

      Excluir
    3. Boa noite Guilherme,

      Obrigado pelo retorno. Vou dar uma olhada nessa biblioteca CustomStepper e provavelmente farei um post sobre isso. É mais uma opção para quem precisa mexer com motores.

      Grande abraço !

      Excluir
    4. Boa tarde Guilherme !

      Saiu um post falando sobre a CustomStepper, conforme você sugeriu. Se puder, dê uma olhada :

      http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      Abraço e obrigado !

      Excluir
  6. Montei o circuito para testar. O motor de passo funcionou no sentido horário.Tive que reduzir o numero na linha (const int stepsPerRevolution = 500;).Não consegui fazer funcionar no sentido anti-horario. Poderia explicar melhor o funcionamento dos botões? Pelo que entendi eles estão provocando um curto entre os polos + e - e enviando o nivel 0 para as portas 2 e 3. Está correto? No código estas linhas (int leitura = 0; //Armazena o valor lido do botao horario);(int leitura2 = 0; //Armazena o valor lido do botao anti-horario) é que controlam o sentido de rotação?
    Obrigado por compartilhar este projeto.
    Abraços

    ResponderExcluir
    Respostas
    1. Boa tarde José,

      Isso mesmo, o programa detecta se os botões estão em nível "zero". Se algo for diferente disso, ele aciona o motor no sentido correspondente.

      As variáveis leitura e leitura2 armazenam o valor lido das portas analógicas 2 e 3, onde estão os botões. Depois, esses valores são testados (com o IF) para verificar se algum botão foi pressionado, e assim acionar o motor no sentido correspondente.

      Seu kit é o mesmo que estou usando ? Estranho não ter funcionado.

      Abraço !

      Excluir
    2. É que eu não tinha entendido o funcionamento dos botões e por isto não montei o circuito completo. Vou refazê-lo e ver se funciona OK. Obrigado

      José Henriques

      Excluir
    3. Sem problemas José ! Se precisar de ajuda em mais alguma coisa, é só perguntar. Abraço e obrigado !

      Excluir
    4. O meu apresentou o mesmo erro, só gira no sentido horario apertando qualquer botão. Será que o de alguém funcionou???

      Excluir
    5. Procure ver suas ligações o N2 não é ligado ao pino 9 e sim ao pino 10 do arduino, não é sequencial. Observe bem a ordem N1-8;N2-10;N3-9;N4-11

      Excluir
  7. ola... primeiramente agradeço o post, que realmente ajudou demais, mas no meu caso ele fica girando sem parar indepentente dos botoes, e aperto os botoes e nada acontece, o que posso ter feito de errado?

    ResponderExcluir
    Respostas
    1. Bom dia Wilson, isso ser parece ser algo na ligação das bobinas. Você está usando o mesmo tipo de motor mostrado no post ? Abraço.

      Excluir
  8. Amigo,
    Primeiramente parabéns pelos tutoriais, estão sendo de grande ajuda!

    Bom, estou querendo controlar esse motor de passo só que preciso que esse controle seja interativo, ou seja quero mudar o passo e o sentido no momento que eu achar necessário. Teria como você me dar uma luz de como fazer esse projeto.

    Atenciosamente,
    Arnaldo

    ResponderExcluir
    Respostas
    1. Bom dia Arnaldo, e obrigado por acompanhar o Arduino e Cia. :-)

      Eu tenho um outro artigo falando sobre a biblioteca CustomStepper, que tem mais funções do que a biblioteca stepper normalmente utilizada :

      http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      Por outro lado, dependendo da sua necessidade, é possível fazer algo com a biblioteca Stepper mesmo. Que tipo de controle você está pensando em usar ?

      Abraço !

      Excluir
  9. Valeu pelo post... Tem como fazer com push de 2 terminais?

    ResponderExcluir
    Respostas
    1. Boa tarde Mateus,

      Pode sim, na verdade eu montei com push de 2 terminais. Apenas no desenho eu usei um de 4 terminais, que era o que estava disponível no software, mas a ligação é a mesma, blz ?

      Abraço !

      Excluir
  10. Boa noite, posso usar um microcontrolador com corrente de ate 20mA em vez do arduino? Tem alguma tabela relacionando os valores nas entradas do CI com o funcionamento do motor? Obrigado pela atenção.

    ResponderExcluir
    Respostas
    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 !

      Excluir
  11. Boa tarde!

    Estou montando um circuito semelhante tendo no lugar dos botoes sensores de presença que devem para o motor ao detectar um objeto. Saberia me informar que alterações no script devem ser feitas para parar o motor?

    ResponderExcluir
    Respostas
    1. Boa noite João,

      Vai depender do tipo de sensor que você quer utilizar, mas eu utilizaria a biblioteca CustomStepper, que eu abordo nesse post :

      http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      A CustomStepper é mais completa, e tem comando inclusive para parar o motor, que é o que você precisa.

      Abraço !

      Excluir
  12. Então cara, nos meus testes, por conta dessa caixa de redução, são necessários 4096 passos para uma revolução, eu utilizei o uC AT89C51RE2 (análogo ao 8051 da intel) , a corrente que ele "pediu" da minha fonte externa beirou 240mA

    ResponderExcluir
    Respostas
    1. Boa noite Lucas,

      Sim, este é um ótimo motivo para não ligar o motor diretamente nas portas do Arduino. O ULN2003 aguenta 500mA por porta.

      Abraço !

      Excluir
  13. Amigo, estou com o mesmo problema de um post anterior. Fiz a ligação corretamente, mas quando carrego o programa ele só gira em um sentido com os 2 botões. Quando solto o botão os leds referente a posição do passo não apagam.

    ResponderExcluir
    Respostas
    1. Bom dia,

      O seu módulo é do mesmo modelo apresentado no post ?

      Abraço.

      Excluir
    2. Eu estava com esse mesmo problema e descobri o porquê: O esquema de ligação dos fios do módulo do motor para o Arduíno estava errado. É assim: pino 8 do Arduíno no IN1, pino 9 no IN3, pino 10 no IN2 e pino 11 no IN4. Foi só trocar que rodou certinho!

      Excluir
    3. Bom dia,

      Obrigado pelas informações, vou revisar o post para ver se não há nada de errado.

      Abraço !

      Excluir
    4. Sim, é o mesmo modelo. Inclusive abri a biblioteca do Stepper e alterei o valor da direção do motor e ela girou no outro sentido, mas não consigo girar em sentidos opostos. OBS: a ligação dos pinos no arduino está correta

      Excluir
  14. Olá amigo, boa tarde!!!

    Estou com um probleminha aqui, se puder me ajudar...

    Preciso de um código para o seguinte funcionamento: (porta automatizada)

    1 - Quando ligo o comando porta inicialmente fechada(motor de passo) e sensor(LOW), aguardando sensor(HIGH).

    2 - Quando sensor(HIGH) por 3 segundos, liga motor de passo(nº de passos desejado) e aguarda até que o sensor fique em(LOW) por 3 segundos para que retorne o mesmo numero de passos e feche a porta novamente.

    3 - Aguarda que o sensor fique em(HIGH) novamente....

    Este é o loop que eu preciso desesperadamente!!!!

    Obrigado!!!
    Nelson Junior

    ResponderExcluir
    Respostas
    1. Respondido por email. Abraços e obrigado !

      Excluir
  15. Amigo, eu também estou com este problema de só rodar no sentido horário independentemente do botão que for pressionado. Meu kit é este mesmo, 28byj-48+plaquinha ULN2003. A propósito, você é o FILIPEFLOP do Mercado Livre? Eu já comprei lá e recomendo.

    ResponderExcluir
    Respostas
    1. Bom dia,

      O FILIPEFLOP é uma loja parceira aqui do site, mas eu escrevo artigos para eles também. ;-)

      Agradeço a recomendação, e aguardamos sua visita em breve.

      Abraços !

      Excluir
  16. Tenho um kit arduino e o driver do motor de passo fiz um teste com os outros códigos funcionou certinho mas com os botões não funcionou o motor fica só parado aperto nos botões e não acontece nada o código e o mesmo do post da uma ajuda ae .

    ResponderExcluir
    Respostas
    1. Oi Ricardo,

      O seu kit de motor e driver é o mesmo do post ?

      Abraço !

      Excluir
  17. ola pessoal joinha... sera que vcs podem me ajudar com um motor de passo, estou tentando fazer a fonte dele para mover a quantidade de passos que colocar independente da velocidade que seria acionado por um botao..seria controlado por CI uln2003, quando acionar o botao ele gira a quantia de passos que elaborar e parar
    estou procurando varios conteudo para poder aprender mais so que nao acho nada de concreto

    ResponderExcluir
    Respostas
    1. Bom dia Marcos,

      Esse post trata exatamente disso, você aciona um dos botões, e o motor correspondente se move a quantidade de passos definida na variável dessa linha :

      int passos = 50;

      O botão que você se refere é comum ou um potenciômetro ?

      Abraço !

      Excluir
  18. Boa noite a todos
    Gostaria de saber se poderia substituir os dois botões de acionamento po um sensor ultrasônico.

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Sem problemas. Você pode definir uma faixa de detecção de distância para que o motor vire no sentido horário ou anti-horário.

      Tenho alguns artigos aqui no blog utilizando o sensor ultrasonico HC-SR04 que podem te ajudar.

      Abraço !

      Excluir
  19. Boa noite pessoal, comprei este mesmo kit e um Arduino Leonardo, mesclei um código a fim de obter o que preciso, sou novato e não entendo muito de programação, porém o kit deve executar a seguinte tarefa:
    Movimentar um carrinho por 25cm e depois voltar até desligar o sistema, porém coloquei um potenciômetro para controlar a velocidade em alguns casos. Pergunta, o cód abaixo foi compilado e antes de iniciar o teste gostaria de um parecer de vocês, se estou no caminho, ou tenho que refazer alguma linha, preciso de uma ajuda!


    1.
    2. #include
    3. int steps = 50;
    4. // Número de passos dados
    5. const int stepsPerRevolution = 500;
    6. // passos por volta 4096
    7. Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);
    8. // Primeiro argumento refere-se ao número de passos de rotação
    9. // Os próximos argumentos são os pinos conectados ao Arduino
    10. // a leitura prévia da entrada analógica
    11. int previous = 0;
    12. void setup()
    13. {
    14. myStepper.setSpeed(60);
    15. // velocidade do motor em 60;
    16. }
    17. void loop()
    18. {
    19. myStepper.step(40960);
    20. // sentido horário
    21. delay(3000);
    22. // Delay de 3,0seg
    23. myStepper.step(-40960);
    24. // sentido anti-horário
    25. delay(3000);
    26. // Delay de 3,0seg
    27. int val = analogRead(0);
    28. // obtém o valor do sensor
    29. myStepper.step(val - previous);
    30. // mover um número de passos igual à mudança na
    31. //leitura do sensor
    32. previous = val; // lembrar o valor anterior do sensor
    33. }

    ResponderExcluir
  20. como posso fazer para utilizar a maior força e maior velocidade neste motor

    ResponderExcluir
    Respostas
    1. Boa noite,

      A velocidade desse motor é uma coisa complicada, não dá pra aumentar muito. Quanto à força, por favor dê uma olhada nesse artigo, em que eu uso a biblioteca CustomStepper para acionar esse mesmo motor.

      Você pode utilizar a biblioteca no modo "4 passos", que teoricamente imprime mais força ao motor.

      Abraço !

      Excluir
    2. Segue artigo sobre a CustomStepper : http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      Excluir
  21. Olá, seria possível controlar este motor com Bluetooth?

    ResponderExcluir
    Respostas
    1. Boa tarde. É possível sim. Neste outro artigo eu mostro como controlar um servo utilizando Bluetooth, mas você pode usar o mesmo princípio para controlar um motor de passo :

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

      Abraço !

      Excluir
  22. Oh, se o uln impede ele de puxa tanta corrente do arduino, ele vai puxar onde? você ta colocando alguma fonte, em qual parte?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Estou utilizando apenas os 5v do Arduino. O ULN2003 é um driver de corrente, com transistores em configuração Darlington, que proporciona um ganho de corrente. Cada driver é capaz de fornecer 500 mA de corrente para o motor.

      Acho que esses dois links podem te ajudar a entender melhor :

      http://pt.wikipedia.org/wiki/Transistor_Darlington

      E o datasheet do CI :

      http://www.st.com/web/en/resource/technical/document/datasheet/CD00001244.pdf

      Abraço !

      Excluir
  23. Bom dia amigo, Estou com uma duvida tem como, fazer o motor girar 90°, e parar mesmo que o botão esteja, acionado?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Você pode usar um loop while para testar o estado do botão, e não mover o motor enquanto o estado do botão não mudar.

      Abraço.

      Excluir
  24. Boa tarde!

    Tenho este mesmo motor de passo e consegui fazer o teste deste exemplo :) . Agora estou tentando fazer o motor rotacionar para os dois lados usando o bluetooth, porem não estou conseguindo. Tem como fazer? Poderia me da dicas de como fazer isso?

    Obrigado!

    ResponderExcluir
    Respostas
    1. Bom dia,

      Por favor dê uma olhada nesse post. Eu fiz para controlar um servo motor, mas você pode usar o mesmo princípio para movimentar motores de passo :

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

      Abraço !

      Excluir
    2. Ok, vou tentar!

      Aproveitando, é possível fazer um código onde eu possa controlar o motor de passo e adicionar aquele seu exemplo dos LED controlados por bluetooth tudo junto?

      Obrigado.

      Excluir
    3. Bom dia,

      Sem problemas, você pode "misturar" tudo.

      Abraço !

      Excluir
  25. Boa tarde!!

    Eu fazendo um projeto de uma casa automatizada e estou precisando da função do motor de passo.
    Quando eu realizo somente este programa, ele funciona normalmente. Mas quando eu incremento ele junto ao acionamento de outros equipamentos o motor não gira, fica apenas um zunido.
    Ja tentei modificar o numero de voltas por passos, mas continua o mesmo problema. Você sabe o que pode ser?
    Estou utilizando o mesmo kit (28BYJ-48 + ULN2003)
    Obrigado!

    Otávio.

    ResponderExcluir
    Respostas
    1. Boa tarde Otávio,

      Você está controlando tudo pelo Arduino ? Que tipo de sensores ou outros equipamentos você está ligando ?

      Pergunto pois a corrente fornecida pelo Arduino é baixa, por isso pode não estar fornecendo força suficiente para o motor girar.

      Abraço !

      Excluir
  26. boa noite , poderia me ajudar a montar esse projeto sem a protoboard ,qual a maneira correta de fazer as ligaçoes dos fios ???

    ResponderExcluir
    Respostas
    1. Boa tarde Sandro,

      Você tem o motor e a placa com o ULN2003, certo ? Basta copiar o circuito que está no post.

      Não sei se você conhece como funciona a protoboard, mas os furos na parte central da placa estão conectados na vertical, e os furos nas laterais (onde existem as linhas azul e vermelha), estão conectados na horizontal.

      Abraço !

      Excluir
    2. mas o programa possui dois botões. Eu quero alterar para um sensor ótico. Como faço?

      Excluir
  27. mas o circuito é com dois botões, eu quero trocar por um sensor ótico. como alterar o programa?

    ResponderExcluir
    Respostas
    1. Boa tarde Paulo,

      Dê uma olhada nesse artigo, que mostra a ligação do sensor ótico TCRT5000. Você pode usar essas informações para adaptar no seu circuito, utilizando o sensor ao invés do botão.

      Abraço !

      Excluir
  28. Quero trocar os dois botões por um sensor ótico e fazer o motor parar com 5 voltas. É possível?

    ResponderExcluir
    Respostas
    1. Oi Paulo,

      É sim. Nesse artigo aqui eu falo sobre um contador com sensor óptico. Você só tem que adaptar esse programa ao motor e colocar um IF para que ele pare quando completar 5 voltas.

      Abraço !

      Excluir
  29. Oi amigo! Primeiramente, obrigado por essa valiosa postagem - estava esperando exatamente isso, acionamento de motor de passo com botões;
    Mas, faço uma pergunta: tenho vários motores de 12 volts e 2 módulos para motor: Ponte-H L298N e o Easy Driver, portanto, posso fazer as mesmas conexões? e os resistores devem permanecer o de 330 ohms?
    Obrigado mais uma vez

    ResponderExcluir
    Respostas
    1. Boa noite,

      Os resistores podem permanecer os mesmos sim, já que são utilizados apenas para os botões. Quanto aos módulos, cada um tem uma ligação específica, por favor dê uma olhada nos meus artigos, pois eu tenho posts sobre esses dois módulos que vc citou.

      Abraço !

      Excluir
  30. Boa noite, sou iniciante na área, tenho uma duvida... no meu projeto, Eu gostaria de controlar o posicinamento de um motor de passo que deverá girar 360 graus por radio controle, mais a questão é que o mesmo posiciomanto no radio controle que será desenvolvido em arduino também deverá ser no motor de passo instalado no dispositivo controlado, pra melhor entendimento, no radio angulo inicial 0 lá no dispositovo controlado ele também deverá ser 0, quando posicionado no radio 45 graus o motor no dispositivo também deverá ser posicionado, se Eu voltar para a posição 0 o motor deverá seguir o posicionamento. Já pensei em usar potenciometro, mais este tem limite de curso, um servo também tem limite de curso, ele modificado Eu consigo saber o posicionamento dele sem ter que ler quanto tempo e gira para um lado ou para outro ? Se Eu usar um encoder, ele possui um ponto zero inicial ?

    ResponderExcluir
    Respostas
    1. Boa tarde,

      No encoder você pode setar um "ponto zero" sim, dê uma olhada no meu post sobre encoder: http://www.arduinoecia.com.br/2015/08/como-usar-encoder-rotativo-ky-040-arduino.html

      Abraço !

      Excluir
  31. Boa noite amigo
    Vi que seu poste tem mais de um ano mas como conhecimento não tem idade.....
    Rsrsrsr.
    sou novo na área de programação e preciso de uma ajuda
    Estou utilizando como base para um teste a sua programação acima.
    mas preciso que ,quando acionar o botão, o motor ande 10 graus e pare.A movimentação sempre sera ao apertar o botão e tem que andar 10 graus e parar
    No aguardo,

    ResponderExcluir
    Respostas
    1. Boa tarde Reginaldo,

      Sem problemas, o post é meio antigo, mas muito acessado. Ainda bem. Como você disse, conhecimento não tem idade. :)

      Para o seu caso, tente usar a biblioteca CustomStepper, ela tem mais recursos e fica mais fácil de você determinar o ângulo de giro do motor: http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html

      Abraço !

      Excluir
    2. Valeu pelas dicas
      Consegui resolver!!

      Excluir
  32. Olá a todos... Amigos já havia conseguidi fazer a leitura dos encoders e posicionar o motor de passo... Só esqueci de postar aqui!
    Segue o link do vídeo !
    Detalhe Eu usei a biblioteca Encoders do próprio arduino.
    https://youtu.be/LmX317znQAw

    Obrigado a todos.

    ResponderExcluir
  33. Poderia colocar um diagrama de como ficaria a ligação de 3 motores( 3motor+3driver+arduino como controladora?

    ResponderExcluir
  34. boa noite
    preciso duma ajuda estou fazer um trabalho que é um olho inteligente e to a usar 2 servos motores de 9g, um motor de passo ,umuln2003, web cam e o arduino uno.
    a minha duvida é a seguinte os servos eles giram na parte horizontal angulo de 0 a 180 graus, e o motor de passo 0 a 360. Como fazer tal coisa acontecer juntamente cm a web cam?
    To em duvida meu motor é de 6 fios, e to com dificuldade em achar o ajuste dele, como ele roda melhor encontrar a sequencia dos fios.

    Agradecia

    ResponderExcluir
  35. Esse motor é forte?
    tenho 4 deles consigo segurar seu eixo com muita facilidade.

    ResponderExcluir
  36. Olá amigo, muito bom esse seu post, porem estou com uma dúvida. Como faço para controlar mias de um motor ao mesmo tempo? Por exemplo, um motor girar em um sentido e o outro no sentio contrario?

    ResponderExcluir
    Respostas
    1. Boa noite Idelbrando,

      Você pode usar o mesmo esquema, mas para acionar o outro motor você cria uma outra instancia do motor de passo, por exemplo:

      Stepper myStepper_numero2(stepsPerRevolution, 4,5,6,7)

      Abraço!

      Excluir
  37. Olá, estou utilizando o kit (28BYJ-48 + ULN2003) e quando aciono os botoes, só gira para o mesmo lado. o que pode ser???

    ResponderExcluir
    Respostas
    1. Bom dia Tuca,

      Nenhuma ligação invertida ?

      Abraço!

      Excluir
  38. Olá. Excelente material.
    Como posso controlar o motor de passo pela net,remotamente de outro lugar?

    Agradeço a atenção.

    ResponderExcluir
    Respostas
    1. Boa noite,

      Você pode usar um ethernet shield ou até mesmo um ESP8266, falo sobre os dois aqui no blog.

      Abraço!

      Excluir
  39. boa noite! excelente conteúdo! preciso fazer controle de motor de passo com potenciômetro e duas chaves ópticas para limitar a área de trabalho de uma mesa coordenada . poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Bom dia,

      Sim! Por favor entre em contato utilizando o formulário de contato no lado direito da página.

      Abraço!

      Excluir
  40. fiz esse projeto funcionou perfeitamente, gostaria de saber se tem como adaptar esse projeto com o modulo rf transmissor e receptor 433mhz para acionar o motor com os botões a distancia

    ResponderExcluir
    Respostas
    1. Boa tarde,

      Tem sim, inclusive estou escrevendo um post sobre esse assunto.

      Abraço!

      Excluir
  41. qual o programa utilizado para a montagem do circuito no desenho?
    baixei o fritzing mas não encontro a placa do uln2003 e nem o motor 28bjy-48.
    Obrigado

    ResponderExcluir
  42. PODEM FAZER UM POST PARA ACIONAR UM MOTOR DE PASSO NEMA 17 POR INTERUPTORES,QUE FAÇAM ELE GIRA 360 GRAUS...OBRIGADO.



    ResponderExcluir
  43. PODEM FAZER UM PROGRAMA QUE ACIONE UM MOTOR DE PASSO POR INTERRUPTORES,QUE GIRE 360 GRAUS..AGRADEÇO..

    ResponderExcluir
  44. Oi ! É possível utilizar Reed Switches como fim de curso para esse motor de passo? Eu tentei, mas o motor não aciona. Como eu poderia solucionar esse problema?
    Aguardo retorno.

    ResponderExcluir