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).
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.
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