Ir para conteúdo
View in the app

A better way to browse. Learn more.

EletrônicaBR.com

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Navegação Limpa e Sem Anúncios! (Cadastre-se)

O melhor fórum técnico do mundo está de cara nova e de portas abertas! Estamos de cara nova e com ferramentas ainda mais poderosas para a sua bancada. Faça o seu cadastro de forma rápida e simples para acessar o maior e mais atualizado acervo de Esquemas Elétricos, BIOS e Firmwares da internet.

Aqui, o conhecimento vale muito: através do nosso sistema de créditos, membros participativos ganham acesso totalmente gratuito aos downloads. Venha trocar experiências com os melhores especialistas do mercado!

👉 Técnico sem o EletrônicaBR não é um técnico completo!

 

a4988 driver com arduino

Featured Replies

Postado

boas

int Index;

void setup()
{
pinMode(4, OUTPUT); //Enable
pinMode(2, OUTPUT); //Step
pinMode(3, OUTPUT); //Direction

digitalWrite(4,LOW);
digitalWrite(3,HIGH);

for(Index = 0; Index < 2000; Index++)
{
digitalWrite(2,HIGH);
delayMicroseconds(500);
digitalWrite(2,LOW);
delayMicroseconds(500);
}
delay(1000);

digitalWrite(3,LOW);

for(Index = 0; Index < 2000; Index++)
{
digitalWrite(2,HIGH);
delayMicroseconds(500);
digitalWrite(2,LOW);
delayMicroseconds(500);
}
delay(1000);
}

void loop()
{

}

 

aonde posso controlar a velocidade sem potenciametro

Editado: por INFOART

Postado

Mude o tempo de high/ low de step!!!

 

Pino 2...

 

E este código nem potenciômetro está utilizando!!! Onde está definido input nele???

 

Flw...

Editado: por nagkiller

Postado
  • Autor
22 horas atrás, nagkiller disse:

Mude o tempo de high/ low de step!!!

 

Pino 2...

 

E este código nem potenciômetro está utilizando!!! Onde está definido input nele???

 

Flw...

boas nagkiller

este código é sem potenciómetro .

correto em mudar o tempo.

Mas agora queria que anda-se mais tempo,que é esta linha:     for(Index = 0; Index < 2000; Index++)

Muda para 30000 tudo ok ,mas se que que ele vai mais muda para 40000 não para pq?

só vai até 30000?

 

Postado
  • Autor

se mudar para 40000 ele não pára anda sempre...

Editado: por baporc

Postado
  • Autor

 

4 minutos atrás, nagkiller disse:

Estourou o valor da variável int!!!

Mude pra long!!!

 

Flw...

boas

Eu com o arduino só sei o básico...desculpa.

está a dizer, no programa troco int por long?

Postado
  • Autor

Obrigado caro amigo

É um génio...

Melhor fórum que este não hã...

Abraços

Postado
  • Autor

 Boas 

long Index;
int in1 = 8; //relay
int in2 = 9; //relay
void setup()
{
pinMode(4, OUTPUT); //Enable
pinMode(2, OUTPUT); //Step
pinMode(3, OUTPUT); //Direction
pinMode(8, OUTPUT); //saida do relay
pinMode(9, OUTPUT);

digitalWrite(4,LOW);
digitalWrite(3,HIGH);

digitalWrite(8, LOW); //ativa
digitalWrite(9, LOW);

for(Index = 0; Index < 30000; Index++)
{
digitalWrite(2,HIGH);
delayMicroseconds(50);
digitalWrite(2,LOW);
delayMicroseconds(50);

}

digitalWrite(8,HIGH);
digitalWrite(9,HIGH); //desliga o bico
delay(1000);


digitalWrite(3,LOW);

for(Index = 0; Index < 30000; Index++)
{
digitalWrite(2,HIGH);
delayMicroseconds(50);
digitalWrite(2,LOW);
delayMicroseconds(50);
}
delay(1000);

}

void loop()
{
 
}

 

a minha duvida está como posso temporizar o relay :

digitalWrite(9,HIGH);  desativar mais cedo que que o outro.

 

Como está, liga e desliga os 2 ao mesmo tempo, eu queria desativar 1 mais cedo , de que o outro.

Postado

Porque você definiu duas variáveis como entradas se relés são saídas???

 

E porque não está usando elas no código???

 

Você pode usar assim na declaração de variáveis 

 

#define rele1    8 // rele no pino 8 Arduino

#define rele2    9 // rele no pino 9 Arduino

 

E no código

 

digitalWrite(rele1,HIGH);

no lugar de 

digitalWrite(8,HIGH);

 

Por exemplo...

 

E ai pra você escolher o tempo de acionamento de reles, você deverá usar o timer ( há um tópico sobre o timer0, dê uma procurada). O timer é incrementado em tempos... Ai terá que ter duas variáveis, uma flag  para indicar que o relé foi acionado e  criar uma variável contador para contar o tempo que ficará acionado.

 

Ou ainda mudar o tempo de desligamento dos pinos inserindo um delay no meio... Assim terá um intervalo entre um e outro relé.

 

Flw...

 

Postado

Pode utilizar estas práticas para seus códigos:

 

Citar


long index;
#define a4988_step    2 // Pino de step do A4988 ligado no pino 2 Arduino
#define a4988_direcao 3 // Pino de direction do A4988 ligado no pino 3 Arduino
#define a4988_enable  4 // Pino de enable do A4988 ligado no pino 4 Arduino
#define relay1        8 // Relay no pino 8 arduino
#define relay2        9 // Relay no pino 9 arduino

void setup()
{
  pinMode(a4988_step, OUTPUT);      // A4988Step
  pinMode(a4988_direcao, OUTPUT);   // A4988 Direction
  pinMode(a4988_enable, OUTPUT);    // A4988 Enable
  pinMode(relay1, OUTPUT);          // Saida do relay 1
  pinMode(relay2, OUTPUT);          // Saida do relay 2
  digitalWrite(a4988_step, LOW);    // Garante nivel logico Zero neste pino.
  digitalWrite(a4988_direcao, LOW); // Garante nivel logico Zero neste pino.
  digitalWrite(a4988_enable, LOW);  // Garante nivel logico Zero neste pino.
  digitalWrite(relay1, HIGH);       // Garante nivel logico Zero neste pino.
  digitalWrite(relay2, HIGH);       // Garante nivel logico Zero neste pino.
}

void loop()
{
  digitalWrite(relay1, LOW);    // ativa
  digitalWrite(relay2, LOW);    // Nivel Logico 0

  // Realiza movimento do motor
  digitalWrite(a4988_enable, LOW);    // nivel Logico 0
  digitalWrite(a4988_direcao, HIGH);  // Nivel Logico 1
  for (index = 0; index < 30000; index++)
  {
    digitalWrite(a4988_step, HIGH);  // Nivel Logico 1
    delayMicroseconds(50);          // delay de 50us
    digitalWrite(a4988_step, LOW);  // Nivel Logico 0
    delayMicroseconds(50);          // delay 50us
  }

  digitalWrite(relay1, HIGH);  // Nivel Logico 1
  delay(1000);
  digitalWrite(relay2, HIGH); //desliga o bico

  // Realiza movimento do motor com direcao oposta
  digitalWrite(a4988_direcao, LOW);  // Nivel Logico 0
  for (index = 0; index < 30000; index++)
  {
    digitalWrite(a4988_step, HIGH);
    delayMicroseconds(50);
    digitalWrite(a4988_step, LOW);
    delayMicroseconds(50);
  }

  // desligar os pinos de controle do A4988
  digitalWrite(a4988_enable, LOW);
  digitalWrite(a4988_enable, LOW);
  digitalWrite(a4988_step, LOW);
  
  // laco infinito
  while (1); // Executa ate aqui e fica parado nesse ponto!!!
  // Fim do programa
}
 

 

Flw...

Postado
  • Autor

Obrigado caro amigo

Mas realmente me ajudou sobre arrumar a casa...

O programa estava um bocado desarrumado...

fiz outra maneira...

Uma pergunta?

É possível criar com o mesmo arduino três programa diferentes?

Exemplo:

Com botao1-faz de x a x

Com botão 2-faz de x a x

com botao 2-faz de x a x 

 

com o mesmo programa, apenas mudando o( for) para mais curto ou longo.

Postado

As possibilidades são inúmeras!!!

 

Você pode por meio de 1 botão realizar diversas funções... De acordo com o tempo na qual ele foi pressionado, pode fazer um teclado com 4x4 (16 teclas) com apenas um pino AD do microcontrolador, etc... Vai depender da sua lógica de programação.

 

As rotinas de verificar os botões você deixa dentro do método loop.

Recomendo pegar um livro de Arduino para ir estudando.

 

Flw...

 

Editado: por nagkiller

Postado

Este é um exemplo prático baseado no anterior:

 

Citar

/* Projeto Motor step com A4988

   Autor:     nagkiller
   Data:      03/03/2018
   Objetivo:  Realizar os movimentos com motor utilizando botões do tipo push bottom.
              Os pinos dos botões devem ter resistores de pullup.
*/
//******************************************************************************
long index;
long debounce = 150;  // tempo de debounce de teclas
int botaoLEDAgora;
int estadoBotao = LOW;
int botaoLEDAntes = HIGH;
long tempoPressionado = 0;
//******************************************************************************
#define a4988_step    2 // Pino de step do A4988 ligado no pino 2 Arduino
#define a4988_direcao 3 // Pino de direction do A4988 ligado no pino 3 Arduino
#define a4988_enable  4 // Pino de enable do A4988 ligado no pino 4 Arduino
#define botaoFrente   5 // Botão no pino 5 Anda pra frente
#define botaoRe       6 // Botão no pino 6 Anda pra traz
#define botaoLED      7 // Botão no pino 7 muda estado do LED
#define relay1        8 // Relay no pino 8 arduino
#define relay2        9 // Relay no pino 9 arduino
//******************************************************************************
void setup()
{
  pinMode(a4988_step, LED_BUILTIN); // LED_BUILTIN é o PINO13 NO UNO E NANO
  pinMode(a4988_step, OUTPUT);      // A4988Step
  pinMode(a4988_direcao, OUTPUT);   // A4988 Direction
  pinMode(a4988_enable, OUTPUT);    // A4988 Enable
  pinMode(relay1, OUTPUT);          // Saida do relay 1
  pinMode(relay2, OUTPUT);          // Saida do relay 2
  pinMode(botaoFrente, INPUT);      // Entrada Botao
  pinMode(botaoRe, INPUT);          // Entrada Botao
  pinMode(botaoLED, INPUT);         // Entrada Botao

  digitalWrite(a4988_step, LOW);    // Garante nivel logico Zero neste pino.
  digitalWrite(a4988_direcao, LOW); // Garante nivel logico Zero neste pino.
  digitalWrite(a4988_enable, LOW);  // Garante nivel logico Zero neste pino.
  digitalWrite(relay1, LOW);       // Garante nivel logico Zero neste pino.
  digitalWrite(relay2, LOW);       // Garante nivel logico Zero neste pino.
}
//******************************************************************************
void desligaControle()
{
  // desligar os pinos de controle do A4988
  digitalWrite(a4988_enable, LOW);
  digitalWrite(a4988_enable, LOW);
  digitalWrite(a4988_step, LOW);
}
//******************************************************************************
void motorFrente()
{
  // Realiza o metodo de andar pra frente
  digitalWrite(relay1, LOW);    // ativa
  digitalWrite(relay2, LOW);    // Nivel Logico 0

  digitalWrite(a4988_enable, LOW);    // nivel Logico 0
  digitalWrite(a4988_direcao, HIGH);  // Nivel Logico 1
  for (index = 0; index < 30000; index++)
  {
    digitalWrite(a4988_step, HIGH);  // Nivel Logico 1
    delayMicroseconds(50);          // delay de 50us
    digitalWrite(a4988_step, LOW);  // Nivel Logico 0
    delayMicroseconds(50);          // delay 50us
  }
  desligaControle(); // Metodo ou funcao que realiza o desligamento dos botoes.
}
//******************************************************************************
void motorRe()
{
  digitalWrite(relay1, LOW);    // ativa
  digitalWrite(relay2, LOW);    // Nivel Logico 0
  // Realiza movimento do motor com direcao oposta
  digitalWrite(a4988_direcao, LOW);  // Nivel Logico 0
  for (index = 0; index < 30000; index++)
  {
    digitalWrite(a4988_step, HIGH);
    delayMicroseconds(50);
    digitalWrite(a4988_step, LOW);
    delayMicroseconds(50);
  }
  desligaControle(); // Metodo ou funcao que realiza o desligamento dos botoes.
}
//******************************************************************************
void loop()
{
  //******************************************************************************
  // Realiza o metodo de inverter o estado do LED
  botaoLEDAgora = digitalRead(botaoLED);
  if (botaoLEDAgora == LOW && botaoLEDAntes == HIGH && millis() - tempoPressionado > debounce)
  {
    if (estadoBotao == HIGH)
      estadoBotao = LOW;
    else
      estadoBotao = HIGH;
    tempoPressionado = millis();
  }
  digitalWrite(LED_BUILTIN, estadoBotao); // LED no PINO 13
  botaoLEDAntes = botaoLEDAgora;  
  //******************************************************************************
  // Botao foi pressionado, passou o tempo de debounce e ainda está pressionado???
  if (!digitalRead(botaoFrente))
  {
    delay(debounce);
    if (!digitalRead(botaoFrente))
    {
      motorFrente();
    }
  }
  //******************************************************************************
  // Botao foi pressionado, passou o tempo de debounce e ainda está pressionado???
  if (!digitalRead(botaoRe))
  {
    delay(debounce); // tempo de delay debounce
    if (!digitalRead(botaoRe))
    {
      motorRe();
    }
  }
  //******************************************************************************
}
//******************************************************************************
 

 

Está faltando a implantação dos relays, porém você pode definir hora que eles serão usados ou não... por exemplo na hora que o motor for para um lado, aciona relay1, quando for executado um certo tempo, ele desliga... e assim com o outro relay.

 

Os comandos para o controle do A4988 não foram verificados por mim, então você terá que ler o datasheet dele e realizar as correções se houverem!!!

 

Flw...

Editado: por nagkiller

  • 2 semanas depois...
Postado
  • Autor

Muito obrigado

projecto feito graças ao meu amigo Nagkiller  e ao fórum...

 

Postado

por favor mude para resolvido e não devolvido, se puder também postar o programa finalizado seria bacana para outros usuários com mesmo problema,sucesso.

Participe agora da conversa!

Você pode postar agora e se cadastrar mais tarde. Se você tiver uma conta, faça login para postar com sua conta.

Visitante
Responder

Account

Navigation

Pesquisar

Pesquisar

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.