Mais um Tutorial para os colegas do Lab de Garagem - Arduino controlando o motor de passo
28BYJ-48 com o driver ULN2003.
Essa montagem, eu diria que é a mais simples para controle de um motor de passo (stepper motor). Nem por isso ela pode ser considerada ruim. Esse motorzinho tem uma redução interna que aumenta bem o torque, apesar do pequeno tamanho. O módulo de controle com o chip ULN2003 é bem pequeno também, o que pode facilitar a montagem em um seu projeto.
As vantagens são a simplicidade na montagem , Sketch pode ser bem enxuto, o uso de tensão de 5V para alimentar o motor, etc.
A desvantagens são que a rotação é baixa (devido a redução na caixa de engrenagens) , que o motor unipolar é menos eficiente e o uso de quatro portas do Arduino. Alguns módulos de controle de motor de passo usam interfaces com duas portas apenas (por exemplo I2C).
Favor interagir com o tutorial, somente assuntos relacionados com o mesmo.
Se deseja esclarecer alguma outra dúvida, favor criar um novo tópico.
Farei o Tutorial em partes.
Para facilitar a pesquisa nos tópicos, criei esse índice :
A precisão de um motor de passo :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Informações sobre o Motor de Passo 28BYJ-48 :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Informações sobre o Módulo Driver ULN2003:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Diagrama de montagem do Modulo Driver + Motor com Arduino:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Primeiro exemplo - com dois botões para alterar o sentido da rotação:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Segundo exemplo - controla-se o motor através do angulo:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Terceiro exemplo - Controle do motor através de um potenciômetro:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Quarto exemplo - Três voltas no sentido horário e mais duas voltas no sentido ant-horário :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Quinto exemplo - Acionamento com duplo sentido :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Aplicações com o Motor + Driver - Impressora de Ovos e Ploter de PCB:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Aplicações com o Motor + Driver - Fotografia Time-lapse:
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - modos de operação :
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Passo completo com baixo torque ( Wave Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Passo completo com alto torque ( Full Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
Motor de Passo - Modo Meio Passo ( Half Step):
http://labdegaragem.com/forum/topics/tutorial-arduino-motor-de-pass...
E muito mais !!!
Espero que gostem.
Tags:
O quarto circuito, temos o número de voltas:
#include <CustomStepper.h>
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 (voltas)
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 (voltas)
stepper.rotate(2);
rotate1 = false;
}
//Comando obrigatorio para funcionamento da biblioteca
stepper.run();
}
E o ultimo circuito, temos o acionamento com duplo sentido.
#include <Stepper.h>
const int stepsPerRevolution = 64;
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup() {
myStepper.setSpeed(200);
}
void loop() {
for (int i = 0; i < 32; i++)
{
myStepper.step(64);
}
delay(1000);
for (int i = 0; i < 32; i++)
{
myStepper.step(-64);
}
delay(1000);
}
Boa montagem e bom divertimento, dá para ficar horas nestes experimentos e ir substituindo os valores para ver o que acontece.
Obs.: Como não domino a programação, alguém poderia comentar estes circuitos. Tenho a noção, mais não a nível de explicar aqui no tópico ok.
Valeu,
José Antonio
Maravilha José Antonio !
Valiosa contribuição. Eu estava tentando desenhar no Fritizing, mas estava com dificuldades, pois nunca tinha desenhado com esse programa,
Muito obrigado.
Quinto exemplo - Acionamento com duplo sentido :
Referências da Biblioteca Stepper :
https://www.arduino.cc/en/Reference/Stepper
https://www.arduino.cc/en/Reference/StepperConstructor
https://www.arduino.cc/en/Reference/StepperSetSpeed
https://www.arduino.cc/en/Reference/StepperStep
Nesse exemplo, houve a necessidade de inversão da Fase 2 com a Fase 3.
Nesse Sketch, o motor gira uma volta no sentido horário e uma volta para no sentido anti-horário com intervalos de um segundo entre as mudanças de sentidos.
Uma coisa não ficou clara :
Como já sabido, para que o eixo gire uma volta são necessários 4075 passos.
Portanto para um giro completo 63,7 x 64 passos = 4075.
Mas no programa fiz somente 32 loops de 64 passos e não 63,7 loops para girar uma volta.
Não entendi. Irei pesquisar.
#include <Stepper.h> // Biblioteca de motor de passo
const int stepsPerRevolution = 4075; // Motor precisa de 4075 passos para completar uma volta
// Configura Passos por volta e Pinos do Arduino => fases do Motor
Stepper myStepper(stepsPerRevolution, 8,9,10,11);
void setup()
{
myStepper.setSpeed(10); // Configura a velocidade do motor em RPM
}
void loop()
{
for (int i = 0; i < 32; i++) // Incrementa contador até 32
{
myStepper.step(64); // gira 64 passos no sentido Horário
}
delay(1000); // Atraso de um segundo
for (int i = 0; i < 32; i++) // Incrementa contador até 32
{
myStepper.step(-64); // gira 64 passos no sentido Anti-horário
}
delay(1000); // Atraso de um segundo
}
Conseguiu descobrir?
Eu hackeei esse motor para bipolar e usei uma "POLOLU A4498" e consegui fazer uma volta com 2.048 pulsos (aproximadamente)!!!
Não era para ser 4.096????
Como já informado, para que o eixo gire uma volta são necessários 4075 passos. Portanto para um giro completo 63,7 x 64 passos = 4075.
Mas no programa fiz somente 32 loops de 64 passos e não 63,7 loops para girar uma volta. Deve ser alguma coisa na biblioteca. Eu não contei quantos passos ele dá em cada loop. Deve ser isso.
Testando quarto exemplo = Três voltas no sentido horário e mais duas voltas no sentido ant-horário :
Nesse exemplo, não houve a necessidade de inversão da Fase 2 com a Fase 3.
// Essa Biblioteca deve ser instalada antes http://playground.arduino.cc/Main/CustomStepper
#include <CustomStepper.h>
// Define os parâmetros iniciais de ligação do motor de passo, sequência das fases
// número de passos para uma volta, RPM e sentido da rotação
CustomStepper stepper(8, 9, 10, 11, (byte[]){8, B1000, B1100, B0100,
B0110, B0010, B0011, B0001, B1001}, 4075, 10, CW);
// variáveis de controle da rotação
boolean rotate1 = false;
boolean rotatedeg = false;
boolean crotate = false;
void setup()
{
stepper.setRPM(10); // Define a velocidade do motor em RPM
stepper.setSPR(4075); // Define o numero de passos para uma volta no eixo
}
void loop()
{
if (stepper.isDone() && rotate1 == false)
{
delay(2000); // Atraso de 2 segundos
stepper.setDirection(CW); // Define o sentido de rotação (CW = Horario)
stepper.rotate(3); // Define o numero de rotações (voltas)
rotate1 = true;
}
if (stepper.isDone() && rotate1 == true)
{
delay(2000); // Atraso de 2 segundos
stepper.setDirection(CCW); // Define o sentido de rotação (CCW = Anti-horario)
stepper.rotate(2); // Define o numero de rotações (voltas)
rotate1 = false;
}
stepper.run(); // esse comando faz o motor girar
}
Vendo esses codigo, não bastaria eu aumentar o numero de voltas? para 700? tenho esse motor de passo, e o chip. O que acha?
Esse motor é para baixa rotação. Por ter um mecanismo de redução, a velocidade é bem baixa. Esta querendo usar na bobinadora ?
Só se for em camera lenta , he he .
O driver A4988 é mais adequado ( mas veja a especificação do motor antes, para saber se ele é compatível com o seu motor).
Ok. obrigado
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por