Icono del sitio AranaCorp

Uso de un sensor de distancia GP2Y0A21 con Arduino

infrared sensor scheme

El sensor GP2Y0A21 es un sensor de distancia por infrarrojos de Sharp para la detección de obstáculos situados a una distancia entre 10 y 80 cm.

Hardware

Principio de funcionamiento

El sensor de distancia GP2Y0A21 uso luz infrarroja y triangulación para calcular la distancia a un objeto. Un LED de infrarrojos envía una señal de luz invisible para el ojo que se refleja en la presencia de un objeto. Esta reflexión es capturada por un fotorresistentes que deduce de este modo el ángulo de reflexión y por lo tanto la distancia. El sensor envía un valor analógico entre 0 y 5V.

diagrama

El sensor de distancia GP2Y0A21 se puede alimentar con 5V. Pin Vcc del sensor puede ser conectado al pin 5V del microcontrolador, el pin GND a tierra del microcontrolador y la señal está conectada a una entrada analógica del microcontrolador.
GP2Y0A21 debe conectarse como se muestra a continuación.

Código

Para mostrar el valor físico del sensor, es necesario conocer la regla de conversión. Para tener un código limpio y fácil de leer, lo mejor es colocar el código en una función secundaria. Vamos a crear una función que se encarga de leer el valor del sensor y el valor físico convertido. Leemos el valor bruto del sensor usando la función analogRead (), entonces convertimos este valor en centímetro. Se define un valor de 200 por debajo del cual se considera un obstáculo detectado. el siguiente código muestra el uso GP2Y0A21:

//Parameters
const int gp2y0a21Pin  = A0;

//Variables
int gp2y0a21Val  = 0;

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init ditance ir
  pinMode(gp2y0a21Pin, INPUT);
}

void loop() {
  testGP2Y0A21();
}

void testGP2Y0A21( ) { /* function testGP2Y0A21 */
  ////Read distance sensor
  gp2y0a21Val = analogRead(gp2y0a21Pin);
  Serial.print(gp2y0a21Val); Serial.print(F(" - ")); Serial.println(distRawToPhys(gp2y0a21Val));
  if (gp2y0a21Val < 200) {
    Serial.println(F("Obstacle detected"));
  } else {
    Serial.println(F("No obstacle"));
  }
}

int distRawToPhys(int raw) { /* function distRawToPhys */
  ////IR Distance sensor conversion rule
  float Vout = float(raw) * 0.0048828125; // Conversion analog to voltage
  int phys = 13 * pow(Vout, -1); // Conversion volt to distance

  return phys;
}


Aplicaciones

Fuentes

Encuentre otros tutoriales y ejemplos en el generador de código automático
Arquitecto de Código

Salir de la versión móvil