SENSOR DE ULTRASONIDOS

DEFINICIÓN:
Un sensor de ultrasonidos es un detector de proximidad que trabaja libre de roces mecánicos y que detectan objetos a distancias desde centímetros hasta algunos metros, este funciona enviando una onda de sonido y mide el tiempo que tarda en llegarle esa misma onda de sonido, y que haciendo algunas cuentas lo transforma a centímetros.metros, este funciona enviando una onda de sonido y mide el tiempo que tarda en llegarle esa misma onda de sonido, y que haciendo algunas cuentas lo transforma a centímetros.

 – ESTUDIO COMERCIAL:

Actualmente este sensor ronda con un precio en el mercado de 1€. El más barato que he visto ha sido en Aliexpress, donde su precio es de 0,58€.El más barato que he visto ha sido en Aliexpress, donde su precio es de 0,58€. https://es.aliexpress.com/item/690139020.html

FUNCIONAMIENTO:

El sensor se basa simplemente en medir el tiempo entre el envío y la recepción de un pulso sonoro. Sabemos que la velocidad del sonido es 343 m/s en condiciones de temperatura 20 ºC, 50% de humedad, presión atmosférica a nivel del mar. Transformando unidades resulta

343 \frac{m}{s} \cdot{} 100 \frac{cm}{m} \cdot{} \frac{1}{1000000} \frac{s}{\mu s} = \frac{1}{29.2} \frac{cm}{\mu s}

343m/s·100cm/m

Es decir, el sonido tarda 29,2 microsegundos en recorrer un centímetro. Por tanto, podemos obtener la distancia a partir del tiempo entre la emisión y recepción del pulso mediante la siguiente ecuación.

Distancia(cm)= \frac {Tiempo(\mu s)}{29.2 \cdot 2}

El motivo de dividir por dos el tiempo (además de la velocidad del sonido en las unidades apropiadas, que hemos calculado antes) es porque hemos medido el tiempo que tarda el pulso en ir y volver, por lo que la distancia recorrida por el pulso es el doble de la que queremos medir.

sensor-ultrasonico-explicacion
ESQUEMA SOBRE EL FUNCIONAMIENTO DEL SENSOR ULTRASONIDOS

SISTEMA ELÉCTRICO:

  • Directamente a los pines
  • EchoPin = 2;
  • TriggerPin = 4;

  • Montaje en protoboard

arduino-ultrasonidos-montaje

NUESTRO CÓDIGO:

//___________________   AQUI EMPIEZA EL PROGRAMA DEL ROBOT   ______________________
{
  //  avanza(100);                //avanza 100cm
  //  para(3);                    //para 3segundos
  //  retrocede(100);             //retrocede 100cm
  //  para(3);
  //  izquierda(90);              //Gira izda 90º
  //  para(3);
  //  derecha(90);
  para(3);
  siguelinea (600);            //sigue linea 500cm
  if (estado == 1) {
    estado = 0;
    obstaculo();             // hace esto si paró por obstáculo
  }
  if (estado == 2) {
    estado = 0;
    lineaNegra();             // hace esto si paró por linea negra
  }
  para(5);
}

//___________________   AQUI TERMINA EL PROGRAMA DEL ROBOT   ______________________

void avanza(int D)
{
  digitalWrite(pinIN1, HIGH);
  digitalWrite(pinIN2, LOW);
  analogWrite(pinENA, speedAI);
  digitalWrite(pinIN3, HIGH);
  digitalWrite(pinIN4, LOW);
  analogWrite(pinENB, speedAD);
  veMidiendo(millis() + (D * mscmA));    // mide hasta T

}
void veMidiendo (int T) {
  while (T > millis()) {
    pong = ping();
    if (pong < distSeg) {
      estado = 1;
      break;             // si distancia menor a la de seguridad termina
    }
  }
  //   Serial.println(pong);

int ping()
{
  long duration, distanceCm;
  digitalWrite(TriggerPin, LOW);  //para generar un pulso limpio ponemos a LOW 4us
  delayMicroseconds(4);
  digitalWrite(TriggerPin, HIGH);  //generamos Trigger (disparo) de 10us
  delayMicroseconds(10);
  digitalWrite(TriggerPin, LOW);
  duration = pulseIn(EchoPin, HIGH);  //medimos el tiempo entre pulsos, en microsegundos
  //  distanceCm = duration * 10 / 292 / 2;  //convertimos a distancia, en cm
  return duration;
}

      estado = 1;
      break;             // si distancia menor a la de seguridad termina
    }
    //    Serial.println(pong); // Serial.print('\t'); // para depuración

    uint16_t position = qtr.readLineBlack(sensorValues);     // 0=Izda a 5000=Dcha
   void obstaculo() {
  mueveServo();
}