Te presento un escáner de bricolaje basado en un teléfono inteligente Android.
Al diseñar y crear un escáner, en primer lugar, me interesaba escanear objetos grandes. Mínimo: la figura de una persona en pleno crecimiento con precisión: al menos 1-2 mm.
Estos criterios se han logrado con éxito. Objetos escaneados con éxito en luz natural (sin luz solar directa). El campo de escaneo está determinado por el ángulo de captura de la cámara del teléfono inteligente y la distancia a la que el rayo láser mantiene suficiente brillo para la detección (durante el día en la habitación). Esta es una figura de una persona en toda su altura (1,8 metros) con un ancho de trabajo de 1,2 metros.
El escáner fue hecho por consideraciones "y si hacer algo más o menos útil e interesante cuando no hay nada que hacer". Todas las ilustraciones se basan en el ejemplo de un objeto de "prueba" (cargar escaneos humanos no es correcto).
Como lo ha demostrado la experiencia, para un escáner de este tipo de software es secundario y se le dedica el menor tiempo (para la versión final. Aparte de los experimentos y las opciones sin salida). Por lo tanto, no tocaré las características del software en el artículo (Enlace a los códigos fuente al final del artículo).
El propósito del artículo es hablar sobre las ramas de punto muerto y los problemas recopilados en el camino hacia la creación de la versión de trabajo final.
Para el escáner, la versión final usa:
- Teléfono Samsung S5
- Láseres rojos y verdes con una lente para una línea (línea de 90 grados) a 30 mW con óptica de vidrio (no la más barata).
- Motores paso a paso 35BYGHM302-06LA 0.3A, 0.9 °
- Controladores de motor paso a paso A4988
- Módulo Bluetooth HC-05
- Tablero STM32F103C8t
Los controladores A4988 están configurados en medio paso, que con una caja de cambios 15-> 120 da 400 * 2 * 8 pasos por PI.
La elección de la tecnología de escaneo.
Se consideraron las siguientes opciones.
Proyector LED.
La opción fue considerada y calculada. Incluso los proyectores caros no tienen la resolución correcta para lograr la precisión requerida. Y ni siquiera vale la pena hablar de los baratos.
Escaneo mecánico de un rayo láser en combinación con una rejilla de difracción.
La idea fue probada y considerada adecuada. Pero no por el rendimiento de bricolaje, por razones:
- Necesitamos un láser suficientemente potente, de modo que después de la difracción, las marcas sean lo suficientemente brillantes (la distancia a la lente del teléfono inteligente es de 1..2 metros). Y mis ojos lo sienten. Un punto láser ya con 30 mW no es útil.
- Los requisitos para el escaneo mecánico de precisión en 2 planos son demasiado altos para el rendimiento de bricolaje.
Escaneo mecánico estándar de una línea láser en un objeto estacionario de escaneo.
Finalmente, la opción se eligió con dos láseres de diferentes colores.
- Los diferentes colores de los láseres permiten detectarlos independientemente en un solo marco.
- La ubicación de los láseres en lados opuestos de la cámara le permite obtener dos escaneos en una sola pasada.
- Dos escaneos a la vez le permiten evaluar objetivamente la calidad de la alineación del escáner (los escaneos deben converger y superponerse).
Al final resultó que, el último criterio es el más importante. La calidad del escaneo está completamente determinada por la precisión de medir las dimensiones geométricas y los ángulos del escáner. Y la presencia de dos escaneos de dos láseres le permite evaluar de inmediato la calidad del escaneo:
Nubes de puntos convergieron. Es decir Los aviones capturados por dos láseres convergieron en toda la superficie.
Versión fallida de la parte mecánica en el 28BYJ-48.
Aunque desde el principio supuse que esta es una opción de callejón sin salida que no proporciona la precisión necesaria, aún la verifiqué con varios trucos:
- El eje del motor está fijado por el rodamiento.
- Se agregó un elemento de fricción y un tapón para el muestreo del espacio libre de la caja de engranajes.
- Un intento de determinar la "posición exacta" por un fototransistor por exposición al láser
La repetibilidad de volver al mismo lugar de la línea láser resultó ser baja: 2-3 mm a una distancia de 1,5 metros. Durante la operación del engranaje, a pesar de la aparente suavidad, se notan sacudidas de 1-3 mm a una distancia de 1.5 metros.
Es decir 28BYJ-48 es completamente inadecuado para un escáner más o menos preciso de objetos grandes.
Requisitos de escaneo basados en mi experiencia
Un elemento obligatorio del barrido debe ser una caja de cambios.No se equivoque sobre el modo de pasos 1 / x. Los experimentos mostraron que en el modo 1/16 en los micro pasos A4988 no son uniformes. Y para el 1/8, esta irregularidad es notable en el ojo.
La solución más óptima para la caja de cambios fue el uso de un engranaje de correa. Aunque resultó ser bastante engorroso, es fácil de crear y preciso.
La precisión de posicionamiento (más precisamente, la repetibilidad de posicionamiento de la posición inicial de los láseres para el escaneo) de los láseres resultó ser de aproximadamente 0,5 mm para un ancho de línea láser de 5 mm a más de 4 metros de distancia. Es decir a una distancia de escaneo (1.2-1.8 metros) generalmente es difícil de medir.
Posicionamiento: optoacopladores (no chinos) en las ranuras del disco debajo de los láseres.
Problemas con la transmisión de señales de control desde el teléfono al módulo de control para láseres y motores paso a paso
El canal de control resultó ser un cuello de botella en términos de velocidad de exploración. Como se trataba de un desarrollo pausado de bricolaje para su propio placer, se probaron todos los métodos de comunicación con un teléfono inteligente.
Transmisión de señales de control a través del conector de audio (conector de audio del teléfono => osciloscopio)
La forma más inhibitoria de transmitir datos en tiempo real. Sí, incluso con tiempo flotante. Hasta 500 ms (!) Desde la activación del software de transmisión de datos de audio hasta la apariencia real de la señal en el conector de audio.
Este exótico se comprobó porque, en el trabajo, tenía que lidiar con lectores de tarjetas con chip móviles.
Fotodiodos en la pantalla del teléfono inteligente (segmento de la pantalla del teléfono => fototransistores + STM32F103)
Por interés, incluso un método tan exótico se probó como fototransistores con una matriz de 2x2 en forma de pinzas para la ropa en la pantalla.
Aunque este método de transmisión de información desde el teléfono fue el más rápido, pero no tan fundamentalmente más rápido (10 ms frente a 50 ms) que Bluetooth, lo que soportaría sus deficiencias (pinza para la ropa en la pantalla).
Canal IR (teléfono => TSOP1736-> STM32F103)
Prácticamente verificado y el método de transmisión a través del canal IR. Incluso se tuvo que realizar alguna implementación del protocolo de transferencia de datos.
Pero IR también resultó no ser muy conveniente (es inconveniente montar el fotosensor en el teléfono), y no mucho más rápido que Bluetooth.
Módulo WiFi (teléfono => ESP8266-RS232-> STM32F103)
Los resultados de verificar este módulo resultaron ser completamente desalentadores. El tiempo de ejecución de solicitud-respuesta (eco) resultó estar flotando de manera impredecible en el rango de 20-300 ms (un promedio de 150 ms). Por qué y qué, no entendí. Me encontré solo con un artículo que describía un intento fallido de usar el ESP8266 para el intercambio de datos en tiempo real con requisitos estrictos de solicitud / tiempo de respuesta.
Es decir ESP8266 con firmware "estándar" TCP -> RS232 no es adecuado para tales fines.
Opción seleccionada para módulo de control y transmisión de señal
Finalmente, después de todos los experimentos, se seleccionó el canal Bluetooth (módulo HC-05). Proporciona un tiempo de solicitud-respuesta de transferencia de datos estable (y este es el más importante) de 40 ms.
El tiempo es bastante grande y afecta en gran medida el tiempo de exploración (la mitad del tiempo total).
Pero la mejor opción no se logró.
Como módulo de control, una placa extendida con SM32F103C8T.
Métodos para detectar una línea en un marco.
La forma más fácil de aislar las líneas láser en el marco es usar la resta del marco con el láser apagado y el marco con el láser.
En principio, la búsqueda por cuadro también funciona sin sustracción. Pero funciona mucho peor a la luz del día. Aunque este modo se dejó en el software para pruebas comparativas (foto del modo a continuación. Todas las demás fotos con el modo de sustracción de cuadros).
El valor práctico de la opción sin restar cuadros era bajo.
Es posible y posible extraer la señal láser de esta información ruidosa. Sin embargo, no se molestó.
La opción con sustracción de cuadros funciona bien.
Cualquier experimento con intentos de aproximar la línea y procesar el marco completo mostró que cuanto más complejo es el algoritmo, más a menudo "comete errores" e incluso ralentiza el procesamiento sobre la marcha. El algoritmo más rápido (y más fácil) para encontrar un láser (punto láser) en una línea horizontal fue:
- Para cada punto de la línea, se considera la suma de los cuadrados del nivel de color del láser (RGB) en la ventana especificada en la configuración (13 px - valor experimentalmente óptimo para la ventana)
- El punto láser es el centro de la ventana con el valor máximo de las sumas de los niveles de "color".
El tiempo para procesar un cuadro buscando las líneas "verde" y "roja" es de 3 ms.
Las nubes de puntos para el láser rojo y verde se cuentan por separado. Con un ajuste mecánico adecuado, se reducen con una precisión de <1 mm.
Precisión y alineación
La precisión estaba dentro de 1 mm a una distancia de 1,2 metros. Principalmente debido a la resolución de la cámara del teléfono (1920x1080) y el ancho del rayo láser.
Es muy importante obtener los escaneos correctos para configurar estática y dinámica. La precisión / inexactitud es claramente visible al cargar ambas nubes de puntos en MeshLab. Idealmente, las nubes de puntos deberían converger, complementarse entre sí.
Los parámetros estáticos se configuran con la mayor precisión posible una vez:
- La tangente del ángulo de visión de la cámara.
- La longitud de los "hombros" de los láseres (desde el centro de la lente hasta el eje de rotación).
Y, por supuesto, el enfoque máximo de las lentes láser a una distancia de exploración determinada y la "verticalidad" de las líneas láser.
El parámetro dinámico del ángulo real de la posición de los láseres en relación con el plano virtual del marco debe ajustarse cada vez más al mezclar el teléfono en el soporte. Para esto, se realiza el modo de configuración en el software. Al reducir la pantalla del láser al centro y ajustar el ángulo, es necesario establecer la distancia calculada lo más cerca posible de la distancia real (medida) para ambos láseres.
Antes del ajuste fino:
Después del ajuste:
Conclusiones
Quizás este diseño pueda ser repetido por cualquiera. Corté todos los detalles de fibra de vidrio a CNC.
Por supuesto, sin una fresadora CNC, es difícil hacer una polea debajo del láser. Pero teniendo en cuenta el hecho de que necesita un ángulo de rotación de un máximo de 90 grados, con la paciencia adecuada, la polea también se puede cortar con una lima.
Pero es mejor hacerlo en CNC. Los requisitos para el juego axial del conjunto rotativo son altos. La calidad de los escaneos está 100% determinada por la precisión de fabricación y alineación.
El escáner lo hizo en el fondo. A veces, de forma intermitente durante un par de meses. Por lo tanto, no puedo evaluar la complejidad total de su creación.
El costo total de la estructura no es demasiado alto. Como mostraron mis experimentos, aunque está lejos de los escáneres industriales de objetos grandes, puede obtener escaneos bastante decentes.
La calidad de los escaneos se ve afectada principalmente por la precisión de la parte mecánica. En este sentido, en bricolaje es difícil lidiar con la mecánica creada para escáneres industriales.
Código fuente