Solindar. Por: Esaú Gil y Romer Mena - USB-EC3883-III-2019/EC3883-G03 GitHub Wiki
Nuestro Sonar/Lidar tiene como primera etapa de funcionamiento un circuito de adquisición, en el cual, para cada uno de los sensores empleados, Sonar y Lidar, se tomaron en cuenta sus características de funcionamiento. Por un lado, en el caso del sonar, Ultrasonido DEVANTECH SRF05, por ser un sensor digital, solo debimos colocar un circuito de protección en la entrada del Demoque128 para reducir el valor del voltaje de salida del sensor de 5 voltios a menos de 3, alcanzando un valor máximo de 2,8 V. Este circuito era un divisor de voltaje conformado por una resistencia de 22 KΩ y una de 15 KΩ. Luego, de la salida del divisor de voltaje, se conectó a la entrada del pin correspondiente a PTA0.
Para el Lidar, Infrarrojo SHARP GP2Y0A21YK, por ser un sensor analógico, debimos emplear un LM324, por el cual entraba la señal de salida del Infrarojo, por una de las entradas positivas y cuya salida iba a un divisor de voltaje, también conformado por una resistencia de 22 KΩ y una de 15 KΩ, que permitió obtener un voltaje máximo de salida de 1,81V, para luego ir a la conexión del puerto de entrada PTA2 del Demoqe128.
Ambos sensores funcionan con un voltaje de alimentación (VCC) de 5V, por lo cual debimos implementar una fuente de alimentación de 5V, que fue similar a la que empleamos en el primer proyecto del laboratorio de proyectos 2 y del que puede obtener los detalles en el siguiente enlace.
A continuación, una imagen del circuito de adquisición completo:
Es importante mencionar que nuestro ultrasonido necesita una señal de Trigger para poder funcionar, en esta oportunidad, dicha señal fue enviada desde el Demoqe128 a través del puerto PTA6 siendo esta una señal cuadrada.
Este motor de paso funciona con un Vcc de 5V, adicionalmente, recibe 4 señales digitales envidadas desde el Demoqe128 a través de los puertos PTD4, PTD5, PTD6, PTD7, que tienen como función indicar los movimientos que debe realizar, si tiene que girar a la derecha o a la izquierda y también, si será el movimiento de 1 paso en 1 paso o de medio paso.
Este sensor analógico funciona con una alimentación Vcc de 5V, y su señal de salida va al circuito de acondicionamiento, para luego pasar a la entrada del Demoqe128 a través del puerto PTA2.
Sobre el ya hemos indicado sus funcionalidades en los diferentes proyectos anteriores, por lo cual pasaremos a lo referente a su programación.
A continuación, una imagen del circuito completo:
Las salidas del circuito de adquisición, encargado de adquirir la data de los sensores y acondicionarla para su manejo a través del Demoque128, van conectadas a la entrada de nuestro microcontrolador para ser procesadas. La correspondiente al canal analógico, es decir, la del Lidar, luego de ser adquirida, pasa a través del conversor analógico digital para luego ser enviada a través del puerto serial mediante un protocolo de comunicación a la computadora, para luego ser procesada a través de la aplicación SOLINDAR realizada con Processing.
Para el caso del sensor digital, el ultrasonido, la señal que arroja consiste en un pulso cuyo ancho va a variar según la distancia que esté midiendo. En esta ocasión, se tomó el valor de dicha señal tras pasar por el divisor de voltaje. Para poder adquirir el valor del ancho del pulso se implementó en el Demoqe128 la función Capture, ésta permite obtener directamente el valor del ancho del pulso, adicionalmente, esta función genera un número por el cual se va a multiplicar el valor que arroje la función capture y el resultado será el que dividiremos entre 58 en la aplicación de Processing, lo que permitirá obtener el valor en cm de la distancia medida a través del ultrasonido. Importante recordar que la señal de Trigger del ultrasonido también fue enviada desde el Demoqe128.
Para el funcionamiento del motor se enviaron un conjunto de valores en binarios cuya función era la de encender y apagar las bobinas del motor de paso e indicarle hacia qué lado debía girar.
Uno de los requerimientos del proyecto era el de contar con un filtro que nos permitiera observar unas mediciones con mejores características. Para ello, se implementó un botón en el Demoqe128, PTA3, el cual activa una bandera que coloca en 1 para que se tomen dos mediciones de las señales recibidas y luego estas se promedien. Al activar este botón se encenderá un indicador en la interfaz. Por otro lado, la velocidad con la que hace el barrido el Lidar disminuirá a la mitad puesto que se está tomando más tiempo para capturar las muestras que va a promediar.
A continuación, los códigos empleados para programar nuestro DEMOQE128:
Entramado 100 us – 28 ms 36 ms:
El protocolo de comunicación empleado consta de 4 bytes de data, el cual está dividido de la siguiente manera:
- Posición: 7 bits (270 grados, 72 posiciones disponibles) - Azul
- Sonar: 8 bits (18000 us/58us/cm =310 cm) – (Verde)
- Lidar: Rojo: 12 bits (max resolución ADC) – (Rojo)
- Filtro: Canal digital (Marrón)
Esta configuración nos permite emplear la máxima resolución del ADC.
Una vez hemos enviado la información de nuestros sensores y del motor desde el DEMOQE128, esta es recibida a través del puerto serial de la computadora.
Nuestra aplicación, realizada con Processing, recibe la información enviada a través del puerto serial desde el DEMOQE128, el cual envía un byte a la vez, y para ello verifica que efectivamente el paquete que se vaya a mandar, se haya enviado y que quede el puerto serial libre para poder hacer el próximo envío de paquetes.
Una vez comienza a recibir datos la aplicación, a través del puerto serial, verifica que el primer bit del byte recibido sea un cero, cuando esa condición se cumple, se comienza a recibir la trama de datos y se colocan en orden los 4 bytes recibidos, siendo el primer bit de cabecera 0, para comenzar a armar la trama y luego los próximos 3 primeros bits de los tres bytes restantes son 1 para poder diferenciarlos de la cabeza de la trama.
Tras la recepción de datos, se realizan una serie de operaciones lógicas: shifts (<< o >>), and (&) y or (|) y de operaciones matemáticas de multiplicación o división por una constante para escalar de manera correcta la data adquirida, que permiten separar y agrupar el conjunto de datos correspondientes a cada elemento, bien sean los sensores o el motor de paso, lo que se corresponde con el desentramado.
La información adquirida va a ser operada para poder ser mostrada en la interfaz de nuestro Solindar. Adicionalmente, se va a almacenar en un archivo de texto llamado log.txt que va a guardar la posición del motor de paso y las coordenadas de los puntos donde ambos sensores detecten objetos.
A continuación, una foto de la interfaz:
En lo que respecta al funcionamiento de la interfaz, esta actualiza los puntos en la pantalla tras el barrido de la franja del Solindar, dicho barrido se va a hacer en función del movimiento del motor, es decir, la franja que hace el barrido se mueve a la velocidad y dirección que tenga el motor, de derecha a izquierda o viceversa.
Por otro lado, en la pantalla del Solindar se muestran 3 puntos, uno correspondiente al Sonar (color azul), otro al Lidar (color rojo), y el último, correspondiente al Solindar (color fucsia), cuyo funcionamiento depende de la distancia a la que se detecte el objeto y viene dado por una función preestablecida. Adicionalmente, en la esquina superior derecha se muestra la señal que indica que el filtro esta encendido, que en caso de así será de color verde.
Según pruebas realizadas en el laboratorio durante la ejecución de este proyecto, el sensor que registró un mejor comportamiento fue el sonar, el mismo era lineal y, gracias a que lo que varía es el ancho del pulso y no el voltaje del pulso, es posible detectar de manera precisa lo que está midiendo sin que se vea afectado por el ruido del circuito. En relación al Lidar, este sensor cuenta con una curva característica que indica que el punto máximo de voltaje debía observarse alrededor de los 10 cm de distancia que esté midiendo, sin embargo, en nuestro caso, este valor fue alcanzado aproximadamente a los 5 cm, lo que hacía que en la zona de medidas menores a 5 cm la información obtenida del sensor no fuese muy exacta, al igual que la obtenida después de los 60 cm, aproximadamente, puesto que el valor del voltaje era muy bajo.
Debido a lo anterior, la función correspondiente al Solindar toma en cuenta seis condiciones:
- Si la posición medida del Lidar es mayor a 80 cm y la del Sonar es menor a 80 cm, entonces la posición del Solindar será la del sonar.
- Si la posición del Lidar es menor a 10 cm y la del sonar es menor a 80 cm, entonces la posición del Solindar será la del Sonar.
- Si la posición del Lidar es menor a 80 cm y la del sonar es mayor a 80 cm, entonces la posición del Solindar será la del Lidar.
- Si la posición del Lidar es mayor a 80 cm y la del sonar es mayor a 80 cm, entonces la posición del Solindar será el promedio de ambas.
- Si el modulo de la diferencia entre las medidas del Sonar y el Lidar es menor a 5 entonces la medida del Solindar será el promedio de ambas.
- Si no está en ninguna de las anteriores, entonces la medida a tomar en cuenta por el Solindar será la del Sonar, con esto lo que garantizamos es que en toda condición que se requiera que el Solindar muestre alguna data que esté dentro de nuestros parámetros de diseño, se muestre una información en pantalla.
En el siguiente enlace, pueden encontrar el código correspondiente a la aplicación del Solindar desarrollada en Processig:
Finalmente, en el siguiente enlace encontraran un vídeo que muestra el funcionamiento del Solindar:
Para comprobar el funcionamiento del solindar se implementó una prueba en el laboratorio con una superficie que simuló dos paredes y un vertice, esto, con la finalidad de verificar si efectivamente los datos se correspondian con los esperados. A continuación las imagenes del montaje y los resultados obtenidos:
Vista aérea del montaje:
Otra vista del montaje:
Resultados obtenidos en la interfaz del Solindar.
En el siguiente enlace podrán visualizar un video de la prueba realizada: