Systeme de monitoring temps reel pour vehicule.

Apercu du systeme:

  • Processeur PIC, qui controlle les operations et l'affichage
  • Puce ELM 327, qui interroge le processeur du vehicule
  • Paneau d'affichage et de commande

Circuit

Fonctionnalitées:

Les fabricants de véhicules, depuis plusieurs années (1996?), ont l'obligation de rendre accessible l'ordinateur de bord des véhicules afin que l'on puisse extraire certaines informations, de plusieurs types. Point de vue loi, c'est certainement l'état du système en rapport avec les émissions de gaz qui intéresse le plus, on s'en doute. Mais par chance, il y a beaucoup plus que cette branche de disponible!

La norme de communication est codée OBD-2, le standard obligatoire, et un port de connection est disponible dans tous les véhicules pour y brancher un appareil de lecture. (Souvent près du levier pour ouvrir le capot, coté conducteur). Plusieurs protocoles existes, ça, fallait s'y attendre, et cela change d'une marque a l'autre. Toyota et Volvo par exemple, utilisent majoritairement le protocole ISO.

OBD connector

Donc, il y a de l'information cachée la dessous! humm... il va falloir l'extraire =)

La raison principale pour laquelle les usagés de véhicules se procurent un lecteur OBD-2, c'est certainement pour connaitre les fameux codes d'erreurs qui allument des lumières dans le *dash*. Les garages ont évidement des systèmes beaucoup plus évolués que les petits lecteurs a 70$ de chez Canadian tire, mais parfois il peut être intéressant de trouver soit même la cause d'un problème...n'est-ce pas.

Autre raison moins courante mais qui gagnera certainement avec le temps, c'est d'avoir un aperçu des performances du véhicule en temps réel, soit, la consomation pour les consciencieux, ou les PERFORMANCEs pour les autres.
Vitesse, RPM, temperature, Voltage, MAF...sont des parametres accessible durant l'utilisation du véhicule en tout temps.

LCD

Cela peut évidement exciter un certain genre de personnes, des plans pour pas dormir c'est sûr!

Combien je consomme en roulant a 100, 90, 120, avec la remorque, pas de remorque, avec les pneus d'hivers, en accélerant doucement, comme un cave?

Un simple lecteur OBD-2 ne permettra pas ce genre d'incursion, mais un heureux mélange de composantes électroniques pourrait très bien y arriver!

 

Tout d'abord, parler avec le véhicule: chose simple pour un ELM 327.

C'est a une compagnie basée en Ontario que l'on doit cette petite puce fort sympathique, qui s'occupera de discuter le langague que le véhicule connait, pour en extraire le Jus! La ELM327 supporte pratiquement tous les protocoles existant des véhicules de grande marque. Ils fournissent des schémas de circuit et amplement d'information sur tous leur produits.

ELM

 

 

Ensuite, il faut bien assimiler les données, sortir quelques formules dignes d'Einstein et puis s'occuper de les montrer a qui de droit. Là, le PIC entre en scène!
En fait, le PIC #2 doit on dire car le ELM est aussi un PIC de la compagnie Microchip.

Pic12F683

Voici un PIC 12F683, en compagnie d'un grain de riz.
(Après la photo le PIC a sauté sur le grain!!!)

 

Finalement, il faut bien programmer un peu de logique pour que tout s'opère, et c'est en PicBasic que nous nous amuseront ici.

 

1ere etape: Le circuit du ELM

Comme la compagnie fournit tous les schémas et les composantes a utiliser, cette étape est une simple operation de placement et de soudage. A noter que certains ports non utilisés du ELM devraient etre connectés, soit au ground ou a la source, pour un bon fonctionnement. voir document AN02 - ELM327http://www.elmelectronics.com/appnotes.html

Pour ma part, j'ai choisit d'utiliser une puce MAX232 a la sortie des ports RX/TX du ELM, question de fiabilité pour des transferts a plus grande distance. 25 pieds par l'intermédiaire d'un cable réseau CAT5 est de l'ordre du possible, même a des vitesses de 115K baud!

Une fois le circuit complet, on peut valider rapidement son fonctionnement en reliant les ports de communication au port seriel d'un ordinateur. Notez que le ELM327 peut etre par défaut a 9600baud ou a 38400, selon l'etat de la PIN 6. Il est suggérer de rendre cette pin modifiable soit par un jumper ou un interrupteur, question de faciliter le debuging.

Le plus classique des interfaces pour communiquer par port serie dans Windows est surement Hyperterminal, mais c'est un outil tres vieu et étrange a configurer. Plus élégant et fonctionnel, le petit programme SerialCom.exe(qui vient gratuitement avec MicroCode studio) devrait vous faire oublier les cauchemars de Hyperterm..

Si tout est branché correctement, le ELM fera clignoter ces 4 LED en cascade au départ, et ensuite attendra les instructions. Il envoit aussi un message d'identification sur le port série donc votre ordinateur devrait recevoir quelque chose. Si vous n'avez pas vu le message, essayer d'envoyer la commande ATZ, qui devrait créer un reset complet du ELM et donc ré-émettre le message de départ. A noter que le ELM execute votre commande quand le caractere (13)(Carriage return) est reçu, donc le programme que vous utiliser pour communiquer doit etre configurer de la sorte. (SerialCom.exe l'est par defaut).

 

Une fois la communication établie entre votre PC et le ELM, on peut passer a la plus exitante operation soit parler au ECU de votre voiture. Cela requiert évidement un cable OBD-2 branché entre votre véhicule et le ELM, ainsi que d'avoir la clef en position ON. Un ordinateur portable sera tres pratique a ce point.

Le ELM etablie une connection au ECU a la premiere commande qui le requiert, donc un envois du genre 03 (codes d'erreurs) peut vous permettre de confirmer si la connection est valide. Le protocol sera choisi automatiquement si vous n'avez pas rien changer dans les reglages du ELM. A noter que la premiere commande peut prendre 3 secondes avant de retourner une reponse, car certains protocol ont une procedure d'initialisation.

Donc a ce point, si vous êtes connectés, la commande 03 vous retournera une réponse du type >43 00 00 00 00 00 de la part du ELM. Alleluhia!
Sinon, vous verez le message SEARCHING... UNABLE to Connect, ce qui indique qu'aucun protocol n'est accessible. C'est peut-etre l'heure d'aller vous coucher :)

 

Chose certe amusante est de tester son ELM avec un logiciel d'analyse OBD, qui sont disponible souvent en version d'essais. Vous pourrez ainsi voir une foule d'information selon votre type de voiture.

 

Ensuite, vient possiblement l'étape de créer un systeme autonome(independant d'un ordinateur), qui pourra être en permanence dans le véhicule et s'exprimer par un petit écran LCD.

C'est ici qu'on entre dans le monde des micropuces et l'electronique programmable. Sachant que notre circuit ELM fonctionne, on peut d'abord essayer d'automatiser quelques commandes et valider les reponses recues.

Pour ma part, le premier circuit realisé est sur un tres minimaliste PIC 12F683. Il ne possede pas de moyen de communication très évolués, mais je l'apprécie pour sa simpicité et la vitesse a laquelle on peut le transférer entre un circuit et le programmeur. Pour la communication avec le ELM327, 2 pins sont nécessaires soit Rx/Tx. Ensuite une autre pin doit servir a l'affichage et puis pour le reste c'est selon l'inspiration. Une LED temoins est touours appréciable aux débuts, simplement pour savoir si le processeur tourne rond.

schémas et programme a venir...

Le seul point embêtant du 12F683 est que par manque de fonctions avancées en communication sérielle, les erreurs de connections risquent de bloquer le bon fonctionnement du programme...mais en temps normal cela ne pose pas de probleme.

 

Afin de tester la communication PIC-ELM, il faut nécessairement etre branché au véhicule et dans certains cas même être en déplacement(vitesse, rpm..). Cela n'étant pas toujours pratique, l'idée de créer un logiciel qui simule les reponses d'un ELM m'est passée par la tête...et quelques jours plus tards, c'était enfin réalisé.

Un petit programme (pour PC)qui communique par port sériel peut-etre directement relié a un microprocesseurs et répond a quelques questions usuelles tel que le ferait le ELM327: rpm, vitesse, MAF, voltage, liquide refroidisseur. Le seul point critique a surveiller dans certains cas est la vitesse de réponse, qui se joue souvent en millisecondes, et qui n'est pas simulée de façon exacte...éventuellement je pourrai améliorer la chose si la paresse s'enfuit.

Les connections nécessaires pour la communication sont un port serie sur un PC et un petit circuit avec un MAX232 dont les sorties se branchent vers votre microprosseur.

On the right, a small utility software that was created to simulate answers of the ELM327 on the serial port of a PC, providing a quick way to validate the programming of a microprocessor. Standard requests have been implemented: speed, dtc, coolant, rpm, and also the upgradeable speed function is in there(ie: request as AT BRD 23...).

Make sure to set the initial baud rate correctly(ELM and PC port at same speed). You should use a MAX232 to connect the serial port to your microprocessor.

Téléchargement / Download
Nouvelle version 2, Juillet 2010
Meilleure gestion du changement de vitesse avec la commande
AT BRD xx, et aussi quelques ajustement. Aussi maintenant compatible avec les Windows Themes(Aero W7)

   

Un peu de code / Some Code (for picbasic)

Sur un PIC tel le 12f683, n'ayant pas de fonction dédié à la communication série en hardware, il faut s'en remettre à la méthode logicielle. Cela fonctionne, passablement bien même à haute vitesse, sauf que la gestion des erreurs de signal risque de bloquer le programme. Il est rare de rencontrer une erreur à vrai dire, et on peut toujours faire un reset du circuit pour remettre entre fonction..

Alors voici les débuts. Paramètres, config, variables

 

'Program for ELM327 chip communication
'PIC 12F683, flipperdesign 2009
;PIC12F683 8-pin PIC at 20Mhz.
; check your Configs / Fuses for the chip
DEFINE DEBUG_REG GPIO
DEFINE DEBUG_BIT 0 ' GPIO.0
DEFINE DEBUG_BAUD 115200 ' ok pour PIC to ELM
DEFINE DEBUG_MODE 0 ' 1 = inverted, 0 = true
DEFINE DEBUGIN_REG GPIO
DEFINE DEBUGIN_BIT 1 ' GPIO.1
DEFINE DEBUGIN_MODE 0 ' 1 = inverted, 0 = true
DEFINE ADC_BITS 10 ' Set number of bits in result
DEFINE ADC_CLOCK 3 ' Set clock source (3=rc)
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in uS

'-------------------------------------------------------------------
' PIC12F683 pins connection
'-------------------------------------------------------------------
' PIN NAME USE/CONNECTION
' 1 Vdd +5VDC
' 2 GPIO.5 XT
' 3 GPIO.4 XT
' 4 GPIO.3 N/C
' 5 GPIO.2 LCDport, 9600 TRUE MODE
' 6 GPIO.1 DEBUG RX, line for received data from ELM
' 7 GPIO.0 DEBUG TX, line for sending command to ELM
' 8 VSS GROUND
'-------------------------------------------------------------------
Include "modedefs.bas" ' Serial port routines

DEFINE OSC 20 ; Xtal a 20mhz, required for highspeed communication mode 115kbaud

ANSEL = %00001000 'Set A/D, A/D clock = Frc
TRISIO = %00001010 'input output
CMCON0 = 7 'Analog Comparators OFF
ADCON0 = %00000001 'Analog converter ON (test)
ADCON0.7=1 'Justify conversion(ADC stuff)

Vchar var Byte
return_code var Byte
rtid_code var Byte
TmpWVal var word
CoolantTemp var byte
VehSpeed var byte
MAF var word
TmpBit_high var byte
TmpBit_low var byte
switchbit var bit
MPG var byte
LitreParCent var byte
LitrePC_Dec var byte
MoyLpCk var byte[5]
MoyIndex var byte
gotcharr var byte
StrList var byte[14]
Filltheblanks var bit
slowswitch var byte
BlankChrCk var byte
ExpStartChr var byte

DebugTXport var GPIO.0
OUTPUT DebugTXport 'debug TX, TRUE MODE

INPUT GPIO.1 'debug RX, TRUE MODE

LCDport var GPIO.2
OUTPUT LCDport 'Serial debug TX, Inverted MODE

slowswitch=0

 


Et ensuite, la partie logique
Note: Ce code assume un affichage sur un LCD a 4 lignes x 20 caractères.

Pause 1500 ; Timeout for LCD to boot up
SEROUT LCDport, T9600, [$FE,1] ; Reset LCD display
Pause 50

ReInit:
StrLIst[0]=0
StrLIst[1]=0
StrLIst[2]=0
serout LCDport, T9600, [$14,$B3] ; backlight command high, if your LCD have that
SEROUT LCDport, T9600, [$FE,$80, "-FLIPPERDESIGN OBD2-" ]
pause 300

ConnectELM:
;INITtheCHIP, try connect high speed
MoyIndex=0 ;used for ECU connect try count at start

SEROUT LCDport, T9600, [$FE,$C0, "..Test HighSpeed " ]
pause 100
SEROUT DebugTXport, T9600, [13]
pause 5
;Presets for Sub rxBunch of char!
return_code=255
ExpStartChr="E"
;Presets for Sub rxBunch of char!

SEROUT DebugTXport, T9600, ["AT BRD 23",13] ; Attempt to init communication at 115200baud(23)
; This is a function supported by the ELM to speed up transfert of information.
; It is not necessary, but I was interrested in testing that feature..
High DebugTXport ; make port idle high
GoSub RxBunchOfChar ; go into subroutine to read buffered data

if (StrList[1]=76) and (StrList[2]=77) then
DEBUG 13
else
SEROUT LCDport, T9600, [$FE,$94," NG(",#gotcharr,")"]
GoSub PrintRxChar
PAUSE 300
gosub linefeeddelay
DEBUG "ATZ",13
High DebugTXport ; make port idle high
GoSub RxBunchOfChar

if (StrList[1]=76) and (StrList[2]=77) then
DEBUG 13
SEROUT LCDport, T9600, [$FE,$94, "...on retry!" ]
else
SEROUT LCDport, T9600, [$FE,$94,"NNG(",#gotcharr,")",#StrLIst[0],"/",#StrLIst[1],"/",#StrLIst[2]," "]
goto ConnectELM
endif
endif

;SEROUT LCDport, T9600, [$FE,$C0, "Link Speed upgraded!" ] ; BLANKED TO SAVE CODE
;Pause 500 ; BLANKED TO SAVE CODE

SEROUT LCDport, T9600, [$FE,$C0, " Link ok..." ]
TmpBit_high=8
GoSub NumbBlank

DEBUG 13
pause 5
DEBUG "ATZ",13 ; re-trigger to init, if garbage was on the line a start.
High DebugTXport ; make port idle high

DEBUGIN [WAIT("ELM327 v1."),DEC TmpBit_high, TmpBit_low]
DEBUGIN [WAIT(10)];

pause 15
pause 300
SEROUT LCDport, T9600, [$FE,$80, "Chip: ELM327v1.", #TmpBit_high, TmpBit_low+84, " "]
pause 300

DEBUG "ATE0",13 ; set ECHO OFF
pause 15

Gosub ShowBattVoltage
pause 500

pause 15

SEROUT LCDport, T9600, [$FE,$D4]
TmpBit_high=20
GoSub NumbBlank

TryConnectECU:
SEROUT LCDport, T9600, [$FE,$D4, " >ECU link..", #MoyIndex ]

pause 200

;Presets for Sub rxBunch of char!
ExpStartChr="4"
return_code=255

gosub linefeeddelay
DEBUG "03",13 ; Send request to trigger connection to car protocol
High DebugTXport ; make port idle high

;DEBUGIN [HEX2 return_code, WAIT(13), WAIT(10)] ; wait for code and linefeed + carriage return

GoSub RxBunchOfChar

; If no code is returned, it would do SEARCHING...meaning there is no connection to the car

if (StrLIst[0]=52) and (StrLIst[1]=51) then ; Check si on a bien le code 43 (52/51dec)
SEROUT LCDport, T9600, [$FE,$D4, "OK! " ]
pause 600
SEROUT LCDport, T9600, [$FE,$D4," -Pr: "]
;Presets for Sub rxBunch of char!
ExpStartChr=0
return_code=255
DEBUG "ATDP",13 ; Get Protocol TEXT
High DebugTXport ; make port idle high
GoSub RxBunchOfChar
gotcharr=13
GoSub PrintRxChar
pause 500
else
SEROUT LCDport, T9600, [$FE,$D4," no link? #",#StrLIst[0],"/",#StrLIst[1]," "]
Pause 800
MoyIndex=MoyIndex+1
if MoyIndex>3 then
Goto ReInit
else
Goto TryConnectECU
endif
endif
pause 15

mainloop:

; Read RPM
gosub linefeeddelay
DEBUG "010C",13 ; ASk for RPM data
High DebugTXport ; make port idle high

DEBUGIN [HEX2 return_code, HEX2 rtid_code, HEX2 TmpBit_High, HEX2 TmpBit_low, WAIT(13), WAIT(10)]
TmpWVal = (TmpBit_High * 256 + TmpBit_low) / 4
if rtid_code=$0C then
SEROUT LCDport, T9600, [$FE,$80, #TmpWVal, "rpm " ]
else
SEROUT LCDport, T9600, [$FE,$80, "RPM:", "NoDat " ]
endif

;toggle ControlLED

; Read SPEED
gosub linefeeddelay
DEBUG "010D",13 ; ASk for SPEED data
High DebugTXport ; make port idle high
DEBUGIN [HEX2 return_code, HEX2 rtid_code, HEX2 VehSpeed, WAIT(13), WAIT(10)]
if rtid_code=$0D then
if VehSpeed<10 then
SEROUT LCDport, T9600, [" V ", #VehSpeed, "Km/h" ]
else
SEROUT LCDport, T9600, [" V ", #VehSpeed, "Km/h" ]
Endif
endif
BlankChrCk=TmpWVal/30
Gosub BlankCharChk
BlankChrCk=VehSpeed
Gosub BlankCharChk

;toggle ControlLED

; Read MASS Air Flow
gosub linefeeddelay
DEBUG "0110",13 ; ASk for MAF data and calc MPG / LpC
High DebugTXport ; make port idle high

DEBUGIN [HEX2 return_code, HEX2 rtid_code, HEX2 TmpBit_High, HEX2 TmpBit_low, WAIT(13), WAIT(10)]

MAF = TmpBit_High*256+TmpBit_low ; a diviser par 100 plus tards
MPG = ( (237*VehSpeed) /MAF)*3 ; Test en divisan par 3 et re-multipliant plus tards, pour bas buster le 16bit

TmpWVal = 23518/(MPG*10) ; Value is 10times bigger, to save/keep 1 digit for display later

gosub ShowMAF
pause 5
MoyIndex=MoyIndex+1
if moyIndex>4 then moyindex=0
MoyLpCk[MoyIndex]=TmpWVal;
TmpWVal=0
for return_code=0 to 4
TmpWVal= TmpWVal+MoyLpCk[return_code]
next return_code
TmpBit_low=(TmpWVal/5)
LitrePC_Dec=TmpBit_low DIG 0
LitreParCent = (TmpBit_low - LitrePC_Dec)/10 ; maintenant on redivise pour avoir le bon chiffre

if VehSpeed>0 then
SEROUT LCDport, T9600, [$FE,$94, "MPG:", #MPG, " - ", #LitreParCent,".",#LitrePC_Dec,"LpC " ]
endif
BlankChrCk=MPG/10 ; make it to the scale of the blank check (<100, <10)
Gosub BlankCharChk
BlankChrCk=LitreParCent*10 ; make it to the scale of the blank check (<100, <10)
Gosub BlankCharChk

pause 300
;toggle ControlLED

if switchbit=0 then
gosub ShowBattVoltage
else
gosub ShowCoolantTemp
endif

;toggle ControlLED

slowswitch=slowswitch+1

if slowswitch>3 then
switchbit=switchbit^1
slowswitch=0
endif

;switchbit=switchbit^1

if switchbit=0 then
Vchar="-"
else
Vchar="*"
endif

goto mainloop ; do it all again

; **** SUB-ROUTINE **** poutine

linefeeddelay:
DEBUG 10 ; send linefeed
pause 10
return

RxBunchOfChar:
if ExpStartChr=0 then
Gotcharr=0 ;so we start at 0, no pre-buffer
else
While StrList[0]<>ExpStartChr ; WAIT TILL VALID ASCII CHAR GETS in
DEBUGIN [ StrList[0] ]
if (StrList[0]=10) then
Gotcharr=0
return
endif
WEND
Gotcharr=1 ;Char 0 will be buffered by the first WHILE, so we start at 1
endif
While return_code<>13 ; this should be the end chr sent by the ELM chip
DEBUGIN [return_code] ; wait for code and linefeed
if gotcharr<14 then StrList[gotcharr]=return_code
gotcharr=gotcharr+1
WEND
DEBUGIN [WAIT(10)] ; wait linefeed, to finish receiving (HELP THE PIC a LOT!!)
return

PrintRxChar:
Filltheblanks=0
for return_code = 0 to gotcharr
if StrList[return_code]=13 then Filltheblanks=1
if Filltheblanks=1 then
SEROUT LCDport, T9600, [" "]
else
SEROUT LCDport, T9600, [StrList[return_code]]
endif
next return_code
return

NumbBlank:
for TmpBit_low=1 to TmpBit_high
SEROUT LCDport, T9600, [" " ]
next TmpBit_low
RETURN

ShowMAF:
if rtid_code=$10 then
SEROUT LCDport, T9600, [$FE,$C0, "MAF:", #MAF ]
TmpBit_high=12
GoSub NumbBlank
else
SEROUT LCDport, T9600, [$FE,$C0, "MAF: NDat"]
TmpBit_high=10
GoSub NumbBlank
SEROUT LCDport, T9600, [ Vchar ]
endif
RETURN

ShowBattVoltage: ;READ BATT VOLTAGE
SEROUT LCDport, T9600, [$FE,$D4," *Voltage: "]
;Presets for Sub rxBunch of char!
return_code=255
ExpStartChr=0
;Presets for Sub rxBunch of char!
gosub linefeeddelay
DEBUG "ATRV",13 ; read voltage for a quick test, ex[12.5V]
High DebugTXport ; make port idle high
GoSub RxBunchOfChar
if gotcharr=0 then
SEROUT LCDport, T9600, ["ND"]
else
gotcharr=7
GoSub PrintRxChar
endif

return

ShowCoolantTemp: ; Read Coolant TEMP
gosub linefeeddelay
DEBUG "0105",13 ; Ask for temp Data
High DebugTXport ; make port idle high

DEBUGIN [HEX2 return_code, HEX2 rtid_code, HEX2 CoolantTemp, WAIT(13), WAIT(10)]
SEROUT LCDport, T9600, [$FE,$D4," -Coolant:"]
if CoolantTemp<40 then
CoolantTemp=CoolantTemp-40
SEROUT LCDport, T9600, ["-",#CoolantTemp,"oC"]
TmpBit_high=3
GoSub NumbBlank
else
CoolantTemp=CoolantTemp-40
SEROUT LCDport, T9600, [" ",#CoolantTemp,"oC"]
TmpBit_high=4
GoSub NumbBlank
endif
BlankChrCk=CoolantTemp
Gosub BlankCharChk
return

BlankCharChk:
if BlankChrCk<100 then SEROUT LCDport, T9600, [" "] ;Clear 1 more End Char
if BlankChrCk<10 then SEROUT LCDport, T9600, [" "] ;Clear 1 more End Char

RETURN

Ce code remplit pratiquement au complet la mémoire d'un 12F683...

Avant de connecter le PIC au ELM, il est bon de s'assurer que vous puissiez <parler> au ELM
simplement en le connectant à votre ordinateur (en passant par un MAX232) sur le port série.
Ensuite à l'aide d'un programme terminal vous envoyez des commandes et vous devriez être
au minimum en mesure de lire le message d'initialisation du ELM. ("ELM327 v1.3a").

 

Fonctions ODB.

Après avoir fait fonctionner correctement la communication, il est possible d'ajouter quelques fonctionalitées intéressantes. Le code ci-haut permet un calcul simpliste de la consommation en temps réel, qui est relativement précis sauf que très dynamique(voir hyperactif) sur la route. Une moyenne de valeur sera certainement intéressante pour être en mesure d'apprécier cette fonction. À noté que ce calcul utilise la vitesse et le Mass Air flow, et que dans certaines conditions(surtout sur l'air d'allé), les calculs deviennent étranges. Le problème vient du fait que la consommation est très faible(moteur idle) et la vitesse très grande, donc vous êtes temporairement très performant. Dans ce cas le calcul dépasse les valeurs maximales pour une variable BYTE en picbasic, soit 256 comme pour la valeur du MPG(mile per gallon). Il serait souhaitable de modifier le code pour tenir compte de cette situation, soit en utilisant une variable WORD(655xx) ou en limitant l'affichage si on détecte une trop grande valeur.

MAF? Mass air flow, donnée plutôt peu significative, que je n'ai pas pris le temps de convertir dans mon programme, mais qui peut facilement etre transformée en plus utile. Multipliez la par 0.08 et des poussièes pour obtenir le nombre de gallons à l'heure de consommation. Pour les amateurs de métrique on remet ca en litre et tout le monde est heureux. Petite note aussi que la valeur du MAF dans cet exemple doit etre divisee par 100 a partir de la lecture brute, mais pour des raisons de precision on le fait le plus tards possible dans les equations!

Sur un PIC plus volumineux(ex 16F648), on peut penser a ajouter un decodage sommaire des code d'erreur ODB, qui se lisent en demandant ¨03¨au ELM. Les codes sont organisé en pair et le guide du ELM explique assez bien comment les décoder. Je fais normalement la lecture des codes au démarrage de mon système.

  • pic16f

Autre ajout de marque, une alerte en cas de haute température. Pour ma part l'huile se maintient presque en permanence a 85deg C, alors je suppose que 90 serait anormale et un avis serait une bonne ation préventive.

Pour le reste, RPM, vitesse, voltage, c'est plutôt du froufrou mais si vous avez un grand écran, aussi bien le remplir.

 

 


Retour aux projets speciaux

PIC picbasic ELM 327 v1.3a system system mileage calculation calculs consommation mpg litre cent kilometre rpm vitesse milles par heure kilometre heure temperature fluide coolant temp programming programmation interface OBD2 OBD-2 ECU link 16F628a 12F683 ELM simulator PC windows ISO protocol CAN J LCD display information average moyenne realtime temps reel monitoring performance acceleration speed voltage 12V 14V simulator elm no connection required simulateur elm 327 permet de tester sans connection