Anteproyecto SOLINDAR - USB-EC3883-III-2019/EC3883-G09 GitHub Wiki
Elaboración de un sonar-lidar de dos dimensiones, de bajo costo y de fusión sensorial.
Modelo SOLINDAR
- Rango de operación: 30 a 80 cm
- Frecuencia de actualización mas alta permitida por el hardware
- Definir un protocolo de comunicación
- Implementación de un filtro de datos en el microcontrolador
- GUI que permita visualizar el mapa 2D con opción de seleccionar la procedencia de la data (sonar, lidar o fusión), la posición actual y guardar los datos en un log
- Microcontrolador: DEMOQE128
- Sensor ultrasónico: SRF05
- Sensor infrarojo: GP2Y0A21YK
- Módulo bluetooth: eb501-SER
- Motor de pasos
El siguiente diagrama de bloques muestra una vista general del funcionamiento del sistema. Las siguientes secciones explican cada uno de los bloques.
Diagrama de bloques general
El motor tiene un driver que se controla con señales digitales para dar los pasos. La tabla de los pasos se muestra a continuación.
Señales de control para el motor. Izquierda: un paso. Derecha: medios pasos.
Para implementar el control de el motor basado en la tabla, se almacenarán los valores de la tabla en un arreglo en la memoria del microcontrolador. Se utilizará una variable como contador que se incrementa a medida que el motor da un paso que, además de servir para saber la posición del motor en el momento, mediante la operación módulo 4 (módulo 8 si se trabaja a medios pasos) se pueda saber la señal que hay que aplicar para dar el siguiente paso. Cuando el contador llegue a su máximo, se invierte el sentido de giro y se repite el mismo proceso. Se evaluará la opción de cambiar la dirección de giro manualmente, por hardware o en la interfaz en la PC.
El sensor infrarojo a utilizar es analógico. Dado el comportamiento no lineal de la salida de voltaje en función de la distancia medida, se utilizará la resolución máxima posible del ADC (12 bits). Se evaluará la necesidad de caracterizar el sensor para tener una tabla de valores para comparar según el dato medido ya que, por su respuesta, no es posible determinar una expresión cerrada (ecuación) de la relación voltaje/distancia. Debido a esto, se evaluará la posibilidad de determinar la distancia con el microcontrolador o si resulta más conveniente determinarla en la PC, dada la capacidad de computo y tiempo que el proceso requiere.
El sensor ultrasónico es digital. Para activarlo, hay que aplicar una señal digital en alto (HIGH) por al menos 10us en la terminal de "trigger". Para esto, se utilizará un pin I/O del microcontrolador donde, luego de que la señal se ponga en alto, se habilite una interrupción temporal de 10us y, luego de este tiempo, la señal se pone en bajo (LOW) y se deshabilite la interrupción.
Para medir el tiempo que dura la señal de "echo", se utilizará un pin del microcontrolador donde implementará una interrupción por eventos de tal manera que, cuando se detecte el flanco de subida, el contador se reinicie y, cuando se detecte el flanco de bajada, se determine el tiempo en microsegundos. Para reducir el tamaño de la data a enviar, se hará el calculo de la distancia (dividir el tiempo en microsegundos entre 58) en el microcontrolador.
Nota: hay que tener en cuenta que el sensor trabaja con señales digitales de 5V y el microcontrolador de 3.3V. Se debe adaptar el hardware en función de esto.
Se implementará un filtro de datos de tipo "moving average" (promedio). En primera instancia, se considerará tomar 5 muestras en cada paso del motor, sin embargo, esto puede cambiar según el desempeño global del sistema.
Para la comunicación entre el microcontrolador y la PC se utilizará el modulo bluetooth, conectándolo al microcontrolador por el puerto serial mediante la interfaz DB9 RS232. Se define una trama para el envío de los datos que consta de 4 bytes que, además de incluir los datos, incluye bytes de cabecera para la sincronización.
Trama para el envío de datos. P: posición del motor. S: data del SONAR. L: data del LIDAR
La comunicacion serial sera manejada a traves de la libreria PySerial con la interfaz grafica.
La interfaz grafica se realizara utilizando la framework de python PyQt5, en conjunto con las librerias especializadas para graficas y manipulacion de matrices, Matplotlib y Numpy, respectivamente. El desentramado como la sincronizacion con el dispositivo serial se llevara a cabo con la libreria PySerial, que en directa comunicacion con la interfaz grafica, graficaran los datos, punto a punto, en un grafico polar generado usando Matplotlib. La interfaz de ser capaz de reconstruir punto a punto los obstaculos detectados por ambos sensores, segun lo permita la resolucion. Asi mismo, se graficara tambien la reconstruccion a partir de la combinacion de la data de ambos sensores.
Una primera aproximacion al diseno de la interfaz se muestra en la siguiente imagen.
Diseño de la interfaz.