Documentos de Académico
Documentos de Profesional
Documentos de Cultura
AUTORES:
Ibarra, 2022
ii
CERTIFICADO
CERTIFICO:
Atentamente
ANDRES FELIPE
CEVALLOS
GONZALEZ
1. IDENTIFICACIÓN DE LA OBRA
DATOS DE CONTACTO
EMAIL: ampugag@utn.edu.ec
DATOS DE CONTACTO
EMAIL: jsmoralesr@utn.edu.ec
DATOS DE LA OBRA
PROGRAMA: PREGRADO
2. CONSTANCIAS
AUTORES:
DEDICATORIA
Esta tesis está dedicada a mi mamá quién me animó en este campo de estudio y a
la cual admiro mucho por su inteligencia y astucia.
A mi papá quien es mi ejemplo para seguir como profesional, pues realizarme como
tal siempre fue su objetivo, él es sin duda para mí la verdadera definición de ser un
ingeniero.
A mi compañera de proyecto y mejor amiga Stefy ya que sin su ayuda y trabajo en
equipo no hubiese sido posible.
A mi buen amigo Albaro el cual me dio la carrera y siempre compartió conmigo
tristezas y alegrías.
A mis hermanos que son las personas que más quiero.
Sobre todo, a esa personita que hace que mis días sean más alegres, por ser mi
cómplice, mi confidente, por ayudarme a crecer, por amarme y siempre motivarme
a cumplir mis sueños, mi corazón te pertenece.
AGRADECIMIENTOS
En primer lugar, quiero agradecer a mi madre Jhovana, quién con mucho esfuerzo
y sacrificio logro brindarme la educación necesaria para convertirme en una
profesional, así mismo agradezco a mi padrastro Andrés quien a pesar de no ser
mi padre siempre me apoyo económica y moralmente.
A mis abuelitos Flora y Luis, por siempre estar pendientes de mí, aconsejarme y
ayudarme a resolver los dilemas que se suscitan en el transcurso de la vida.
A mi mejor amigo y compañero Moisés, por su apoyo moral durante esta etapa
universitaria y el trabajo en equipo que hicimos para culminar este trabajo de grado.
Con el objetivo de graduarnos juntos.
vii
RESUMEN ............................................................................................................................ 7
ABSTRACT .......................................................................................................................... 9
INTRODUCCIÓN ............................................................................................................... 10
CAPÍTULO I ....................................................................................................................... 11
1 REVISIÓN BIBLIOGRÁFICA ........................................................................................ 11
1.1 OBJETIVOS ......................................................................................................... 11
1.1.1 Objetivo general .................................................................................................. 11
1.1.2 Objetivos específicos........................................................................................... 11
1.2 JUSTIFICACIÓN ...................................................................................................... 11
1.3 ALCANCE ................................................................................................................. 12
1.4 ANTECEDENTES .................................................................................................... 13
1.5 PLANTEAMIENTO DEL PROBLEMA .................................................................. 14
1.6 SITUACIÓN ACTUAL ............................................................................................. 15
1.7 SISTEMA DE DIAGNOSTICO A BORDO OBDII ................................................. 16
1.7.1 Historia ................................................................................................................ 16
1.7.2 Funcionamiento y detección de fallas del sistema de diagnóstico a bordo OBDII.
17
1.7.3 Modos de medición OBDII ................................................................................. 18
1.7.3.1 Modo 01: Obtención de datos de diagnóstico actualizados .......................... 18
1.7.3.2 Modo 02: Acceso a datos congelados........................................................... 22
1.7.3.3 Modo 03: Códigos de diagnóstico almacenados .......................................... 22
1.7.3.4 Modo 04: Borrado de códigos de falla (DTC) y cuadro de almacenados .... 23
1.7.3.5 Modo 05: Test de los sensores de oxígeno. .................................................. 24
1.7.3.6 Modo 06: Resultados de las pruebas de monitoreo de control de otros
traductores (monitoreo del sensor de oxígeno solo CAN). ...................................... 24
1.7.3.7 Modo 07: Mostrar códigos de diagnóstico pendientes, en el último o actual
ciclo de manejo completado. .................................................................................... 24
1.7.3.8 Modo 08: Control de funcionamiento del sistema a bordo. ......................... 25
1.7.3.9 Modo 09: Información del vehículo. ............................................................ 25
1.7.4 Data Link Connector ........................................................................................... 25
1.8 REDES MULTIPLEXADAS Y PROTOCOLOS DE COMUNICACIÓN. ............. 26
1.8.1 Conceptualización ............................................................................................... 26
1.8.2 Conceptos básicos de redes multiplexadas.......................................................... 26
1.8.3 Tipos de configuración de redes.......................................................................... 27
1.8.3.1 Configuración punto a punto ........................................................................ 27
1.8.3.2 Configuración en estrella .............................................................................. 27
1.8.3.3 Configuración en anillo ................................................................................ 28
ix
INDICE DE FIGURAS
Figura 1.1 Unidad de Control Electrónico del Motor........................................................ 17
Figura 1.2 Data Link Connector OBDII, tipo hembra........................................................ 25
Figura 1.3 Conexión de red punto a punto. ........................................................................ 27
Figura 1.4 Conexión de red tipo estrella. ........................................................................... 28
Figura 1.5 Configuración de red tipo anillo. ...................................................................... 28
Figura 1.6 Configuración de red lineal. .............................................................................. 29
Figura 1.7 Configuración Daysi Chain ............................................................................... 29
Figura 1.8 Configuración de red Maestro- Esclavo ........................................................... 30
Figura 1.9 Configuración de red Gateway. ........................................................................ 30
Figura 1.10 Conector DLC ISO 9141-2 ............................................................................. 31
Figura 1.11 Conector DLC SAE J1850 (PWM)................................................................. 32
Figura 1.12 Conector DLC SAE J1850 (VPW) ................................................................. 32
Figura 1.13 Conector DLC CAN ISO 15765-4 .................................................................. 33
Figura 1.14 Ejemplo de arbitraje Bit a Bit entre tres nodos que transmiten simultáneamente.
35
Figura 1.15 Marco de datos de una Red CAN ................................................................... 36
Figura 1.16 Campo de arbitraje estándar de 12 Bits de longitud, 11 Bits identificadores y un
Bit RTR. .............................................................................................................................. 37
Figura 1.17 Campo de arbitraje estándar de 32 Bits de longitud, 11 Bits identificadores y un
Bit RTR. .............................................................................................................................. 37
Figura 1.18 Campos de control para tramas de datos estándar (izquierda) y extendidas
(derecha). ............................................................................................................................. 38
Figura 1.19 Campos CRC .................................................................................................. 38
Figura 1.20 Trama de reconocimiento y fin de trama. ....................................................... 39
Figura 1.21 Oscilograma de las señales del BUS de datos, se puede observar la señal CAN
High en amarillo y la señal CAN Low en verde.................................................................. 40
Figura 1.22 Ejemplo de Red CAN con distintos protocolos CAN interconectados por un
módulo Gateway. ................................................................................................................. 43
Figura 1.23 Placa de Arduino mega 2560 Rev3. ................................................................ 46
Figura 2.1 Dispositivo CAN Bus Analyzer ........................................................................ 57
Figura 2.2 Conector RS232C a OBD II ............................................................................. 58
2
Figura 3.4 Registro de datos en formato .txt ...................... ¡Error! Marcador no definido.
Figura 3.5 Registro de datos en formato .txt .................................................................... 113
ÍNDICE DE TABLAS
Tabla 1.1 PIDs estándar para OBDII modo 01. ................................................................. 22
Tabla 1.2 PIDs para interpretar datos del Freeze Frame del modo 02. .............................. 22
Tabla 2.1 Características del CAN Bus Analyzer .............................................................. 57
Tabla 2.2 Características y funciones del dispositivo ELM 327 CAN bus scanner ........... 59
Tabla 2.3 Características y funciones especializadas del Arduino Mega 2560 .................. 60
Tabla 2.4 Características del CAN – Bus Shield V2 MCP2515 ........................................ 61
Tabla 2.5 Características del Módulo Micro SD lector tarjeta Arduino ............................. 62
Tabla 2.6 Especificaciones técnicas del Módulo RCT DS1302 ......................................... 63
Tabla 2.7 Sistemas de seguridad activa y pasiva ................................................................ 67
Tabla 2.8 Módulos disponibles y su utilidad para el estudio .............................................. 68
Tabla 2.9 Módulo de Control Electrónico (ENGINE) ....................................................... 71
Tabla 2.10 Módulo del Chasis Control ............................................................................... 72
Tabla 2.11 Identificación de PIDs genéricos o estándar..................................................... 73
Tabla 2.12 Estructura de la trama para el envío de PIDs estándar. .................................... 75
Tabla 2.13 Estructura de la trama para recepción de datos. ............................................... 75
Tabla 2.14 Tramas de datos para solicitar PIDs en modo fabricante. ................................ 81
Tabla 2.15 Estructura de la Trama de solicitud y respuesta que abarca el PID del BRAKE
SW1 ..................................................................................................................................... 83
Tabla 2.16 Clasificación del grado de gravedad de un accidente vehicular ....................... 90
Tabla 2.17 PIDs declarados fabricantes y genéricos .......................................................... 93
Tabla 3.1 Sistemas de seguridad activa y pasiva que comparten sensores ......................... 99
Tabla 3.2 Descripción de los módulos ENGINE y CHASIS CONTROL ........................ 101
Tabla 3.3 Módulo de Control Electrónico (ENGINE) ..................................................... 102
Tabla 3.4 Módulo del Chasis Control ............................................................................... 103
Tabla 3.5 Estructura de la trama solicitud y respuesta del CAL/LD VALUE ................. 103
Tabla 3.6 Estructura de la trama solicitud y respuesta del TRVL AFTER MIL .............. 103
Tabla 3.7 Estructura de la trama solicitud y respuesta del VHCL SPEED Sensor .......... 104
Tabla 3.8 Estructura de la Trama de solicitud y respuesta que contiene el PID del ABS
MALF ................................................................................................................................ 105
4
Tabla 3.9 Estructura de la Trama de solicitud y respuesta que contiene el PID del SIDE G
SENSOR ............................................................................................................................ 105
Tabla 3.10 Estructura de la Trama de solicitud y respuesta que contiene el PID de la
Aceleración Transversal .................................................................................................... 106
Tabla 3.11 Estructura de la Trama de solicitud y respuesta que contiene el PID del FR
WHEEL SPEED ................................................................................................................ 106
Tabla 3.12 Estructura de la Trama de solicitud y respuesta que contiene el PID del FL
WHEEL SPEED ................................................................................................................ 106
Tabla 3.13 Estructura de la Trama de solicitud y respuesta que contiene el PID del
RRWHEEL SPEED ........................................................................................................... 107
Tabla 3.14 Estructura de la Trama de solicitud y respuesta que contiene el PID del RR
WHEEL SPEED ................................................................................................................ 107
Tabla 3.15 Estructura de la Trama de solicitud y respuesta que contiene el PID del
STERING ANG SENSOR ................................................................................................ 107
Tabla 3.16 Estructura de la Trama de solicitud y respuesta que contiene el PID del YAW
RATE SENSOR ................................................................................................................ 108
Tabla 3.17 Función del DATA 4 ...................................................................................... 109
Tabla 3.18 Función del DATA 4 ...................................................................................... 110
Tabla 3.19 Función del DATA 4 ...................................................................................... 111
5
ÍNDICE DE ANEXOS
ANEXO 1
6.1 Código de programación ............................................................................................. 122
6
ÍNDICE DE ECUACIONES
Ecuación(1) ....................................................................................................................... 108
Ecuación(2) ....................................................................................................................... 109
Ecuación(3) ....................................................................................................................... 109
Ecuación(4) ....................................................................................................................... 110
Ecuación(5) ....................................................................................................................... 110
Ecuación(6) ....................................................................................................................... 110
Ecuación(7) ....................................................................................................................... 111
Ecuación(8) ....................................................................................................................... 111
7
RESUMEN
En el presente trabajo de grado se plantea el desarrollo de un dispositivo basado en Arduino,
con la finalidad de adquirir los datos de la red CAN para conocer las condiciones que suscitan
accidentes vehiculares, mediante una lectura inicial del flujo de datos a los módulos que
conforman la Unidad Electrónica de Control (ECU) por medio de un escáner automotriz,
siendo los módulos ENGINE Y CHASIS CONTROL los que contengan variables referente
a la seguridad del vehículo, haciendo una previa selección de las variables que cumplan con
los requerimientos del estudio, como son: WHEEL SPEED (Velocidad de las ruedas),
CAL/LD VALUE (Valor calculado de la carga), BRAKE SWITCH (Switch del freno), ABS
MALF (Estado del sistema ABS), SIDE AND DECEL G SENSOR (Aceleraciones
transversales y longitudinales), YAW RATE SENSOR (Sensor giro o guiñada), VEHICLE
SPEED (Sensor VSS), STEERING ANG SENSOR (Ángulo de dirección) y ENGINE
SPEED (Revoluciones del motor). De tal manera por medio del CAN Analyzer y juntamente
con el escáner se extraen los datos denominados tramas de información y dentro de cada
trama se encuentran los PIDs, que son las solicitudes y respuestas que se usa para la
comunicación del microcontrolador con la red CAN del vehículo, de cada una de las
variables sea estándar o fabricante.
Para la extracción de los PIDs estándar se genera una comunicación entre la red CAN del
vehículo y las herramientas: un software denominado Hyperterminal, el analizador CAN y
el escáner. Donde se examinan las tramas de información, analizando cuales son las
solicitudes y respuestas de cada una de las variables seleccionadas netamente estándar,
mientras que la extracción de los PIDs fabricante se usa un grabador de datos “DATA LOG”,
que guarda un flujo de datos en formato CSV siendo estos filtrados para posteriormente ser
analizados, determinando las solicitudes para ingresar a cada una de las variables requeridas
y a su vez adquirir las respuestas de estas variables. Estos datos muestran un formato
hexadecimal, siendo difícil ser interpretados, de tal manera de realiza un proceso de
decodificación. Mediante la identificación de valores picos de las gráficas que ofrece el
escáner capturando datos en tiempo real, donde se desarrolla fórmulas que conviertan estos
datos hexadecimales a decimales, permitiendo que la deducción e interpretación de los datos
sea sencilla.
y entre otros. Con la finalidad de generar la lectura, escritura y almacenamiento de los datos
de la red CAN en una tarjeta SD, el proceso de registro y almacenamiento de datos se lleva
a cabo siempre y cuando se supere un umbral de valores referente a las aceleraciones
trasversales y longitudinales, cuando el vehículo entre en riesgo de una posible colisión los
datos se almacenaran para su posterior lectura.
9
ABSTRACT
In this degree work we propose the development of a device based on Arduino, in order to
acquire data from the CAN network to know the conditions that cause vehicle accidents,
through an initial reading of the data flow to the modules that make up the Electronic Control
Unit (ECU) through an automotive scanner, being the ENGINE and CHASSIS CONTROL
modules that contain variables relating to vehicle safety, making a previous selection of the
variables that meet the requirements of the study, such as: WHEEL SPEED (wheel speed),
CAL/LD VALUE (calculated load value), BRAKE SWITCH (brake switch), ABS MALF
(ABS system status), SIDE AND DECEL G SENSOR (transverse and longitudinal
accelerations), YAW RATE SENSOR (yaw sensor), VEHICLE SPEED (VSS sensor),
STEERING ANG SENSOR (steering angle) and ENGINE SPEED (engine speed). In this
way, by means of the CAN Analyzer and together with the scanner, the data called
information frames are extracted and within each frame there are the PIDs, which are the
requests and responses used for the communication of the microcontroller with the CAN
network of the vehicle, of each of the variables, whether standard or manufacturer.
For the extraction of the standard PIDs, a communication is generated between the CAN
network of the vehicle and the tools: a software called Hyperterminal, the CAN analyzer and
the scanner. Where the information frames are examined, analyzing which are the requests
and responses of each of the selected variables purely standard, while the extraction of the
PIDs manufacturer uses a data recorder "DATA LOG", which saves a data stream in CSV
format being these filtered for later analysis, determining the requests to enter each of the
required variables and in turn acquire the responses of these variables. These data show a
hexadecimal format, being difficult to be interpreted, so a decoding process is performed.
Through the identification of peak values of the graphs offered by the scanner capturing data
in real time, where formulas are developed to convert these hexadecimal data to decimals,
allowing the deduction and interpretation of the data to be simple.
The development of an interface allows communication between the microcontroller and the
CAN network through the interconnection of modules such as: CAN Bus Shield, Arduino
Mega and others. In order to generate the reading, writing and storage of data from the CAN
network on an SD card, the process of recording and storing data is carried out as long as a
threshold of values relating to transverse and longitudinal accelerations is exceeded, when
the vehicle is at risk of a possible collision the data will be stored for later reading.
10
INTRODUCCIÓN
La presente investigación aborda temas referentes a seguridad vehicular, aprovechando las
características propias de la red multiplexada CAN misma que llevan integrada los vehículos
más recientes. Se pretende solicitar, recibir y almacenar variables de interés disponibles en
la red que podrían resultar útiles para un análisis en caso de un accidente vehicular. Para
ello, se proponen métodos innovadores para la adquisición de estas variables utilizando
técnicas como el CAN hacking y el análisis del flujo de datos propios de cada computadora
que forme parte de la red. Mediante un microcontrolador programable interconectado a la
red.
CAPÍTULO I
1 REVISIÓN BIBLIOGRÁFICA
1.1 OBJETIVOS
1.2 JUSTIFICACIÓN
El ser humano generalmente es el responsable de controlar la actividad del vehículo durante
la conducción, pues es él, quien decide optar por el cumplimiento de las normas o leyes de
tránsito (García & Coello, 2017). Evidentemente, cuando estas normas se pasan por alto,
ocurren accidentes de tránsito y es necesario determinar las causas mediante peritajes. En un
peritaje de tránsito se parte de la idea de que un accidente de tránsito es un suceso no
12
Con un dispositivo que guarde y provea un registro interpretable de las variables de interés
del flujo de datos de las computadoras del vehículo antes, durante y después de la colisión,
se puede obtener de manera precisa parámetros de importancia para un informe pericial
como: velocidad del vehículo, velocidad del motor, posición del pedal de acelerador, tiempo
de frenado, aceleración longitudinal y transversal del vehículo, datos del sistema EPS
(Dirección Asistida Eléctricamente), entre otros.
Esta información sería precisa y útil, además ayudaría en el desarrollo del informe pericial
tipo “C” y “B” del SIAT, infiriendo de una manera más sencilla en las causas del accidente.
Adicionalmente, los peritos de tránsito podrían sustentar en base a evidencia contundente
los resultados de sus peritajes y así contribuir a solventar las dudas generadas con respecto
a sus informes como lo establece el artículo 505 del Código Orgánico Integral Penal (COIP)
el cual plantea que “Los peritos sustentarán oralmente los resultados de sus peritajes y
responderán al interrogatorio y al contrainterrogatorio de los sujetos procesales.”
1.3 ALCANCE
El presento proyecto propone la realización de un dispositivo de monitoreo basado en
microcontrolador Arduino para la adquisición de datos a través de la red CAN para conocer
las condiciones que suscitan accidentes vehiculares. La primera instancia del proyecto es
analizar las condiciones en las que se considera que un vehículo está en riesgo de colisión
como son: las fuerzas g en el momento de desaceleración brusca y la detección de impacto
con sensores especializados.
Una vez estimada esta información, el siguiente punto consiste en inferir en la red
multiplexada de un vehículo para extraer los códigos referentes a parámetros de
funcionamiento de este y especialmente relacionados a causas de accidentabilidad, por
13
1.4 ANTECEDENTES
De acuerdo con European Commission of Mobility and Trasport, los registradores de datos
en el momento de suscitarse un accidente han sido utilizados durante varios años en
vehículos de transporte comercial. (Black boxes/ in-vehicle data recorders | Mobility and
transport, s/f). Los dispositivos se basan en el módulo de control del airbag y almacenan
información hasta que las bolsas de aire detonen. Estos dispositivos ya han sido empleados
anteriormente, no son de carácter obligatorio.
Según un estudio realizado por el Instituto SWOV para la investigación de seguridad vial,
las personas que son observadas tienden a cambiar su comportamiento ante diversas
situaciones. (Wouters & Bos, 2000) concluye que, los registradores de datos de accidentes
instalados en camiones y furgonetas conducen a una reducción media del 20% en el número
de choques y daños. Esto se debe a que el conductor de cierta manera está consciente de que
el vehículo está monitorizado y se puede determinar la causa del accidente por medio del
dispositivo.
Según el sitio web de la consultora (EU funded projects - Veronica I+II - Squaris s.p.r.l.,
s/f), en 2004 se creó un proyecto denominado VERONICA I (Registro de eventos de
16
vehículos basado en evaluación inteligente de accidentes) el cual era financiado con fondos
comunitarios donde se buscaba definir aspectos técnicos, legales y preventivos para la
posible introducción obligatoria de dispositivos de grabación de datos, de esta forma se
establecerían normas necesarias, requisitos técnicos y legales para el uso de dispositivos
registradores de datos de eventos (EDR). El proyecto reunió varios fabricantes automotrices,
así como, compañías de seguros, expertos en peritajes de accidentes, entre otros.
OBDII, poseen una calcomanía que indica la información del control de emisiones y esta se
encuentra ubicada en la parte inferior del capó del automóvil.
El sistema OBDII permite monitorear condiciones o posibles fallas que se suscitan en los
sensores del vehículo creando una secuencia rutinaria mientras este es conducido. En el caso
de arrojar una falla en los resultados de la secuencia, se visualizará la luz MIL en el tablero
del automóvil e inmediatamente se generará un código de falla y se almacenará en la
memoria de la computadora (ECU). Además, el código de falla manteniente un formato
donde indica en que parte del vehículo ocurrió la falla detectada y en qué condiciones se
suscitó. (Villamar Aguirre, 2008). Todo este proceso se lleva a cabo mediante un conector
estándar que cuenta el sistema OBDII, denominado como DLC (Data Link Connector o
J1962), siendo un conector con 16 pines y cada uno de ellos son asignados en función
específica para cada protocolo, así mismo los códigos de falla se pueden visualizar y
diagnosticar por medio de un scanner automotriz.
Por medio de la conexión de la ECU y un scanner automotriz podemos verificar una serie
de parámetros que determinan el funcionamiento del motor: velocidad, carga, temperatura
del motor, consumo de combustible, temperatura ambiente. Caudal de aire y emisiones.
Los modos de medición aparte de encargarse del registro de datos; envían la información
registrada al software de diagnóstico correspondiente, con el fin de interpretar y representar
estos datos correctamente, permitiendo facilitar el diagnóstico de la falla ocurrida en el
vehículo. Estos modos de medición están compuestos de un formato de 7 bytes, donde cada
byte registra diferente contenido dependiendo si el concepto sea de petición o respuesta y en
cual modo se está trabajando. (Jorge Sánchez Carrizo, 2017).Con una excepción del byte 0,
el cual indica el número de bytes que contiene información del sistema OBDII, además la
existencia de este byte dependerá del protocolo en donde se envié el mensaje. En el caso del
protocolo CAN es el único con la capacidad de sobrellevar 8 bytes de información a
diferencia de estos protocolos que solo soportan 7 bytes.
temperatura del motor, los voltajes generados, sensores y actuadores. (Dimaté Cáceres &
González Castillo, 2013).
2C 1 Recirculación 0 A*100/255
de gases de
escape o EGR.
2E 1 Depuración por 0 A*100/255
evaporación.
2F 1 Niveles de 0 A*100/255
combustible.
31 2 Distancia 0 (A*256)+B
recorrida desde
la última
limpieza de
errores.
34 - 4 Corriente -128 ((A*256)+B)/32.768
3B equivalente de ((C*256)+D)/128
la sonda lambda.
3C – 2 Temperatura del -40 ((A*256)+B)/10-40
3F catalizador.
40 4 PIDs soportados - 32Bits:
[41-60]. BitX=0>PIDX Sop.
BitX=1 > PIDX No
sop.
42 2 Modulo 0 (A*256)+B
controlador del
voltaje.
46 1 T° Ambiente -40 215 °C A-40
4D 2 Tiempo en 0 65.535 Min (A*256)+B
marcha mientras
el MIL
permanece
encendido.
51 1 Tipo de - - - Bits codificados
combustible.
22
U – NETWORK (Red, donde la falla tienen que ver con el sistema de trasmisión de los
diferentes módulos).
C – (Chasis, la falla proviene de diferentes elementos como: bolsas de aire, frenos entre
otros).
6 – El módulo de control del motor (ECU) y salidas auxiliares, pueden presentar falla en la
memoria del procesador o circuitos del procesamiento.
Mientras que los últimos dos dígitos indican la falla especifica detectada por el sistema
OBDII.
1.7.3.7 Modo 07: Mostrar códigos de diagnóstico pendientes, en el último o actual ciclo
de manejo completado.
En la memoria de la ECU este modo permite la lectura de los DTCs que se han mostrado
más de una vez. Los DTCs que se encuentran relacionados con el sistema de emisiones es
reportado en este modo. (Dimaté Cáceres & González Castillo, 2013). En el caso de querer
pasar al modo 3 de DTCs confirmandos, es necesario requerir hasta 3 ciclos de manejo
continuo con la misma falla.
25
El conector DLC – OBDII tipo macho es utilizado para herramientas de diagnóstico, sus
pines son asignados tipo espejo al conector DLC tipo hembra.
Bit – Se define como un digito en el sistema binario, el cual se representa por un periodo
completo dentro de una secuencia de bits.
Byte – Se denomina una unidad de información además es múltiplo del siendo su
equivalencia igual a 8 bits.
Red – Una red es un grupo de elementos donde se puede intercambiar de información a
través de un medio de transportación.
Nodo – Es un módulo electrónico el cual está conectado a una red, también conocidos como
subscriptores y estaciones de red.
Bus de datos - Es un canal de transición de información de la ECU, donde los datos son
enviados por bytes al mismo tiempo.
Niveles de transmisión de datos - Para la transmisión de datos existen dos niveles lógicos
0 y 1, donde el nivel recesivo está representado por el 1, mientras que el nivel dominante
está representado por el 0.
Modos Sleep y Wake up - Para reducir el consumo de energía es una red se implementan
los nodos Sleep y Wake up, en el caso del nodo Sleep admite cesar la actividad cuando el
nodo al ser afectado por alguna actividad o condiciones del sistema, permitiendo que el
27
controlador del bus se desconecta de la línea y en ese caso el nodo se convierte en Wake up.
(Ruiz Campoverde, 2013).
el automóvil. Los protocolos que actualmente se usan son ISO y SAE. (César & López,
2014).
física siendo el remitente del mensaje de diagnóstico.(Cantos Calderón et al., 2016). Los
pines de conexión del ISO 14230-4 es igual al ISO 9141-2, se muestra en la Figura 1.3.
En el caso del SAE J1850 PWM usa los pines de conexión 2, 4, 5, 10, 16 como se muestra
en la figura.
Mientras que el protocolo SAE J1850 VPW usa los pines de conexión 2,4,5,10,16 como se
muestra en la figura.
(Johansson et al., 2005). Es ampliamente utilizada en vehículos desde el año 2008, ya que,
fue propuesta de manera no obligatoria a los distintos fabricantes automotrices como única
red multiplexada de comunicación para vehículos (Instituto Mexicano del Transporte, s/f).
Ciertamente la red CAN BUS presenta varias ventajas como; reducción del cableado y
conectores (gracias a su conexión punto a punto entre los dispositivos), facilidad de
diagnóstico y no es susceptible a ruido o interferencias. En 1983 debido a su funcionalidad
y utilidad la red CAN fue estandarizada como protocolo ISO 11898-1. Su amplio uso en la
industria del transporte, provocó un incremento en la producción de microcontroladores con
controladores CAN integrados, abaratando costos de adquisición y manufactura, haciendo
cada vez más común su aplicación (Johansson et al., 2005).
Si dos o más nodos de la red transmiten información al mismo tiempo, existe riesgo de
colisión de datos. Estas colisiones se evitan utilizando métodos de arbitraje bit a bit no
destructivos, manteniendo el mensaje intacto incluso si existieran colisiones. Estos arbitrajes
toman lugar sin interrumpir o retrasar los mensajes de mayor prioridad enviados a través del
BUS de datos (Johansson et al., 2005).
Existen algunas reglas que utiliza el algoritmo para mantener el mensaje de prioridad
(arbitraje bit a bit). La primera regla define el mensaje como recesivo (1) o dominante (0),
un bit de estado dominante siempre tendrá prioridad ante uno de estado recesivo, es decir los
mensajes con bits dominantes se mantienen mientras que los mensajes con Bits recesivos se
descartan. En la segunda regla un nodo transmisor monitorea el estado del BUS de datos
para comprobar si el estado lógico que se desea enviar ya se encuentra en el BUS de datos
(Microchip, 1999).
Figura 1.14 Ejemplo de arbitraje Bit a Bit entre tres nodos que transmiten
simultáneamente.
(Johansson et al., 2005)
Campo de arbitraje - Este campo se utiliza para priorizar los mensajes que llegan al BUS
de datos. El protocolo CAN define como 1 al Bit recesivo y 0 al Bit dominante. Tiene una
longitud de 12 Bits en tramas estándar de los cuales 11 son identificadores de prioridad y el
último es un Bit para RTR (Solicitud de Transmisión Remota) (Corrigan, 2002).
37
En algunos casos la trama del campo de arbitraje puede estar compuesta de 32 Bits de los
cuales, 29 son identificadores, 1 es un Bit SRR (Solicitud Remota de Sustitución) el cual
siempre se transmite como recesivo, 1 es un Bit que define al campo como extendido (es
decir que tiene una longitud de 29 Bits) y el último es un bit para RTR (Solicitud de
Transmisión Remota) como en los casos de tramas estándar. Por regla general un campo de
arbitraje de 12 Bits tiene mayor prioridad que uno de 32 Bits (Corrigan, 2002).
Campo de control - Este campo está compuesto por 6 Bits, el Bit más significativo es el
IDE Bit el cual indica que la trama está extendida y es dominante para tramas de datos
estándar (Johansson et al., 2005). En tramas extendidas, este Bit es denominado RB1 y está
reservado. El siguiente Bit se denomina RB0 y de igual manera está reservado. Los cuatro
Bits menos significativos, muestran cuantos grupos de Bytes están incluidos en el mensaje;
es decir, la longitud del Código de Datos (Microchip, 1999).
38
Figura 1.18 Campos de control para tramas de datos estándar (izquierda) y extendidas
(derecha).
(Microchip, 1999)
Campo de datos - Está compuesto del número de grupos de Bytes indicados en el campo
de control (Microchip, 1999).
Trama de reconocimiento ACK - Esta trama consta de dos Bits, uno denominado ACK
slot Bit el cual es utilizado para indicar si el mensaje fue recibido correctamente, aquí cada
nodo que ha recibido el mensaje de manera correcta añade un Bit dominante en este espacio
39
reemplazando al Bit recesivo. El otro es un bit delimitador que indica que el ACK finaliza
(Corrigan, 2002).
Fin de trama - Está compuesto de 7 Bits recesivos e indica que la trama finalizó. (Johansson
et al., 2005)
Bit Sttufing - Cuando un nodo transmite 5 Bits idénticos envía un Bit opuesto a esos
Bits idénticos, a este proceso se le denomina Bit Stuffing (relleno de Bits) y también es
una forma de detectar errores en la transmisión de los datos. Este Bit opuesto es
descartado por el nodo receptor de la transmisión. El Bit Stuffing tiene lugar únicamente
desde el inicio del marco de datos, hasta el delimitador del campo CRC (Johansson et al.,
2005).
40
Chequeo de tramas - Es un proceso que verifica que los Bits de la trama tengan los
valores que se supone que deben tener, por ejemplo, los siete Bits del final de la trama
deben ser recesivos, si uno es dominante se marcará un error (Corrigan, 2002).
En una línea CAN High la velocidad de transmisión de datos de 0,25 milisegundos. Cada
Unidad Electrónica de Control del vehículo transmite datos a distinta velocidad, por ejemplo,
el módulo ABS transmite cada siete milisegundos, el módulo de la gestión electrónica del
MCI cada 10. El CAN High tiene un valor de tensión de entre 2,5 y 3,5 V, mientras que el
CAN Low opera alrededor de 1,5 y 2,5 V (Gallegos, 2015).
Figura 1.21 Oscilograma de las señales del BUS de datos, se puede observar la señal CAN
High en amarillo y la señal CAN Low en verde.
(Gallegos, 2015)
41
Cuando la señal CAN High y CAN Low se separan existe un bit dominante (0), cuando las
señales se juntan existe un Bit Recesivo 1, generalmente las señales CAN High y CAN Low
son simétricamente opuestas en el oscilograma.
En un vehículo, usualmente se pueden encontrar dos o más protocolos basados en CAN, por
ejemplo: CAN bus y Lin bus. En este caso el CAN bus se utilizaría para la comunicación
entre el módulo del motor y el módulo de la caja de cambios y el Lin bus se utilizaría para
los sistemas de confort del vehículo. Esto se hace con la finalidad de no saturar de nodos la
red CAN bus. La información entre protocolos CAN puede ser compartida a través de un
módulo Gateway. Los Gateway son puertos de enlace de la red del vehículo y tienen la
43
Figura 1.22 Ejemplo de Red CAN con distintos protocolos CAN interconectados por un
módulo Gateway.
(Ingeniería y mecánica automotriz, s/f)
1.11.1 PCM
1.11.2 ECM
El Módulo de Control del Motor ECM, es una ECU utilizada para mantener el
funcionamiento de los motores de combustión interna, se encarga de la relación aire-
combustible, ralentí, avance y tiempo de encendido de las bobinas, apertura y cierre de
válvulas de admisión variables, entre otros. Estas funciones son controladas por medio de
datos de sensores de posición, temperatura, flujo de aire o presión de vacío. Este módulo
tiene comunicación directa con el Módulo de Control de la Transmisión (TCM), el Body
Control Module (BCM), el sistema de control de estabilidad (ESP), el sistema anti robo,
entre otros (Ilakkiya B & Vanitha V, 2016).
1.11.3 TCM
El Módulo Electrónico de Control de la Transmisión, se encarga de comandar los cambios
en los vehículos de transmisión automática, procesando de manera precisa la información
que recibe de la ECM y de los diferentes sensores que se encuentran instalados o forman
parte de la transmisión automática (Spiegel, 2015).
1.11.4 EBCM
El Módulo Electrónico de Control del Frenado, se encuentra equipado en los vehículos que
cuentan con sistema antibloqueo de frenos (ABS), su función es evitar el bloqueo de frenos
regulando y distribuyendo adecuadamente la fuerza del frenado (Ilakkiya B & Vanitha V,
2016).
1.12.2 Arduino
Arduino es una tarjeta electrónica con microcontrolador incorporado de software y hardware
libre. El microcontrolador se programa usando el lenguaje de programación de Arduino el
cual es basado en C y un entorno de desarrollo IDE. Consta de múltiples pines de entrada o
salida que sirven para conectar sensores y controlar dispositivos externos en base a
instrucciones programadas, algunos de estos pines tienen funciones especiales (Enríquez
Herrador, 2009, p. 13).
46
Comunicación serial: (Rx) y (Tx) - Se utilizan para mantener una comunicación serial
entre microcontroladores, siendo receptor el pin (Rx) y transmisor el pin (Tx).
Interruptores externos - Son pines que pueden ser configurados para disparar una
interrupción, con un margen creciente o decreciente y generar un cambio de valor
(Enríquez Herrador, 2009, p. 13).
Comunicación I2C: VCC, GND, SDA Y SCL - Este tipo de interfaz, también mantiene
una estructura maestro esclavo. Aquí los datos enviados por los maestros son de una
dirección, es decir, no se espera respuesta de los esclavos. Para este tipo de interfaz se
47
requieren 4 líneas: VCC (para alimentación), GND (para masa), SDA (envío de datos) y
SCL (sincronización del reloj).
EEPOROM - Es una memoria no volátil donde se puede grabar datos desde el IDE,
borrarlos y volverlos a grabar, es una memoria de solo lectura y tiene la capacidad de
mantener los datos incluso después de ser reiniciado.
FLASH - Es una memoria de almacenamiento amplio, van desde 1Kb a 4Mb, aquí se
guarda el código de programación ya compilado. Estas memorias tienen una vida útil de
100.000 ciclos de escritura, al igual que la memoria EEPROM no es volátil.
SRAM - Es una memoria volátil, el compilador crea y escribe variables aquí cuando se
ejecuta.
1.12.2.2 Programación
Cualquier placa de Arduino puede ser programada utilizando el IDE de Arduino,
simplemente se debe seleccionar el modelo de placa Arduino y el puerto USB al que está
conectado la placa para establecer una comunicación con la computadora (Enríquez
Herrador, 2009).
1.13.1 Velocidad
El sensor de velocidad tiene la finalidad de realizar mediciones de movilidad o por relación
de respuesta a las frecuencias denominadas como aceleración, generando señales senoidales,
mediante la amplificación de potencias y excitando vibraciones por medio del sensor de
velocidad (Rueda et al., 2000).
Es necesario que el vehículo disponga del sistema ABS (Anti-lock Braking System) y
Sistema EPS (Dirección Controlada Electrónicamente) debido a que la ECU utilizará
sensores de estos sistemas para comandar el correcto funcionamiento de los actuadores que
intervendrán en el control de giro para mantener una trayectoria deseada por el conductor.
Mide el torque en N/m y posición del volante en grados proporcionados por el conductor
para determinar el ángulo de la dirección del vehículo permitiéndole a la ECU inferir la
trayectoria deseada.
Proporcionan información sobre los ejes de desplazamiento del vehículo (giro en grados y
aceleración en el eje transversal en m/s^2 o gravedades).
delantero. Esto se lleva a cabo mediante cámaras y láseres y un radar, además, el ACC
permite adaptarse a las diferentes condiciones del tráfico, evitando que el conductor vuelva
a reactivar el sistema cada vez que se vea obligado a frenar (Costas et al., s/f).
CAPÍTULO II
2 MATERIALES Y MÉTODOS
2.1 METODOLOGÍA DE LA INVESTIGACIÓN
En el presente capítulo se explica la metodología de la investigación empleada para el
desarrollo del dispositivo propuesto, con la finalidad de cumplir los objetivos previamente
establecidos. Por medio de una investigación documental, se recaba información
considerada necesaria e importante que aporte conocimiento específico sobre temas
relacionados a este proyecto. Utilizando un diagrama de flujo propuesto, se establecieron
procedimientos secuenciales y resultados que se esperan obtener en base al método
experimental. Una vez terminado cada proceso, se realiza una explicación en base a la
interpretación de resultados usando el método analítico-explicativo. Aquí se consideran
variables necesarias que tendrán o no que ser cuantificadas, por eso se considera hacer uso
del método cuantitativo para cumplir con este lineamiento.
Además, este dispositivo puede ser usado con un microcontrolador donde se emplean
diferentes librerías para interactuar con el escáner mediante comandos AT. Así mismo
trabaja con diferentes protocolos de comunicación soportados por firmware v1.5 como son:
Tabla 2.2 Características y funciones del dispositivo ELM 327 CAN bus scanner
-Microcontrolador: ATmega2560.
-Memoria Flash: 256KB, donde 8 KB son usados por
el gestor de arranque.
-SRAM: 8KB
-EEPROM: 4KB
-Frecuencia de reloj: 16MH.
Tabla 2.3 Características y funciones especializadas del Arduino Mega 2560
información incluyendo datos como: temperatura del refrigerante, la velocidad del vehículo,
rpm del motor y posición del acelerador (MICROJMP, s/f).
Además, la configuración de los pines del conector OBD2 se determina dándole utilidad al
pin dependiendo del protocolo utilizado.
fecha: día, semana, mes y hora. Además, lleva integrado un cristal de cuarzo de 32.769 kHz
para contar los segundos con una excelente precisión (Tecnopura, s/f).
y pasiva del vehículo con la finalidad de parametrizar los tipos de datos que son necesarios
para el estudio. Con esta información se realiza la selección del vehículo considerando que
este cuente con protocolo de comunicación CAN.
Para la extracción de estos flujos de datos se considera la conexión en paralelo del escáner
automotriz y un analizador CAN, por medio de esta conexión se extraen los PIDs sea
estándar y fabricante, considerando las variables seleccionadas para el estudio. Realizado
este proceso se lleva a cabo la decodificación de los PIDs de cada una de las tramas en
función de cada variable, debido que el flujo de datos que se extrae de la red CAN se presenta
en formato hexadecimal, lo cual es difícil de interpretar. Posteriormente se plantea definir
los rangos de disparo, considerando los datos de las aceleraciones transversales y
longitudinales. Con este umbral de valores se desarrolla una interfaz para el
microcontrolador con la finalidad de generar la comunicación entre el dispositivo y la red
CAN. Obteniendo la lectura, escritura y almacenamiento de los datos en sistema de
almacenamiento.
65
artículos científicos, trabajos de grado y páginas web de diversos autores. Con la finalidad
de fundamentar cada uno de los temas añadidos al Capítulo I que están ligados al tema de
desarrollo.
2.3.2 Análisis de las variables de estudio referente a los sistemas de seguridad activa y
pasiva del vehículo.
El vehículo dispone de sistemas de seguridad activa y pasiva, de acuerdo con el tipo de
funcionamiento se encargará de prevenir accidentes o reducir posibles lesiones en los
ocupantes del vehículo durante el suceso. En estos sistemas de seguridad se encuentran
sensores y actuadores los cuales forman parte de cada uno de ellos y son necesarios para su
funcionamiento.
Por lo tanto, el vehículo seleccionado deberá constar con al menos un sistema de seguridad
activa y pasiva comandados por una Unidad Electrónica de Control. Es necesario hacer uso
de los distintos sensores que componen estos sistemas, para obtener datos que serán útiles
posteriores a la colisión, mediante la siguiente tabla se especifica los sensores anexos a cada
sistema determinando si su información es relevante para el estudio.
Finalmente se realiza un escaneo rápido para identificar los módulos disponibles en la red
del vehículo, es necesario que este cuente con al menos dos Unidades Electrónicas de
Control, donde se encuentre información a través de la red CAN que resulte de utilidad para
conocer las condiciones en que se encontraba operando el vehículo al momento de suscitarse
un posible accidente, en este caso los módulos encontrados son: ECM (Motor), ABS
(Frenos), BCM (Carrocería), AIRBAG, HVAC (Climatización), EPS (Dirección
electrónica), IPDM (Modulo de Fusibles inteligente), CHASIS CONTROL , METER M&A
(Tablero de instrumentos).
68
CHASIS CONTROL
Nombre Descripción Unidad Necesario
SI/NO
CAN DIAG STATUS - - -
ACCELE PEDAL POSITION Sensor APP % NO
BRAKE SW2 Switch del freno 2 - NO
BRAKE SW1 Switch del freno 1 - SI
ABS Sistema ABS - SI
ABS MALF Estado sistema ABS - SI
ATC1 - - -
ATC2 - - -
ATC4 - - -
BRAKE HOLD Tiempo de frenado - SI
ATC3 - - -
ATC DISP - - -
ATC 5 - - -
BRAKE HOLD DISP - - -
ATC SETTING - - -
AEB SETTING - - -
IGN VOLT Voltaje de encendido V NO
CONTROL MODULE MALF - - -
FR WHEEL SPEED Velocidad rueda frontal Rpm SI
derecho
FL WHEEL SPEED Velocidad rueda frontal Rpm SI
izquierdo
RR WHEEL SPEED Velocidad rueda posterior Rpm SI
derecho
RL WHEEL SPEED Velocidad rueda posterior rpm SI
izquierdo
PRESS SENSOR Sensor MAP Bar NO
72
EBD - - -
FL TIRE DISP - - -
FR TIRE DISP - - -
RL TIRE DISP - - -
RR TIRE DISP - - -
INTERRUPT DISP - - -
Vehicule speed Sensor VSS km/h SI
STEERING ANG SENSOR Ángulo de la dirección Deg SI
SIDE G SENSOR Sensor de fuerza transversal G SI
YAW RATE SENSOR Sensor de giro o guiñada deg/s SI
Throttle control - - -
STOP LAMP SW - - -
TCS - - -
VDC - - -
VDC MALF - - -
VDC OFF SWITCH - - -
VEHICLE DISP - - -
TURN DISP - - -
DECEL G SENSOR - G SI
Tabla 2.10 Módulo del Chasis Control
2.3.6 Identificación de los PIDs necesarios según el análisis del flujo de datos
De la lista de variables seleccionadas se muestran las Tablas 2.9 y 2.10, posteriormente se
identificarán y clasificarán las variables que se adquieren utilizando PIDs estándar y
fabricante de los módulos de control electrónico seleccionados.
73
Para establecer una comunicación con la computadora del vehículo y enviar el PID requerido
a través de la red CAN utilizando el microcontrolador Arduino no solo es necesario conocer
el PID sino también, la estructura completa e ID de la trama en la cual el PID será enviado.
Se sabe que dentro de la programación propia de un escáner genérico existe dicha
información, para extraerla, fue necesario utilizar una computadora con el software
Hyperterminal “Hércules” y Can Analyzer de Microchip, además, un escáner genérico
(ELM327) con conexión USB conectado en paralelo al DLC del vehículo con un módulo
analizador de red CAN. La figura a continuación explica la conexión que se realizó entre
hardware y software. Si bien es cierto las tramas CAN se envían a través de la red en grupos
de bytes es decir en formatos de 1 y 0, sin embargo, el software CAN Analyzer agrupa estos
datos en formato hexadecimal identificando cada parte de las tramas que viajan a través de
la red para facilitar el entendimiento y compactar información, cada PID que se envía en
síntesis es un byte expresado en formato hexadecimal, es decir una parte de la trama. Por
esta razón fue necesario conocer el formato completo de la trama.
74
Figura 2.10 Esquema de conexión entre hardware y software al DLC del vehículo
Figura 2.11 Solicitud y respuesta RPM del Motor mediante PID utilizando el
hyperterminal.
Como se observa en la figura anterior, cuando se envía el PID correspondiente a RPM “01
0C” a través del hyperterminal la computadora del vehículo responde el valor de las RPM
“41 0C 0A 5A” siendo los dos últimos Bits el valor expresado en Hexadecimal
correspondiente a las revoluciones del motor, los cuales se les asigna la variable A y B
respectivamente, luego con la fórmula de conversión a decimal definida en el estándar SAE
J1939 se puede obtener el parámetro en formato decimal si así se lo requiere.
Todo evento que suceda en la red CAN del vehículo incluida la comunicación escáner-
computadora será registrado en tiempo real y presentado en forma de matriz de tramas por
75
el software CAN Analyzer, se aprovechó esta característica del software para registrar el ID
y la estructura de la trama que envía y recibe el escáner mediante el software hyperterminal
a la red. La figura a continuación muestra la trama enviada y recibida por el escáner cuando
se solicitó el PID de las RPM del motor mediante el software hyperterminal.
Figura 2.12 Análisis de la red utilizando el software CAN Analyzer ante la solicitud y
respuesta de las RPM del Motor requeridas por el software hyperterminal mediante PID.
Como se explica anteriormente, para obtener el valor de las RPM del motor en formato
decimal, bastaría con asignar al dato tres y cuatro la variable A y B respectivamente y aplicar
la fórmula de conversión definida por el estándar correspondiente al PID RPM, en este
ejemplo la Tabla 2.11 indica que la fórmula es (256A+B) /4. Por lo tanto, se convierten A y
B a decimal y se los inserta en la fórmula para obtener el valor RPM en formato decimal
siendo 662 RPM, de esta manera se constata que el valor obtenido en la trama corresponde
a la realidad.
En este punto no fue necesario hacer uso del software Hyperterminal, debido a que las tramas
de datos que envía el escáner original seleccionado a la red del vehículo no pueden ser
controladas a voluntad como se hizo con el ELM327, utilizando el hyperterminal. Este
escáner depende de su propia interfaz y su conexión es mediante Bluetooth a un dispositivo
móvil. La Figura 2.13 explica la conexión que se realizó entre hardware y software.
Figura 2.13 Esquema de conexión entre hardware y software al DLC del vehículo
Cabe mencionar que, el software CAN Analyzer no solo es capaz de recibir y plasmar tramas
de datos sino también de transmitirlas, incluso sin la necesidad de utilizar el escáner genérico
u original, solo hace falta saber que trama se va a enviar su ID, longitud y escritura. Mediante
un cuadro de diálogo el usuario puede escribir la trama y enviarla a través de la red del
vehículo. Además, el software ofrece la opción de grabar y guardar la matriz de tramas en
formato CSV para su posterior análisis en otro software. Se utilizó esta última opción y el
analizador de datos Excel, para analizar el envío de tramas que realizó el escáner fabricante
al solicitar un escaneo rápido de los módulos disponibles en el vehículo utilizando su
interfaz.
Figura 2.14 Tramas de solicitud (0x70C) y respuesta (0x700) parara entrar al modo de
escaneo por fabricante.
Por lo tanto, fue necesario grabar y guardar los datos transmitidos a la matriz en el software
en formato CSV y usando el analizador de datos (EXCEL) como se muestra en la Figura
2.14.
Figura 2.15 Matriz de tramas de la RED CAN almacenada en formato CSV sin filtro.
trama con el ID 0x70C ocupó la primera fila, siendo esta la posible solicitud, la cual
necesariamente tuvo que ser precedida por el ID 0x700 a manera de respuesta.
Se utilizó nuevamente el software CAN Analyzer para transmitir la trama con el ID 0x70C
considerada como solicitud y constatar que da como resultado la trama con el ID 0x700
tomada como respuesta. En las dos últimas filas de la matriz de tramas de la Figura 2.14, se
observa que la trama con el ID 0x70C entra a la red desde el transmisor y efectivamente es
respondida por la trama con ID 0x700 como se evidenció en el registro CSV cuando se
ejecutó la comunicación con el escáner original y la computadora del vehículo.
80
Una vez filtrada las tramas en el orden correspondiente, se determinó la solicitud para un
escaneo rápido de los módulos disponibles en modo fabricante, enviada por el escáner
original de la marca, en la Tabla 2.14 se observa la solicitud completa. Es necesario enviar
las tramas una a la vez en el orden correspondiente, para obtener acceso al igual que lo hace
el escáner.
81
Las tramas denominadas como solicitudes mantienen la misma estructura para cada variable
del módulo del CHASIS CONTROL, no obstante, solo el DATA 3 cambia su valor, por lo
tanto, se pudo inferir que ese es el número del PID correspondiente a la variable solicitada,
mientras que las respuestas son independientes a cada variable.
CHASIS CONTROL
Nombre Descripción Unidad
BRAKE SW1 Switch del freno 1 -
Solicitud del Switch
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 22 FF FF FF FF
Respuesta Switch OFF
700 8 5 61 1 22 0 C0 FF FF
Respuesta Switch ON
700 8 5 62 1 22 40 C0 FF FF
Tabla 2.15 Estructura de la Trama de solicitud y respuesta que abarca el PID del BRAKE
SW1
La Tabla 2.15 muestra la solicitud y las respuestas de la variable switch del freno 1 “BRAKE
SW1”, donde el DATA 3 tiene un PID “22”, mientras que las respuestas de la trama
mantienen su misma estructura a diferencia del DATA 4 que muestra el estado del Switch:
“0” OFF y “40” ON.
Figura 2.21 Señal del flujo de datos del escáner del WHEEL SPEED
La Figura 2.23 muestra la gráfica del flujo de datos del YAW RATE SENSOR, igual por
medio de esta gráfica se pretende comprobar los resultados obtenidos tras el proceso de
decodificación en función de los picos de giro que se sometió al vehículo. Sabiendo que un
giro a la derecha tendremos picos positivos y a su vez un giro a la izquierda pico negativos,
con esta información podemos determinar que el vehículo realizo un giro a la derecha
obteniendo un pico positivo de 38 deg/s. Con este dato se puede corroborar los resultados
obtenidos al aplicar la fórmula desarrollada para el sensor de giro o guiñada.
88
Figura 2.23 Señal del flujo de datos del YAW RATE SENSOR obtenida del escáner
automotriz
Aceleración
Desaceleración
Grado Descripción
Gravedad 0 Accidente leve
Gravedad 1 Accidente de gravedad media
Gravedad 2 Accidente grave
Gravedad 3 Accidente muy grave
Tabla 2.16 Clasificación del grado de gravedad de un accidente vehicular
(HELLA, s/f)
Según el (INEN, 2013) establece la Normativa NTE INEN 2675:2013 acerca de los
requisitos de inspección de los cinturones de seguridad, menciona el funcionamiento de los
retractores con seguro de emergencia y a su vez la condiciones de operación que estos deben
cumplir:
La Tabla 2.17 muestra las condiciones de operación que debe cumplir un retractor al
permitir que el cinturón de seguridad se extienda y retraiga libremente con el movimiento
de los ocupantes, de tal manera el retractor debe quedar asegurado cuando la desaceleración
del vehículo alcanza 0,45 g cuando se trata de retractores de la clase 4, mientras que 0,85 g
cuando se trata de retractores de clase 4 N. Y no debe quedar asegurado con valores de
aceleración medidos en dirección de extracción de la cinta, menos de 0,8 g cuando se aplique
retractores de clase 4 y menos de 1 g con retractores de clase 4N.
De tal manera si el vehículo supera las 0.60 g (gravedad leve), inmediatamente se ejecutará
el almacenamiento y registro de datos, de las variables que se consideraron para este estudio
y a su vez siendo almacenadas en una tarjeta SD para su posterior lectura.
comunicación del Arduino con la red CAN del vehículo, además de librerías que permitan
el almacenamiento y registro de datos.
Las librerías que fueron usadas para llevar a cabo la programación del microcontrolador
fueron las siguientes:
Las variables que son declaradas estarán entorno a los PIDs sea fabricantes o genérico,
considerando las variables de estudio del módulo ENGINE y CHASIS CONTROL
mostradas.
PIDs declarados
Módulo CHASIS Valor Módulo ENGINE Valor
CONTROL (Fabricante) Hexadecimal (Genérico) Hexadecimal
BRAKE SW1 0x22 ENGINE SPEED 0x0C
ABS MALF 0x25 CAL/LD VALUE 0x04
FR/FL/RR/RL WHEEL 0x0F/0x10/0x11/ VEHICULE 0x0D
SPEED 0x12 SPEED
STEERING ANG SENSOR 0x13 TRVL AFTER MIL 0x21
SIDE G SENSOR 0x16
YAW RATE SENSOR 0x18
DECEL G SENSOR 0x15
Tabla 2.18 PIDs declarados fabricantes y genéricos
Figura 2.27 Comunicación entre el microcontrolador Arduino y la red CAN del vehículo
La Figura 2.29 muestra el concepto final del prototipo para la adquisición de datos de la red.
A través del conector DLC el dispositivo se comunica con el vehículo mediante el
microcontrolador previamente programado, utilizando de por medio el microcontrolador
CAN (CAN Bus Shield) el cual le permitirá comunicarse a través de la red. Gracias a esta
conexión se logró extraer los datos necesarios en función de las variables que se
seleccionaron previamente. Mediante el Módulo Micro SD se permite el almacenamiento y
registro de datos en un archivo .txt, el cual facilita la interpretación de los datos grabados,
mientras que el Módulo RTC se registrara la hora y fecha del evento. Cabe recalcar que este
proceso se ejecutará siempre y cuando el vehículo supere las 0.60 gravedades de las
aceleraciones trasversal y longitudinal. Finalmente, mediante cables macho-hembra se
permite las conexiones entre todos los módulos, respetando sus pines de comunicación.
vez superado el umbral inmediatamente el microcontrolador debe solicitar los datos a la red
CAN de los PIDs fabricantes y genéricos de las variables seleccionadas para su posterior
registro y almacenamiento de datos en la tarjeta SD.
99
CAPÍTULO III
3 RESULTADOS Y DISCUSIONES
3.1 Resultados del análisis de las variables de estudio referente a los sistemas de
seguridad activa y pasiva del vehículo
Una vez analizado los sensores que forman parte de cada sistema de seguridad, se concluyó
que algunos sistemas comparten información de varios sensores a través de la red, es decir
que dos o más sistemas de seguridad pueden depender de un solo sensor. Por esta razón es
común encontrar en un flujo de datos de cada Unidad Electrónica de Control del vehículo
información del mismo sensor. La ventaja de tener las computadoras conectadas en una
misma red es que se puede analizar únicamente una de ellas que contenga la información de
todos los sensores a analizar.
Módulos Descripción
ENGINE Se encuentran datos de los dispositivos electrónicos que
controlan el motor como: régimen del motor,
revoluciones, velocidad del vehículo, entre otros.
CHASIS CONTROL Se encuentran variables que envían los diferentes
módulos de los sistemas de seguridad activa y pasiva
correspondientes al funcionamiento general del
vehículo.
Tabla 3.2 Descripción de los módulos ENGINE y CHASIS CONTROL
102
En la Tabla 3.4 se muestran las variables que fueron seleccionadas para la adquisición de las
tramas, se menciona que variables como: ABS y BRAKE HOLD no se consideraron debido
que las tramas de requerimiento son las mismas a otras variables, siendo ABS para ABS
MALF y BRAKE HOLD para BRAKE SW1.
CHASIS CONTROL
Nombre Descripción Unidad
BRAKE SW1 Switch del freno 1 -
ABS MALF Estado del sistema ABS -
FR WHEEL SPEED Velocidad rueda frontal Rpm
derecho
FL WHEEL SPEED Velocidad rueda frontal Rpm
izquierdo
RR WHEEL SPEED Velocidad rueda posterior Rpm
derecho
RL WHEEL SPEED Velocidad rueda posterior rpm
izquierdo
STEERING ANG SENSOR Ángulo de la dirección Deg
103
7DF 8 02 01 04 00 00 00 00 00
Respuesta
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
7E8 8 04 41 04 00 00 00 00 00
Tabla 3.5 Estructura de la trama solicitud y respuesta del CAL/LD VALUE
7DF 8 02 01 21 00 00 00 00 00
Respuesta
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
7E8 8 04 41 21 00 00 00 00 00
Tabla 3.6 Estructura de la trama solicitud y respuesta del TRVL AFTER MIL
104
7DF 8 02 01 0D 00 00 00 00 00
Respuesta
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
7E8 8 04 41 0D 00 00 00 00 00
Tabla 3.7 Estructura de la trama solicitud y respuesta del VHCL SPEED Sensor
Al igual que las Tablas: 3.5, 3.6 y 3.7 muestra la solicitud de las revoluciones del motor, la
velocidad del vehículo mediante el sensor VSS y la distancia del Luz Mil, cabe mencionar
que este proceso fue el mismo para cada una de las variables seleccionadas del módulo
ENGINE, considerando el PID estándar que muestra la Tabla 1.1 referente a cada variable.
La Tabla 3.8 presenta la solicitud y la respuesta del estado del sistema ABS “ABS MALF”,
donde las tramas mantienen su estructura, pero difieren algunos DATAS como es: el DATA
3 tiene un PID “25” de la solicitud mientras que el DATA 4 tiene un PID “0” y el DATA 5
tiene un PID “E0” referente a la respuesta. Cabe mencionar que esta distribución es igual
para todas las variables, como se muestra en las siguientes tablas:
105
CHASIS CONTROL
Nombre Descripción Unidad
ABS MALF Estado sistema ABS -
Solicitud ABS MALF
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 25 FF FF FF FF
Respuesta
700 8 5 62 1 25 0 E0 FF FF
Tabla 3.8 Estructura de la Trama de solicitud y respuesta que contiene el PID del ABS
MALF
CHASIS CONTROL
Nombre Descripción Unidad
DELCE G SENSOR Desaceleración y aceleración -
longitudinal
Solicitud desaceleración y aceleración longitudinal
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 15 FF FF FF FF
Respuesta
700 8 5 62 1 15 0 0 FF FF
Tabla 3.9 Estructura de la Trama de solicitud y respuesta que contiene el PID del SIDE G
SENSOR
La Tabla 3.10 expone la aceleración transversal del vehículo “SIDE G SENSOR”, donde: el
DATA 3 tiene un PID “16” de solicitud, el DATA 4 tiene un PID “FF” y el DATA 5 tiene
un PID “FF” de respuesta. Además, los datos de la trama de respuesta no varia debido que
el vehículo se mantuvo en cero revoluciones.
106
CHASIS CONTROL
Nombre Descripción Unidad
SIDE G SENSOR Aceleración Transversal -
Solicitud aceleración transversal
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 16 FF FF FF FF
Respuesta
700 8 5 62 1 15 FF FF FF FF
Tabla 3.10 Estructura de la Trama de solicitud y respuesta que contiene el PID de la
Aceleración Transversal
Las Tablas: 3.11, 3.12, 3.13 y 3.14 muestran las tramas de las velocidades de las ruedas
frontal posterior izquierdo y derecho, respectivamente. Estas mantendrán la misma
estructura y solo cambiará los DATA: 3 del PID de solicitud, 4 y 5 de los PIDs de respuesta.
CHASIS CONTROL
Nombre Descripción Unidad
FR WHEEL SPEED Velocidad rueda frontal derecho rpm
Solicitud velocidad rueda frontal derecho
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 0F FF FF FF FF
Respuesta
700 8 5 62 1 0F 0 0 FF FF
Tabla 3.11 Estructura de la Trama de solicitud y respuesta que contiene el PID del FR
WHEEL SPEED
CHASIS CONTROL
Nombre Descripción Unidad
FL WHEEL SPEED Velocidad rueda frontal izquierdo rpm
Solicitud velocidad rueda frontal izquierdo
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 10 FF FF FF FF
Respuesta
700 8 5 62 1 10 0 0 FF FF
Tabla 3.12 Estructura de la Trama de solicitud y respuesta que contiene el PID del FL
WHEEL SPEED
107
CHASIS CONTROL
Nombre Descripción Unidad
RR WHEEL SPEED Velocidad rueda posterior derecho rpm
Solicitud velocidad rueda posterior derecho
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 11 FF FF FF FF
Respuesta
700 8 5 62 1 11 0 0 FF FF
Tabla 3.13 Estructura de la Trama de solicitud y respuesta que contiene el PID del
RRWHEEL SPEED
CHASIS CONTROL
Nombre Descripción Unidad
RL WHEEL SPEED Velocidad rueda posterior izquierdo rpm
Solicitud velocidad rueda posterior izquierdo
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 12 FF FF FF FF
Respuesta
700 8 5 62 1 12 0 0 FF FF
Tabla 3.14 Estructura de la Trama de solicitud y respuesta que contiene el PID del RR
WHEEL SPEED
La Tabla 3.15 muestra la trama del STERING ANG SENSOR “Ángulo de dirección”, donde
el DATA 3 es la solicitud, mientras que los DATA 4 y 5 son las respuestas. Esta estructura
se mantiene para la Tabla 3.16 solo que cambian los PIDs de cada DATA correspondiente a
cada ID de la trama.
CHASIS CONTROL
Nombre Descripción Unidad
STERING ANG SENSOR Angulo de dirección Deg
Solicitud velocidad rueda posterior izquierdo
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 13 FF FF FF FF
Respuesta
700 8 5 62 1 13 0 0 FF FF
Tabla 3.15 Estructura de la Trama de solicitud y respuesta que contiene el PID del
STERING ANG SENSOR
108
CHASIS CONTROL
Nombre Descripción Unidad
YAW RATE SENSOR Sensor de giro o guiñada deg\s
Solicitud ángulo de dirección
ID DLC DATA 0 DATA 1 DATA 2 DATA 3 DATA 4 DATA 5 DATA 6 DATA 7
70C 8 3 22 1 18 FF FF FF FF
Respuesta
700 8 5 62 1 18 0 0 FF FF
Tabla 3.16 Estructura de la Trama de solicitud y respuesta que contiene el PID del YAW
RATE SENSOR
A: DATA 4
B: DATA 5
Según los datos capturados y registrados del Data Log se realiza un ejemplo de aplicación
de la formula para obtener la velocidad de las ruedas en formato decimal interpretable.
Donde el valor de DATA 4 es: 0x1B y el valor de DATA 5: 0x0D, transformando estos
valores hexadecimales a decimales se obtiene:
DATA 4: 27
DATA 5: 13
109
𝑊𝑆 = 270 𝑟𝑝𝑚
(𝐴 ∗ 1000 + 𝐵) (2)
𝑆𝐴𝑆 =
100
Donde:
SAS: Ángulo de dirección del volante
A: DATA 4
B: DATA 5
(3)
110
256 ∗ 𝐴 + 𝐵
𝑆𝐺𝑆𝑛 =
1000
La Tabla 3.18 muestra la función del DATA 4 como respuesta del YAW RATE SENSOR,
siendo este el que determina la dirección del giro del vehículo, donde 0x00 en decimal (0)
es el giro positivo a la derecha mientras que 0xFF en decimal (255) giro negativo a la
izquierda esto se lo puede comprobar en la Figura 2.23. La Ecuación 5 y 6 muestran el
resultado de la decodificación, donde YRSd es (Giro positivo) mientras que YRSi (Giro
negativo).
256 ∗ 𝐴 + 𝐵 (5)
𝑌𝑅𝑆𝑑 =
10
La Tabla 3.19 muestra la función de DATA 4 como respuesta del DELCEL G SENSOR,
donde 0x00 es la aceleración y 0xFF la desaceleración del vehículo. Las Ecuaciones 7 y 8
muestran las fórmulas siendo estas el resultado tras el proceso de decodificación, donde
DGSa es la (Aceleración longitudinal) de vehículo, mientras que DGSd es la (Desaceleración
longitudinal).
256 ∗ 𝐴 + 𝐵 (7)
𝐷𝐺𝑆𝑎 =
1000
switch del freno se encontraba presionado (ON) y el sistema ABS de igual manera se
encontraba activado evitando que los neumáticos tengan perdida de adherenca sobre la
calzada tras el proceso de frenado. Además, se muestra las otras variables que corresponde
aceleración longitudinal con un valor de -0.7480 g siendo una fuerza longitudinal mínima,
considerando que este es el rango del umbral para que se active al registro y almacenamiento
de datos de parte del dispositivo, mientras que la velocidad de la rueda delantera derecha
presenta un valor de 234.10 rpm.
Además, la Figura 3.4 muestra los otros valores referentes a las velocidades de las ruedas
delantera izquierda y posterior derecha e izquierda, en función de estas velocidades y de los
datos obtenidos del ángulo de dirección y giro o guiñada se puede considerar si el vehículo
sufrió de subviraje o sobreviraje. Sabiendo que el subviraje es el derrape de las ruedas
delanteras cuando tomamos una curva, mientras que el sobreviraje se lo considera como el
derrape de las ruedas traseras. Observamos que el volante en función del dato obtenido del
ángulo de dirección tuvo un leve giro a la 0.89000° y el vehículo tuvo un giro sobre su eje
vertical de 0.3000° dato obtenido de la variable de ángulo de giro o guiñada, son valores que
permiten analizar el comportamiento dinámico lineal o no lineal del vehículo, a su vez este
análisis dinámico se completa con la salida de información presentada en las velocidades de
las ruedas.
113
Si el comportamiento del vehículo es no lineal, es decir no responde a los datos enviados por
los sensores de dirección y giro o guiñada, estas son posibles causas para efectuar un
accidente vehicular.
Mientras que la Figura 3.5 muestra los últimos datos de las variables: la carga del motor y la
distancia con LUZ MIL. Los valores que se visualizan son netamente informativos para
saber el estado del vehículo, si este al momento de suscitarse el accidente presentaba fallas
en el sistema electrónico. En la prueba de funcionamiento obtuvimos un valor de 0 de la
LUZ MIL debido que el vehículo no presentaba fallas con el sistema electrónico.
114
CAPÍTULO IV
4 CONCLUSIONES Y RECOMENDACIONES
4.1 CONCLUSIONES
Se determinó que los sistemas de seguridad activa y pasiva del vehículo comparten
información de uno o más sensores para su funcionamiento, es decir todos los
sistemas mantienen al menos una variable relacionada como: la velocidad en cada
una de las ruedas y la velocidad del vehículo, para el caso del Control Electrónico de
Estabilidad y el Sistema ABS. Por consiguiente, las velocidades de las ruedas y la
velocidad del vehículo son factores clave para predecir una parte del comportamiento
dinámico del vehículo.
Los módulos ENGINE y CHASIS CONTROL son los que presenta las variables que
se consideraron importantes para predecir el comportamiento dinámico del vehículo
en el caso de suscitarse un accidente, debido que ofrecen información relevante
acerca de los sistemas de seguridad activa y pasiva del vehículo. Estas variables son:
valor calculado de la carga, revoluciones del motor, switch del freno, sensor VSS,
distancia de luz mil, estado del sistema ABS, velocidades de las ruedas, ángulo de
dirección, aceleraciones longitudinales y transversales y sensores de giro o guiñada.
Una red CAN puede ser hackeada a través de un analizador CAN y un escáner
automotriz, puesto que estas herramientas permiten extraer un flujo de datos
hexadecimales, siendo estas las tramas de los PIDs sean estándar o fabricantes. Estos
datos pueden ser filtrados con la finalidad de ser resumidos, para obtener las
solicitudes de ingreso a cada una de las variables de interés y a su vez adquirir la
respuesta de estas variables en función de una trama constituida por bytes de
información.
La decodificación de los PIDs es posible siempre y cuando se haga uso de un escáner
automotriz y un analizador CAN, ya que estas herramientas permiten obtener un flujo
de datos y graficas en tiempo real. Identificando los valores picos de esos datos y
logrando un análisis de cada uno de ellos, donde se facilita desarrollar una fórmula
para obtener el dato en formato decimal, a través de los PIDs hexadecimales
recibidos.
La comunicación del microcontrolador y la red CAN es posible gracias al desarrollo
de una interfaz constituida por funciones, las cuales permitan la extracción,
116
decodificación y almacenamiento de los PIDs. Además del uso de librerías que sean
compatibles con el dispositivo CAN Bus Shield. Permitiendo el almacenamiento de
los datos en el caso de suscitarse una posible colisión.
Superando el rango de valores de las aceleraciones transversales y longitudinales
específicamente las 0,60 gravedades. Es posible la lectura del flujo de datos de la red
CAN, por medio del microcontrolador y posteriormente la escritura y
almacenamiento de los datos en la tarjeta SD.
4.2 RECOMENDACIONES
Para futuros estudios se recomienda la implementación de gráficas del flujo de datos
de las variables que se consideran importantes para conocer las condiciones que
suscitan el accidente vehicular, de la manera mediante estas graficas que presentan los
datos de los sistemas de seguridad activa y pasiva permitan que la información sea más
interpretable y se llegue con el tiempo a obtener directamente de la lectura y escritura
de los datos de la red CAN, un informe pericial. El cual muestre toda la información
para concluir inmediatamente las causas del accidente.
Se aconseja que el almacenamiento del flujo de datos adquiridos de la red CAN en el
caso de suscitarse un accidente vehicular, sean estos enviados y guardados en la nube,
con la finalidad que esta información sea accesible para el usuario sin la necesidad de
disponer del vehículo en ese momento. Este sistema se llevaría a cabo siempre y cuando
el vehículo tenga accesibilidad a una red de internet, de tal modo los datos estarían
almacenados en la tarjeta SD, hasta que el vehículo disponga de una red y pueda subir
la información.
En el futuro, la implementación de cámaras de seguridad y micrófonos en el vehículo,
podrían añadirse al grupo de variables que se consideran para la adquisición de los
datos en la red CAN, de tal manera se podrían extraer la información de la cámara de
seguridad y estos videos ser almacenadas en la nube junto a los datos almacenados en
la tarjeta SD, con el objetivo de mejorar la información que se puede obtener del
vehículo en el caso de suscitar un siniestro.
Para futuros trabajos de investigación se recomienda realizar investigaciones para el
hackeo de otros protocolos de comunicación, debido que no todos los vehículos
trabajan con CAN ISO 15765-4, siendo este el protocolo que se utilizó para este
117
estudio. De tal manera mucho de los vehículos usan protocolos como: SAE J1939 y
SAE J1850 y actualmente no se tiene información acerca del hackeo de la red de estos
protocolos. Llevando a cabo esta posible investigación, se podría llegar al objetivo, que
la mayor parte de los vehículos dispongan de un microcontrolador encargado de
adquirir los datos de la red en caso de un posible accidente vehicular.
118
5 REVISIÓN BIBLIOGÁFRICAS
A.G.P.S. (s/f). OBD2 – AGPS. Recuperado el 5 de octubre de 2021, de
https://www.agps.cl/obd2/
Andrews, D. F., & Limpert, R. (2013). ELECTRONIC CONTROL MODULE DATA IN
LARGE TRUCK COLLISON ANALYSIS.
Arduino. (s/f). Arduino - ArduinoBoardMega2560. Recuperado el 27 de enero de 2022, de
https://www.arduino.cc/en/Main/ArduinoBoardMega2560
Automotriz, I. y M. (2020). ¿Qué es el conector DLC OBD II y cuál es su función? -
INGENIERÍA Y MECÁNICA AUTOMOTRIZ.
https://www.ingenieriaymecanicaautomotriz.com/que-es-el-conector-dlc-obd-ii-y-
cual-es-su-funcion/
Black boxes/ in-vehicle data recorders | Mobility and transport. (s/f). Recuperado el 28 de
julio de 2021, de
https://ec.europa.eu/transport/road_safety/specialist/knowledge/esave/esafety_measur
es_known_safety_effects/black_boxes_in_vehicle_data_recorders_en
Blasco, V. (s/f). SISTEMA DE DIAGNOSTICO OBD II ¿Qué es el OBD?
Cantos Calderón, M. E., Ulco Ulco, S. P., Cantos Calderón, M. E., & Ulco Ulco, S. P. (2016).
Estudio cuantitativo de los sistemas de comunicación en vehículos de la región andina
mediante norma ISO 9141. https://repositorio.uide.edu.ec/handle/37000/1728
Carpio Guartambel, C. P. (2013). Manual de procedimientos para interactuar entre
protocolos de comunicación automotriz.
http://dspace.uazuay.edu.ec/handle/datos/2210
César, J., & López, O. (2014). DISEÑO DE ESCÁNER AUTOMOTRIZ OBDII
MULTIPROTOCOLO.
Cisneros Oscar. (2010, junio). Los Sistemas de Detección de Peatones . http://www.centro-
zaragoza.com:8080/web/sala_prensa/revista_tecnica/hemeroteca/articulos/R44_A8.pd
f
Control Electrónico de Frenado - ABS, ESP y Control de Tracción. (s/f). Recuperado el 8
de noviembre de 2021, de http://motorenmarcha.com/control-de-traccion-de-frenado/
Corrigan, S. (2002). Introduction to the Controller Area Network (CAN).
https://www.rpi.edu/dept/ecse/mps/sloa101.pdf
Costas, A., Cerdeira-Corujo, M., Barreiro, A., Delgado, E., & Baños, A. (s/f). Control
basado en Reset para seguimiento de consigna en el sistema de Control de Crucero
Adaptativo.
David, A. (2010). MICROCONTROLADORES PIC FUNDAMENTOS Y APLICACIONES
UN ENFOQUE DIDÁCTICO.
Dimaté Cáceres, J. M., & González Castillo, P. M. (2013). Diseño de una interfaz gráfica en
Labview para el diagnostico de vehículos por medio de OBD2. instname:Universidad
Pontificia Bolivariana. https://repository.upb.edu.co/handle/20.500.11912/911
Enríquez Herrador, R. (2009). Guía de Usuario de Arduino.
119
6 ANEXOS
ANEXO 1
6.1 Código de programación
#include <SPI.h>
#include <SD.h>
#define CAN_2515
#include <Wire.h>
#include <RTClib.h>
RTC_DS1307 rtc;
#include "mcp2515_can.h"
const int SPI_CS_PIN = 10;
const int CAN_INT_PIN = 2;
mcp2515_can CAN(SPI_CS_PIN);
#define SSpin 4 //selector de esclavo al pin 22
#define CAN_ID_PID_STD 0x7DF
#define CAN_ID_PID_FABRIC 0x70C
#define PID_ENGINE_SPEED 0x0C
#define PID_CAL_LD_VALUE 0x04
#define PID_TRVL_AFTER_MIL 0x21
#define PID_VHCL_SPEED_VSS 0X0D
#define PID_BRAKESW1 0x22
#define PID_ABSMALF 0x25
#define PID_SIDE_G 0x16
#define PID_DELC_G 0x15
#define FRWS 0X0F
#define FLWS 0X10
#define RRWS 0X11
#define RLWS 0X12
#define STERING_ANGL 0X13
#define YAW_RS 0X18
123
SERIAL_PORT_MONITOR.println("Escribiendo SD...");
if (archivo) {
archivo.println("-----------------------------------------------------------------------------");
archivo.println("RED CAN OK!");
archivo.println("Nuevo registro de datos de evento iniciado:");
archivo.close();
SERIAL_PORT_MONITOR.println("Terminado!")
} else{
SERIAL_PORT_MONITOR.println("Falló! No se pudo escribir tarjeta micro
SD...");
return;
}
ENVIARTRAMAFab(PID_SIDE_G );
taskCanRecv();
//4
ENVIARTRAMAFab(PID_DELC_G);
taskCanRecv();
//5
ENVIARTRAMAFab(FRWS);
taskCanRecv();
//6
ENVIARTRAMAFab(FLWS);
taskCanRecv();
//7
ENVIARTRAMAFab(RRWS);
taskCanRecv();
//8
ENVIARTRAMAFab(RLWS);
taskCanRecv();
//9
ENVIARTRAMAFab(STERING_ANGL);
taskCanRecv();
//10
ENVIARTRAMAFab(YAW_RS);
taskCanRecv();
//1
ENVIARTRAMAStd(PID_ENGINE_SPEED);
taskCanRecv2();
//2
ENVIARTRAMAStd(PID_CAL_LD_VALUE);
taskCanRecv2();
//3
ENVIARTRAMAStd(PID_TRVL_AFTER_MIL);
128
taskCanRecv2();
//4
ENVIARTRAMAStd(PID_VHCL_SPEED_VSS);
taskCanRecv2();
}
}
}
ENVIARTRAMAFab(PID_DELC_G);
if (CAN_MSGAVAIL == CAN.checkReceive()) {
CAN.readMsgBuf(&len, buf);
int filtro2 = CAN.getCanId();
if(filtro2 == 1792){
// Para comprobar:
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
-------");
SERIAL_PORT_MONITOR.print("Obteniendo datos de ID: 0x");
SERIAL_PORT_MONITOR.println(CAN.getCanId(), HEX);
int data0204 = (buf[4]);
int data0205 = (buf[5]);
int i;
for (i == 3; i == 5; i++) {
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
-------");
SERIAL_PORT_MONITOR.print("0x"); // QUITAR TODO PRINT SERIAL en el
codigo final, unicamente se conserva archivo.print
SERIAL_PORT_MONITOR.print(buf[i], HEX);
SERIAL_PORT_MONITOR.print("\t");
}
SERIAL_PORT_MONITOR.println();
for (int a = 3; a == 5; a++) {
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
-------");
129
SERIAL_PORT_MONITOR.print("0x");
SERIAL_PORT_MONITOR.print(buf[a], DEC);
SERIAL_PORT_MONITOR.print("\t");
SERIAL_PORT_MONITOR.println();
}
float resultadoec2 = 0.0;
float resultadoac2 = 0.0;
int CA101042=0;
int CA101052=0;
int CA1010242=0;
int CA1010252=0;
if(data0204>=125 && data0204<=255){
CA101042 = 255 - data0204;
CA101052 = 255 - data0205;
}else {
CA101042 = 0;
CA101052 = 0;
}
if(data0204>=0 && data0204<=10){
CA1010242 = data0204;
CA1010252 = data0205;
}else {
CA1010242=0;
CA1010252=0;
}
resultadoac2 = (256.0 * CA1010242 + CA1010252)/1000.0;
resultadoec2 = (256.0 * CA101042 + CA101052)/1000.0;
130
if(resultadoec2 >= 0.60 && resultadoec2 <= 10 || resultadoac2 >= 0.60 && resultadoac2
<= 10){
DateTime fecha = rtc.now();
archivo = SD.open("PIDs.txt", FILE_WRITE);
archivo.print(fecha.day());
archivo.print("/");
archivo.print(fecha.month());
archivo.print("/");
archivo.print(fecha.year());
archivo.print(" ");
archivo.print(fecha.hour());
archivo.print(":");
archivo.print(fecha.minute());
archivo.print(":");
archivo.println(fecha.second());
archivo.close();
//1
ENVIARTRAMAFab(PID_BRAKESW1);
taskCanRecv();
//2
ENVIARTRAMAFab(PID_ABSMALF);
taskCanRecv();
//3
ENVIARTRAMAFab(PID_SIDE_G );
taskCanRecv();
//4
ENVIARTRAMAFab(PID_DELC_G);
taskCanRecv();
//5
ENVIARTRAMAFab(FRWS);
taskCanRecv();
//6
131
ENVIARTRAMAFab(FLWS);
taskCanRecv();
//7
ENVIARTRAMAFab(RRWS);
taskCanRecv();
//8
ENVIARTRAMAFab(RLWS);
taskCanRecv();
//9
ENVIARTRAMAFab(STERING_ANGL);
taskCanRecv();
//10
ENVIARTRAMAFab(YAW_RS);
taskCanRecv();
//1
ENVIARTRAMAStd(PID_ENGINE_SPEED);
taskCanRecv2();
//2
ENVIARTRAMAStd(PID_CAL_LD_VALUE);
taskCanRecv2();
//3
ENVIARTRAMAStd(PID_TRVL_AFTER_MIL);
taskCanRecv2();
//4
ENVIARTRAMAStd(PID_VHCL_SPEED_VSS);
taskCanRecv2();
}
132
}
}
}
void CanChequear() {
unsigned char len = 0;
unsigned char buf[8];
if (CAN_MSGAVAIL != CAN.checkReceive()) {
CAN.readMsgBuf(&len, buf);
int data02 = (buf[2]);
int data03 = (buf[3]);
while(data03==0){
Serial.println("Red CAN Falló");
Serial.println("Reintentando...");
delay(1000);
}
}
}
void ENVIARTRAMAcheck(unsigned char PIDStd) {
unsigned char tmp[8] = {0x02, 0x01, PIDStd, 0x00, 0x00, 0x00, 0x00, 0x00}; // Asigna un
véctor con longitud 8
CAN.sendMsgBuf(CAN_ID_PID_STD, 0, 8, tmp); //Envio de la trama
}
void ENVIARTRAMAStd(unsigned char PIDStd) {
unsigned char tmp[8] = {0x02, 0x01, PIDStd, 0x00, 0x00, 0x00, 0x00, 0x00};
SERIAL_PORT_MONITOR.print("Se envió el PID: ");
SERIAL_PORT_MONITOR.println(PIDStd,HEX);
CAN.sendMsgBuf(CAN_ID_PID_STD, 0, 8, tmp); //Envio de la trama
}
void ENVIARTRAMAFab(unsigned char PIDFab) {
unsigned char tmp[8] = {0x03, 0x22, 0x01, PIDFab, 0xFF, 0xFF, 0xFF, 0xFF};
SERIAL_PORT_MONITOR.print("Se envió el PID: ");
SERIAL_PORT_MONITOR.println(PIDFab, HEX);
133
SERIAL_PORT_MONITOR.print("0x");
SERIAL_PORT_MONITOR.print(buf[a], DEC);
SERIAL_PORT_MONITOR.print("\t");
SERIAL_PORT_MONITOR.println();
}
if (archivo) {
SERIAL_PORT_MONITOR.println("escribiendo SD...");
archivo.println("\r\n------------------------------------------------------------------");
archivo.print("ID: 0x");
archivo.println(CAN.getCanId(), HEX);
archivo.println();
archivo.print(buf[3],HEX);
archivo.print(",\t");
archivo.print(buf[4],DEC);
archivo.print(",\t");
archivo.println(buf[5],DEC);
archivo.println();
}
float resultado=0;
int CA104 = 0;
int CA105 = 0;
switch (data03){
case 34: //BRAKE SWITCH
if(data04==64){
archivo.println("Switch de freno ON");
}
if(data04==0){
archivo.println("Switch de freno OFF");
}
break;
135
archivo.print("-");
archivo.print(resultado,4);
archivo.println(" g");
}
break;
case 22: //SIDE G
archivo.println("Aceleración transversal:");
if(data04==0){
resultado = data05/1000.0;
archivo.print("Izquierda ");
archivo.print(resultado,4);
archivo.println(" g");
}
if(data04 >= 1 && data04 < 20){
resultado = (256.0*data04+data05)/1000.0;
archivo.print("Izquierda ");
archivo.print(resultado,4);
archivo.println(" g");
}
if(data04 == 255){
CA105 = 255 - data05;
resultado = CA105/1000.0;
archivo.print("Derecha -");
archivo.print(resultado,4);
archivo.println(" g");
}
if(data04 <= 254 && data04 > 234){
CA104 = 255 - data04;
CA105 = 255 - data05;
resultado = (256.0*CA104+CA105)/1000.0;
archivo.print("Derecha -");
137
archivo.print(resultado,4);
archivo.println(" g");
}
break;
case 15: //FRWS
archivo.println("Velocidad rueda delantera derecha:");
resultado = (data04*10000.0 + (data05/256.0)*10000.0)/1000.0;
archivo.print(resultado,7);
archivo.println(" RPM");
break;
case 16: //FLWS
archivo.println("Velocidad rueda delantera izquierda:");
resultado = (data04*10000.0 + (data05/256.0)*10000.0)/1000.0;
archivo.print(resultado,7);
archivo.println(" RPM");
break;
case 17: //RRWS
archivo.println("Velocidad rueda posterior derecha:");
resultado = (data04*10000.0 + (data05/256.0)*10000.0)/1000.0;
archivo.print(resultado,7);
archivo.println(" RPM");
break;
case 18: //RLWS
archivo.println("Velocidad rueda posterior izquierda:");
resultado = (data04*10000.0 + (data05/256.0)*10000.0)/1000.0;
archivo.print(resultado,7);
archivo.println(" RPM");
break;
case 19: //STEERING ANG
archivo.println("Ángulo de dirección volante:");
if(data04 >= 0 && data04 <= 60){
138
archivo.close();
}
}
void taskCanRecv2() {
unsigned char len = 0;
unsigned char buf[8];
unsigned char dataswitch2[1];
if (CAN_MSGAVAIL == CAN.checkReceive()) { // check if get data
CAN.readMsgBuf(&len, buf); // read data, len: data length, buf: data buf
archivo = SD.open("PIDs.txt", FILE_WRITE);
int data02st = (buf[2]);
int data03st = (buf[3]);
int data04st = (buf[4]);
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
-------");
SERIAL_PORT_MONITOR.print("Obteniendo datos de ID: 0x");
SERIAL_PORT_MONITOR.println(CAN.getCanId(), HEX);
int i;
for (i = 3; i == 5; i++) {
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
-------");
SERIAL_PORT_MONITOR.print("0x");
SERIAL_PORT_MONITOR.print(buf[i], HEX);
SERIAL_PORT_MONITOR.print("\t");
}
SERIAL_PORT_MONITOR.println();
for (int a = 3; a == 5; a++) {
SERIAL_PORT_MONITOR.println("\r\n-----------------------------------------------------------
------");
SERIAL_PORT_MONITOR.print("0x");
SERIAL_PORT_MONITOR.print(buf[a], DEC);
SERIAL_PORT_MONITOR.print("\t");
140
SERIAL_PORT_MONITOR.println();
}
if (archivo) {
SERIAL_PORT_MONITOR.println("escribiendo SD...");
archivo.println("\r\n------------------------------------------------------------------");
archivo.print("ID: 0x");
archivo.println(CAN.getCanId(), HEX);
archivo.println();
archivo.print(buf[2],HEX);
archivo.print(",\t");
archivo.print(buf[3],DEC);
archivo.print(",\t");
archivo.println(buf[4],DEC);
}
float resultado2=0;
int Carga = 0;
int Revoluciones =0;
int VSS = 0;
int LuzMIL = 0;
switch (data02st){
case 4: //Calculo de la carga
Carga = data03st/2.55;
archivo.println("La carga del motor es:");
archivo.print(Carga);
archivo.print(" porciento");
break;
case 12: //Revoluciones del motor
Revoluciones = ((256*data03st)+data04st)/4;
archivo.println("Las revoluciones del motor son:");
archivo.println(Revoluciones);
archivo.print(" RPM");
141
break;
case 13: //Sensor VSS
VSS = data03st;
archivo.print("La velocidad del vehículo es: ");
archivo.print(VSS);
archivo.println(" km/h");
break;
case 33: //Luz MIL
LuzMIL = ((256*data03st)+data04st);
archivo.println("La distancia con Luz MIL ON:");
archivo.print(LuzMIL);
archivo.println("km");
break;
}
archivo.println("\r\n------------------------------------------------------------------");
archivo.close();
}
}
void solicitud(){
unsigned char tmp[8] = {0x02, 0x10, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 2
unsigned char tmp1[8] = {0x03, 0x22, 0x04, 0x01, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 3
unsigned char tmp2[8] = {0x03, 0x22, 0xDF, 0x04, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 4
unsigned char tmp3[8] = {0x03, 0x22, 0x01, 0x76, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 5
142
unsigned char tmp4[8] = {0x03, 0x22, 0x04, 0x04, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 6
unsigned char tmp5[8] = {0x03, 0x22, 0x04, 0x07, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 7
unsigned char tmp6[8] = {0x02, 0x10, 0x03, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 8
unsigned char tmp7[8] = {0x02, 0x10, 0x01, 0x0C, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 9
unsigned char tmp8[8] = {0x03, 0x22, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
//10
unsigned char tmp9[8] = {0x03, 0x22, 0x01, 0x52, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 11
unsigned char tmp10[8] = {0x03, 0x22, 0x01, 0x80, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 12
unsigned char tmp11[8] = {0x04, 0x2F, 0xDF, 0x01, 0x03, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
// 13
unsigned char tmp12[8] = {0x02, 0x3E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
CAN.sendMsgBuf(CAN_ID_PID_FABRIC, 0, 8, tmp);
}
void set_mask_filt() {
CAN.init_Mask(0, 0, 0x7FC);
CAN.init_Mask(1, 0, 0x7FF);
143
CAN.init_Filt(0, 0, 0x7E8);
CAN.init_Filt(1, 0, 0x7E8);
CAN.init_Filt(2, 0, 0x700);
CAN.init_Filt(3, 0, 0x700);
CAN.init_Filt(4, 0, 0x700);
CAN.init_Filt(5, 0, 0x700);
}