No se pueden obtener lecturas consistentes del detector de rango IR de Sharp

6

Estoy en las primeras etapas de intentar construir un robot que deambula y construye un mapa de su entorno. Estoy usando un Arduino y actualmente tengo un Sharp 2Y0A21 El detector de rango IR se colocó encima de un servo para que pueda funcionar un barrido de 180 grados en incrementos de 10 grados.

El problema es que las lecturas de voltaje del sensor IR de Sharp no son consistentes. Si escribo una aplicación que simplemente envía el valor que lee del sensor a través del puerto serie y lo muestro en mi computadora portátil, colocando el sensor apuntando a un objeto, los valores rebotan.

Observando los valores, puedo ver que tiende a reportar un valor más que el resto, así que escribí una clase SharpReader que toma 20 muestras y luego devuelve el modo de estos valores. Esto ahora significa que obtengo valores más consistentes, pero no tan buenos como me gustaría.

Tengo un código que realiza la exploración de 180 grados y envía el ángulo y la distancia a la serie. Luego tengo un script de python que recibe estos valores y dibuja lo que ve en la pantalla, ignorando cualquier valor en cualquiera de los extremos del rango de sensores. Entonces, al ponerlo frente a una caja, debería dibujar una línea recta en la pantalla, pero no lo hace. La línea está torcida y no siempre torcida, lo que me confirma que son las lecturas las que están desactivadas, no mi código.

He leído en la hoja de datos que es recomendable colocar un condensador (no puedo recordar el valor de manera inmediata) entre las líneas GND y PWR en el IR de Sharp. Intenté forzar las patas del condensador en el conector JST del Sharp IR, pero no hizo ninguna diferencia. Intentaré soldarlo al sensor y ver si eso hace alguna diferencia.

¿Alguien puede recomendar algo más para probar, o estoy esperando demasiado de Sharp IR?

También estoy considerando comprar un segundo servo y Sharp IR y ejecutar dos al mismo tiempo como un par de ojos, luego tratar de tomar un promedio de los dos valores para ver si eso aumenta la precisión.

Por cierto, soy un novato en electrónica, mi experiencia es en programación.

    
pregunta littlecharva

4 respuestas

4

El sensor no es perfecto, si apuntas incluso a un sensor realmente bueno (Mejor que, um, los sensores IR IR "clásicos") en el mismo lugar en la pared y tomas algunas lecturas, habrá alguna variación Si descartas un número de bits menos significativos, es posible obtener la misma lectura cada vez, pero tus lecturas serán más detalladas. Probablemente debería mantener la máxima precisión y luego tratar de corregir errores en el software (es decir, cambiar sus datos para que una línea casi recta sea realmente recta).

¿Qué sensor está utilizando y qué rango de medición espera? La salida del sensor es muy no lineal. Este gráfico (de la hoja de datos) compara el voltaje de salida en una escala lineal con la distancia:

Notaráqueseparecemuchoalagráficadey=1/x,esdecir,voltios=k(1/distancia).Estosepuedeusarparaobtenerunaprimeraaproximacióndecente,peroladivisiónenunArduinoescostosa.Tendrámássuertesicalibraelsensoryalmacenelosparesdevoltaje/distanciaenunatabladeconsulta(enlamemoriadelprograma,porsupuesto).Éstevienecalibradodefábrica,demodoqueunamedidadeexactamente24cmmidea24cm+/-3cm.Desafortunadamente,notedanunamaneradesabercuáldebeserelvoltajea24cm,exceptoalentrecerrarlosojosenestegráfico.

Elsensortendráunamayorprecisiónenciertosrangos.Imaginequehayunavariaciónaleatoriade,digamos,+/-250mVensuslecturas(silodesea,engaussiano,peroalazaresmásfácil).Esdeesperarqueseamuchomáspequeñoqueeso,perohacequeseafácildevisualizar.Lavariaciónsignificaquesuslecturasconestesensora,porejemplo,50cmo70cmvariaránentre20o30cm,perolasmedidasa15cmdebenestardentrodeunospocoscm.Estesensortieneunacapacidadde10a80cm,peroobtendrálecturasmásprecisassisoloconfíaen10a25cmaproximadamente.Siestácontrolandoelrobot,deberíapodermoverseaestasdistanciasyobtenerlasmejoreslecturas.

Elsensorconsumecorrienteengrandesráfagasyprobablementeestámontadoenuncablebastantelargo.Uncondensadorayudaráaestabilizarlaslecturas.NolointroduzcasenelJST;SoldarloalPCBenlaparteposterior.Estáconsumiendomuchacorrienteyesbastantelento,porloquelaspequeñascapacidadestradicionalmenteutilizadasparaeldesacoplamiento(0.1uF)probablementenofuncionen.UsaríaunatapadecerámicaSMD10uF1206o1210enparaleloconunelectrolítico100uF.Siencuentraquetodavíahayruidodealtafrecuencia,agregueun0.1uF1206sobreel10uF.Aquíhayunafotodelasubicacionesparasoldar(imagenoriginaldeSparkfun):

También puede intentar agregar una pequeña capacitancia en la línea Vo para suavizar la salida. Debes experimentar para ver si eso ayuda o no. Lo mantendría por debajo de 100pF, comenzando alrededor de 10pF. Esto creará un promedio móvil de las lecturas en hardware. Más circuitos (una resistencia en serie) mejorarían el efecto, publicarían un comentario u otra pregunta si desea construir un sistema de filtro de paso bajo más complejo para este propósito. Nota: es posible que el sensor Sharp no maneje la conducción hacia un pozo de gran capacidad y que se oponga y se rompa si se le pide que cambie el voltaje rápidamente. También es posible que se trate de una salida de un solo lado y que requiera una resistencia a tierra para descargar el capacitor si agrega más capacitancia de la que está actualmente presente en los parásitos.

Retorcer los cables ayudará a reducir el ruido acoplado de fuentes externas como la red de 60Hz. Mantenerlos cortos también ayudará a mitigar el ruido.

    
respondido por el Kevin Vermeer
4

Cosas buenas que hacer en esta etapa:

  • Determine de dónde proviene el ruido: esto se puede hacer usando la función FFT en un DSO mientras se mide la señal de otro sensor IR (el LED IR funcionaría), o usando una PC para transformar los datos recopilados . Hay muchas fuentes de IR en nuestros hogares, a menudo moduladas cerca de 38 kHz. Un filtro antialiasing de entrada analógica configurado a menos de la mitad de su frecuencia de muestreo (máx. ~ 7 kHz) puede ser todo lo que se requiere, aunque el sensor ya tenga uno. Tenga en cuenta que los micros de la serie Arduino no pueden muestrear a más de aproximadamente 15 kSps, pero las señales de 38 kHz aún pueden filtrarse mediante el alias, por lo que los filtros digitales no estarán a 38 kHz sino algo por debajo de 15 kHz.

  • Asegúrese de realizar pruebas dentro del rango del dispositivo (max & min).

    El 0A700 tiene un rango de 5.5 metros.

  • Calibre y linealice el sensor. Los modelos idénticos se leerán de manera diferente, y su salida no es lineal. Esta página describe una forma de linealizar los datos, terminando con algo como R = (6787 / (V - 3)) - 4 . Otro método es utilizar una tabla de búsqueda de 8 a 10 bits. La linealización no ayudará con el problema del ruido, pero da una mejor idea de su efecto y de cuánta mitigación es realmente necesaria.

  • Come Oreos, tórralos por la mitad y lamiendo las cosas blancas primero. Hace que las sesiones de depuración sean mucho más exitosas.

respondido por el tyblu
2

Estos sensores realmente necesitan una tapa de desacoplamiento decente a lo largo del suministro, y un suministro limpio de 5 V, es decir, no es el mismo suministro que un servo.

    
respondido por el mikeselectricstuff
0

Verifique su suministro de voltaje de entrada al sensor. Estaba alimentando el sensor desde mi Mega 2560 (5V) y no pude obtener una señal limpia. Todavía estoy usando el 5V del Mega 2560, pero en su lugar lo corrí a través de un simple regulador de voltaje ($ 1.99) desde la radio shack (ejecución rápida a una tienda local). Esto limpió grandemente la señal. Para seguir limpiando, corrí la señal de retorno a través de un filtro de paso bajo. Elegí la frecuencia en 1/10 y dimensioné la resistencia y la tapa en consecuencia.

    
respondido por el Joe

Lea otras preguntas en las etiquetas