24
avril
2014

Création d'un afficheur OBD/data logger Arduino - Partie 1

Houlà, ça fait vraiment longtemps que je n'ai pas écrit par ici :) On va tenter de remédier à ça, avec une série d'articles sur mon (nouveau) dada : l'Arduino.

Un des projets que je vais essayer de partager avec vous est directement lié à l'automobile : un datalogger / afficheur basé sur le protocole OBD.

A vos marques, prĂȘts ? Partez !

Alors, nous allons tenter de clarifier un peu le titre pour le moins obscur de cet article. Data logger ? OBD ? voiture ? Non lĂ , faut pas pousser :)

Je vais tout d'abord vous exposer la problématique, vous verrez, ça va vite devenir trÚs clair ;)


Il Ă©tait une fois...


... un pĂšre de famille (nombreuse) qui a dĂ» changer de voiture. Adieu le break hightech, bonjour le monospace 7 places un peu moins hightech.

La chose qui me chagrine le plus avec cette voiture (comparé à l'ancienne) c'est le compteur de vitesse analogique. Oui oui, analogique, en 2014 :

Tableau de bord C8 (C'est pas le mien, mais vous avez saisi l'idée)

C'était donc le moment ou jamais de pallier à ce problÚme en mélangeant un peu de développement et d'électronique.

Il faut savoir que toutes les voitures depuis 2002 (essence) et 2004 (diesel) en Europe sont équipés obligatoirement d'une prise diagnostique, dans l'habitacle. Cette prise, normée, sert à communiquer avec la voiture via le protocole OBD (On Board Diagnostics)

Ce protocole, trĂšs fourni et trĂšs dĂ©taillĂ©, permet en principe de fournir une masse considĂ©rable d'information sur le moteur, et mĂȘme remonter d'Ă©ventuels problĂšmes. Si vous avez un voyant jaune reprĂ©sentant un moteur sur votre tableau de bord, et qu'il est allumĂ©, c'est que l'OBD a remontĂ© un code d'erreur.


OBD, oui mais encore ?


L'OBD comme je vous le disais permet de remonter une masse considérable d'information. Je vous laisse jeter un oeil à la page wikipedia listant toutes les informations potentiellement accessibles pour vous faire une idée.

Bon, ne vous faites pas trop d'illusion non plus, c'est une norme, mais chaque constructeur est libre d'implémenter telle ou telle mesure.

Les plus couramment implémentées sont la vitesse instantanée, le régime moteur, la consommation (via un calcul à effectuer).

Idéal donc pour mon projet !

La question qui se pose à présent, c'est de savoir comment récupérer ces informations et les exploiter à partir d'un Arduino. C'est là qu'intervient notre ami eBay :)

Il existe une multitude d'adaptateur OBD sur eBay, notamment chez les vendeurs chinois. Hormis un prix défiant toute concurrence, l'avantage de ces adaptateurs c'est qu'ils sont universels et sont disponibles dans plusieurs modes de communication.

Celui qui a retenu mon attention, c'est celui lĂ  :

OBD 2 bluetooth

Une prise OBD2 d'un cĂŽtĂ©, une interface bluetooth sĂ©rie de l'autre. Sachant que la prise OBD fournit l'alimentation, mĂȘme pas besoin de cĂąble supplĂ©mentaire pour le faire marcher.

L'objectif est donc de brancher un Arduino (Uno suffira pour le moment) Ă  une extension bluetooth facilement adressable, et ainsi faire communiquer l'Arduino et la voiture, par le biais de ce dongle OBD


Une histoire de dent bleue


Je vous la fait courte, j'ai fait le tour des extensions Bluetooth disponibles pour Arduino, et mon choix s'est arrĂȘtĂ© sur le HC-05. C'est un joli petit transceiver Bluetooth. Transceiver car il peut ĂȘtre Ă  la fois master et slave Bluetooth. Ca coute pas plus cher qu'un simple receiver (le HC-06 par exemple), vous pourrez vous en resservir si le coeur vous en dit.

HC 06 bluetooth Arduino

HC-06 Bluetooth Arduino

Comme vous pouvez le voir sur la photo, le brochage est extrĂȘmement simple :

  • une broche pour la masse
  • une broche 3,3v et une autre en 5v (vous pouvez choisir le voltage donc)
  • une pour la transmission, une pour la rĂ©ception (TX, RX)
  • une broche Key pour le passage en mode commande du chip (j'y reviendrais plus tard)

En résumé, le branchement à un Arduino Uno donnerait ça :

Bluetooh sur un arduino

Le module bluetooth n'est pas le bon, mais le brochage est le mĂȘme. De gauche Ă  droite :

GND - 3.3 - 5 - TX - RX - KEY

Décortiquons un peu tout ça :)

Avec le script ci dessus, nous mettons le HC-05 en mode commande (par opposition au mode link) pour pouvoir jouer avec :) Il suffit d'envoyer du courant dans la broche KEY au démarrage. Le module passe ainsi en mode commande, et la LED clignote lentement.

Ensuite, c'est un bĂȘte pont sĂ©rie qui est montĂ© entre le module et l'arduino. Si vous ouvrez la console de votre IDE, vous pourrez taper des commandes AT pour piloter votre module.

Si vous voulez la liste complĂšte des commandes reconnues par le module, allez jeter un oeil par ici

VoilĂ , votre Arduino possĂšde maintenant une extension Bluetooth !


Et demain, le monde !


A prĂ©sent, nous disposons d'une fenĂȘtre sur le monde avec le module BT.

Il nous reste Ă  trouver avec qui parler :)

Et si nous tentions de parler avec notre ELM327 Bluetooth ? (oui c'est le ptit nom de notre module OBD2)

Allez, je vais vous donner un petit tips : vous n'ĂȘtes pas obligĂ© d'aller coder dans votre voiture, pour l'instant. Etant donnĂ© que nous avons juste besoin d'Ă©tablir la connection avec l'ELM, et pas de communiquer avec la voiture,nous devons juste l'alimenter.

La prise OBD fournissant du 12V, une bonne vieille pile 9V fera amplement l'affaire.

Schema prise OBD2

Le - sur la broche 4, le + sur la broche 16, et le tour est joué. Le périphérique est actif, et est visible en Bluetooth.

Il nous faut à présent déterminer l'adresse du module, pour que notre arduino s'y connecte automatiquement.

Utilisez le script ci-dessus, et tapez les commandes suivantes dans le moniteur série :



AT
>OK
AT+ROLE?
>+ROLE:0
>OK
AT+ROLE=1
>OK
AT+PSWD=1234
>OK
AT+INQ
>ERROR
AT+INIT
>OK
AT+INQ
>+INQ: D:18:01
>(...)
AT+INQC
>OK
AT+PAIR= D,18,01,10 -> le dernier numéro correspond au timeout de connexion
>OK
AT+LINK= D,18,01
>OK

Le but étant ici de passer le HC-05 en mode Master (AT+ROLE=1), de définir son mot de passe par défaut (1234, celui-ci étant le mot de passe du module ELM327 la plupart du temps). Ensuite, nous lançons une recherche (AT+INQ) pour déterminer les périphériques BT à proximité. Viens aprÚs l'appariement et l'établissement de la connexion.


Un lien trĂšs fort


Maintenant, nous savons créer un connexion série over BT à la main. Et si nous automatisions ça un peu plus ?

Simple non ? :)

Dans la fonction setupBluetoothConnection(), nous refaisons le process que nous avons effectué à la main tout à l'heure.

Avec cette base, nous sommes Ă  mĂȘme de nous connecter Ă  notre module ELM327. la variable blueToothSerial Ă©tant de type SoftwareSerial, il est facile de lire et d'Ă©crire sur ce port sĂ©rie logiciel.

La prochaine fois, nous verrons comment parler avec des mots doux Ă  l'ELM327, et qu'il nous livre tous les secrets de votre voiture.

En attendant, un petit aperçu du prototype, avec l'affichage du régime moteur en direct :

Posté par Mathieu LESNIAK à 21:03 dans la catégorie Arduino
Tag(s) associé(s) :
Partager cet article :
nico
nico
31/05/2014 23:08:20
Super sympa !
J’espère la suite très prochainement.
Bravo pour le hack.
Grégory MARTIN
Grégory MARTIN
04/10/2017 15:58:06
Bonjour Mathieu et félicitations pour cet article.

Je recherchais justement des infos sur la façon d'utiliser un arduino directement avec l'un de ces petit dongle bluetooth OBD!

Je n'ai pas trouvé la partie 2 de ton post sur ce mod.

Ici nous avons toute la partie initialisation, et je recherche un exemple dans le genre de ta vidéo: ou l'on récupère la valeur rpm.

As-tu un lien à me conseiller?
Merci

Ajouter un commentaire




Les champs obligatoires sont marqués d'une *

A table !



Derniers commentaires