English | 简体中文 | Deutsch | Français | Español | 한국어
Usamos una unidad de microcontrolador (MCU) para actuar como un puente entre el cuerpo del robot y el smartphone. Proporcionamos nuestro firmware para el Arduino Nano con un microcontrolador ATmega328P, así como para el kit de desarrollo ESP32.
La tarea principal del MCU es manejar el control de bajo nivel del vehículo y proporcionar lecturas de los sensores montados en el vehículo. El MCU recibe los controles del vehículo y las señales de los indicadores a través de la conexión serial. Convierte los controles en señales PWM para el controlador del motor y activa los LEDs según la señal del indicador. El programa de Arduino también realiza un seguimiento de las rotaciones de las ruedas contando las interrupciones de los sensores ópticos en las ruedas delanteras izquierda y derecha. Calcula el voltaje de la batería mediante un promedio móvil escalado de las mediciones en el circuito divisor de voltaje. También puede medir la distancia a los obstáculos frente al coche con un sensor ultrasónico opcional. Estas mediciones se envían de vuelta a la aplicación de Android a través del enlace serial.
Primero debes configurar tu hardware al inicio del código. Si hiciste la construcción DIY (usando el controlador de motor L298N), establece OPENBOT DIY
. Si usaste la PCB personalizada, verifica la versión y establece OPENBOT PCB_V1
o OPENBOT PCB_V2
. Si tienes un kit OpenBot, establece OPENBOT RTR_TT
. Si has adaptado un camión RC, establece OPENBOT RC_CAR
. Si usas la versión DIY más pequeña para educación, establece OPENBOT LITE
. Si usas el kit OpenBot Ready-to-Run con motores 520, establece OPENBOT RTR_520
. Si construiste el Vehículo Multi Terreno, debes establecer OPENBOT MTV
. Para ejecutar el OpenBot DIY
con el ESP32, establece DIY_ESP32
.
Puedes ejecutar el OpenBot a través de Bluetooth también, para eso puedes habilitar el Bluetooth estableciendo BLUETOOTH 1
(deshabilitar: 0). Para que el Bluetooth funcione necesitas OpenBot con placas ESP32 como (RTR_520, MTV, DIY_ESP32)
.
A continuación, necesitas configurar qué características deseas habilitar. Las características deshabilitadas no se compilan para ahorrar memoria y hacer el código más rápido. Si una bandera no está definida, la característica se deshabilitará. Cada modelo tiene algunas configuraciones predeterminadas que puedes necesitar cambiar dependiendo de tu configuración.
- Habilita el divisor de voltaje estableciendo
HAS_VOLTAGE_DIVIDER 1
(deshabilitar: 0). Si tienes un divisor de voltaje, también debes especificar elVOLTAGE_DIVIDER_FACTOR
que se calcula como (R1+R2)/R2,VOLTAGE_MIN
que es el voltaje mínimo para conducir los motores,VOLTAGE_LOW
que es el voltaje mínimo de la batería yVOLTAGE_MAX
que es el voltaje máximo de la batería. - Habilita los LEDs indicadores estableciendo
HAS_INDICATORS 1
(deshabilitar: 0). - Habilita los sensores de velocidad delanteros/traseros estableciendo
HAS_SPEED_SENSORS_FRONT 1
/HAS_SPEED_SENSORS_BACK 1
(deshabilitar: 0). - Habilita el sensor ultrasónico estableciendo
HAS_SONAR 1
(deshabilitar: 0). Habilita el filtro de mediana para las mediciones del sonar estableciendoUSE_MEDIAN 1
(deshabilitar: 0). - Habilita el sensor de parachoques que se usa para detectar colisiones estableciendo
HAS_BUMPER 1
(deshabilitar: 0). - Habilita la pantalla OLED estableciendo
HAS_OLED 1
(deshabilitar: 0). - Habilita los LEDs delanteros/traseros/de estado estableciendo
HAS_LEDS_FRONT 1
/HAS_LEDS_BACK 1
/HAS_LEDS_STATUS 1
(deshabilitar: 0).
Si has habilitado los sensores de velocidad o el sensor ultrasónico, necesitas instalar la biblioteca PinChangeInterrupt. El Arduino Nano solo tiene dos pines de interrupción externa (D2 y D3) y D3 es también uno de los seis pines que soportan PWM. Afortunadamente, también tiene tres interrupciones de puerto que cubren todos los pines del Arduino. Esta biblioteca analiza estas interrupciones de puerto permitiendo que todos los pines del Arduino se usen como interrupciones.
Si has habilitado la OLED, necesitas instalar las bibliotecas Adafruit_SSD1306 y Adafruit_GFX Library.
Puedes instalar bibliotecas siguiendo estos pasos:
- Abre el Administrador de Bibliotecas:
Herramientas
➡️Administrar Bibliotecas
- Ingresa el nombre de la biblioteca en la barra de búsqueda.
- Selecciona la última versión y haz clic en instalar. Si ya has instalado la biblioteca, se mostrará y podrás actualizarla.
Es posible que necesites descargar los controladores WCH340 del fabricante del chip (chino):
Para instalar la placa ESP32 en tu IDE de Arduino, sigue estas instrucciones:
- En tu IDE de Arduino, ve a Archivo > Preferencias:
- Ingresa https://dl.espressif.com/dl/package_esp32_index.json en el campo “URLs adicionales del gestor de placas” como se muestra en la figura a continuación. Luego, haz clic en el botón “OK”:
Nota: si ya tienes la URL de las placas ESP8266, puedes separar las URLs con una coma de la siguiente manera:
https://dl.espressif.com/dl/package_esp32_index.json,
http://arduino.esp8266.com/stable/package_esp8266com_index.json
- Abre el Gestor de Placas. Ve a Herramientas > Placa > Gestor de Placas:
- Busca ESP32 y presiona el botón de instalar para “ESP32 by Espressif Systems“:
- Ahora deberías tener todo para flashear con éxito la placa ESP32 de tu OpenBot usando el entorno de desarrollo de Arduino.
- Para flashear el OpenBot con tu nuevo código, simplemente selecciona ESP32 Dev Module en el menú Herramientas > Placa > ESP32 Arduino. Ten en cuenta que contenido adicional así como solución de problemas del proceso de flasheo del ESP32 se pueden encontrar en el siguiente enlace.
Herramientas
➡️Placa
➡️Arduino AVR Boards
➡️Arduino Nano
Herramientas
➡️Procesador
➡️ATmega328P (Old Bootloader)
Herramientas
➡️Puerto
➡️*Selecciona el puerto USB*
📝 NOTA: Actualmente, la mayoría de las placas Arduino Nano baratas vienen con el Old Bootloader. Sin embargo, dependiendo del vendedor, también puedes obtener una con el nuevo bootloader. Así que si no puedes subir el firmware, es probable que necesites cambiar el procesador a ATmega328P.
Herramientas
➡️Placa
➡️ESP32 Arduino
➡️ESP32 Dev Module
Herramientas
➡️Puerto
➡️*Selecciona el puerto USB*
El firmware ahora se puede subir a través de Sketch
➡️ Upload
o presionando el botón de subir (flecha derecha).
Esta sección explica cómo probar todas las funcionalidades del coche después de que el firmware se haya flasheado con éxito.
- Confirma que:
- las ruedas no están conectadas al coche
- el Arduino está conectado a la computadora
- el puerto USB correcto está seleccionado
- Abre el Monitor Serial:
Herramientas
➡️Monitor Serial
También puedes enviar mensajes al Arduino escribiendo un comando en el campo de entrada en la parte superior y luego presionando enviar. Los siguientes comandos están disponibles (siempre que las características necesarias sean compatibles con el robot):
c<izquierda>,<derecha>
donde<izquierda>
y<derecha>
están en el rango [-255,255]. Un valor de0
detendrá los motores. Un valor de255
aplica el voltaje máximo conduciendo los motores a la velocidad máxima hacia adelante. Valores más bajos conducen a voltajes y velocidades proporcionalmente más bajos. Valores negativos aplican los voltajes correspondientes en polaridad inversa conduciendo los motores en reversa.i<izquierda>,<derecha>
donde<izquierda>
y<derecha>
están en el rango [0,1] y corresponden a los LEDs indicadores izquierdo y derecho. Por ejemplo,i1,0
enciende el indicador izquierdo,i0,1
el derecho ei1,1
ambos indicadores. Las luces indicadoras habilitadas parpadearán una vez por segundo. Un valor dei0,0
apaga los indicadores. Solo es posible un estado a la vez.l<frontal>,<trasero>
donde<frontal>
y<trasero>
están en el rango [0,255] y corresponden al brillo de los LEDs delanteros y traseros.s<tiempo_ms>
donde<tiempo_ms>
corresponde al tiempo en ms entre mediciones de sonar activadas (predeterminado = 1000). Después de adquirir la lectura del sonar, el mensaje se envía al robot. Si se agota el tiempo, se envía laMAX_SONAR_DISTANCE
especificada.w<tiempo_ms>
donde<tiempo_ms>
corresponde al tiempo en ms entre mediciones de odometría de ruedas enviadas al robot (predeterminado = 1000). La velocidad de las ruedas se monitorea continuamente y el rpm se calcula como promedio durante el intervalo de tiempo especificado.v<tiempo_ms>
donde<tiempo_ms>
corresponde al tiempo en ms entre mediciones de voltaje enviadas al robot (predeterminado = 1000). El voltaje se monitorea continuamente y se filtra a través de un filtro de promedio móvil de tamaño 10. Además de establecer el intervalo de tiempo para las lecturas de voltaje, enviar este comando también activará mensajes que informan el voltaje mínimo para conducir los motores (vmin:<valor>
), el voltaje mínimo de la batería (vlow:<valor>
) y el voltaje máximo de la batería (vmax:<valor>
).h<tiempo_ms>
donde<tiempo_ms>
corresponde al tiempo en ms después del cual el robot se detendrá si no se recibe un nuevo mensaje de latido (predeterminado = -1).b<tiempo_ms>
donde<tiempo_ms>
corresponde al tiempo en ms después del cual se restablecerá el disparador del parachoques (predeterminado = 750).n<color>,<estado>
donde<color>
corresponde a un LED de estado (b
= azul,g
= verde,y
= amarillo) yestado
a su valor (0
= apagado,1
= encendido).f
enviará una solicitud al OpenBot para devolver un mensaje con el tipo de robot y sus características, por ejemplo, medición de voltaje (v
), indicadores (i
), sonar (s
), sensores de parachoques (b
), odometría de ruedas (wf
,wb
), LEDs (lf
,lb
,ls
), etc. Por ejemplo, para la versiónRTR_V1
de OpenBot, el mensaje se vería así:fRTR_V1:v:i:s:b:wf:wb:lf:lb:ls:
.
Dependiendo de tu configuración, puedes ver diferentes mensajes.
- Los mensajes que comienzan con
v
informan el voltaje de la batería. Si conectas la batería al coche (es decir, enciendes el interruptor), debería mostrar el voltaje de la batería. Si desconectas la batería (es decir, apagas el interruptor), debería mostrar un valor pequeño. - Los mensajes que comienzan con
w
informan las lecturas de los sensores de velocidad medidas en revoluciones por segundo (rpm). Cada agujero en el disco del codificador incrementará un contador en más/menos uno dependiendo de la dirección. Puedes establecer el número de agujeros con el parámetroDISK_HOLES
. Si estás usando el disco estándar con 20 agujeros, habrá 20 cuentas para cada revolución de la rueda. - Los mensajes que comienzan con
s
informan el espacio libre estimado frente al sensor ultrasónico en cm. - Los mensajes que comienzan con
b
informan colisiones. Los códigoslf
(frontal izquierdo),rf
(frontal derecho),cf
(frontal central),lb
(trasero izquierdo),rb
(trasero derecho) indican qué sensor activó la colisión.
Antes de continuar, asegúrate de que los neumáticos estén removidos. Necesitarás el Monitor Serial abierto para enviar comandos y verás los mensajes recibidos de tu OpenBot. Si tienes la pantalla OLED instalada, también verás el estado del vehículo allí en un formato más legible. El siguiente procedimiento de prueba se puede usar para probar todas las funcionalidades del coche:
- Enciende el coche y observa el voltaje de la batería (el número después de la
v
). Puedes verificar la lectura con un multímetro y ajustar elVOLTAGE_DIVIDER_FACTOR
si es necesario. - Si tienes un sensor ultrasónico instalado:
- Sostén tu mano frente al sensor y muévela hacia adelante y hacia atrás. Deberías ver las lecturas (el número después de la
s
) cambiar correspondientemente. - Hemos observado que el sensor ultrasónico es muy sensible a las vibraciones. Por lo tanto, es aconsejable asegurarse de que obtendrás lecturas confiables durante la operación realizando la siguiente prueba:
- Coloca el OpenBot con el sensor ultrasónico instalado de manera que haya al menos 200 cm de espacio libre frente a él. Deberías ver una lectura de
200
o más. - Observa las lecturas en el monitor serial durante un tiempo y luego ingresa el comando
c128,128
. - Si las lecturas del sensor cambian significativamente, necesitarás amortiguar las vibraciones transmitidas al sensor ultrasónico desde el chasis (por ejemplo, agregar algo de silicona, ajustar la posición de montaje).
- Coloca el OpenBot con el sensor ultrasónico instalado de manera que haya al menos 200 cm de espacio libre frente a él. Deberías ver una lectura de
- Sostén tu mano frente al sensor y muévela hacia adelante y hacia atrás. Deberías ver las lecturas (el número después de la
- Si tienes los sensores de velocidad instalados:
- Asegúrate de tener mucho espacio libre frente al sensor ultrasónico. La lectura (el número después de la
s
) debe estar al menos por encima delSTOP_DISTANCE
que es10
por defecto. - Envía el comando
c128,128
. Los motores comenzarán a girar a baja velocidad (50% PWM). Las lecturas del sensor de velocidad (valores después de law
) se informan en rpm y deben estar entre 250 y 300 para la versión RTR_TT dependiendo del SOC de la batería. Si estás usando la versión DIY o una batería más débil, los valores pueden ser más bajos. Verifica que todos los motores estén girando hacia adelante y que las lecturas del sensor de velocidad sean positivas. - Intenta enviar diferentes controles y observa las lecturas del sensor de velocidad. Por ejemplo, el comando
c-128,-128
hará que todos los motores giren hacia atrás a baja velocidad (50% PWM). El comandoc255,-255
hará que los motores izquierdos giren hacia adelante y los derechos hacia atrás a alta velocidad (100% PWM). El comandoc-192,192
hará que los motores izquierdos giren hacia atrás y los derechos hacia adelante a velocidad normal (75% PWM).
- Asegúrate de tener mucho espacio libre frente al sensor ultrasónico. La lectura (el número después de la
- Detén los motores enviando el comando
c0,0
o colocando tu mano