Boa noite pessoal, tenho dois tópicos criados que tratam do mesmo assunto.
Tópico 1 - Melhor motor para o projeto
A seguir, defini o motor e começaram as duvidas
Tópico 2 - Motor de passo 2v com A4988
Enfim, tudo está funcionando, porem estou o dia inteiro tentando compreender a programação do que quero fazer e não consigo, sou um pouco leigo em relação a programação e estou com dificuldades em coisas que acredito serem simples para quem compreende, então vim procurar ajuda.
O que estou querendo fazer é ao ligar o arduino, o motor ja começa a girar e posso alterar duas coisas:
1 - Controlar a velocidade (que deve ser bem lenta) utilizando um trimpot de 10k.
2 - Controlar a direção (horario ou anti horario) através de um botão seletor.
Ja tentei com o stepper.h e o accelstepper.h, porem nao consigo compreender direito a comunicação do arduino com o A4988, no stepper nao sei configurar step e dir, no accelstepper nao consigo fazer o trimpot controlar a velocidade, será que alguem pode me ajudar a buscar a melhor solução?
Mais uma duvida, posso alimentar o arduino através da (vin) com a mesma fonte 12v do motordrive?
Obrigado.
Tags:
Boa tarde, obrigado a todos que me ajudaram até aqui no outro tópico, consegui resolver meu problema com a seguinte sketch:
#include <AccelStepper.h>
int sentidopin = 12;
int aceleracao_motor = 100;
int leitura;
int pino_enable = 10;
AccelStepper motor1(1,7,4 );int stepCount = 0;
void setup() {
Serial.begin(9600);
pinMode(sentidopin, INPUT_PULLUP);
motor1.setAcceleration(aceleracao_motor);
}void loop() {
// lê valor do trimpot:
int sensorReading = analogRead(A0);
// seta o range de 0 to 100:
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
leitura = digitalRead(sentidopin);
// seta velocidade do motor:
if (motorSpeed > 0) {//se o botão estiver pressionado, gira em um sentido
if (leitura != 1) {
motor1.setSpeed(-motorSpeed);
motor1.setMaxSpeed(motorSpeed);
}//se o botão nao estiver pressionado, gira no outro
if (leitura == 1) {
motor1.setSpeed(motorSpeed);
motor1.setMaxSpeed(motorSpeed);
}
motor1.run();
Serial.println(motorSpeed);
Serial.println(digitalRead(sentidopin));
}
}
Permanecem duas duvidas:
Como setar o máximo na função setAcceleration? não quero que ele acelere, quero que va direto para o maximo.
Posso alimentar o arduino através da porta vin com a mesma fonte 12v que alimenta o driver, elas ligariam "ao mesmo tempo", por isso a minha preocupação.
Cara, vou tentar dar uma ajuda, para você entender como funciona, sem bibliotecas.
O A4988 precisa ativamente de 2 sinais para rodar o motor, um chamado passo e outro direção.
Para controlar a direção você precisa definir um pino e quando o botão for pressionado esse pino fica "low" e quando pressionado novamente, fica "high" tipo um flipflop. Agora para controlar a velocidade do motor via trimpot, você tem que ter em mente que o arduino lê o o valor do pino do meio do trimpot, numa ponta do trimpot fica o 5v na outra o gnd, então a variação de voltagem sai no pino do meio. O arduino lê esse valor, se não me engano o ADC dele é 10bits, ou seja, 1023 posições. Cada transição do HIGH pro LOW no pino passo, o A4988 faz o motor andar um pouco (depende do motor 1,8º por exemplo). A velocidade do motor, é definida pela quantidade de HIGH e LOW que você mandar em um determinado período, você pode fazer desde simplesmente com delays, ou então com a leitura do ADC. Se for funções simples, esquece as bibliotecas e faça na mão.
Muito obrigado pela ajuda, realmente acabei fazendo do jeito mais complicado por desconhecer o flipflop do dir no A4988, farei as alterações para utilizar ele direto no pushbutton, assim elimina um if do código.
O controle de velocidade acredito que eu tenha acertado, embora o trimpot acabe não sendo muito preciso, acarretando em perda de passo, para o que eu necessito acho que irá atender da forma que está.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por