jump to navigation

ODBII, hablando desde un ordenador con el coche 13 enero, 2010

Posted by ubanov in Informática.
Tags: , , ,
trackback

Todos los coches actuales llevan un pequeño “ordenador” de abordo para controlar la mayoría de las funciones del mismo. A este “ordenador” es posible conectarse para obtener algunos datos. En este post cuento cómo he conectado mi portatil con el mismo y he hecho unas pruebas básicas.

El conector que lleva el coche es un conector ODBII, y suele estar en sitio no visible (yo tengo un Peugeot 307SW y lo tiene en detrás de una tapa al lado del volante, creo que en el manual del coche me decía dónde estaba y así lo encontré). Ver la siguiente foto (lo verde de arriba es el conector).

Comprando un cable especial es posible conectarse al mismo desde un portátil. Yo compré el siguiente cable en ebay.

Cuando conectas el cable al ordenador, te detectará un puerto serie nuevo que se utilizará para comunicarse con el coche. En linux (debian) sin instalar ningún tipo de driver veremos que el kernel nos crea un puerto serie virtual:

debian:~$ dmesg | tail
[  241.238589] usbcore: registered new interface driver usbserial
[  241.238926] usbserial: USB Serial support registered for generic
[  241.239137] usbcore: registered new interface driver usbserial_generic
[  241.239197] usbserial: USB Serial Driver core
[  241.365969] usbserial: USB Serial support registered for FTDI USB Serial Device
[  241.366765] ftdi_sio 1-1:1.0: FTDI USB Serial Device converter detected
[  241.367786] ftdi_sio: Detected FT232BM
[  241.368128] usb 1-1: FTDI USB Serial Device converter now attached to ttyUSB0
[  241.368173] usbcore: registered new interface driver ftdi_sio
[  241.368173] ftdi_sio: v1.4.3:USB FTDI Serial Converters Driver

En este caso es el /dev/ttyUSB0

Para “hablar” con el coche podemos ejecutar cualquier programa de terminal, por ejemplo el minicom (configurando como puerto el /dev/ttyUSB0 y como velocidad 9600, y en modo 8N1).

Una conversación con el coche podría ser algo como lo siguiente (todo lo que pone entre paréntesis son aclaraciones que he puesto luego para entender mejor el proceso):

debian:~$ minicom
>atz (inicialización del ELM)
ELM323 v2.0
>00 00 (inicializar el bus, si no estás conectado al coche dará error)
BUS INIT: …OK
7F 00 80
>01 00 (solicitar el PID 0, lista de PID soportados)
41 00 98 3B 40 11
>01 01 (estado general de lamparas de error)
41 01 00 06 80 00 (si el tercer número no fuera 0 tu coche tendría errores, que se podrían visualizar con el comando 03)
>01 04  (calculated engine load value)
41 04 39
>01 05 (engine coolant temperature)
41 05 7C (7C=124, 124-40=84ºC)
>01 0b (intake manifold absolute pressure)
41 0B 66
>01 0c (engine rpm)
41 0C 0B 9C (0B9C/4=743rpm)
>01 0d (vehicle speed)
41 0D 00 (el coche estaba parado, con lo que 0km/h)
>01 0f (intake air temperature)
41 0F 4C
>01 10 (maf air flow rate)
41 10 03 93 03 93
>01 12 (commanded secondary air status)
41 12 04
>01 1c (odb standards this vehicle conforms to)
41 1C 06 (06=ODB Europe)
>01 20 (PIDs supported 21-40)
41 20 A0 00 00 00
>01 21 (Distace traveled with malfunction indicator lamp, MIL, on)
41 21 00 00
>01 23 (Fuel Rail Pressure diesel)
41 23 00

Cada coche puede soportar diferentes valores que se pueden leer, el mío soporta los de arriba, pero otro podría soportar otros, el comando “01 00” te dice que valores soporta (y el “01 20″…)

Si se intenta leer un valor no soportado dará un código de error (primer número empezando por 7), por ejemplo:

>01 02
7F 01 12

Para visualizar errores que tenga el coche y así nos de un diagnostico de qué le ocurre a nuestro coche, se emplearía el código 03. Para entender las respuestas mirar la página 12 del datasheet del ELM323 (el link está debajo). Afortunadamente para mi no he podido comprobar qué podría devolver. Los códigos hay una serie de códigos estandar que puede dar y luego hay otros específicos del fabricante del coche. Por ejemplo, para mi peugeot se supone que podría dar los códigos que se encuentran en la página siguiente: http://www.dashhawk.eu/PID/Codes/PSA.php

Con el comando 04 podrían borrarse los indicadores de error…..

Un comando que parece interesante (aunque no lo he probado) es el “AT MA”, es el comando de monitorizar todo (Monitor All messages). Con este comando se empezaría a snifar todas las conversaciones que se producen por el bus del coche. Algún día lo probaré…

Un buen link para entender los diferentes valores que nos da el coche es el siguiente: http://en.wikipedia.org/wiki/OBD-II_PIDs

Un link general con información de lo que los diferentes conceptos: http://en.wikipedia.org/wiki/On-board_diagnostics

Por último el datasheet del integrado utilizado para hablar con el coche: http://www.elmelectronics.com/DSheets/ELM323DS.pdf

Para windows existen algunas aplicaciones para obtener los datos de forma más visual, mi intención era entender el protocolo, con lo que no he hecho pruebas de dichas aplicaciones…

Comentarios»

1. Juan Carlos Febrer - 14 enero, 2010

Muy bueno. Una guia de iniciación excelente. Tengo que buscar si mi car soporta dicho conector. Hablar con mi mujer no me emociona🙂 Saludos.

2. despiste - 21 noviembre, 2010

ok tengo un 307 hdi 1.6 110 cv motor d-9hy me puedes dar las caracteristicas del cable para hacerme de uno ?
puedes ampliar la informacion , es decir lo que has povado a hacer hasta ahora.
gracias por el aporte

ubanov - 29 noviembre, 2010

yo lo he comprado por Internet y creo que me costó como 20 y pocos Euros… yo no me arriesgaría a hacerlo por ese precio. Búscalo en ebay y luego decides si ponerte a hacertelo o no….😀


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: