Rc Engine Sound |
Si bien hay muchos "emuladores de sonido" para coches y camiones R/C. Aunque uno que alguno modelos sean asequibles para el bolsillo, parece que estemos en un juego de coches de los 80's en un 386... Los modelos más caros suelen tener un buen sonido, pero suelen rondar los 50€~60€. Y pueden sonar bien, pero no tienen la cantidad de accesorios que incluye el repositorio del que vamos a tratar.
Empecemos!
Pues bien, navegando por GitHub encontré un proyecto llamado Rc_Engine_Sound_ESP32 de TheDIYGuy999, no solo cumple con las expectativas de sonido, Además también incluye todos los controles para luces como intermitencias o luces de freno y varios accesorios como 5ª rueda y el cabestrante.
PAM8403 |
En el apartado de sonido lo mejor que tiene esta amplificado con el módulo basado en el chipset PAM8403 altavoces de hasta 3W que dispone de dos canales de audio y hace que no tenga que parar un sonido para reproducir otro.
Y la verdad es que suena muy bien, tanto en potencia como en calidad. Se pueden usar 2 altavoces pueden usar cualquier potencia siempre que no supere los 3W.
En mi caso use unos altavoces de algún pequeño equipo para móviles que tenía por casa.
Además incluye una gran cantidad de sonidos para motores de muchos vehículos diferentes. En mi caso uso la motorización del MAN KAT y las luces como intermitencias y frenos. Una cosa que me gusto mucho es que con un motor se puede hacer que simule la vibración del motor. También simula el panel de control con un pequeño Oled de 80*160 al que se le puede cambiar la apariencia.
Cuenta con compatibilidad para señales PWM, PPM, SBUS e IBUS
Una de las cosas con las que me volví loco es que no se puede puede programar con las últimas versiones de placa la ESP32. Estas son las versiones tanto de ide como de placa que he usado y que han funcionado perfectamente:
- Arduino IDE 1.8.19 y Arduino 2.X En la documentación se especifica que sea superior a Arduino IDE 1.8.7
- Espressif Systems version 2.0.17
Antes de subir el código podemos cambiar algunos parámetros básicos. Hay archivos de configuración y son los siguientes:
- src.ino
- 0_generalSettings.h
- 1_Veicle.h
- 2_Remote.h
- 3_ESC.h
- 4_Transmission.h
- 5_Shaker.h
- 6_Lights.h
- 7_Servos.h
- 8_Sound.h
- 9_Dashboard.h
- 10_Trailer.h
src.ino
Este es el archivo principal y el que subiremos al ESP32. Todos los demás archivos derivan a este. Una de las cosas que podemos encontrar son los enlaces a las diferentes librerías que no están incluidas en el IDE de Arduino, Aquí tenéis una lista con las que vamos a necesitar:
0_GeneralSettings.h
En la pestaña "0_GeneralSettings.h":
Aquí podemos configurar el Wi-Fi en el apartado:
// #define ENABLE_WIRELESS
1_Vehicle.h
El vehiculo que queremos simular lo tenemos en una extensa lista en el archivo
"1_Vehicle.h" en mi caso selecciono "ManKat.h".
#include "vehicles/ManKat.h" // MAN KAT V8 Diesel German Bundeswehr military truck
Solo podemos seleccionar un vehículo al mismo tiempo
2_Remote.h
En la pestaña "2_Remote.h" Seleccionamos el transmisor, hay mucha variedad, desde IBUS a PWM, Estos son los que tiene predeterminados:
- FLYSKY FS I6X
- FLYSKY FS I6S LOADER
- FLYSKY FS I6S EXCAVATOR
- FLYSKY GT5
- RGT EX86100
- GRAUPNER MZ 12
- MICRO RC
- MICRO RC STICK
// #define RGT_EX86100 // ------- MT-305 remote delivered with RGT EX86100 crawler (use PWM communication setting)
3_ESC.h
También se puede modificar los valores del ESC y como pasaba con el apartado de transmisores, tenemos algunos valores predeterminados en el archivo "3_ESC.h":
- QUICRUN FUSION
- QUICRUN 16BL30
- ESC DIR
- RZ7886 DRIVER MODE
Otra apartado a tener en cuenta es el la protección de bateria, si no se utiliza hay que comentar la linea 132:
// #define BATTERY_PROTECTION // This will disable the ESC output, if the battery cutout voltage is reached. 2 fast flashes = battery error!
En el caso de tener activada la protección de batería, cuando el nivel sea bajo, debería sonar un mensaje en el idioma que tengamos seleccionado.
#include "vehicles/sounds/OutOfFuelEnglish.h"
// #include "vehicles/sounds/OutOfFuelGerman.h"
// #include "vehicles/sounds/OutOfFuelFrench.h"
// #include "vehicles/sounds/OutOfFuelDutch.h"
// #include "vehicles/sounds/OutOfFuelSpanish.h"
// #include "vehicles/sounds/OutOfFuelPortuguese.h"
// #include "vehicles/sounds/OutOfFuelJapanese.h"
// #include "vehicles/sounds/OutOfFuelChinese.h"
// #include "vehicles/sounds/OutOfFuelTurkish.h"
// #include "vehicles/sounds/OutOfFuelRussian.h"
4_Transmission.h
En caso de tener una caja de marchas de mas de dos velocidades, podemos activar dentro del archivo 4_Transmission.h
- Virtual de 3 velocidades
- Virtual de 16 velocidades secuencial
- Semiautomatico
- Doble embrague
En mi caso tengo configurada la de 3 velocidades que es la que viene por predeterminada.
#define VIRTUAL_3_SPEED
5_Shaker.h
Para la simulación del motor use un pequeño motor de un mando USB que tenía por ahí. Este motor también se puede configurar desde la pestaña 5_Shaker.h, según el motor que pongamos tendremos que retocar un poco para que funcione correctamente:
#define GT_POWER_STOCK //------- Select (remove //) one of the shaker configurations below
#ifdef GT_POWER_STOCK
// Shaker parameters (simulating engine vibrations)
const uint8_t shakerStart = 230; // Shaker power while engine start (max. 255, about 100)
const uint8_t shakerIdle = 150; // Shaker power while idling (max. 255, about 49)
const uint8_t shakerFullThrottle = 195; // Shaker power while full throttle (max. 255, about 40)
const uint8_t shakerStop = 230; // Shaker power while engine stop (max. 255, about 60)
#endif
6_Lights.h
Para el apartado de luces, tenemos 6_Lights.h. Toda la configuración va referida a Neopixel. Tiene efectos predefinidos como "El coche Fantástico" o luces de emergencia. Como no voy a usar Neopixel, dejo la linea comentada:
#define NEOPIXEL_ENABLED // GPIO0 used for WS2812 Neopixel control, if defined! Always enabled, unless you have issues with the library!
7_Servos.h
Los servos también tienen su apartado en "7_Servos.h" Las configuraciones disponibles son:
- SERVOS DEFAULT
- SERVOS LANDY_MN_MODEL
- SERVOS LANDY_DOUBLEEAGLE
- SERVOS C34
- SERVOS URAL
- SERVOS RGT EX86100
- SERVOS ACTROS
- SERVOS KING HAULER
- SERVOS RACING TRUCK
- SERVOS MECCANO DUMPER
- SERVOS OPEN RC TRACTOR
#define SERVOS_DEFAULT //------- Select (remove //) one of the remote configurations below
8_Sound.h
En el apartado de sonido, el archivo "8_Sound.h" lo vamos a utilizar para activar o no los intermitentes y sirenas así como ajunstar el volumen que necesitemos.
// #define NO_SIREN // siren sound is not played, if defined
// #define NO_INDICATOR_SOUND // If you don't want the indicator "tick - tack" sound
// Volume adjustment
// const uint8_t numberOfVolumeSteps = 3; // The mumber of volume steps below
// const uint8_t masterVolumePercentage[] = {100, 66, 44}; // loud, medium, silent (more than 100% may cause distortions)
const uint8_t numberOfVolumeSteps = 4; // The mumber of volume steps below
const uint8_t masterVolumePercentage[] = {100, 66, 44, 0}; // loud, medium, silent, no sound (more than 100% may cause distortions)
// Crawler mode
const uint8_t masterVolumeCrawlerThreshold = 44; // If master volume is <= this threshold, crawler mode (without virtual inertia) is active
En este apartado he comentado #define NO_INDICATORS_SOUND Para activar el sonido de los intermitentes.
9_Dashboard.h
RC dashboard |
Como comentábamos al principio, podemos poner una pequeña pantalla de 80*160 y de su configuración se encarga "9_Dashboard.h". Aquí podemos activar el pequeño panel y definir la velocidad máxima o el máximo de revoluciones que se van a mostrar.
El resto de parámetros como la cantidad de combustible o, incluso, personalizar los colores del panel, el archivo que tenemos que modificar esta dentro de la carpeta src/Dashboard.h Esta opción viene desactivada por defecto.
10_Trailer.h
Esta es la configuración para un remolque. Viene activado el primer tráiler por defecto y salvo que se este usando, no afecta al funcionamiento normal.
Se pueden configurar hasta 3 trailers diferentes.
Esquema de conexiones entre ESP32 y los demas elementos |
Otra de las modificaciones es la bocina, la que viene por defecto no suena muy bien, o por lo menos a mi no termina de convencerme. Esto cambios se pueden realizar en el archivo /vehicles/ManKat.h en el apartado:
// Choose the horn sound (uncomment the one you want) --------
volatile int hornVolumePercentage = 150; // Adjust the horn volume (usually = 100%)
Cambiando:
// #include "sounds/ManKatHorn.h" // MAN KAT V8
por
#include "sounds/westinghouseHorn.h" // American truck horn (the best)
Solo podemos seleccionar una bocina al mismo tiempo
A pesar de que parezca complicado, la verdad es que puedes complicarlo como quieras ya que es completamente modular. Podemos tener solo las luces o solo el sonido.
Otra de las particularidades es que incluye conexión para tráiler mediante el chip wifi del mismo ESP. No tengo muy claro como funciona pero imagino que simplificará las conexiones entre entre "cabeza" y "remolque".
Por mi parte a pesar de tener remolque lo tengo con cables y solo tiene una salida para controlar la rampa los intermitentes y la luz de freno.
Instalación:
A la hora de subir el sketch al microcontrolador ESP32 y como he comentado anteriormente, no he tenido problemas a la hora de subir el programa tanto con Arduino IDE 1.8.19 ni con Arduino IDE 2.X.
Pero si tendremos que tener la versión de placa 2.0.17. Si tienes la versión más actual (que es lo lógico) tendremos que cambiar a la versión:
Estos son los parámetros que seleccionado a la hora de subir el programa al ESP32
- Placa: DOIT ESP32 DEVKIT V1
- Upload Speed: 460800
- Flash Frequency: 80MHz
- Core debug level: "ninguno"
- Erase all before sketch upload: "Enabled"
Cuando la carga del programa haya terminado, podemos comprobar si todo está correctamente en el monitor serial. Nos tiene que aparacer un mensaje como el siguiente:
**************************************************************************************************
TheDIYGuy999 RC engine sound & light controller for ESP32 software version 9.13.0
https://github.com/TheDIYGuy999/Rc_Engine_Sound_ESP32
Please read carefully: https://github.com/TheDIYGuy999/Rc_Engine_Sound_ESP32/blob/master/README.md
XTAL Frequency: 40 MHz, CPU Clock: 240 MHz, APB Bus Clock: 80000000 Hz
Internal RAM size: 354360 Byte, Free: 329236 Byte
WiFi MAC address: F0:08:D1:D8:67:EC
Core 0 reset reason: 9: RTCWDT_SYS_RESET
Core 1 reset reason: 14: EXT_CPU_RESET
**************************************************************************************************
EEPROM initialized.
EEPROM read.
current eeprom_id: 5
change it for default value upload!
ESC calibration data: ----
ESC pulse span: 600 (Used to adjust the top speed: 500 = full ESC power, 1000 = half ESC power etc.)
ESC takeoff punch: 0 (Usually 0. Enlarge it up to about 150, if your motor is too weak around neutral.)
ESC reverse plus: 0 (Usually 0. Enlarge it up to about 220, if your reverse speed is too slow.)
ESC ramp time for crawler mode: 10 (about 10 - 15), less = more direct control = less virtual inertia)
**************************************************************************************************
ENABLE_WIRELESS option disabled, no WiFi configuration or ESP-Now Trailer!
-------------------------------------
Warning, BATTERY_PROTECTION disabled! ESC with low discharge protection required!
-------------------------------------
... PWM communication mode active.
-------------------------------------
Standard ESC mode configured. Connect crawler ESC to ESC header. RZ7886 motor driver not usable!
-------------------------------------
EXPONENTIAL_THROTTLE mode enabled
Transmitter channel offsets (calculated, if channelAutoZero[] = true):
CH1: 0 µs
CH3: 0 µs
Vídeo exlicando los archivos y la instalación en el ESP32:
Aquí os dejo los enlaces necesarios para el proyecto:
Repositorio oficial de RC Engine Sound ESP32 en GitHub
Puedes hacer las placas de una manera profesional desde PCBway.com
No hay comentarios :
Publicar un comentario