Controlando motor de passo 28BYJ-48 utilizando CustomStepper
Além da tradicional biblioteca Stepper do Arduino, uma outra biblioteca bastante utilizada para controle de motores de passo, e que vamos utilizar com o motor de passo 28BYJ-48 e driver ULN2003, é a CustomStepper, que tem funções como rotacionar o motor determinado número de vezes, rotacionar apenas em um ângulo específico, ou rotacionar até que um novo comando seja enviado ao motor.
Atenção: Para mais informações sobre o funcionamento do 28BYJ-48, assim como a utilização do mesmo com a biblioteca Stepper, consulte o artigo Ligando Motor de passo 28BYJ-48 e ULN2003.
O download da biblioteca CustomStepper pode ser feito nesse link, e a instalação segue o procedimento da maioria das bibliotecas do Arduino: descompacte o arquivo zip e coloque a pasta CustomStepper na pasta LIBRARIES da IDE do seu Arduino. Não esqueça de reiniciar a IDE para que a biblioteca seja carregada corretamente.
Conexão do motor de passo no Arduino
Vamos demonstrar as funções desta biblioteca utilizando dois programas diferentes. Primeiramente, monte o circuito abaixo, que utiliza o motor de passo 28BYJ-48 e o driver ULN2003 juntamente com o Arduino Uno:
O primeiro exemplo é o controle do número de rotações do motor. Carregue o programa abaixo, que rotaciona o motor 3 vezes no sentido horário, aguarda 2 segundos e rotaciona 2 vezes no sentido anti-horário:
// Programa : Controle motor de passo 28BYJ-48 - Rotacoes // Autor : Arduino e Cia #include <CustomStepper.h> //Define os parametros de ligacao do motor de passo CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW); boolean rotate1 = false; boolean rotatedeg = false; boolean crotate = false; void setup() { //Define a velocidade do motor stepper.setRPM(12); //Define o numero de passos por rotacao stepper.setSPR(4075.7728395); } void loop() { if (stepper.isDone() && rotate1 == false) { delay(2000); //Define o sentido de rotacao (CW = Horario) stepper.setDirection(CW); //Define o numero de rotacoes stepper.rotate(3); rotate1 = true; } if (stepper.isDone() && rotate1 == true) { delay(2000); //Define o sentido de rotacao (CCW = Anti-horario) stepper.setDirection(CCW); //Define o numero de rotacoes stepper.rotate(2); rotate1 = false; } //Comando obrigatorio para funcionamento da biblioteca stepper.run(); }
O segundo exemplo é o controle do motor de passo pelo ângulo de rotação. A cada 2 segundos, o motor rotaciona 90 graus:
// Programa : Controle motor de passo 28BYJ-48 - Angulo // Autor : Arduino e Cia #include <CustomStepper.h> //Define os parametros iniciais de ligacao do motor de passo CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW); void setup() { //Define a velocidade do motor stepper.setRPM(12); //Define o numero de passos por rotacao stepper.setSPR(4075.7728395); } void loop() { if (stepper.isDone()) { //Intervalo entre acionamentos delay(2000); //Define o sentido de rotacao (CW = Horario) stepper.setDirection(CW); //Define o angulo de rotacao stepper.rotateDegrees(90); } stepper.run(); }
Você pode adaptar esse programa para outros motores de passo observando a sintaxe do comando CustomStepper no inicio do programa:
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW)
onde:
8, 9, 10 e 11 : são as portas utilizadas para ligação ao motor/driver
byte[]){8, B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001}
Refere-se à sequência de ativação das bobinas do motor. O número 8 corresponde ao número de passos, que no caso do 28BYJ-48 segue a tabela abaixo:
4075.7728395 = Numero de passos necessários para uma rotação completa do motor. O valor refere-se ao motor de passo 28BYJ-48, e deve ser ajustado para outros tipos de motores.
12 = Velocidade de rotação
CW = O último parâmetro é o sentido de rotação, que pode ser CW = Horário, CCW = Anti-horário, ou STOP = Parado
Como vimos, a utilização da biblioteca CustomStepper é bem simples e se mostra uma boa alternativa para controle de motores de passo.
Gostou? Confira outros posts usando motor de passo aqui mesmo no Arduino e Cia!
Amigo, como eu poderia usar esse circuito usando botões para, por exemplo, apertando o botão 'X' o motor rode para a esquerda e apertando o botão "Y" o motor rode para a direita?
obrigado e parabéns pelo blog
Boa tarde,
Veja se este artigo te ajuda, pois usa 2 push-button para controlar o sentido de rotação do motor :
http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html
Abraço !
Como corrigir esses erros ?
sketch_may07a.ino: In function 'void setup()':
sketch_may07a:12: error: 'myStepper' was not declared in this scope
sketch_may07a:14: error: 'stepper' was not declared in this scope
sketch_may07a.ino: In function 'void loop()':
sketch_may07a:19: error: 'stepper' was not declared in this scope
sketch_may07a:24: error: 'CW' was not declared in this scope
sketch_may07a:28: error: 'stepper' was not declared in this scope
Boa noite Leandro,
Pelo erro, parece que está faltando a biblioteca. Verifique a instalação, por favor.
Abraço.
Gostaria de uma ajuda, queria que ao mesmo tempo que o motor rotacionasse 180º com o 2º codigo que voce passou, ele executasse esses comandos:
if(contador2++==20)
digitalWrite(led2, HIGH);
if(contador3++==40)
digitalWrite(led3, HIGH);
if(contador4++==60)
digitalWrite(led2, LOW);
if(contador5++==80)
digitalWrite(led1, HIGH);
if(contador6++==100)
digitalWrite(led2, HIGH);
if(contador7++==120)
digitalWrite(led3, LOW);
if(contador8++==140)
digitalWrite(led2, LOW);
if(contador9++==160){
digitalWrite(led1, LOW);
como seria possivel? ja tentei e nao consegui, gostaria de ajuda!
Grato
Boa tarde,
Que erro apresenta na IDE ?
abraço.
Gostaria de parabenizar seu baita trabalho caro amigo, interessante iniciativa! muto bem feitas suas postagens, sou estudante de engenharia mecânica, mas apaixonado por eletrônica.
Comprei um arduino para começar um aprendizado com micro controladores, quando mais jovem não pude desenvolver por serem na época 2001~2003 muito caro os pics e as ide muito complexas para desenvolver.
Hoje podemos contar com um site como o seu que possui vários exemplos( já utilizei vários) e sempre muito bem simples mas em um nível exelente, basta ler pra não lhe fazer perguntas obvias ou desncessarias como vi em alguns posts.
Desculpe mas realmente não vi seu nome, então agradeço a Arduino e Cia pelo fantástico trabalho! e sempre que possível poste novidades. já sou um seguidor !
Bom dia Maik !
Agradeço mutissimo a sua mensagem. A ideia do site é justamente essa, mostrar como os componentes funcionam, na maioria das vezes com exemplos simples para que as pessoas consigam depois usar esse conhecimento para desenvolver seus próprios projetos.
Todos os circuitos mostrados nos posts são montados e testados, pois quero ter certeza que estou passando as informações corretas. Claro que erros acontecem, às vezes falta um detalhe aqui e ali, mas vamos aprimorando.
Meu nome é Adilson e realmente falta uma página "sobre o Autor" no site, mas vou providenciar. rs.
Obrigado por reconhecer o meu trabalho. É um estímulo para continuar escrevendo.
Grande abraço !
como eu fasso para corrigir esses erros
sketch_may24a:7: error: 'CustomStepper' does not name a type
sketch_may24a:8: error: expected unqualified-id before ',' token
sketch_may24a:8: error: expected unqualified-id before numeric constant
sketch_may24a.ino: In function 'void setup()':
sketch_may24a:17: error: 'stepper' was not declared in this scope
sketch_may24a.ino: In function 'void loop()':
sketch_may24a:24: error: 'stepper' was not declared in this scope
sketch_may24a:28: error: 'CW' was not declared in this scope
sketch_may24a:34: error: 'stepper' was not declared in this scope
sketch_may24a:38: error: 'CCW' was not declared in this scope
sketch_may24a:45: error: 'stepper' was not declared in this scope
Bom dia Marcos,
Isso me parece ser erro na instalação da biblioteca CustomStepper.
Abraço !
Parabéns meu colega!!! vc tem um trabalho muito bom mesmo!!! e uma ótima iniciativa em compartilhar o conhecimento, coisa que nem todos sabem fazer!!!!Que todos os seus planos e projetos venha a se realizar!!! Parabéns!!!
Bom dia Wallace !!!
Muito obrigado, e aguardo sua visita ao Arduino e Cia sempre que possível. 🙂
Abraço !
Boa tarde!
Como que eu faria para enviar e receber informações para para o motor usando Bluetooth e android?
Obrigado.
Boa tarde,
Creio que nesse artigo tem o que você precisa :
http://www.arduinoecia.com.br/2014/01/controlando-um-servo-motor-utilizando.html
Abraço !
Bom dia Adilson,
Tenho esse kit, está em uma placa Leonardo, tentei configurar para 11 voltas frente e reverso, para frente consigo chegar a 6,5 voltas e no reverso ela dá as vezes 7, 8 , assim coloquei para duas voltas (720°) no seu padrão e o bichinho faz 405°!
1) Isso é problema em alguma placa, motor ou componente?
2) eu preciso aumentar esta rotação, é possível?
3) eu modifiquei o setSPR para 4215 e agora ele dá uma completa para frente e meia volta no reverso, to ficando maluco, como sou novato preciso de um help!
Boa noite Alex !
Você consegue me passar o programa que usou ? é muito grande ? Se for, me mande por email, utilizando o formulário de contato no lado direito da página.
Eu tenho esse kit e um Arduino Leonardo aqui, posso testar e ver o que acontece. 😉
Abraço !
Amigos, sou iniciante, absolutamente iniciante. Quero começar a construir uma CNC e gostaria de fazer testes com um motor pequeno, o BYJ-48 com a sua respectiva plaquinha controladora, tal como consta no esquema deste post. Gostaria de configurá-lo para receber instruções GRBL diretamente pelo arduino e não consigo descobrir a pinagem ou nem mesmo seu se é possível… Se for possível, como posso proceder para ligar mais de um motor, talvez três? Uma mini-mini cnc já me deixaria bastante feliz, por enquanto. Alguém pode ajudar??
É normal esse motor ficar tão quente, que fica desagradável segurar na mão, quando usado por 05 minutos?
Bom dia,
No meu não acontece isso. Observe se o motor não está com alguma barulho estranho, talvez algum defeito nas engrenagens esteja forçando o motor.
Abraço.
Eu consigo usar esse 12 cw de velocidade também no devc ++ se tiver como, por favor me falem, obrigado.
Boa tarde Kenedy,
Não entendi a sua pergunta. Pode explicar melhor, por favor ?
Abraço !
Como eu faço para colocar um potenciometro pra regular a velocidade?
E um botao que inverta o sentido do motor?
Boa noite André,
O potenciômetro você pode ligar em uma das portas analógicas, ler o valor de 0 a 1024 e transferir esse valor para a variável que regula a velocidade. Eu tenho um artigo que fala sobre o uso do potenciômetro para regular a luminosidade de um led. Você pode utilizar praticamente o mesmo exemplo para o motor :
http://www.arduinoecia.com.br/2013/07/dimmer-usando-portas-analogicas-para.html
Já o botão você pode implementar no circuito e mexer na programação para que a cada toque do botão ele inverta o valor de uma variável :
if (botao = 1)
{
variavel = !variavel;
}
Abraço !
Preciso de uma ajuda, gostaria de apertar um botão o motor rodar para um lado e apertar outro ele rodar para outro…
Boa tarde,
Acho que este artigo tem o que você precisa :
http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html
Abraço !
Olá, por acaso você tem a "versão Fritzing" destes componentes? Revirei na internet, mas não encontrei.
Desde já Agradeço!
Bom dia !
Infelizmente não tenho, algumas coisas acabo desenhando por conta própria.
Abraço !
Parabéns pelo trabalho.
gostaria de saber a velocidade máxima desse motor(4 voltas completas por segundo)?
se segurar com a mão o pino que roda, para ou esse motor tem força?
28BYJ-48 é polar ou uni polar?
obrigado!
Boa tarde Hugo,
Tudo vai depender do uso, mas esse motor tem um bom torque. Não é tão fácil pará-lo com a mão. Uma volta completa leva mais ou menos uns 4 segundos. E o motor é unipolar.
Abraço e obrigado !
Bom Dia
tem como mudar a rotação do moto com o toque de um botão gostaria de implementar nesse código
é possível
// Programa : Controle motor de passo 28BYJ-48 – Rotacoes
// Autor : Arduino e Cia
#include
//Define os parametros de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;
void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}
void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes
stepper.rotate(3);
rotate1 = true;
}
if (stepper.isDone() && rotate1 == true)
{
delay(2000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes
stepper.rotate(2);
rotate1 = false;
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}
Bom dia Maycon,
Creio que nesse artigo aqui tem o que você precisa, ele mostra o controle do mesmo motor de passo, o 28BYJ-048, por meio de 2 botões :
http://www.arduinoecia.com.br/2013/11/ligando-motor-de-passo-28byj-48-e.html
Abraço !
Bom dia
sim já conferi esse artigo, só que eu preciso que ele inverta a rotação com um botão. não estou conseguindo implementar essa logica no programa acima..
poderia me ajudar
olha estou usando essa logica que utilizei em outro projeto com motor dc e funcionou legal
int btInverter = A1; //Botão de inversao
int tempPress = 0; //temporario de verificacao de botao pressionado
int direcao = 0; //direcao do motor (1 e 0)
void setup() {
}
void loop() {
if(digitalRead(btInverter)==HIGH){ //se o botao de inversao for pressionado
if(tempPress == 0){ //verifica se o botao ja nao estava pressionado.
if(direcao == 0){ //verifica a direcao atual e inverte
//execuçao
direcao = 1;
}else{
//execução
direcao = 0;
}
tempPress = 1;
}
}else{
tempPress = 0;
}
delay(100);
}
agora com motor de passo não estou conseguindo
poderia me dar uma ajuda
Abraços….
Oi Maycon,
Tente usar os comandos stepper.setDirection(CW) e stepper.setDirection(CCW) ao inves da direcao, assim vc movimenta o motor no sentido horario ou anti-horario.
Abraço !
Prezados do arduino e cia., bom dia!
Trabalho fantástico. Parabéns. Gostaria de ter menos idade para me divertir mais com este tal de arduino.
É possível os senhores me informarem se o arduino consegue ler (capturar uma curva (gráfico) feita numa planilha em excel e transportá-la para uma peça em madeira, por exemplo?), como se fosse um CNC, uma fresa?
É que hoje, após obter uma curva gerada numa planilha, transfiro a mesma manualmente numa peça em madeira através de lima, lixamento, enfim. O que pretendo é automatizar este trabalho fazer com que o arduino leia a curva e execute numa peça de forma automática utilizando-se de motores de passo. Já vi um projeto de um CNC com este arduino, mas não sei como fazer para ele capturar o gráfico, curva do excel. Você tem alguma diga sobre isso, é possível utilizar alguma biblioteca para fazer isso?
Grato pela atenção dospensada.
Ricardo
Boa tarde,
É possível sim. Além da biblioteca, você vai precisar de um programa que "converse" com o CNC, transferindo os dados do computador para os motores e assim fabricar a peça.
Eu também estou atrás disso, quem sabe em breve eu não lance um artigo sobre esse assunto.
Abraço e obrigado !
Olá amigo, com este seu artigo eu decidi efetuar a compra de um kit Motor de Passo + Driver Uln2003 e começar com alguns testes…
Antes mesmo de meu kit chegar poderia me esclarecer como ligar mais de um motor e utilizar o mesmo programa?
Eu entendo que na linha referente CustomStepper stepper eu deveria fazer algo como
CustomStepper stepperX (8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
CustomStepper stepperY (4, 5, 6, 7, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
CustomStepper stepperZ (0, 1, 2, 3, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
E na sequencia trocar suas informações, correto?
Além de mudar o número das portas não necessito realizar nenhuma outra mudança?
Por favor me corrija e me ajude a aprender está questão.
Sobre a leitura de um arquivo "CNC" eu sempre vi o pessoal utilizando a biblioteca open source grbl que eu sei que é compatível com os chip atmega328
Boa tarde Elvis,
Teoricamente as alterações são essas, mas só ligando no Arduino para ver qual tipo de problema pode aparecer. 🙂
Para o seu caso, eu até recomendo conectar tudo isso à um Arduino Mega.
Abraço !
Recentemente adquiri 2 motores de passo 28BYJ-48 (o mesmo desse tutorial) para controle de um circuito girassol montado numa placa Arduino MEGA 2560. Cada motor executou perfeitamente os programas testes desse tutorial. Alimentei cada motor numa das portas digitais de 5V. Em seguida substituí as portas 8,9, 10 e 11 pelas digitais 24, 26, 28 e 30 para um dos motores e 36, 38, 40 e 42 para o outro, respectivamente. Então, modifiquei o código do teste 1 para estas portas e transferi o código para a placa Arduino. Contudo, um dos motores ficou parado enquanto o outro executou o código em sua totalidade. Ao comentar os códigos do motor que girou corretamente, o motor que estava parado passou a girar corretamente enquanto o outro ficou parado. A dúvida é como girar ambos os motores ao mesmo tempo utilizando Arduino MEGA 2560.
#include
//Define os parametros de ligacao do motor de passo
CustomStepper stepper(24, 26, 28, 30, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
CustomStepper stepper2(36, 38, 40, 42, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
boolean rotate1 = false;
boolean rotate2 = false;
// boolean rotatedeg = false;
// boolean crotate = false;
void setup()
{
//Define a velocidade do motor
stepper.setRPM(12);
stepper2.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
stepper2.setSPR(4075.7728395);
}
void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(1000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes
stepper.rotate(3);
rotate1 = true;
}
if (stepper.isDone() && rotate1 == true)
{
delay(1000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes
stepper.rotate(2);
rotate1 = false;
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
if (stepper2.isDone() && rotate2 == false)
{
delay(1000);
//Define o sentido de rotacao (CW = Horario)
stepper2.setDirection(CW);
//Define o numero de rotacoes
stepper2.rotate(3);
rotate2 = true;
}
if (stepper2.isDone() && rotate2 == true)
{
delay(1000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper2.setDirection(CCW);
//Define o numero de rotacoes
stepper2.rotate(2);
rotate2 = false;
}
//Comando obrigatorio para funcionamento da biblioteca
stepper2.run();
}
Boa tarde,
Vi que você tem dois comandos stepper.run() no programa, não sei se isso está fazendo com que apenas o primeiro funciona. Tente deixar apenas o último.
Abraço.
boa tarde, como faço para acionar o motor com rfid?
ler o cartão e em seguida fazer uma rotação anti-horário e depois horário?
Boa noite Lucas,
Você pode usar este mesmo programa, adaptando para uso com o RFID, que eu uso neste artigo:
http://www.arduinoecia.com.br/2014/12/controle-de-acesso-modulo-rfid-rc522.html
Abraço !
Primeiramente gostaria de agradecer o tópico, esta me ajudando muito!!! Parabéns!
será que poderia me dar uma ajudinha?
estou montando um circuito onde vou utilizar um led um ldr e o motor, no caso o motor funciona conforme o tanto de lumens que o ldr indentifica e faz as cordenadas, mas gostaria que cada cordenada que faço acendesse o led, porem quando coloco o código do led o motor nao funciona mais, o código segue abaixo, se tira o código do led ele funciona de novo, será q nao pode utilizar o led junto com o motor???
obrigado!
#include
//Define os parametros de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
boolean led = false;
int sensor = 0;
int ledPin = 3;
int valorSensor = 0;
void setup()
{
pinMode (ledPin, OUTPUT);
Serial.begin(9600);
//Define a velocidade do motor
stepper.setRPM(12);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
}
void loop()
{
int valorSensor = analogRead(sensor);
Serial.println(valorSensor);
delay(1000);
if (stepper.isDone() && valorSensor < 800)
{
delay(2000);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes
stepper.rotateDegrees(90);
digitalWrite(3, HIGH); // liga o LED
delay(3000); // aguarda um segundo
digitalWrite(3, LOW); // desliga o LED
delay(1000);
}
if (stepper.isDone() && valorSensor > 800)
{
delay(2000);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes
stepper.rotateDegrees(90);
digitalWrite(3, HIGH); // liga o LED
delay(3000); // aguarda um segundo
digitalWrite(3, LOW); // desliga o LED
delay(1000);
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}
Como faço pra nessa Programação adicionar um potenciometro para apenas ligar e desligar o motor?
#include
const int stepsPerRevolution = 500;
//Inicializa a biblioteca utilizando as portas de 8 a 11 para
//ligacao ao motor
Stepper myStepper(stepsPerRevolution, 8,10,9,11);
void setup()
{
//Determina a velocidade inicial do motor
myStepper.setSpeed(60);
}
void loop()
{
//Gira o motor no sentido horario a 90 graus
for (int i = 0; i<=3; i++)
{
myStepper.step(-512);
delay(2000);
}
//Gira o motor no sentido anti-horario a 120 graus
for (int i = 0; i<=2; i++)
{
myStepper.step(682);
delay(2000);
}
//Gira o motor no sentido horario, aumentando a
//velocidade gradativamente
for (int i = 10; i<=60; i=i+10)
{
myStepper.setSpeed(i);
myStepper.step(40*i);
}
delay(2000);
}
Boa tarde,
Você pode fazer um IF simples para parar o motor quando o potenciômetro estiver com um determinado valor (abaixo de 50, por exemplo), mas creio que você terá melhores resultados se usar a biblioteca CustomStepper. Dê uma olhada neste link, por favor: http://www.arduinoecia.com.br/2014/04/controlando-motor-de-passo-28byj-48.html
Abraço
Boa tarde !
Já revirei a net procurando um programa parecido q eu consiga entender e modificar… mas até agora nada…
Estou usando um EasyDriver e quero colocar 2 botões, Um para o motor girar rápido e o outro para girar de vagar… Os dois nunca serão apertados ao mesmo tempo… Alguém já viu algum programa assim ? Desde já, obrigado !
como posso proceder para ligar mais de um motor, talvez três? Uma mini-mini cnc já me deixaria bastante feliz, por enquanto. Alguém pode ajudar??
Ola colega. to com um problema,meu da erro "compilation terminated. exit status 1
Erro compilando." me ajuda.
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
BOA NOITE necessito de uma ajuda pois , preciso que de um programa que faça o motor dar quantas voltas eu quiser ex : uma volta e igual a 360 eu quero que ele de o tanto de voltas e graus (ex 5 voltas e 38 graus ) que eu quiser .
estou com esse erro como corrigir ??
5d07f802b423c87d43f.tmp/corecore.a" "-LC:UsersDanrleiAppDataLocalTempbuild2b55427c451a15d07f802b423c87d43f.tmp" -lm
collect2.exe: error: ld returned 5 exit status
Usando biblioteca CustomStepper na pasta: C:Program Files (x86)ArduinolibrariesCustomStepper (legacy)
exit status 1
Erro compilando para a placa Arduino/Genuino Uno
Oi Danrlei,
Você está usando o mesmo programa do post ? Qual versão da sua IDE ?
Abraço!
usei o arduino 1.6.9
copiei a sua ´programação normal para fazer testes no motor ..
este e o erro que da ..
estou sofrendo com este erro em qualquer programação que faço , pode me ajudar ?
collect2.exe: error: ld returned 5 exit status
exit status 1
Erro compilando para a placa Arduino/Genuino Uno
Oi Danrlei,
Tentou algum programa básico, tipo o blink, que já vem com a IDE ? Dá o mesmo problema ?
Abraço!
Boa Tarde , eu estou tendo um problema e não sei como resolver ! o meu projeto consiste numa ponte autónoma onde utilizo um ultrasónico que irá identificar objetos a X distancia e por sua vez irá dar uma ordem ao motor de passo 28BYJ-48, mas simplesmente o ultrasonico assume as distancias , faz com que os leds mudem consoante a distancia , mas o motor não roda
====================================================================
#include
#include
Ultrasonic ultrasonic(6,7);
//Define os parametros de ligacao do motor de passo
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075.7728395, 12, CW);
boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;
//Declaracao das constantes referentes aos pinos digitais.
const int ledVerde = 2;
const int ledVermelho = 3;
long microsec = 0;
float distanciaCM = 0;
void setup()
{
//Define a velocidade do motor
stepper.setRPM(5);
//Define o numero de passos por rotacao
stepper.setSPR(4075.7728395);
Serial.begin(9600); //Inicializando o serial monitor
//Definindo pinos digitais
pinMode(ledVerde,OUTPUT); //2 como de saÃda.
pinMode(ledVermelho,OUTPUT); //3 como de saÃda.
}
void loop()
{
//Lendo o sensor
microsec = ultrasonic.timing();
//Convertendo a distancia em CM
distanciaCM = ultrasonic.convert(microsec, Ultrasonic::CM);
Serial.print(distanciaCM);
Serial.println(" cm");
//Acende o led quando a distancia lida no sensor
if (distanciaCM >= 35.00) {
digitalWrite(ledVerde,HIGH);
digitalWrite(ledVermelho,LOW);
}
else {
digitalWrite(ledVerde,LOW);
digitalWrite(ledVermelho,HIGH);
delay(1000);
if(stepper.isDone() && rotate1 == false) {
delay(200);
//Define o sentido de rotacao (CW = Horario)
stepper.setDirection(CW);
//Define o numero de rotacoes
stepper.rotate(3);
rotate1 = true;
}
if (stepper.isDone() && rotate1 == true) {
delay(200);
//Define o sentido de rotacao (CCW = Anti-horario)
stepper.setDirection(CCW);
//Define o numero de rotacoes
stepper.rotate(3);
rotate1 = false;
}
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}
==========================================================================
se me puderem ajudar agradecia muito
fico aguardando uma ajuda com urgencia
Gostaria de ajuda para o meu problema, no meu projeto preciso mover um objeto usando o motor controlado pelo computador usando um shield de ethernet, mas quando uso a biblioteca CustomStepper, o motor não gira e só fica vibrando, mas ao usar a biblioteca Stepper, o motor gira normalmente. A problema é que eu preferiria usar a CustomStepper, pois com ela é mais fácil controlar a distancia que o objeto vai mover.
Gostaria de saber também quanto peso esse motor aguenta mover.
Desde já agradeço.
Gostaria de uma ajuda com meu projeto. Eu preciso controlar um motor pela internet usando um shield de ethernet, mas o motor só gira quando uso a biblioteca Stepper, ele gira com muita dificuldade. Quando tento usar a Custom Stepper o motor não gira, ele só vibra. Meu motor é igual esse do post. Eu estou alimentando ele com uma bateria de 9v.
Desde já agradeço.
Preciso ligar 8 motores de passo 28BYJ-48 ULN2003 no Arduino MEGA R3. É tranquilo ? Ou só posso ligar nas portas PWM ? Portas digitais tem bastante, mas não sei se posso usar qualquer porta. Sou novo na área. Alguém tem um exemplo ou imagem de como ligar mais de 4 motores de passo no arduino ? Obrigado.
Oi tudo bem, muito bom seu trabalho, eu não conheço muito bem a linguagem de Arduíno, como seria a programação se eu quisesse que o motor girasse para ângulos específicos, tipo 90, 80 e 45 graus ?
Bom dia, você poderia me explicar o por que de o 4075.7728395 ser o Numero de passos necessários para uma rotação completa do motor ? como achou esse número ?
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.
Excelente projeto. Como eu poderia adicionar um push-botton para ele girar o ângulo desejado apenas quando apertar o botão? Digatos que eu queira girar 45º, mas só depois de apertar o push-button. Jà tentei modificar o sketch várias vezes, mas não consegui. Uma ajuda seria bem vinda. Muito grato a todos.
estou cont=struindo um seguidor solar 2 eixos, como arduino mega e motores de passo alguem pode me ajudar? sou leigo em arduino