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();}
}
Tags:
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por