Definindo a distância que o motor de passo deve andar

Boa noite amigos do fórum.

Estou montando esse projeto em que tenho um menu lcd com 3 botões onde acesso por eles e defino uma distância que é em cm. Agora estou colocando um motor de passo para ele fazer a mesa (que é sucata de um dvd) andar a distância que definir no display, já testei que  para andar 1cm o motor tem que dar 1400 passos. Não sei como fazer essa lógica de quando defino certo valor la o motor de passo execute, nunca vi algum exemplo assim, se alguém puder passar algum material ou dica ficarei grato, estou usando arduino uno, display lcd 16x2 e motor de passo Motor De Passo 5v 28ybt-48 Com Driver Uln2003. Segue fotos,e o código que já montei.

Obrigado.

#include <avr/wdt.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
int programas[21];
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
boolean up = 7;
boolean sete = 6;
boolean dow = 5;
byte h = 0;
boolean o = 0;
int d = 0;
int d1 = 0;
byte menu = 0;
byte program =0;
int distancia = 0;
int reading = 0;
byte estouro = 0;
void setup() {
  Serial.begin(9600);// initialize serial communications at 9600 bps
  lcd.begin(16, 2);
  pinMode(up, INPUT);
  digitalWrite(up, HIGH);
  pinMode(dow, INPUT);
  digitalWrite(dow, HIGH);
  pinMode(sete, INPUT);
  digitalWrite(sete, HIGH);
 lcd.setCursor(0, 0);
  lcd.print("DR automacao");
  lcd.setCursor(0, 1);
  lcd.print("Seja bem vindo");
 delay(2500);
  lcd.setCursor(0, 0);
  lcd.print("Iniciando...");
 lcd.setCursor(0, 1);
  lcd.print("               ");
  delay(3000);
  lcd.clear();
  distancia = EEPROM.read(1);

  o = EEPROM.read(51);
  for (int x=0; x<10; x++){programas[x] = EEPROM.read(x);}
  }
void menus()

   wdt_disable();
   delay(500);
   lcd.clear();
   while(menu > 0)
   {
   lcd.setCursor(0,0);
  if(menu==1){lcd.print("Definir Distancia "); if(digitalRead(sete)==LOW){h = 1; menu=0; dist();}}

      if(digitalRead(up)==LOW && menu < 6){menu++;estouro = 0;}
      if(digitalRead(dow)==LOW && menu > 0){menu--;estouro = 0;}
      if(estouro == 20){ menu = 0 ; estouro = 0;}
      delay(200);
   }
   lcd.clear();
}
void dist()
{
  wdt_disable();
  delay(500);
  lcd.clear();
  while(h > 0)
  {
    lcd.setCursor(0,0); lcd.print("Definir Distancia ");
    if(digitalRead(up) == LOW && distancia < 100 ){distancia ++;estouro = 0;}
    if(digitalRead(dow) == LOW && distancia > 0){distancia --;estouro = 0;}
    if(digitalRead(sete) == LOW){h = 0;estouro = 0;}
    lcd.setCursor(5, 1);lcd.print(distancia);lcd.print(" cm   ");
    if(estouro == 20){ h = 0 ; estouro = 0;}
    delay(150);
  }
EEPROM.write(50, distancia);
for(int x = 0; x < 16; x++) {delay(90);lcd.setCursor(x,1);lcd.write(B11111111);}
lcd.clear();
}
void informa()
{
 if(d1<= 10){lcd.setCursor(0,1);lcd.print("Distancia: ");lcd.print(distancia);lcd.print(" cm             ");}
 
}
 void loop()
{
  informa();
  if(digitalRead(sete)==LOW){menu =1; menus();}
 
  } 

Exibições: 326

Anexos

Responder esta

Respostas a este tópico

Bom, certamente é possível apenas com o motor de passo , mas ficaria melhor se vc usasse um sensor ultrassonico  como um HC-SR04.

Obrigado Ernane pela contribuição, o objetivo mesmo é fazer o motor de passo mesmo andar o quanto for definido pelos botões.

Abraço

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço