Auto autonomo

Auto de control inalambrico y movimiento autonomo con sensor de proximidad ultrasonico.

Introducción

En el marco de la cursada de Informática II en la UTN, se desarrolló un vehículo autónomo denominado "Cucatesla", debido a que se mueve de forma autonoma buscando puntos oscuros.

El proyecto consistió en diseñar e implementar un sistema embebido sobre un microcontrolador NXP LPC845, capaz de operar en dos modos de funcionamiento (control remoto desde PC y autónomo), detectar obstáculos mediante sensores ultrasónicos, responder a variaciones de luminosidad y mantener comunicación bidireccional con una interfaz de usuario.

Overview del proyecto

La arquitectura del sistema se organiza en torno a dos entidades: una estación base (PC con interfaz de usuario) y el nodo embebido (LPC845).

  • Herramientas de desarrollo: MCUXpresso IDE, lenguaje C estándar para sistemas embebidos, y librerías de bajo nivel (CMSIS).
  • Comunicación: Enlace serie asíncrono (UART) a 9600 baudios, empleando un protocolo de trama con la estructura #[ID][VALOR]$.
  • Periféricos de entrada:
  • HC-SR04: Dos módulos ultrasónicos (delantero y trasero) para medición de distancias. Su operación se implementó mediante el CTIMER en modo captura de pulsos.
  • LDR: Sensor de luminosidad acoplado al ADC del LPC845.
  • Periféricos de salida:
  • Motores DC: Control de avance y retroceso mediante un puente H, manejado por señales GPIO.
  • Servomotores: Dos servos (dirección de las ruedas y barrido del sensor delantero). La generación de señales PWM se realizó a través del MRT (Multi-Rate Timer).

La lógica de control se estructuró en dos máquinas de estado principales: mde_mov (gestión del movimiento) y mde_com (análisis de tramas y configuración). El sistema admite comandos manuales (desplazamientos y giros) así como un modo autónomo que evalúa distancias para determinar maniobras de evasión.

Drivers

Dado que no se empleó el SDK estándar de NXP, se implementaron drivers de bajo nivel para los siguientes periféricos:

  • GPIO: Abstracción para control de pines (SetPIN, GetPIN) y configuración de modos eléctricos (pull-up, push-pull) a través de la matriz de conmutación (SWM).
  • UART0: Módulo completo con buffers circulares para transmisión y recepción, manejado por interrupciones. Incluye primitivas de envío de cadenas y un parser de tramas (leerTrama).
  • ADC: Inicialización del conversor analógico-digital para lectura del LDR, incluyendo rutinas de calibración y cálculo del nivel de luminosidad con histéresis.
  • MRT: Configuración de tres canales del temporizador multitasa para generar señales PWM independientes destinadas a los servomotores, operando de manera no bloqueante.
  • CTIMER: Implementación del temporizador en modo captura para medir la duración del pulso "Echo" de los sensores ultrasónicos y calcular distancias.

Resultados

El desarrollo cumplió con los requerimientos funcionales establecidos: Control remoto mediante comandos seriales (desplazamiento y giros). Modo autónomo con barrido del sensor delantero, detección de obstáculos y toma de decisiones (giro a derecha, izquierda o retroceso). Detección de cambios en la luminosidad ambiental, con notificación a la PC. Comunicación bidireccional estable y configuración dinámica de parámetros (velocidad, distancia mínima de obstáculo, frecuencia de giro). Se identificaron y resolvieron fallas durante la etapa de integración, tales como cortocircuitos en el PCB y saturaciones en el enlace de comunicación.

¿Qué significó este proyecto para mi?

Este proyecto representó mi primera experiencia en el desarrollo de sistemas embebidos, lo cual implicó una curva de aprendizaje significativa. En particular enfrentamos dos dificultades técnicas.

Una dificultad fue que el auto respondia a todos nuestros comandos, hasta que al hacerlo moverse hacia adelante se cortaba la comunicacion por unos segundos. Luego de mucha prueba y error descubrimos que el pico de consumo de los motores superaba al de la alimentacion, provocando que el sistema se apague por un instante. Esto me enseño el abarque multidisiplinario que presentan errores en un sistema embebido, teniendo que contemplar problemas de software, mecánicos y electricos hasta encontrar la raiz del problema.

Otro problema vino de la implementacion del CTIMER propio del microcontrolador. Aun siguiendo los pocos codigos ejemplo en ingles o español que encontrabamos en la web y releyendo la seccion correspondiente al manual, se termino por hacerlo andar a prueba y error, llendo en contra de la configuracion recomendada. Recuerdo que a las pocas semanas de haber finalizado el proyecto se lanzo chatGPT, y otro compañero del equipo nos envio capturas en donde resolvia la configuracion del CTIMER de la misma manera que lo habiamos hecho nosotros, pero en unos segundos.

Este proyecto fue uno lleno de primeros, consolidando competencias en programación de microcontroladores, interpretación crítica de manuales técnicos, diseño de arquitecturas de firmware y resolución de problemas de integración hardware-software.

Repositorio

Acceso al repostorio con el codigo fuente puede encontrarse en el siguiente respositorio.

Relacionado

Últimos proyectos