Révéler les secrets de sa voiture avec le port OBD-II

 x0r   8
hack linux voiture obd

Lorsque j'ai découvert que ma voiture a un port de diagnostic qui permet d'obtenir en temps réel tous les paramètres instantanés comme la vitesse, le régime du moteur ou d'autres choses encore, je me suis immédiatement mis en tête de faire l'acquisition d'un module USB permettant de faire mumuse avec ce port.

Ce port, qu'on appelle OBD-II (pour On Board Diagnostics), serait obligatoire dans toutes les voitures construites à partir du début des années 2000. Il est donc fort possible que votre voiture en ait également un. En général, il est assez bien caché, parfois sous une trappe, mais le plus souvent sous le volant ou un autre endroit atteignable depuis le siège conducteur.

À l'origine, il s'agit d'un port de diagnostic qui permet aux constructeurs automobiles de surveiller l'état et les émissions de gaz ou particules des moteurs qu'ils mettent dans leurs voitures, afin d'être en règle avec les lois sur les émissions de gaz à effet de serre notamment. Bien entendu, nous allons nous servir de ce port pour faire des choses un peu plus ludiques.

En effet, les possibilités sont nombreuses. Certains pourraient utiliser ce port pour faire de la surveillance de parc automobile. D'autres pourraient s'en servir pour fabriquer un panneau d'instruments alternatifs affichant des paramètres du moteur (retards à l'allumage, forces...) que le tableau de bord n'indique pas. Personnellement, je rêve de fabriquer un affichage têtes hautes. Même si je suis assez dubitatif face à la réalisabilité du projet pour plusieurs raisons, je me suis néanmoins procuré les outils pour faire mumuse.

Pour communiquer avec la voiture, il existe plusieurs protocoles (de couches 1 et 2 grosso modo) standardisés, et savoir lequel utiliser relève généralement de la devinette, parce que comme tout protocole industriel, c'est toujours le bordel. Heureusement, des circuits intégrés l'ELM327 font cette autodétection pour nous, et il suffit de balancer les commandes OBD-II dessus (qui, eux, ne varient quasiment pas) pour interagir avec la voiture.

Le matériel

Il vous faut :

  • un PC, smartphone, PDA, console de jeux, Arduino, grille-pain ou je ne sais quoi d'improbable ;
  • un dongle ELM-327 USB (ou un montage comportant ce chip).

Photo d'un dongle ELM-327

Ce dernier est trouvable sur eBay pour une dizaine d'euros. Il permet de communiquer avec le port OBD-II au moyen de son propre protocole série (RS-232). La version USB intègre tout simplement un convertisseur PL2303 et il est possible de dialoguer avec le dongle via minicom ou un outil similaire.

Hackons un petit peu

D'un point de vue utilisateur, le protocole est de la forme « requête-réponse » pour les choses les plus simples. De la même manière qu'en HTTP, on envoie une requête pour obtenir une donnée particulière, et le dongle nous répond. Par exemple, pour demander la valeur actuelle du compte-tours, la session ressemble à ça :

> 01 0D
41 0C 23 6C

Dans la requête, l'octet 01 indique qu'on demande une valeur réelle instantanée, et l'octet 0D (appelé « PID ») indique qu'on souhaite la valeur du compte-tours. La liste des données qu'on peut obtenir est disponible un peu partout sur le Net. La réponse est 23 6C, ce qui, converti en base 10 et après division par 4, donne la valeur réelle, qui est 2 267 tours par minute.

Chaque valeur est renvoyée sous sa forme brute ; pour les exploiter, il faut généralement les traiter bit à bit pour en extraire un chiffre exploitable.

Bien entendu, seule une petite partie des PIDs listés dans la page sus-citée est généralement prise en charge par l'ordinateur de bord, sinon ce ne serait pas drôle. Heureusement, il y a une commande qui permet d'obtenir la liste des PIDs prise en charge :

> 01 00
41 00 BE 3E B8 11

La réponse est renvoyée sous la forme de 32 bits. Converti en base 2, ce nombre donne 1011 1110 0011 1110 1011 1000 0001 0001. En lisant de gauche à droite, on conclut donc que ma voiture prend en charge les PIDs 00, 02 à 06, 0A à 0E, 10, 12 à 14, 1B et 1F.

Exemple d'application : une simple boîte noire

Comme je voulais tester l'acquisition en temps réel de la vitesse v de la voiture et du régime moteur N, j'ai écrit un petit programme qui interroge un dongle OBD environ 16 fois par seconde et formate, pour une date t donnée, un couple (v, N).

Comme je conduis généralement seul, et que je me suis dit que conduire avec un laptop sur les genoux est une très mauvaise idée, j'ai eu l'idée de logguer ces informations pour ensuite les rejouer après coup, comme une sorte de boîte noire.

Des tests stationnaires (point mort, frein à main et quelques petits coups sur l'accélérateur) m'ont permis de voir que 16 échantillonnages par seconde suffisaient largement pour avoir quelque chose de fluide et qui semblait refléter parfaitement ce qu'indiquaient les instruments au tableau de bord, sans pour autant trop surcharger le dongle OBD.

Screenshot de données logguées à l'aide du dongle OBD

Conclusion

Que dire de l'intérêt d'exploiter les possibilités du port OBD-II de sa voiture, à part celui de mieux comprendre comment fonctionne le moteur, faire du diagnostic et du dépannage soi-même, ou tout simplement pour la simple curiosité intellectuelle ? Nous avons vu comment récupérer des paramètres « live » du moteur et les logguer.

Ma prochaine étape sera d'utiliser un Raspberry Pi ou un Arduino pour tenter d'exploiter le plus de données possibles. J'ai d'ores et déjà commandé un écran 7 pouces HDMI sur eBay, dans l'optique de faire quelque chose en ce sens avec mon Raspberry Pi.

Commentaires

Poster un commentaire

monlaug

BONJOUR pouvez vous me guider et me conseiller sur un programme de lecture de codes défauts et des mémoires tel les kilométrages et autres. pour toutes marques

merci pour votre réponse

Jean Marc

Ghita

Bonjour,

Je suis intéressée par le codage du OBD II. Pourriez-vous SVP me conseiller des sites pour apprendre (tutos)?

Merci d'avance. Ghita

Stéphane

Bonjour,

J'ai le sentiment d'avoir trouver des pro de l'ODB-II et ma question va certainement ne pas être au niveau, mais je cherche désespérément une réponse. J'ai une Touareg 3.0 TDI 2008. Mon voyant moteur s'allume. Le diagnostique chez WW est un problème de Tubuless ASP. Mon garagiste qui est sympa, me dit qu'il n'est pas urgent de faire la réparation. Il m'a effacé le voyant mais après 2 démarrages le voyant revient. Il me dit que le voyant est programmé après 2 démarrage si la réparation n'est pas faite. Question: Selon vous est il possible de modifier ce paramètre et le porter à 10 après effacement du voyant? Si oui, comment faire? Merci de votre aide. Stéphane

shadok

bonjour, je suis a la recherche d un informaticien capable de récuperer des dodonnees des dates d acces ect... est ce dans vos cordes merci de votre retour cdlt

Serge

Bonjour, Je m'interesse à l'OBD-II , Je recherche comment procéder pour envoyer ou lire les codes sur un dongle ELM 327 USB…. Je sais facilement réaliser un CI avec un PIC ou utiliser une carte Arduino, mais je ne connais pas le mode pour piloter le dongle …. Pouvez-vous me donner une indication , pour cela ….. Votre projet avec un Rasbery PI (ou un Arduino), m'interesse aussi, ou en êtes -vous ??????…...

sauveur

Bonjour peut-on désactiver les alertes ampoule grillée par l'intermédiaire de l'affiche obd (seat exeo) cordialement

stephy12

je m'interesse au projet obd mon but est de concevoir mon propre obd en utilisant la raspberry pour l'acquisition sur le port obd du vehicule besoi d'aide sur comment faire le programme

LaBricole

Bonjour, Je ne parviens pas à comprendre la façon dont vous décrypter les valeurs de PID prises en charge à partir de la réponse obtenue.

"1011 1110 0011 1110 1011 1000 0001 0001. En lisant de gauche à droite, on conclut donc que ma voiture prend en charge les PIDs 00, 02 à 06, 0A à 0E, 10, 12 à 14, 1B et 1F" Merci de bien vouloir m'éclairer sur ce sujet. Crdlt

Poster un commentaire