El bluetooth
El proyecto comenzó con la realización de diversas pruebas utilizando el módulo Bluetooth HC-05, ya que era fundamental verificar que la comunicación inalámbrica funcionara correctamente antes de proceder a programar el sistema completo del coche.
La primera aplicación que probamos fue Arduino BlueControl. Sin embargo, esta herramienta presentó numerosos problemas de conexión y no conseguimos que funcionara de manera estable, por lo que finalmente decidimos descartarla.
Posteriormente probamos la aplicación Bluetooth Electronics. Aunque ofrecía un mayor número de opciones de personalización, presentaba el inconveniente de que todos los controles debían configurarse manualmente. Además, su interfaz no nos resultó especialmente intuitiva ni visualmente atractiva, por lo que también optamos por no utilizarla en ese momento.
Tras estas pruebas instalamos Arduino Bluetooth Control, que fue inicialmente la aplicación con la que trabajamos. Esta resultó más sencilla y adecuada para las primeras pruebas del proyecto. Al intentar conectarnos al módulo HC-05 desde el teléfono móvil, la aplicación solicitó un código de acceso. La contraseña por defecto del dispositivo era “1234”. Tras introducirla correctamente, conseguimos emparejar el teléfono con el módulo Bluetooth y establecer la conexión sin problemas. Cabe destacar que los dispositivos iPhone no son compatibles con este tipo de módulos Bluetooth clásicos, ya que el ecosistema de Apple no permite establecer este tipo de conexiones.
IMPORTANTE:
La aplicación que utilizamos envía señales a la placa para controlar sus movimientos: F para avanzar, B para retroceder, L para girar a la izquierda y R para girar a la derecha. Tuvimos que programar estas órdenes directamente en el código para que la placa pudiera interpretarlas correctamente y evitar comportamientos erróneos o respuestas inesperadas a las instrucciones del mando.
Además, existe una orden fundamental: la S. Esta señal es indispensable para detener las acciones. Cuando se dejan de pulsar los botones, el mando envía automáticamente esta orden y la placa detiene los motores o, en el caso del motor delantero, lo devuelve a su posición inicial.
Para comprobar que todo funcionaba correctamente, utilizamos el código de prueba del Bluetooth proporcionado por la propia aplicación de Arduino. Dicho código se encuentra adjuntado en la PÁGINA DE CÓDIGOS DEL PROYECTO.Gracias a este programa pudimos enviar señales desde el teléfono móvil y verificar, mediante el monitor serie del entorno de Arduino, que los datos se recibían correctamente.
En el programa utilizamos la instrucción: SoftwareSerial mySerial(2, 3); // RX, TX
Esta línea permite crear un puerto serie adicional utilizando los pines 2 y 3 del Arduino. Esto es necesario porque tanto el ordenador como el módulo Bluetooth necesitan comunicarse con la placa mediante un puerto serie. Si ambos dispositivos utilizaran el mismo puerto al mismo tiempo, se producirían interferencias en la comunicación. Gracias al uso de la librería SoftwareSerial, conseguimos que el Arduino pudiera comunicarse simultáneamente con el ordenador (a través del puerto serie principal) y con el módulo HC-05 (mediante los pines 2 y 3) sin que se produjeran conflictos.
Durante estas pruebas también aprendimos que, en general, los pines digitales del Arduino permiten trabajar a velocidades similares cuando se utiliza SoftwareSerial. Las velocidades más habituales son 9600 baudios, que es la más común y suficiente para la mayoría de proyectos, y 115200 baudios, que ofrece una mayor velocidad de transmisión de datos. Sin embargo, los pines 0 y 1 están conectados al puerto serie principal y permiten velocidades superiores, aunque su uso puede generar conflictos si se emplean simultáneamente con la comunicación USB del ordenador.
Circuito
En las primeras fases del proyecto tuvimos numerosos problemas con el Bluetooth, ya que no conseguíamos que funcionara de forma estable. Inicialmente el dispositivo se conectaba sin problemas, pero en el momento en que comenzábamos a enviar señales al módulo o incluso si algún cable se movía ligeramente, la conexión se interrumpía automáticamente. Este problema supuso un importante quebradero de cabeza, ya que no logramos identificar la causa en un primer momento.
Para tratar de solucionarlo investigamos en distintos foros y páginas de internet para comprobar si otros usuarios habían experimentado el mismo problema. Tras realizar varias pruebas con el módulo, decidimos cambiar la fuente de alimentación. Inicialmente utilizábamos la alimentación proporcionada por la placa base de la torre del ordenador, por lo que optamos por sustituirla por una pila de 9 V. Con esta modificación la conexión se volvió algo más estable y lograba mantenerse durante más tiempo.
No obstante, el problema no desapareció completamente, por lo que probamos a añadir otra pila en serie para aumentar el voltaje total. Esta solución tampoco resultó eficaz, ya que la conexión seguía siendo inestable y además las pilas se agotaban con rapidez. Finalmente optamos por adquirir una batería recargable, lo que permitió estabilizar la alimentación y solucionar definitivamente el problema de las desconexiones. Una vez resuelto este inconveniente, pasamos a trabajar en el control de los motores.
Al comprobar que los motores no funcionaban correctamente, lo primero que hicimos fue verificar si el módulo HC-05 estaba recibiendo la señal enviada desde la aplicación del teléfono móvil. Tras realizar las comprobaciones observamos que el módulo recibía correctamente los datos, por lo que dedujimos que el problema no se encontraba en el sistema de comunicación. En ese momento consideramos que el fallo podría estar en el servomotor, ya que podría encontrarse dañado. Sin embargo, tras realizar las pruebas pertinentes comprobamos que este componente funcionaba correctamente.
La última posibilidad era que el problema se encontrara en el cableado. Decidimos entonces soldar los cables utilizando estaño, proteger las uniones con cinta aislante y asegurarnos de que todas las conexiones estaban correctamente realizadas sin riesgo de cortocircuitos. Tras realizar estas mejoras en el sistema eléctrico, conseguimos que el mecanismo funcionara correctamente y que las ruedas delanteras se movieran según las órdenes enviadas.
Una vez solucionado el problema del servomotor delantero, pasamos a poner en funcionamiento el motor trasero. Este presentó más dificultades y desde el primer momento no funcionó correctamente. Al igual que en el caso anterior, comenzamos comprobando que el módulo HC-05 recibiera las señales correspondientes para avanzar, retroceder y detenerse cuando se soltaba el botón, tal y como habíamos programado. Tras verificar que la comunicación era correcta, concluimos que el problema no se encontraba en el módulo Bluetooth.
Dado que el motor no respondía a las órdenes, decidimos desmontar completamente el eje trasero y abrir el sistema de transmisión para comprobar que todas las piezas estuvieran correctamente colocadas. Durante la revisión encontramos algunas piezas sueltas, por lo que las recolocamos cuidadosamente para evitar que se desplazaran nuevamente. Una vez realizado este ajuste, volvimos a montar el eje y probamos el sistema, pero el problema persistía.
Finalmente, optamos por reforzar nuevamente las conexiones eléctricas soldando los cables con estaño, tal y como habíamos hecho anteriormente en el sistema de dirección. Tras asegurar correctamente las uniones y aislarlas adecuadamente, el motor comenzó a funcionar correctamente.
Una vez que el sistema Bluetooth y los motores dejaron de presentar problemas, procedimos a desarrollar el código completo del coche. En un principio planteamos una versión sencilla del programa, sin incluir todavía el sensor de ultrasonidos. Configuramos los botones de la aplicación para que enviaran órdenes específicas al Arduino en función del movimiento deseado.
Además, programamos el sistema para que el coche se detuviera automáticamente cuando se dejara de presionar un botón. Esta función resulta fundamental para mejorar el control del vehículo y evitar que continúe moviéndose de forma involuntaria si el usuario suelta el botón accidentalmente, permitiendo así un manejo más preciso y seguro.
Durante esta fase detectamos un problema que inicialmente habíamos pasado por alto: los parámetros de los controles en la aplicación Arduino Bluetooth Control no pueden modificarse ni personalizarse. Debido a esta limitación, tuvimos que volver a una de las aplicaciones que habíamos descartado anteriormente: Bluetooth Electronics. En esta aplicación sí es posible modificar los datos enviados por cada botón, lo que nos permitió adaptar completamente el sistema de control a las necesidades del proyecto.
Una vez realizado el cambio de aplicación, conseguimos que ambos motores funcionaran de forma coordinada. De este modo, cuando enviamos la orden para girar las ruedas delanteras estas responden correctamente, y cuando indicamos a las ruedas traseras que avancen o retrocedan, el vehículo ejecuta la acción correspondiente.
No obstante, surgió un nuevo inconveniente: cuando ordenábamos al coche avanzar y posteriormente soltábamos el botón, las ruedas continuaban girando en lugar de detenerse. Para solucionar este problema fue necesario realizar varias modificaciones en el código del programa.
Tras varias pruebas, conseguimos que el código funcionase. Sin embargo, al poco tiempo nos volvió a dar problemas por una serie de fallos en las lineas del código, pues no estaban redactadas del todo bien. Modificamos el código para corregir los fallos y acabamos con esta versión.
PÁGINA DE CÓDIGOS DEL PROYECTO
En esta pagina se puede encontrar todos los enlaces para acceder a los códigos. Aquí encontraréis también el CÓDIGO DEL COCHE VERSIÓN 2. Esta vez hemos añadido el sensor de ultrasonido, el cual nos ha funcionado correctamente
RESUMEN CONEXIONES DEL CIRCUITO:
Para la comunicación del coche, se utilizó el módulo Bluetooth HC-05. Con el fin de permitir que el Arduino se comunique simultáneamente con el ordenador (vía USB) y con el módulo Bluetooth sin que se produzcan interferencias, se optó por crear un puerto serie adicional mediante software. Esto se logró utilizando la instrucción SoftwareSerial mySerial(2, 3), donde el pin 2 de la placa actúa como receptor (RX) y el pin 3 como transmisor (TX). Es fundamental que el pin TX del módulo se conecte al RX de la placa y viceversa. Además, se configuró una velocidad de transmisión estándar de 9600 baudios para asegurar la estabilidad en el intercambio de datos.
El coche incorpora un sensor de ultrasonidos modelo HC-SR04 ubicado en la defensa delantera para el frenado automático. Las conexiones físicas de este componente se realizaron de la siguiente manera: el pin VCC se conectó a la salida de 5V de la placa, el pin GND a la toma de tierra común, el pin TRIG (disparador) al pin digital 9 y el pin ECHO (receptor) al pin digital 10. El funcionamiento se basa en que el sensor capta la información del entorno y la envía al Arduino, el cual procesa la distancia y detiene los motores si detecta un objeto cercano.
Uno de los mayores desafíos del proyecto fue la estabilidad de la conexión. Inicialmente, se probó la alimentación desde el puerto USB del ordenador y luego mediante una pila de 9V, pero ambos métodos resultaron insuficientes o inestables. La solución definitiva consistió en implementar una batería recargable, que proporciona un flujo de energía constante y evitó las desconexiones automáticas al mover el vehículo o enviar señales. Para garantizar la integridad del circuito, todas las uniones de cables fueron soldadas con estaño y protegidas con cinta aislante, eliminando falsos contactos o riesgos de cortocircuito.
El sistema de control se gestiona a través de la aplicación Bluetooth Electronics, elegida por su capacidad de personalización frente a otras opciones descartadas. El Arduino recibe las órdenes enviadas desde el teléfono móvil para coordinar dos mecanismos: un servomotor delantero encargado de la dirección (giro de ruedas) y un motor trasero que gestiona la tracción (avance y retroceso). El código fue programado para que el vehículo se detenga automáticamente al dejar de presionar los botones, asegurando un manejo preciso y evitando movimientos involuntarios por accidentes en la interfaz táctil.
Sensor ultrasonido
Sobre el sensor de ultrasonido, hemos incorporado este dispositivo al proyecto con el objetivo de que el vehículo se detenga automáticamente al detectar un obstáculo. El modelo utilizado es el HC-SR04, y se ha colocado en la parte frontal, concretamente en la defensa delantera.
Para su funcionamiento, hemos realizado las conexiones con la placa Arduino de la siguiente manera: el pin GND del sensor se conecta al GND de la placa; el pin ECHO al pin 10; el pin TRIG al pin 9; y el pin VCC al de 5 voltios. De este modo, el sensor capta información del entorno, la envía al Arduino y este actúa en consecuencia, deteniendo los motores para evitar una posible colisión.
Actualmente, los vehículos de producción que circulan por las calles incorporan tecnologías similares, como sensores de proximidad y cámaras, para supervisar el entorno. Sin embargo, ninguno de estos sistemas es completamente infalible, como se puede observar en los siguientes ejemplos.
En el primer caso, se muestra un Tesla equipado únicamente con cámaras que se dirige hacia una pared pintada. Debido a las limitaciones de este sistema, el vehículo no es capaz de distinguir entre una imagen y un obstáculo real, lo que provoca la colisión. Vídeo del Tesla
En el segundo caso, se presenta un Volvo equipado con sensores. A pesar de ello, también pueden producirse fallos, como en esta prueba en la que una persona se sitúa frente al vehículo en movimiento y el sistema no la reconoce correctamente como obstáculo, llegando a atropellarla. Vídeo del Volvo.
Por último, el código utilizado para comprobar el funcionamiento del sensor se incluye a continuación y también está disponible a través del enlace a la página de códigos. Código del sensor.
FINALIZACIÓN DEL PROYECTO