# programacion de sensor ultrasonico con arduino y   motor paso a paso



## garzon (Feb 25, 2015)

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 ...


----------



## Fogonazo (Feb 26, 2015)

¿ Que llevas hecho hasta ahora ?


----------



## garzon (Feb 26, 2015)

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 



```
#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


```
#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);
}
```


----------

