Coche inteligente WIFI

Vamos a ver el montaje de un coche inteligente controlado desde el teléfono móvil.

Está basado en el procesador ESP32 que tiene soporte WIFI. Esto nos permite incluir en su memoria una aplicación web especialmente desarrollada para el control del dispositivo.

Es un ejemplo perfecto de cómo podemos diseñar nuestros proyectos para que incluyan su propia aplicación de control.

ESP32

Espressif

Nuestro diseño está basado en la placa Wemos D1 R32. Es una placa con formato Arduino UNO fácil de manejar y programar. El ESP32 es uno de los mejores procesadores IoT que podemos encontrar en la actualidad y hoy le vamos a sacar un buen partido.

La alimentación corre a cargo de dos baterías recargables 18650 que nos proporcionan un voltaje de 7,4V, más que suficiente para alimentar la placa y los motores.

La mecánica (chasis, motores y ruedas) la obtenemos de un kit 4WD. Se trata de un chasis bien diseñado y robusto. El kit incluye todos los elementos necesarios para su montaje.

Dotaremos a nuestro coche de luces y claxon. Un par de leds y un buzzer activo resolverán esta funcionalidad.

La aplicación nos permite poner el coche en modo automático, es decir que sea capaz de detectar los obstáculos que tiene delante y girar para evitar el choque. Para ello usaremos un sensor de distancia por ultrasonidos HC-SR04.

Material necesario

Los componentes que vamos a necesitar son los siguientes:

Montaje

El primer paso será montar el chasis. Esta tarea resulta bastante sencilla, sólo tenemos que fijar los motores a la plataforma inferior del chasis usando los soportes adecuados y colocar las ruedas, como se muestra en la figura.

Detalle de los soportes de los motores en la plataforma inferior

Ahora podemos pegar las dos protoboards usando su propio adhesivo. En la plataforma superior pegamos la protoboard de 400 pines y en la inferior la de 170 pines. En las siguientes figuras podemos ver la posición dónde colocarlas.

Plataforma superior
Plataforma inferior

Usaremos 4 separadores M3 para fijar la placa Wemos D1 R32 en su sitio. Podemos ir colocando el resto de los componentes como se muestra en las figuras anteriores.

Ahora es buen momento para fijar los soportes del HC-SR04, del interruptor y de los leds:

Detalle soportes HC-SR04 y leds en la parte frontal
Detalle soporte interruptor en la parte trasera

Esquemas

Veamos con detalle cada uno de los subsistemas que componen nuestro circuito: Alimentación, Motores, Luces, Claxon y Sensor de distancias.

Alimentación

Empezaremos cableando el sistema de alimentación. Los terminales de la base de baterías los conectamos a la regleta de alimentación a través del interruptor, como se muestra en la figura.

Es necesario el uso de un soldador para conectar el interruptor. Este lo fijamos en la parte posterior de la plataforma superior del chasis usando el soporte correspondiente.

Detalle soldadura interruptor

Cuando arrancan los motores se producen picos de corriente elevados que producen una caída de tensión en la batería. Estas variaciones de tensión pueden hacer que la Wemos D1 R32 se reinicie, por tanto, es necesario aislar la alimentación de los motores de la alimentación de la Wemos de manera que ésta tenga una alimentación constante. Esto lo hacemos con el regulador de tensión con salida autorregulada XL6009.

La XL6009 es capaz de mantener constante la tensión de salida independientemente del valor de la tensión de entrada. Antes de conectarla a la Wemos, debemos regular la salida a 12V actuando sobre su potenciómetro de ajuste. Conectamos un multímetro a los terminales OUT y giramos el potenciómetro hasta obtener 12V. Se trata de un potenciómetro multivuelta y podría ser necesario hacerlo girar varias vueltas hasta que empiece a actuar.

La alimentación del controlador de motores DRV8833 la tomamos directamente de la batería, a la salida de la regleta, mediante los pines VM y GND del controlador. La alimentación de la Wemos D1 R32 la tomaremos de la salida de la XL6009 usando los pines VN y GND de la Wemos.

Nota sobre la disposición de los pines

Siempre que realicemos conexiones con módulos estándar, como el DRV8833, el XL6009, etc, debemos guiarnos por la serigrafía de los pines, no por su posición en la placa. Distintos fabricantes podrían presentar disposiciones distintas de los mismos pines.

Al realizar las conexiones de las secciones siguientes, debemos tener cuidado de mantener el interruptor apagado para evitar posibles daños en los módulos.

Motores

Pasemos ahora a conectar los motores a su controlador. Aquí debemos tener en cuenta que los motores tienen polaridad, si los conectamos al revés girarán en sentido contrario al esperado.

El sistema consta de dos pares de motores. Dos motores en el lateral derecho y otros dos en el lateral izquierdo. Los motores del mismo par (izquierdo o derecho) los conectamos en paralelo para que giren conjuntamente.

Si hacemos girar los cuatro motores hacia adelante, el coche avanzará. Si los hacemos girar hacia atrás, el choche retrocederá. Para hacerlo girar a derecha o izquierda, debemos hacer que los motores de un par giren hacia delante y los del otro par giren hacia atrás.

El circuito a realizar es el siguiente:

Nota

En la imagen, los dos motores superiores (lateral derecho del coche) los hemos representado con los terminales de conexión hacia dentro para que sean visibles en el esquema, pero realmente estos terminales están situados hacia el exterior del coche. No nos liemos, el motor superior derecho de la imagen tiene el pin positivo arriba y el motor superior izquierdo tiene el pin positivo abajo, aunque estén girados en la imagen.

Los pines AIN1, AIN2, BIN1 y BIN2 del DRV8833 controlan la velocidad y sentido de giro de cada par de motores y los gestionamos desde la Wemos. El pin STBY habilita o deshabilita los motores, lo usamos para evitar que los motores giren aleatoriamente durante el arranque del sistema. Estas conexiones las hacemos con cables dupont macho-macho. Los pines AO1, AO2, BO1 y BO2 se encargan de la alimentación de los motores.

Para conectar los dos motores del mismo par en paralelo uniremos los cables positivos que vienen de los dos motores a un cable dupont macho, cortado por un extremo, que conectaremos a la protoboard. Hacemos lo mismo con los cables negativos. La unión podemos fijarla con tubo termo retráctil (pasar los cables por dentro del tubo y calentar con un mechero para que se contraiga). Aquí será necesario hacer uso del soldador y soldar los cables a los motores.

Detalle unión cables motores con tubo termo retráctil

Luces y Claxon

Ahora vamos a hacer uso de la protoboard superior. El circuito es el siguiente:

Esquema luces y claxon en la protoboard superior

La protoboard tiene dos líneas de alimentación, una a cada lado de la placa. La línea de alimentación derecha la usaremos para alimentar dispositivos que funcionan a 5V y la línea de alimentación izquierda la usaremos para tensiones de 3,3V. Así, conectamos los pines 5V y 3V3 de la Wemos a los pines positivos de las líneas correspondientes usando cables dupont macho-macho. El pin GND de la Wemos se conecta al pin negativo de ambas líneas de alimentación.

Las luces del coche las simulamos con un par de leds. Estos se conectan a través de una resistencia de 220R a los pines IO26 e IO25 de la Wemos. El pin corto del led es el negativo y lo conectaremos al pin negativo de la línea de alimentación de 3,3V. El pin largo del led lo conectamos a la resistencia de 220R.

Cuidado con las resistencias. Dado que sus patas son muy finas, tienen la mala costumbre de hacer mal contacto en la protoboard. Si alguno de los leds no se enciende, mover la resistencia para fijar el contacto.

El claxon lo simulamos con un buzzer activo. Este dispositivo emite un sonido cuando su línea de señal se pone a nivel bajo. La conexión es sencilla, los pines + y – del buzzer los conectamos directamente a la línea de alimentación de 3,3V y el pin de señal lo conectamos al pin IO17 de la Wemos. Es necesaria una resistencia de 10K entre el pin de señal y el pin positivo de la línea de alimentación para mantenerlo a nivel alto cuando no queremos que suene.

Detalle protoboard superior

Sensor de distancia HC-SR04

Se trata de un sensor que emite una señal de ultrasonidos y mide el tiempo que tarda en volver al ser reflejada por un objeto. Sabiendo el tiempo que tarda la señal en regresar y la velocidad del sonido en el aire, podemos determinar la distancia a la que estamos del objeto.

Lo usaremos para evitar choques con objetos situados delante del coche. Se activa cuando el coche lo ponemos en modo Automático mediante la app.

El esquema de conexión es el siguiente:

Conexión HC-SR04

Este módulo lo alimentamos desde la línea de alimentación de 5V de la protoboard. Los pines Trig y Echo del HC-SR04 los conectamos a los pines IO23 e IO5 de la Wemos usando cables dupont macho-macho. El sensor lo fijamos al chasis utilizando el soporte correspondiente.

Detalle colocación HC-SR04 en su soporte

Código

Vamos a utilizar Arduino IDE para subir el programa a la Wemos. Si no lo hemos hecho ya, debemos configurarlo para poder trabajar con el microcontrolador ESP32.

Tenemos que abrir la ventana de preferencias y especificar la URL dónde se encuentra la definición del hardware ESP32.

Debemos introducir la url https://dl.espressif.com/dl/package_esp32_index.json tal como se muestra en la imagen.

El siguiente paso es seleccionar la placa con la que vamos a trabajar. En el menú Herramientas/Placa seleccionamos DOIT ESP32 DEVKIT V1 (adecuado para el ESP-WROOM-32, el chip que incluye la Wemos D1 R32) y el puerto correcto para comunicar con la placa.

Con esto tenemos listo nuestro IDE para trabajar con la Wemos.

El código del proyecto podemos descargarlo aquí.

Una vez descargado y descomprimido el código con el enlace anterior, tenemos una carpeta llamada IoT.ESP32.Car en cuyo interior tenemos la siguiente estructura

Es importante mantener esta estructura de archivos. La carpeta data contiene la aplicación web que va a ejecutarse en el navegador y la vamos a subir al sistema de archivos interno del ESP32 (SPIFFS).

Los archivos incluidos en el proyecto son los siguientes:

  • IoT.ESP32.Car.ino Es el archivo raíz del proyecto. Contiene la lógica del sistema. En él controlamos cuándo deben girar los motores, encenderse las luces, etc.
  • Plumbing.h Encapsula toda la fontanería necesaria para hacer funcionar el servidor web del ESP32 y su sistema de archivos. Se encarga de interactuar con el navegador del teléfono para establecer la comunicación con el usuario.
  • data/index.html Contiene el código html y javascript que se va a enviar al navegador.
  • data/style.css Define los estilos (tamaño de la fuente, color, etc) de lo que el usuario verá en el navegador.

También será necesario instalar la librería ESP32MotorControl. Podemos usar el Gestor de librerías de Arduino IDE o descargarla de su sitio oficial. Esta librería nos permite enviar comandos al DRV8833 para controlar los motores.

Antes de subir el programa a la Wemos, debemos subir los archivos de la aplicación web al sistema de archivos SPIFFS del ESP32. Para esto es necesario instalar un plugin en nuestro Arduino IDE. Instrucciones detalladas de cómo hacerlo podemos verlas, por ejemplo, aquí.

Una vez instalado el plugin, conectamos la Wemos D1 R32 al PC con un cable USB, abrimos el archivo IoT.ESP32.Car.ino con el IDE de Arduino y ejecutamos la opción «Herramientas/ESP32 Sketch Data Upload». Esta opción sube el contenido de la carpeta data al sistema de archivos del ESP32.

Antes de subir el programa IoT.ESP32.Car.ino a la placa, es necesario personalizar el acceso a nuestra web WIFI. Para ello, editamos el archivo Plumbing.h, aquí debemos especificar el nombre y la contraseña de nuestra WIFI.

// Editar si es necesario ------------------------------

IPAddress Local_IP(192, 168, 1, 85);
IPAddress Gateway(192, 168, 1, 1);
IPAddress Subnet(255, 255, 255, 0);

const char* Ssid = "nombre de la wifi";
const char* Password = "contraseña de la wifi";

// End Editar si es necesario --------------------------

Tenemos que cambiar "nombre de la wifi" por el nombre de nuestra red y "contraseña de la wifi" por la contraseña correspondiente.

Por defecto, la Wemos tomará la dirección 192.168.1.85 en nuestra red, tal como se ve en la variable Local_IP. Si esta dirección estuviera en uso tendríamos que cambiarla aquí. La puerta de enlace (Gateway) y la máscara de subred (Subnet) son parámetros importantes que tendremos que adaptar a nuestra red.

Ahora ya podemos subir nuestro programa a la placa. Como siempre, usaremos el comando «Herramientas/Subir».

Puesta en marcha

Si todo ha funcionado correctamente, tenemos nuestro coche listo para usar. Quitamos el cable usb de conexión con el ordenador y pulsamos el interruptor para encenderlo. Veremos que, en el inicio del sistema, un led de la placa parpadea, esto significa que está buscando la red wifi. Cuando deje de parpadear indicará que la conexión se ha establecido y podemos acceder a la aplicación web instalada en la Wemos.

Abrimos el navegador del teléfono y vamos a la dirección http://192.168.1.85. Deberíamos obtener una página como la siguiente:

La funcionalidad de cada uno de los botones es evidente. Puedes ir probando para descubrir cómo funciona tu nuevo coche wifi.

También te podría gustar...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *