//Bibliotecas
#include <HX711.h> //adiciona a biblioteca ao codigo
#include <Ultrasonic.h> // Declaração de biblioteca
#include <AccelStepper.h>
//Definições Globais
#define DISTANCIA_INICIAL 23 //23 cm
#define DISTANCIA_FINAL 9.50 //9.50 cm
#define TEMPO_ESPERA 1 //declaracao da variavel de espera
#define PASOS_CM 300 //quantos passos por cm
//Ultrassinico
Ultrasonic ultrasonic1(48, 49); // Instância chamada ultrasonic com parâmetros (trig,echo)
//Carga
const int PINO_DT = A1;
const int PINO_SCK = A0;
HX711 escala;
float fator_calibracao = -46500; //pre-definicao da variavel de calibracao
//Motor
AccelStepper stepper(3, 8, 9);
int incomingByte = 0; // variável para o dado recebido
boolean analise;
void setup () {
Serial.begin(9600);
Serial.println("InicioSistema");
escala.begin (PINO_DT, PINO_SCK); //inicializacao e definicao dos pinos DT e SCK dentro do objeto ESCALA
analise=false;
}
void loop(){
if(analise==true){
Serial.println("Passo:"+String(stepper.currentPosition())+" / Distancia:"+String(getUltrassom()) + "Carga:"+String(getCarga()));
stepper.run();
if (stepper.distanceToGo() == 0){
posicaoInicial();
}
}
if (Serial.available() > 0) {
// lê do buffer o dado recebido:
String letra = Serial.readString();
// responde com o dado recebido:
Serial.print("Recebido a Info: "+letra);
if(letra.charAt(0)=='a'){//letra a==97 calibracao
Serial.println("Recebeu - Calibração");
posicaoInicial();
}else if(letra.charAt(0)=='b'){//letra b==98
Serial.println("Recebeu - Análise");
analise=true;
stepper.moveTo(30000);
stepper.setMaxSpeed(1000);//1100
stepper.setAcceleration(100);
escala.tare();
}else if(letra.charAt(0)=='c'){//Letra c=99 cancelar
Serial.println("Recebeu - Cancelar");
analise=false;
posicaoInicial();
}
}
delay(10);
}
void posicaoInicial(){
Serial.println("Procedimento para posição inicial");
int passos=1;
Serial.println(abs(getUltrassom()- DISTANCIA_INICIAL));
stepper.setMaxSpeed(1000);//1100
stepper.setAcceleration(500);
while(abs(getUltrassom()- DISTANCIA_INICIAL)>2){
Serial.println(abs(getUltrassom()- DISTANCIA_INICIAL));
Serial.print("Distância:");
Serial.print(getUltrassom());
if(getUltrassom()>DISTANCIA_INICIAL){
Serial.println("Avançar");
if (stepper.distanceToGo() == 0){
stepper.setCurrentPosition (stepper.currentPosition());
stepper.moveTo(3000);
}
}
else{
Serial.println("Voltar");
if (stepper.distanceToGo() == 0){
stepper.setCurrentPosition (stepper.currentPosition());
stepper.moveTo(-3000);
}
}
stepper.run();
delay(1);
}
stepper.setCurrentPosition (stepper.currentPosition());
analise=false;
}
float getUltrassom() {
float cmMsec, inMsec;
long microsec = ultrasonic1.timing();
cmMsec = ultrasonic1.convert(microsec, Ultrasonic::CM);
return cmMsec;
}
float getCarga(){
escala.set_scale(fator_calibracao); //ajusta a escala para o fator de calibracao
return escala.get_units();
}
Estou usando essa codificação e não consigo fazer ele mudar de sentido, qualquer comando que eu coloco ele gira apenas para um lado, no caso sentido horário...
desde já agradeço!!!
Tags:
Boa tarde CHS,
Recomendações:
1. Remova seu sketch da área de texto do seu tópico;
2. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar
3. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada
linha e facilita a ajuda.
4. Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
com o seu sketch.
RV mineirin
Boa noite,
Você está usando a Biblioteca AccelStepper para controlar o motor de passo:
http://www.airspayce.com/mikem/arduino/AccelStepper/
Achei esse tutorial completíssimo sobre como usar o TB6600 com a Biblioteca AccelStepper:
https://www.makerguides.com/tb6600-stepper-motor-driver-arduino-tut...
Estude-o, teste-o. Aprenda como controlar o motor.
Se tiver dúvida, informe.
Depois que estiver entendo tudo, monte e teste o seu projeto.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por