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.
Au sommaire :
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.
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
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.
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.
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 ! |
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.
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
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
Bonjour Yann
Merci ?
Bonnes fêtes de fin d’année également
Cordialement
Francois
Génial !!
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 😉
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
Bonjour Christian
C’est exactement la conclusion de mes conférences 😀
Bonnes fêtes de fin d’année
à bientôt
cordialement
François
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 ?
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
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…
Bonjour,
Félicitations pour votre projet qui contrairement au mien, semble pourvu d’une électronique robuste et efficace qui me faisait défaut dans le temps. Votre affichage est cependant quelque peu basique.
Mon projet, le Z-Car Cockpit http://www.zcarcockpit.fr
Bonne continuation,
Z
Bonjour zorro ! Oui effectivement ton tdb est plus sexi ! Je suis quand même en train de revoir l’apparence du mien http://jumpifnotzero.free.fr/electronic/raspberry/images/12_compteurs.jpg
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!
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
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
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+
Ping : Ordinateur de bord dans une Ami 8 | Gardarem lei chevrons