Autor Tópico: Programação para divisoes de motor de passo no arduino  (Lida 2134 vezes)

Description:

0 Membros e 1 Visitante estão vendo este tópico.

Offline renato.pereira

  • Novato
  • *
  • Posts: 1
  • Sexo: Masculino
  • Forum GUIA CNC - A Maior comunidade CNC do Brasil
  • Cidade - UF: florianopolis
  • Nome:: renato rodrigues pereira
  • Profissão: tecnologo em automação industrial e torneiro mecanico
Programação para divisoes de motor de passo no arduino
« Online: 24 de Janeiro de 2016, 14:20 »
Então meu projeto seria que seu eu inserir um numero em um teclado matricial, vamos manter o 60 como exemplo, seria o numero de passos que eu quero, pois eu irei fazer a usinagem de engrenagem portanto cada passo desses 60 seria um dente, mas esse valor vai variar de acordo com minha necessidade, posso precisar fazer 6 passos (6 dentes) ou 100 passos(100 dentes).

Seria possível adaptar o código  para realizar essa matemática em passos?

Eu pensei ate em fazer com contador como Switch case, mas acho que não iria funcionar, somente com um botão de pulso, onde em cada pulso teria uma matemática especifica de acordo com o numero setado nesse botão.

Creio que eu consigo adaptar os graus do motor a essa logica, mas ai é que tenho dificuldade entendeu, podes me ajudar?

abaixo a programacao que ja fiz:

#include <LiquidCrystal_I2C.h>//biblioteca lcd
#include <Stepper.h>//biblioteca motor
#include <Keypad.h>//biblioteca teclado
#include <Wire.h>//biblioteca interface lcd


LiquidCrystal_I2C lcd(0x3F,2,1,0,4,5,6,7,3, POSITIVE); //endereço LCD
Stepper myStepper(200, 13, 12);//velocidade e pinos motor ao driver
const byte Coluna = 3;//teclado
const byte Linha = 4;//teclado
const int steeps = 200; //passos motor
int i = 0;
int incremento = 1;
int passo;
int buzzer = 12;//pino buzzer
int botaoliga = 3;//pino botao liga

char Teclas[Linha][Coluna] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}};

byte Pino_linha[Linha] = {4,5,6,7};//endereço teclas
byte Pino_coluna[Coluna] = {8,9,10};//endereço teclas

Keypad keypad = Keypad(makeKeymap(Teclas), Pino_linha, Pino_coluna, Linha, Coluna );//configuração teclado

void setup()
{
  lcd.begin(16, 2);//configuração lcd 
  lcd.setCursor(0,0);//imprime lcd
  lcd.print("RVE AUTOMACAO");//imprime lcd
  delay(15000);//tempo
  lcd.clear();//limpa lcd
  lcd.print("SISTEMA PRONTO!");//imprime lcd
  delay(5000);//tempo
  lcd.clear();//limpa lcd
  myStepper.setSpeed(60);
  pinMode(botaoliga,INPUT);//botao liga
  digitalWrite(botaoliga,HIGH);//estado no nivel do botao, aqui em nivel alto
}



void loop()
{
  lcd.setCursor(0,0);// onde imprime no lcd
 
  lcd.print("NUMERO DE DENTES:");//imprime lcd
 
  int angulo = 0;//angulo do motor
 
  int fator = 0;// Fator decimal pra casas da dezena/centena
 
  i = 0;
 
  passo=0;//passo motor
          // Obs:Pra digitar 40, tem que digitar 0, 4, 0

  while (i < 100)
  {
    char teclaPressionada = keypad.getKey();//tecla pressionada
   
    if (teclaPressionada != NO_KEY)
    {
      lcd.setCursor(i, 1);//onde imprime lcd
      lcd.print(teclaPressionada);//imprime a tecla pressionada
     
                                  //a tecla é ASCII e tem que ser convertido pra inteiro
                                  //passo = passo+teclaPressionada;
                                  //      |  dezena/centena  | + |         unidade           |
     
     
     
      angulo = (int)(angulo * fator) + (int)(teclaPressionada - '0');//coversao da tecla pro angulo

     
      fator = 10;// Incrementa fator para dezena/centena

      i++;//entrada += 1;
     

      if (i == 3) // (i == 3 && digitalRead(botaoliga) == LOW)
      {
        passo = (steeps * angulo) / 360;// Converte de angulo para passos
        delay(500); //tempo
        lcd.clear();//limpa lcd       
        //delay(500);//tempo
        //lcd.println();
        lcd.print("USINANDO");//imprime no lcd
        lcd.setCursor(0,0);//onde imprime no lcd
        delay(10000);
        lcd.clear();
        lcd.setCursor(0,0);//imprime lcd
        lcd.print("RVE AUTOMACAO");//imprime lcd
       
        //lcd.setCursor(0,0);//onde imprime no lcd
        //lcd.print();
        //lcd.print("NUMERO DE PASSOS:");//imprime no lcd
        //lcd.print(passo);//imprime no lcd
     
       
 
      }   
    }
    delay(300); // debounce
  }

  lcd.print("USINANDO");//imprime no lcd
  lcd.setCursor(0,0);//onde imprime no lcd
  // Agora faz o motor girar
  myStepper.step(passo);//controle do motor
  delay(300); // Espera motor terminar de dar os passos
}

 


Offline Blackmore

  • CNCMASTER
  • ******
  • Posts: 1568
  • Sexo: Masculino
  • Profissão: Projetista Mecânico/Automação
Programação para divisoes de motor de passo no arduino
« Resposta #1 Online: 28 de Janeiro de 2016, 15:06 »
Renato...

Pelo que entendi de seu relato, você deseja fazer um divisor 'universal' eletronico ... uma boa idéia, mas talvez (veja bem talvez) ... se você utilizar polias sincronizadoras nos eixos motor e movido com uma boa relacao de transmissão, te ajude a fazer essa contagem certinho.
Ou então, você poderiai utilizar um driver de motor onde seja possivel determinar os micro passos e assim aumentando a sua divisao de passos eletronicamente.
Ultima sugestao ... procure aqui mesmo no Guia um topico sobre micro passos, que se minha memória nao me engana, o sir Jorge Lourenço Jr explica alguns cuidados a tomar e como fazer.
Caso tudo o que comentei jah tenha sido visto e executado em seu codigo acima, me descupe, estou usando o forum pelo tapatalk, aí fica dificil tentar analisar um codigo tao extenso....

Abraco!

 

/** * */