Table des matières:

Affichage de la voiture Arduino : 7 étapes (avec photos)
Affichage de la voiture Arduino : 7 étapes (avec photos)

Vidéo: Affichage de la voiture Arduino : 7 étapes (avec photos)

Vidéo: Affichage de la voiture Arduino : 7 étapes (avec photos)
Vidéo: Arduino pour Hotwheels - étape 2 (test sur breadboard détection et affichage 7 segments) 2024, Juillet
Anonim
Image
Image
Affichage de voiture Arduino
Affichage de voiture Arduino
Affichage de voiture Arduino
Affichage de voiture Arduino

J'ai construit un écran basé sur les diagnostics embarqués (OBD-II) à l'aide d'un écran LCD TFT 7 d'Adafruit, d'un Teensy 3.6, de l'adaptateur Freematics OBD-II I2C et de quelques capteurs de sauvegarde que j'ai trouvés sur Amazon. L'écran a deux pages: un pour quand ma Honda Accord est en marche et un pour quand il est en marche arrière.

Lorsque ma voiture est en marche, le régime, le MPH, le pourcentage de charge du moteur, la tension de la batterie, la température de l'habitacle et la température du liquide de refroidissement du moteur sont affichés (il existe plusieurs autres statistiques du véhicule à afficher si l'on ne les souhaite pas).

Lorsque ma voiture est en marche arrière, le Teensy 3.6 compatible Arduino IDE lit une image bitmap animée de ma voiture que j'ai trouvée en ligne, l'affiche, puis lit les capteurs de sauvegarde. Les quatre capteurs ont chacun leur distance en pieds plus une animation derrière la voiture qui change de couleur en fonction de la proximité de l'objet à la voiture (juste vert signifie < 5 pieds, vert et jaune signifie < 2,6 pieds, et vert, jaune, et le rouge signifie < 1 pied).

Enfin, j'ai ajouté la possibilité de tamiser l'affichage la nuit.

Le résultat final est superbe et fonctionne très bien dans ma voiture. J'ai même fini par l'installer dans la console centrale, ce qui était un tout autre processus dans lequel je n'entrerai pas dans cette instructable. La liste des pièces que j'ai utilisées pour créer cet écran LCD est ci-dessous.

1) Adaptateur Freematics OBD-II - 35 $

2) Capteurs de sauvegarde - 15 $

3) Écran LCD TFT 7 - 38 $

4) Pilote d'affichage LCD basé sur SPI - 35 $

5) Ados 3,6 - 30 $

6) Niveau Shifter - 4 $

7) 74HC125 Tri State Buffer IC -6 $ pour le pack de 2 (je suis sûr que vous pourriez trouver ce moins cher ailleurs)

8) Carte MicroSD >= 1 Go - 4 $

9) Fils, condensateurs et résistances.

10) LP3470-2.93 IC de réinitialisation de mise sous tension - 2 $

11) (facultatif): capteur de température DS18B20 - 8 $

12) (facultatif): répartiteur OBD-II - 10 $

13) (facultatif): Ajoutez un cordon de fusible de circuit - 8 $ pour le paquet de 5

Étape 1: Lecture des capteurs de sauvegarde

Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde
Lecture des capteurs de sauvegarde

Cette étape est délicate car ces capteurs de secours communiquent avec un émetteur-récepteur puis avec un petit écran LCD comme le montre l'image ci-dessus. Je voulais un moyen de me débarrasser de leur affichage et d'utiliser le mien. À l'aide d'un site Web que j'ai trouvé après quelques recherches sur Google (Piratage des capteurs de stationnement inversés), j'ai pu lire le protocole de communication propriétaire que l'émetteur-récepteur envoie à l'écran LCD. Pour une raison quelconque, le protocole de communication n'est pas typique comme I2C, UART, CAN, USB, etc. et le protocole diffère selon le fournisseur. Je vous recommande fortement d'acheter l'ensemble que j'ai lié ci-dessus si vous comptez utiliser mon code car il a été spécifiquement écrit pour ces capteurs.

Avant de déconnecter l'écran LCD fourni, j'ai sondé les trois fils reliant l'émetteur-récepteur et l'écran LCD. Il y avait un fil rouge +5V, un fil noir de masse et un fil bleu. Après avoir branché mon oscilloscope au fil bleu et à la terre, j'ai vu une trace similaire à l'image vue ci-dessus mais pas exactement (j'ai utilisé l'image du site Web lié ci-dessus). Ma trace avait un bit de démarrage de durée plus longue HAUT, suivi de 17 bits de durée plus courts. Les bits 0-5 après le bit de départ n'avaient pas d'informations utiles. Les bits 6 à 8 correspondent au capteur A, B, C ou D. Les bits 9 à 16 correspondent à la longueur en mètres. J'ai inclus un croquis Arduino IDE qui lit les capteurs et génère les données sur la console série.

Étape 2: Création de l'image bitmap et mise sur une carte MicroSD

Création de l'image bitmap et mise sur une carte MicroSD
Création de l'image bitmap et mise sur une carte MicroSD
Création de l'image bitmap et mise sur une carte MicroSD
Création de l'image bitmap et mise sur une carte MicroSD

J'ai utilisé un logiciel de retouche photo gratuit appelé GIMP pour recadrer et redimensionner une image de ma voiture à partir de la vue de dessus. J'ai ensuite exporté l'image sous forme d'image bitmap 24 bits nommée "car.bmp" qui fait 110 pixels par 250 pixels. J'ai téléchargé ceci sur une carte microSD et mis la carte microSD dans mon microcontrôleur Teensy 3.6.

Les principales raisons pour lesquelles j'ai choisi le Teensy 3.6 au lieu d'un UNO étaient la vitesse à laquelle le Teensy pouvait lire une carte SD et afficher l'image à l'aide du pilote d'affichage RA8875. En utilisant un UNO, le processus a pris environ 8 secondes, tandis qu'un Teensy 3.6 a pris 1,8 secondes.

Étape 3: connexion du matériel

Connexion du matériel
Connexion du matériel

Adafruit a un très beau LCD TFT 7 piloté par un circuit intégré appelé RA8875. J'ai choisi cet affichage et ce pilote d'affichage pour deux raisons. Premièrement, il existe de nombreuses bibliothèques pré-écrites pour l'affichage. Deuxièmement, le pilote d'affichage peut parler à n'importe quel microcontrôleur sur SPI, ce qui signifie qu'il n'y a pas beaucoup de fils reliant le microcontrôleur au RA8875.

Il y a deux inconvénients à cette configuration. Le premier est le fait qu'il existe un bogue matériel avec la carte RA8875 d'Adafruit nécessitant l'utilisation du CI tampon à trois états 74HC125 si vous souhaitez utiliser un périphérique basé sur SPI tel qu'une carte SD. Pour mieux comprendre le bogue matériel, veuillez lire le forum suivant. Deuxièmement, c'est le temps relativement long qu'il faut pour que les images soient envoyées à l'écran LCD. De plus, le temps qu'il faut pour envoyer une image à l'écran LCD est dû à la connexion SPI, qui est limitée par la vitesse d'horloge des microcontrôleurs et la grande quantité de données qui doivent être envoyées au pilote d'affichage via très peu de fils.

J'ai créé un schéma Fritzing afin que toute personne souhaitant créer cet affichage puisse facilement lire à quelles broches le Teensy 3.6 se connecte. J'ai inclus un fichier.frz ci-dessous. Les deux seuls composants qui ne sont pas étiquetés sont les condensateurs, qui sont un condensateur électrolytique 1F 16V et un condensateur céramique 100μF. Je les ai inclus pour m'assurer que l'alimentation du microcontrôleur Teensy était stable en CC + 5V et ne contenait pas de pics de tension (ce n'est peut-être pas nécessaire mais je les ai inclus car la tension d'alimentation d'une voiture peut fluctuer rapidement en fonction de la charge sur la batterie).

Quelques points à mentionner sur les composants. Tout d'abord, le décaleur de niveau prend n'importe quel signal 5V et le transforme en une tension de sécurité Teensy 3.6 de 3,3V. Ceci est nécessaire pour l'adaptateur OBD I2C ainsi que pour l'émetteur-récepteur du capteur de secours. Deuxièmement, les lignes I2C du Teensy nécessitent des résistances de rappel de 4,7 kΩ. Troisièmement, les quatre résistances reliant le "fil de nuit" (le fil de gradation) et le "fil d'enclenchement de secours" sont nécessaires pour servir de diviseur de tension pour ramener les signaux 12V-13V à environ 2,5-3V.

MISE À JOUR 22/07/18: J'ai trouvé que le capteur de température interne du module OBD-I2C produisait des nombres très étranges. Parfois, cela fonctionnait, mais la plupart du temps, le module produisait des températures supérieures à 400 degrés F. Pour cette raison, j'ai décidé d'ajouter mon propre capteur de température ds18b20. Vous êtes plus que bienvenu pour utiliser n'importe quel type de capteur de température ici, mais vous devrez modifier le code Arduino.

MISE À JOUR 01/03/19: Teensy 3.6 ne démarre pas lorsqu'il fait extrêmement froid. J'ai ajouté un circuit de réinitialisation de mise sous tension pour m'assurer qu'il démarre correctement.

Étape 4: Pilote d'affichage RA8875 et conception graphique

Pilote d'affichage RA8875 et conception graphique
Pilote d'affichage RA8875 et conception graphique

Le pilote d'affichage RA8875 possède une bibliothèque appelée Adafruit_RA8875, que j'ai utilisée lors de la création des formes visibles sur la première page et la deuxième page. La bibliothèque du RA8875 ne peut créer que des lignes, des rectangles, des rectangles arrondis, des triangles, des ellipses et des cercles. Les graphiques doivent donc être conçus de manière intelligente pour créer des formes plus complexes. Par exemple, l'anneau gris sur la première page est en fait un cercle gris complet d'un plus grand diamètre suivi d'un cercle noir complet d'un diamètre plus petit. De plus, une petite section de la page du capteur de secours contient 2 triangles disposés de manière à former un polygone. Je l'ai fait pour pouvoir changer la couleur d'une section individuelle de la page du capteur de sauvegarde. Le fichier Arduino pour l'affichage contient un tableau de points que j'ai utilisé pour garder une trace de l'emplacement des triangles et autres formes.

J'ai utilisé ce site Web génial pour choisir les couleurs RGB565 et les définir dans le croquis afin que je puisse utiliser des couleurs autres que celles par défaut déjà prédéfinies dans la bibliothèque Adafruit_RA8875.

En termes de polices, la bibliothèque Adafruit_RA8875 n'en prend en charge qu'une, sauf si vous commentez une section de la bibliothèque, ce qui vous permet d'utiliser les polices de la bibliothèque Adafruit_GFX. J'ai inclus la bibliothèque Adafruit_RA8875 modifiée ci-dessous. Je viens de commenter quelques lignes de code et j'ai ensuite pu utiliser les polices de la bibliothèque Adafruit_GFX. De plus, pour utiliser la police à 7 segments que j'ai utilisée dans ce projet, assurez-vous que le fichier "FreeSevenSegNumFont.h" que j'ai est dans le dossier des polices de la bibliothèque Adafruit_GFX.

Étape 5: Téléchargement du croquis

Téléchargement du croquis
Téléchargement du croquis
Téléchargement du croquis
Téléchargement du croquis

Pour télécharger le croquis sur un Teensy 3.6, vous devrez installer Teensyduino. Ensuite, vous devrez remplacer les bibliothèques Adafruit_RA8875 et Adafruit_GFX dans l'emplacement de la bibliothèque Teensy (pas votre emplacement typique dans les documents). Sur Mac, je devais cliquer avec le bouton droit sur l'icône de l'application Arduino dans les applications, puis naviguer vers /Contents/Java/hardware/teensy/avr/libraries. Sous Windows, je suis à peu près sûr qu'il se trouve sous votre lecteur C dans Program files x86, Arduino, puis dans le dossier matériel qui s'y trouve. Une fois cela fait, vous devrez modifier l'emplacement du carnet de croquis dans l'application Arduino en le modifiant dans les préférences où se trouvent vos bibliothèques Teensy (c'est-à-dire /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

MISE À JOUR 22/07/16: En raison du problème de capteur de température interne dont j'ai parlé plus tôt, j'ai dû installer un capteur de température de module DS18B20. Vous verrez 4 croquis arduino dans le fichier zip. Veuillez télécharger le croquis display_code si vous souhaitez utiliser le capteur de température interne du module OBD-II I2C. Veuillez télécharger le croquis display_code_with_new_temperature_sensor si vous souhaitez utiliser le module DS18B20 que j'ai lié ci-dessus.

MISE À JOUR 17/11/17: j'ai corrigé plusieurs bugs dans le logiciel, notamment le DS18B20 affichant une température de 185 degrés Fahrenheit, l'écran ne s'allumant pas du tout par temps froid et les pixels se coinçant dans la mauvaise couleur lorsque l'écran est atténué.

Ensuite, utilisez l'image que j'ai ci-dessus pour vous assurer que vos paramètres pour adolescents correspondent à l'image. J'ai trouvé que l'overclocking du Teensy à 240MHz ne permettait pas à l'adaptateur I2C OBD-II de communiquer avec le Teensy. Enfin, cliquez simplement sur télécharger.

J'ai écrit des commentaires assez détaillés dans les fichiers de croquis arduino. Veuillez y chercher une explication du fonctionnement du logiciel. N'hésitez pas à me contacter pour toute question. Je vais essayer d'y répondre du mieux que je peux. Bonne chance!

Étape 6: Imprimez en 3D un boîtier LCD

Imprimer en 3D un boîtier LCD
Imprimer en 3D un boîtier LCD
Imprimer en 3D un boîtier LCD
Imprimer en 3D un boîtier LCD
Imprimer en 3D un boîtier LCD
Imprimer en 3D un boîtier LCD

J'ai créé un couvercle supérieur et inférieur pour écran LCD imprimé en 3D pour protéger l'écran 7 . J'ai joint les fichiers de pièce d'inventeur. IPT ainsi que les fichiers. STL.

J'ai également inclus une partie appelée backup_sensor_ring.ipt, qui est un anneau qui s'adapte autour des capteurs de sauvegarde que j'ai liés ci-dessus. Ma voiture avait déjà des trous de capteur de sauvegarde pré-percés qui étaient trop grands pour les capteurs de sauvegarde que j'ai achetés sur Amazon, j'ai donc dû créer un anneau qui s'adapterait aux capteurs de sauvegarde. Si vous allez percer votre pare-chocs avec la perceuse circulaire incluse dans l'ensemble, vous n'aurez pas besoin de cette pièce.

Étape 7: Fractionner le port OBD-II afin que Arduino n'ait d'alimentation que lorsque la voiture est en marche

Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche
Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche
Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche
Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche
Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche
Diviser le port OBD-II afin que Arduino n'ait de l'alimentation que lorsque la voiture est en marche

J'ai réalisé peu de temps après avoir installé mon écran que l'écran était toujours allumé, même lorsque la voiture était éteinte. En regardant dans le brochage OBD-II, j'ai trouvé que la ligne d'alimentation 12V vers le connecteur OBD-II est toujours connectée directement à la batterie.

Pour contourner ce problème, j'ai acheté un répartiteur OBD-II, coupé le fil allant à la broche 16 sur l'un des deux connecteurs du répartiteur, puis connecté ce fil coupé à un fil d'ajout de circuit.

Ensuite, à l'aide de mon multimètre, je suis allé dans la boîte à fusibles côté conducteur et j'ai testé les fusibles existants pour voir quel fusible était alimenté une fois la clé tournée dans le contact.

Enfin, j'ai connecté le fil d'ajout d'un circuit au fusible que j'ai localisé afin que l'écran ne s'allume désormais que lorsque ma voiture est en marche. Veuillez faire des recherches pour savoir comment ajouter correctement un circuit à votre voiture. J'ai trouvé ce tuto youtube très bon.

Conseillé: