programacion de sensor ultrasonico con arduino y motor paso a paso

buen dia. estoy realizando un proyecto donde consiste en medir la altura de un producto dentro de un rango de 2 cm a 10 cm
la altura la medi con un sensor ultrasonico y con arduino , ese programa lo encontre en un foro aqui gracias; ahora quisiera saber como puedo mover un motor paso a paso segun la altura que mide el sensor ultrasonico, es decir el sensor mide un producto de 2 cm despues de medir hacer que el motor gire dos vueltas o se ajuste a dos cemtimetros y si viene otro producto mida por ejemplo 3 cm y envie la informacion al motor paso a paso bipolar para que se ajuste a los 3 cm
muchas gracias y atento a sus comentarios ...
 
gracias por responder senso el objeto y me mide la distancia y por parte del motor utilice un sketch que habia en internet para probar un motor paso a paso voy a pegar el codigo de los dos para que lo vea pero no se como hacer que el movimiento del motor dependa de la altura que sensa el sensor
este es el del motor


Código:
#define VELOCIDAD 1700


int steps = 2;
int direccion = 3;
int reset = 9;
int pasos = 3500;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(steps, OUTPUT); 
  pinMode(direccion, OUTPUT); 
  pinMode(reset, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(reset, LOW);    //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
  delay(100);
  digitalWrite(reset, HIGH);   //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
  digitalWrite(direccion, HIGH);
    

  for (int i = 0; i<pasos; i++)       //Equivale al numero de vueltas (200 es 360º grados) o micropasos
  {
    digitalWrite(steps, HIGH);  // This LOW to HIGH change is what creates the
    digitalWrite(steps, LOW); // al A4988 de avanzar una vez por cada pulso de energia.  
    delayMicroseconds(VELOCIDAD);     // Regula la velocidad, cuanto mas bajo mas velocidad.

  } 
  
  digitalWrite(reset, LOW);   //Mientras reset este en LOW el motor permanecerá apagado y no sufrirá. El chip apagará todos los puertos y no leerá comandos.
  delay(100);
  digitalWrite(reset, HIGH);   //Cuando reset se encuentre en HIGH el motor arrancará y leerá los comandos enviados.
  digitalWrite(direccion, LOW);

  for (int i = 0; i<pasos; i++)       //Equivale al numero de vueltas (200 es 360º grados) o micropasos
  {
      
    digitalWrite(steps, LOW);   // LOW to HIGH hace que el motor avance ya que da la orden
    digitalWrite(steps, HIGH);    // al A4988 de avanzar una vez por cada pulso de energia.
    delayMicroseconds(VELOCIDAD);         // Regula la velocidad, cuanto mas bajo mas velocidad.
  }
}


y este es el del sensor

Código:
#define PIN_TRIG 8
#define PIN_ECO 7

void setup () {
Serial.begin (9600);
pinMode (PIN_TRIG, OUTPUT);
pinMode (PIN_ECO, INPUT);
}
void loop(){
long duracion, distancia, altura;
digitalWrite(PIN_TRIG, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);

duracion = pulseIn(PIN_ECO, HIGH);
distancia = (duracion/2) / 29;
altura= 10-distancia;


if(distancia >= 500 || distancia<=0){
Serial.println("Fuera de rango");
}
else{
Serial.print("Altura= ");
Serial.print(altura);
Serial.println("cm");
}
delay(500);
}
 
Última edición por un moderador:
Atrás
Arriba