Publié le 19 décembre 2017 - par

Ordinateur de Bord pour Voiture de Collection avec un Raspberry Pi

Jonathan est passionné de (vieilles) voitures – on dit « de collection » – mais aussi électronicien. Pourquoi ne pas ajouter un ordinateur de bord à un véhicule ancien ? Avec un Raspberry Pi, bien sûr 🙂 … Je lui laisse volontiers la parole.

Ordinateur de bord à base de Raspberry Pi pour voitures de collection

Présentation et contraintes

Quand on est électronicien de métier, et qu’on aime bricoler sa voiture de collection le week-end, on arrive parfois à faire des trucs sympas… pour le challenge.

Les voitures modernes sont gavées d’électronique, et ont en particulier un ordinateur de bord qui supervise tout plein de capteurs compliqués. Et pourquoi ne pas en réaliser un pour voiture de collection ? Les puristes de la collection vont hurler, mais je ne suis pas un puriste. Cependant, j’éviterai les modifications irréversibles de la voiture.

Les contraintes sont nombreuses, surtout dans une vieille voiture, on a quelques contraintes sévères. Il n’y a aucun appareil électronique dans ce genre de véhicule, c’est une conception qui remonte à l’époque des lampes. Autrement dit, le 12 V peut faire n’importe quoi, il peut bouger entre 7~8 V quand on démarre et 18 V, voire plus, sur des à-coups lors de certaines transitions. Côté mécanique, Le moteur vibre, c’est un faible mot pour évoquer la joie de rouler avec ces anciennes voitures. ça tape, ça secoue. Ces contraintes mécaniques entraînent un choix de connecteurs robuste (pas des barrettes comme les cartes de démo qu’on trouve à pas cher dans le commerce). La configuration se fait avec des gouttes de soudures, et non pas des cavaliers.

Architecture

 

 

L’architecture du projet ordinateur de bord pour voiture de collection, s’appuie sur un Raspberry Pi qui pilote des « modules » sur Bus CAN.

Cliquer pour agrandir

Le synoptique détaillé, visible ci-dessus est disponible en ligne : rpi_overview.pdf.

Pour cela, j’ai besoin de cartes spécifiques en plus du Raspberry Pi :

  • Les cartes « Modules CAN » sur bus CAN que j’installe dans la voiture de collection, et qui peuvent être loin du Pi.
  • La carte interface Pi qui sera sur le port GPIO du Pi et qui embarque tout ce qui manque au pi pour être embarqué dans une voiture.

Carte Mezzanine

La page de la carte Mezzanine

Les fonctions

Compte tenu du contexte embarqué et des manques du Raspberry Pi, il fallait que le Raspberry Pi soit doté des fonctions suivantes :

  • Une alimentation 12V – 5V robuste pour les conditions de l’embarqué
  • Une gestion du On/Off de la carte Raspberry Pi et de ses périphériques : Coupure d’alimentation automatique pour ne pas vider la batterie, coupure d’alimentation des cartes distantes.
  • Une horloge sauvegardée (RTC)
  • Un accès au bus CAN pour piloter les modules d’E/S.
  • Une possibilité de générer des alarmes sonores.
  • Connectique renforcée : Pas de connexion vers l’extérieur avec des barrettes, que du bornier à visser à cage rectangulaire type Phoenix. Les connecteurs sont les composants les plus chers du projet !

Chaque fonction existe indépendamment, sauf la gestion d’alimentation qui en général se contente d’une seule entrée sur le +12V après contact (+12APC). Je voulais que mon ordinateur de bord soit alimenté directement sur la batterie (après le fusible accessoire) mais démarre avec le +12APC, et que les modules CAN démarrent avec le Raspberry Pi.

Ci-dessus : prototypage de la carte Mezzanine

Pourquoi développer une carte ?

Au départ, je ne voulais pas développer cette carte. Mais j’ai été étonné de ne pas trouver de carte réunissant ces fonctions. Je ne vois pas comment embarquer un Raspberry Pi sans lui adjoindre au moins une RTC, une alimentation et une gestion d’alimentation sur la même carte.

Chaque fonction existe séparément, sauf l’auto-maintien. Le développement était donc rapide. N’étant pas un spécialiste du Linux, j’ai bien pris soin de choisir des composants pour lesquels les drivers existent déjà !

L’installation logicielle n’a rien de particulier. Il faut configurer le Raspberry Pi (Raspbian Jessie dans mon cas) pour pouvoir piloter le Bus CAN avec un MCP2115, et l’horloge RTC avec le DS3231. Rien d’insurmontable. Pour le buzzer, il est piloté par une broche du GPIO, donc c’est facile à utiliser.

L’auto-maintien de l’alimentation

Reste l’auto-maintien de l’alimentation. Lorsqu’on tourne la clé de la voiture (ou  qu’on appuie sur le bouton), le Raspberry Pi démarre. L’auto-maintien utilise le signal TXD de l’UART qui est au repos à à 1. Lorsque la CPU du Raspberry Pi s’éteint (de manière logicielle), le signal TXD tombe à 0. J’ai donc utilisé ce signal avec une temporisation de 3 secondes environ pour maintenir l’alimentation de mon Raspberry Pi et des modules CAN.

L’alimentation est basée sur un LM5970D, elle peut délivrer 1A continu (en fait plutôt 1,3A…), avec des pics bien au-delà, et j’ai ajouté une bonne capacité derrière !

La tension d’entrée doit être entre 8 et 28V, de quoi couvrir les fluctuations des alimentations des vieilles voitures ! J’ai bien sûr ajouté quelques protections avec un fusible et une diode Transil à 30V, on ne sait jamais…

Carte Acquisition

La page de la carte Acquisition

La carte d’acquisition

Dans une voiture moderne on peut récupérer énormément d’informations en se branchant au bus CAN de la voiture (connecteur OBD). Certaines cartes du commerce pour le Raspberry Pi existent d’ailleurs dans ce sens. Ici, la voiture date de 1973, donc le bus CAN, comment dire, il faudra le tirer moi-même et installer les capteurs moi-même ! Le choix du bus CAN se fait pour les mêmes raisons qu’en vrai : robuste, facile et pas cher !

Je crée donc une carte d’acquisition avec quelques sorties aussi. Il y a 2 approches : soit faire plusieurs petites cartes avec peu d’entrées-sorties, soit faire une plus grande carte ou j’utilise au maximum les possibilités du processeur que je mets en œuvre. Comme mon prototype était réalisé avec un unique module de 32 entrées sorties, je repars sur une carte généreusement pourvue. Ça permet aussi d’optimiser les coûts (une seul alim, un seul micro, etc…)

Pour le micro justement, j’évite les PIC et les ATMEGA … ils commencent à avoir la barbe bien blanche quand même. Je me base sur le STM32, qui est un micro pas cher, puissant, gavé de périphériques, qui ne consomme (presque) rien, bref vraiment destiné à l’embarqué. La version STM32F103 basé sur un Cortex M3 dispose du CAN intégré, et est suffisamment puissant pour mon application.

Caractéristiques de la carte

Les caractéristiques générales de la carte sont :

  • L’alimentation 12V – 3,3V robuste est la même que celle de la carte Mezzanine… mais en 3,3V
  • Un accès au bus CAN.
  • Connecteur UART pour des petites manips et pour le debug.
  • Nombreux points d’accès au GND (Masse) et au 12V sur les connecteurs d’entrées-sorties.
  • Connectique renforcée. Pas de connexion vers l’extérieur avec des barrettes (sauf l’UART), que du bornier à visser à cage rectangulaire type Phoenix. Encore une fois : Les connecteurs sont les composants les plus chers du projet !
  • Toutes les entrées sont filtrées.

Un peu de filtrage… 😉

Les entrées/sorties

Côté Entrées-Sorties :

  • 4 entrées compteurs / fréquencemètres avec anti-rebond logiciel paramétrable. Une entrée dispose d’un filtre passe-bas du 2nd ordre à 234 Hz (soit 7000 tours/min sur un 4 cylindres) suivi d’un réjecteur de composante continue. Elle est prévue pour recevoir le signal très bruité du rupteur.
  • 4 entrées tout ou rien (0/1)
  • 6 entrées analogiques 12 bits, configurées pour mesurer jusqu’à 18,8 V, soit une précision de 4,5 mV.
  • 4 sorties PWM 0,3A jusqu’à 5000 Hz, qui permet de piloter par exemple un servomoteur, une LED, etc…
  • 4 sorties tout ou rien autorisant 2,5 A par sortie…

Je ne détaille pas le programme embarqué. L’ADC fonctionne en DMA, les compteurs et le protocole de communication sur Interruption.
Lorsque la carte est sur le bus CAN, elle occupe 16 adresses à partir de son adresse de base. 7 « gouttes » de configuration permettent de brancher jusqu’à 128 cartes… de quoi voir venir.

Je suis passé de ça…

…à ça, et ça en fait plus !
(oui bon le câblage n’est pas fini !)

Application Python

Maintenant qu’on sait à quoi ressemble l’électronique, on peut s’atteler au programme. Pour le choix du langage, c’est surtout le besoin d’efficacité qui compte. Donc python.

J’ai pensé le programme comme étant personnalisable, il y a donc beaucoup de fichiers de configuration, des capteurs à l’interface graphique. Il est possible de rajouter un capteur ou bouton en quelques minutes. L’appli est architecturée autour des variables de la voiture (à surveiller ou à asservir)

Finalement, le programme fait environ 2000 lignes de code en Python, ce n’est pas si énorme 😉

Capteurs

Le choix des capteurs est aussi très contraint par le milieu du vieux tas de ferraille.

  • Débitmètre : un débitmètre qui résiste à l’essence, avec une résolution de 8000 impulsion par litre, soit 8 impulsions par ml… l’ordre de grandeur de la consommation est 1 ml/seconde.
  • Compte-tours : un filtre passe bas du second ordre suivi d’un passe haut du premier ordre sur le signal du rupteur qui est très bruité avec des pics très hauts (~200 V)
  • Tachymètre : un ILS de compteur de vélo, pas cher et efficace.
  • Tension batterie : un fil, le pont diviseur est sur la carte acquisition.
  • Tension de la jauge : idem. La conversion en litres est purement logicielle.
  • Capteur de température moteur : une CTN dont j’ai implémenté la courbe dans le logiciel.
  • Capteur de température extérieure : idem.
  • Entrée frein de parking… un simple fil
  • Entrée veilleuses allumées… un simple fil aussi.

ci-dessus : débitmètre

Ci-dessus : tachymètre sur la sortie de boite de vitesse.

Conclusion

Et en plus, ça marche. Les alarmes m’évitent des soucis (genre vider la batterie pour cause de veilleuses allumées), l’affichage de la conso me permet d’optimiser ma conduite, etc. Le gain ne s’est pas fait attendre !

Côté communication, c’est assez amusant de voir les gens bouche bée devant l’affichage des variables. James Bond n’a qu’à bien se tenir !

Comme tout projet abouti doit être partagé, je me suis dit que certains auront la même envie dans leur tas de rouille. Et voici donc un article pour partager mon savoir faire. N’hésitez pas à me contacter si vous avez des questions ou une envie d’électronique compliquée dans un milieu merdique – pardon, on dit contraint !

Suivez moi sur la page facebook – faut être moderne même si on a une voiture de collection !

Ah oui ! L’ordinateur doit bientôt être monté dans une Lotus de 74 !

Adresse du site : http://www.zehnne.fr/?./electronic/raspberry/index.php

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. Auteur de plusieurs livres sur le Raspberry Pi publiés aux Editions ENI.

15 réflexions au sujet de « Ordinateur de Bord pour Voiture de Collection avec un Raspberry Pi »

  1. Yann

    Implémenter un « BusCAN » via la Framboise sur du « sasseféplu » excellent… Bravo !
    \o/
    Merci François pour ces articles bien sympa avant la « trêves des confiseurs »

    Bonnes fêtes de fin d’année,

    Cdlt

    Répondre
  2. gUI

    Enorme !!!

    Comme tu le dis, le choix des capteurs est primordial. Tu pourrais nous donner les références utilisées ? J’ai une moto à carbus, ça pourrait m’amuser 😉

    Répondre
  3. CDBI30

    Après la domotique précédente, la Framboise part en voiture !
    2 réalisations sensas….Quel boulot
    Finalement, on n’est limité que par l’imagination.

    Merçi François et Bonnes Fêtes à tous

    Répondre
  4. Damien

    Bonjour,
    Je kiff le projet 🙂 Je voulais me faire mon propre ordi de bord à base de pi, la carte mezzanine pourrait être un bon point de départ.

    Pour le power-off, je pensais utiliser un overlay (https://github.com/raspberrypi/firmware/tree/master/boot/overlays) disponible de base sur le pi : gpio-poweroff. Il met le pin qu’on veut à la valeur à l’état qu’on veut pour dire « coupe le jus ». Son petit frère « gpio-shutdown » déclenche un shutdown sur lecture d’un état de gpio.

    Ensuite, pour le CAN, je trouve l’idée bonne, mais il serait intéressant de voir si il serait possible d’y ajouter ce qu’il faut en hard/soft pour un véhicule un peu plus modèrne, avec le port ODB.

    Après, rajouter quelques relais électromécaniques, et quelques transistors de puissance, pour piloter des trucs. Par exemple, l’éclairage en cabine, par on/off (relais) ou pwm (transistors). Dans mon cas, ça serait l’éclairage par barre de leds.

    Dans l’idéal aussi, augmenter la puissance de l’alim 5V pour aller jusqu’à 3A, si on commence à brancher des bordels USB (gps, carte son, ventilateur…)

    Pour une carte mezzanine version rand()*150+captainAge ?

    Répondre
  5. Sylvain

    Bonjour,
    je suis celui de l’article précédent,
    superbe réalisation
    la première estafette avec un virtual cockpit.
    http://www.audi.fr/fr/web/fr/gamme/tt/tt-coupe/layer/virtual-cockpit.html

    adepte aussi des voitures ça me donne des idées pour avancer un souhait que j’ai depuis un moment
    je cherche à remplacer mon autoradio par quelque chose de plus convivial.
    MAIS je veux garder la même facade d’autoradio ….
    donc je vais (un jour….) récupérer une facade équivalente pour récupérer les boutons et tout refaire derrière la partie électronique, ampli, afficheur, …

    ma plus grosse problématique actuellement que je ne sais pas résoudre facilement c’est la gestion du fader.
    si quelqu’un a une idée de comment sortir du Hifiberry en 4xXXW avec une gestion du fader je suis preneur.

    c’est pas le projet urgent car ma voiture a seulement 14 ans et je compte la garder pour collection

    Répondre
    1. Damien

      Bonjour Sylvain,

      Je n’arrive pas à trouver de circuit « complet », mais je pense que tu pourrais arriver à bricoler un truc à base de TA8275H (ou TA8275HQ). Si je ne me trompe pas, c’est un ampli 4 voies utilisé dans les autoradio, on peut en trouver des kits bluetooth sur ali-machin à foison.
      Je pense que faire un circuit à base de ce composant, avec un petit peu de composants pour gérer les niveaux de volumes, piloté en SPI (ou I2C) par exemple, un peu de code custom… Avec les entrées nécessaires pour mettre la carte qu’on veut (une Hifiberry DAC par exemple)…
      Ca ferait un bon addon pour la mezzanine…

      Répondre
  6. Sylvain

    Bonjour,
    Il faut aussi raison garder. Ce système ne gère pas le véhicule, c’est juste de la visualisation d’information. La perte de la carte SD est aussi dangereuse que d’avoir un téléphone qui sonne lorsque l’on conduit…
    Je trouve le projet aboutit et ouvert, qui devrait trouver sa place dans mon ancienne!

    Répondre
  7. puech

    je trouve cette présentation extrement interessante. Je compte m’en inspirer pour mon camping car dont le boitier de commande est défaillant ( centrale nord electronica). Au vu de l’article un rapsberry et ses cartes aditionnelles serait largement moins cher , même avec un ecran tactile.
    encore merci

    Répondre
  8. lionel

    votre critique acerbe d’amateur non éclairé n’a aucune raison d’être ici.
    Ce projet ne prend en compte aucune phase sécuritaire de la conduite mais, puisque vous ne semblez pas l’avoir compris, ne sert qu’à donner quelques informations techniques.
    Rien ni personne ne vous oblige à réaliser ce montage

    Répondre
  9. alan

    bonjour moi je suis vachement intéresser mais je suis nul en codage je voudrais faire sa pour ma 205 mais comment je fait pour la partie logiciel/system d’exploitation je me demandais si le code était dispo ou non j’ai un raspberry pi 3 A+

    Répondre
  10. Ping : Ordinateur de bord dans une Ami 8 | Gardarem lei chevrons

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.