Haga clic para más productos.
No se encontraron productos.

Tutorial Sensor de Distancia SHARP

139287

En este tutorial trabajaremos los sensores de distancia Sharp, veremos las  características, conexiones y aplicaciones prácticas de estos sensores, analizaremos las diferencias entre los sensores GP2Y0A21, GP2Y0A02, GP2Y0A710 entre otros. Veremos ejemplos básicos para poder leer los sensores y realizaremos la calibración para tener una lectura en cm.


Un sensor SHARP es un sensor óptico capaz de medir la distancia entre él y un objeto, para esto el sensor con la ayuda de un emisor infrarrojo y un receptor miden la distancia usando triangulación.

El método de triangulación consiste en medir uno de los ángulos que forma el  triángulo emisor-objeto-receptor, el Receptor es un PSD (Position Sensitive Detector) que detecta el punto de incidencia el cual depende del ángulo y a su vez de la distancia del objeto.

Metodo de triangulacion SHARP

La geometría del sensor y de su óptica es el que limita el rango del sensor.

El termino SHARP (Agudo) es porque tiene un rango de visión muy reducido, esto porque la luz que emite es puntual,  lo que permite usar el sensor para escanear o mapear áreas, pero teniendo en cuenta que objetos pequeños serán difíciles de detectar.

También podemos usar varios sensores SAHRP para ampliar el rango de visión estos se pueden poner en diferente dirección e incluso  en la misma dirección siempre y cuando las líneas de visión no queden muy cercanas.

Una ventaja adicional es que no son sensibles a la luz ambiental o el Sol, enemigo de los sensores infrarrojos, un SHARP usa una luz infrarroja intermitente  con una frecuencia determinada, que en el receptor es filtrada y elimina cualquier otra fuente de luz diferente a la frecuencia emitida.


Existen varios fabricantes y modelos de sensores SHARP, para escoger un sensor SHARP hay que tener en cuenta el rango.

 

SHARPMODELORANGO
Sensor Infrarrojo de distancia SHARP GP2Y0A21 GP2Y0A21 10 a 80cm
Sensor Infrarrojo de distancia SHARP GP2Y0A21 GP2Y0A02 20 a 150cm
Sensor Infrarrojo de distancia SHARP GP2Y0A710 GP2Y0A710 100 a 550cm

La salida del sensor Sharp no es lineal sino tiene una forma potencial negativa pero a partir del rango mínimo como se muestra en la siguiente imagen.

 

Curva V vs D sensor SHARP


Notar que para distancias pequeñas, la lectura del sensor podría confundirse con una distancia grande. Es por esto que es recomendable asegurarnos que el objeto no se acerque demasiado al sensor con el fin de evitar una lectura incorrecta.

Una buena opción es ubicar el sensor cm atrás  del filo o de la posición que inicialmente queremos medir (ver imagen).

Ubicacion del sensor SHARP

Por ejemplo si nuestro sensor es el GP2Y0A21 es necesario restringir mecánicamente los 10cm en donde el sensor se comporta de forma inestable.



Conexión entre Sensor SAHRP y Arduino

 

SENSOR SHARP

ARDUINO

1. Vout

A0

2. GND

GND

3. Vcc

5V

 

conexion SHARP y arduino


Adicional a la conexión se puede conectar un condensador electrolítico de 10uF o más entre Vcc y GND pero lo más cercano al sensor, esto con el fin de eliminar el ruido en la fuente que genera el sensor.



Ej 1. Lectura ADC del sensor SHARP



El sensor SHARP tiene una salida analógica, que podemos leer desde el arduino como si trabajáramos con un potenciómetro.

void setup() {
  // Comunicación seria a 9600 baudios
  Serial.begin(9600);
}

void loop() {
  // Leemos la entrada analógica 0 :
  int ADC_SHARP = analogRead(A0);
  Serial.println(ADC_SHARP);
  delay(10);
}


Si abrimos el monitor serial podemos ver que al acercar un objeto al sensor el valor del adc aumenta mientras que si lo alejamos disminuye.

Lectura ADC del SHARP



También podemos observar que a pesar que el objeto lo dejemos estático, el valor de la lectura varía, esto por el ruido que genera el sensor, el nivel del ruido va a depender de la fuente que usen, para visualizar mejor el ruido pueden abrir el serial plotter de arduino:

plotter ADC del SHARP

El ruido que se observa no es por una mala precisión del sensor sino por el ruido que el emisor infrarrojo del sensor genera en la fuente, y esto también afectará a otros sensores analógicos que tengan conectado.

Par eliminar la lectura agregaremos un filtro, en nuestro caso solo usaremos un promedio de n muestras, pero pueden implementar cualquier otro filtro que les parezca adecuado

el nuevo sketch seria el siguiente:

void setup() {
  // // Comunicación seria a 9600 baudios
  Serial.begin(9600);
}


void loop() {
  // Leemos el promedio de la entrada analógica 0 
  int ADC_SHARP=ADC0_promedio(20);
 
  Serial.println(ADC_SHARP);
  delay(10);
}

int ADC0_promedio(int n)
{
  long suma=0;
  for(int i=0;i<n;i++)
  {
    suma=suma+analogRead(A0);
  }  
  return(suma/n);
}


Ahora podemos notar que el ruido a disminuido considerablemente:

plotter filtro ADC del SHARP


La imagen es usando el filtro de un promedio de 20 muestras. Pueden modificar la cantidad de muestras de acuerdo al nivel de ruido que tengan, a mayor cantidad de muestras tendrán mejores resultados, pero teniendo en cuenta que también aumentara el tiempo de la lectura, para 20 muestras arduino demora aproximadamente 2ms en sacar el promedio, un tiempo aceptable para casi todas las aplicaciones.


Ej 2. Detección de obstáculos: Sensor de proximidad

 

Una de las aplicaciones en las que más se usa el sensor SHARP es para detectar obstáculos y de esta forma se estaría trabajando simplemente como un sensor de proximidad, pues solo nos interesa saber si hay algún objeto frente a nosotros mas no la distancia.

En este caso primero debemos de determinar la distancia a la cual queremos que se considera que el objeto está cercano.

Para este ejemplo trabajaremos como dicho umbral 30cm pero ustedes pueden tomar cualquier otra distancia.

El siguiente paso es usar una regla y ubicar un objeto frente al sensor exactamente en 30cm, la distancia se mide a partir del lente del sensor.

Usando el primer ejemplo tomamos la lectura del ADC correspondiente para dicha distancia: En nuestro caso el valor es de 195.

Finalmente en el programa solo hay que comparar la lectura del sensor con el umbral para determinar si hay o no objetos.

A continuación mostramos el sketch para usar el SAHRP como un detector de obstáculos o sensor de proximidad

void setup() {
  // Comunicación seria a 9600 baudios
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}


void loop() {
  // Leemos el promedio de la entrada analógica 0 :
  int ADC_SHARP=ADC0_promedio(20);
  if(ADC_SHARP>195)
  {
    digitalWrite(13, HIGH);
    Serial.print("Objeto Detectado:");
  }
  else
  {
    digitalWrite(13, LOW);
    Serial.print("Objeto ausente:");
  }
  
  Serial.println(ADC_SHARP);
  delay(10);
}

int ADC0_promedio(int n)
{
  long suma=0;
  for(int i=0;i<n;i++)
  {
    suma=suma+analogRead(A0);
  }  
  return(suma/n);
}


Cambiando el valor de 195 pueden ampliar o disminuir el umbral de detección.

En nuestro ejemplo solo encendemos el LED que está conectado al pin 13 y confirmamos por el puerto serial que se ha detectado un objeto, pero esto dependerá de su aplicación.

A continuación se muestra la salida del monitor serial cuando acercamos un objeto al sensor.

deteccion de obtaculos SHARP


Ej 3. Realizando medidas de distancia con el Sensor Sharp


En este ejemplo usaremos el SHARP para medir distancia, para esto solo es necesario tener la relación ADC vs Distancia. En el del datasheet del sensor encontramos la relación Voltaje Vs Distancia. Pode aplicar regresión a dicha curva y despejar voltaje para reemplazar por ADC , nosotros tomaremos muestras y hallaremos la ecuación.



De la curva del datasheet solo tomamos la forma que como se observa es potencial pero teniendo en cuenta que la ecucion trabajará dentro del rango de trabajo del sensor.

ecuacion potencia

Como voltaje y el valor del ADC que leemos desde el arduino son proporcional, hallaremos la ecuación en función del valor del ADC, esto con el fin de ahorrarnos un cálculo por parte del arduino para obtener el voltaje. Entonces para nosotros “x” es el valor del ADC

Con el ejemplo 1 pero aumentando el número de muestras para eliminar el ruido, realizamos dos medidas o puntos. Estos puntos no tienen que ser muy cercanos, por ejemplo lecturas a 15cm y 50cm para el sensor SHARP GP2YA021.

Estos dos puntos medidos son:


X1 = 350 para L1=15cm
X2 = 129  para L2=50cm



Reemplazando estos valores en la ecuación, podemos formar un sistema de ecuaciones y hallar las variables “a” y “b”,

Con nuestros valores tomados la ecuación obtenida es:

ecuacion para la distancia sensor SHARP

El mismo método pueden aplicar para otros modelos de Sensores SHARP.


A continuación mostramos el sketch para sensar distancia.

void setup() {
  // Comunicación seria a 9600 baudios
  Serial.begin(9600);
  pinMode(13, OUTPUT);
}


void loop() {
  
  long tiempo=millis(); //tiempo antes de iniciar la lectura
  int D_cm=distancia(20); //lectura de distancia
  tiempo=millis()-tiempo; //milisegundos que duró la lectura
  Serial.print("Tiempo de lectura: ");
  Serial.print(tiempo); 
  Serial.print("ms  Distancia: ");
  Serial.print(D_cm);
  Serial.println("  cm");
  delay(100);
}

float distancia(int n)
{
  long suma=0;
  for(int i=0;i<n;i++)
  {
    suma=suma+analogRead(A0);
  }  
  float adc=suma/n;
  float distancia_cm = 17569.7 * pow(adc, -1.2062);
  return(distancia_cm);
}


Como se observa solo se agregó la ecuación antes calculada y adicionalmente a esto mostramos el tiempo en milisegundos que demora en realizar la lectura, esto con el fin de no excedernos en tomar muchas muestras en cada lectura, y poder elegir o combinar entre el nivel de ruido que podemos tolerar y el tiempo de lectura.

A continuación mostramos  la salida del monitor serial cuando se ubica un objeto a 30 cm del sensor.

Lectura de distancia con SHARP


De igual manera pueden trabajar con los otros modelos de SHARP, si están trabajando con el SHARP GP2Y0A02 deben obtener una ecuación cercana a esta:


ecuacion de distancia SHARP GP2Y0A02

Productos relacionados
Artículos relacionados
23 Comentarios
  • Em******

    Em****** 27/07/2022 Responder

    Planeo utilizar este sensor como detector de obstáculos para un mini sumo de combate, para evitar que la luz solar lo afecte quiero colocarlo dentro de la carcaza, al ser de detección puntual no debería tener problemas por la misma carcaza ¿o sí?
  • Ma****

    Ma**** 23/03/2021 Responder

    Hola. soy nuevo en ésto.Dónde puedo encotrar las instrucciones para agregarle una memoria que almacene las mediciones? Gracias!
    • Fe******

      Fe****** 08/02/2022 Responder

      Hola que tal disculpa pudiste encontrar las instrucciones para almacenar las mediciones?
  • Ju** ****** ** ****io

    Ju** ****** ** ****io 12/04/2020 Responder

    Hola quisiera saber cual es la formula para el sensor Sharp Gp2y0a710k0f, ya que en el datasheet no esta la formula. Gracias
  • Vi****

    Vi**** 12/03/2020 Responder

    Para Tiva C como puedo declarar la ecuación
  • Ed*****

    Ed***** 05/02/2020 Responder

    Con respecto al trabajo en el exterior, con el 02.afecta la luz ambiente, medianamente lo solucione poniendo valor mínimo de 195 a 250. El problema es que reduce la detección a unos 50 CM. Y necesitaría un mínimo de 80 CM. Lo necesito como sensor de movimiento para medir velocidad de carrera.
  • Mi****

    Mi**** 25/03/2019 Responder

    Estupendo tutorial. Me gustaría saber que precisión se puede alcanzar en la medición de la distencia. Mi propósito es hacer un "escaner tridimensional" y obtener la nube de puntos del objeto con las medidas de este sensor
  • Vi***

    Vi*** 21/03/2019 Responder

    buenas noches, éste Sensor me puede servir para contar objetos?
  • Al*

    Al* 07/12/2018 Responder

    Muchas gracias por el tutorial, me viene estupendo. Una cosa, sin ánimo de desmerecer el estupendo tutorial, lo de "Sharp" creo que no se refiere al tipo de sensor ni a su funcionamiento, sino al FABRICANTE (http://www.sharp-world.com/products/device/lineup/selection/opto/haca/diagram.html). Además, para describir un ángulo en inglés se utiliza la palabra "acute", no "sharp".
    De nuevo gracias por la info!!
  • Os*** ***az

    Os*** ***az 30/09/2018 Responder

    Oye en el tercer esquema de programación en arduino el sensor no me reconoce ninguna entrada y creo qye se deba a que no se le declara como A0 en nngun momento, dimde si estoy equivocado, esque no me funciona la programacion ni el led en ese programa
  • Jo***

    Jo*** 29/05/2018 Responder

    Puedo usar este sensor para medir nivel de agua? Hay alguna forma de hacerlo o el agua no refleja nada de la luz infrarroja? Yo sé que se suele usar un sensor ultrasónico para eso pero no quiero cablear los 4 pines de esos sensores.
    • Ja**** *****do

      Ja**** *****do 28/10/2019 Responder

      Justo estoy investigando lo mismo
  • Je** ***te

    Je** ***te 07/05/2018 Responder

    Disculpe el valor de 20 en la linea int D_cm=distancia(20) de la lectura de distancia con el sensor a que corresponde, es decir que funcion cumple ese numero
    • Pa*******

      Pa******* 03/10/2018 Responder

      El numero de veces que se hara el bucle de la funcion distancia
      • Lg***

        Lg*** 04/12/2019 Responder

        De hecho indica la cantidad de veces que promedia. Por ejemplo: si el parametro es 20, quiere decir que sensara 20 veces y luego hara el promedio con 20.
  • Ho** ** ******** *** ***** *** ****** ***** ***** ***** ** ***or

    Ho** ** ******** *** ***** *** ****** ***** ***** ***** ** ***or 05/04/2018 Responder

    Checo
  • Di*** *****ón

    Di*** *****ón 01/08/2017 Responder

    Hola, no se mucho de mecatrónica ni de programación, pero quiero accionar un motor cualquiera através de un arduino y un sensor Sharp, alguien podría ayudarme en estos aspectos, porfavor. Gracias.
  • ni*****

    ni***** 12/06/2017 Responder

    esos sensores que angulo de detección tienen ?
    • Na*****

      Na***** 18/06/2017 Responder

      Hola Nicolas, estos sensores no tienen ángulo de visión, sino línea de visión. De allí su término SHARP
  • Se**** ********ky

    Se**** ********ky 22/02/2017 Responder

    Hola, estoy con un proyecto donde necesito medir desplazamientos pero con una precisión de décimas de milímetro, tienes alguna idea q tipo de sensor podría utilizar?
    • Os*** ****** *****ro

      Os*** ****** *****ro 26/02/2019 Responder

      Hola! Encontraste algo de ayuda con eso? Estoy en una situación parecida.
      Saludos.
  • Ri*****

    Ri***** 23/10/2016 Responder

    Hola! tengo el sensor SHARP GP2Y0A02 estuve probando el circuito de encender un led si se encuentra un objeto y note que a la luz del sol tiene malas lecturas enciende y apaga el led determinadas veces estando en movimiento el sensor (como si encontrar obstáculos) cosa que no pasa estando bajo techo, asi funciona al 100%.
    en el post menciona que la luz ambiente no influye en las mediciones, en el datasheet habla de algo parecido, que la influencia que tiene es minima y no afecta en casi nada. pero la experiencia que tengo es todo lo contrario, alguna sugerencia?
    • Na*****

      Na***** 25/10/2016 Responder

      Estimado Richard, podría deberse a la calidad del sensor, el fabricante también recomienda ubicar el sensor perpendicular al movimiento. Si tu movimiento es horizontal, ubica el sensor en forma vertical.
Dejar un comentario
Deja su comentario

Menú

Ajustes

Crear una cuenta gratuita para usar listas de deseos.

Registrarse