Inhaltsverzeichnis:

Arduino Auto-Display - Gunook
Arduino Auto-Display - Gunook

Video: Arduino Auto-Display - Gunook

Video: Arduino Auto-Display - Gunook
Video: Arduino Car Cluster with OLED Display (Dashboard, gauges, controls, SSD1306, u8glib) 2024, Juli
Anonim
Image
Image
Arduino Auto-Display
Arduino Auto-Display
Arduino Auto-Display
Arduino Auto-Display

Ich habe ein auf On-Board-Diagnose (OBD-II) basierendes Display mit einem 7-Zoll-TFT-LCD von Adafruit, einem Teensy 3.6, dem Freematics OBD-II I2C-Adapter und einigen billigen Backup-Sensoren gebaut, die ich bei Amazon gefunden habe. Das Display hat zwei Seiten: einen für den Fahrbetrieb meines Honda Accord und einen für den Rückwärtsgang.

Wenn mein Auto fährt, werden Drehzahl, MPH, Motorlastprozentsatz, Batteriespannung, Innenraumtemperatur und Motorkühlmitteltemperatur angezeigt (es stehen mehrere andere Fahrzeugstatistiken zur Verfügung, wenn diese nicht angezeigt werden sollen).

Wenn mein Auto rückwärts fährt, liest das Arduino IDE-kompatible Teensy 3.6 ein animiertes Bitmap-Bild meines Autos, das ich online gefunden habe, zeigt es an und liest dann die Backup-Sensoren. Die vier Sensoren haben jeweils ihren Abstand in Fuß plus eine Animation hinter dem Auto, die die Farbe ändert, je nachdem, wie nah das Objekt am Auto ist (nur grün bedeutet < 5 Fuß, grün und gelb bedeutet < 2,6 Fuß und grün, gelb, und rot bedeutet < 1 Fuß).

Schließlich habe ich die Möglichkeit hinzugefügt, das Display nachts zu dimmen.

Das Endergebnis sieht toll aus und funktioniert sehr gut in meinem Auto. Am Ende habe ich es sogar in der Mittelkonsole installiert, was ein ganz anderer Prozess war, auf den ich in diesem anweisbaren nicht eingehen werde. Die Liste der Teile, die ich verwendet habe, um dieses LCD-Display zu erstellen, ist unten.

1) Freematics OBD-II-Adapter - $35

2) Backup-Sensoren - $ 15

3) 7-Zoll-TFT-LCD-Display - 38 $

4) SPI-basierter LCD-Anzeigentreiber - $35

5) Teensy 3.6 - $30

6) Level-Shifter - $4

7) 74HC125 Tri State Buffer IC - $ 6 für 2er Pack (ich bin mir sicher, dass Sie diesen Cheeper woanders finden könnten)

8) MicroSD-Karte >= 1 GB - $4

9) Draht, Kondensatoren und Widerstände.

10) LP3470-2.93 Power-On-Reset-IC - $2

11) (optional): DS18B20 Temperatursensor - $8

12) (optional): OBD-II-Splitter - $10

13) (optional): Fügen Sie ein Stromkreissicherungskabel hinzu - $ 8 für eine Packung mit 5

Schritt 1: Auslesen der Backup-Sensoren

Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren
Auslesen der Backup-Sensoren

Dieser Schritt ist schwierig, da diese Backup-Sensoren mit einem Transceiver und dann mit einem kleinen LCD kommunizieren, wie im Bild oben zu sehen. Ich wollte eine Möglichkeit, ihre Anzeige loszuwerden und meine eigene zu verwenden. Mit Hilfe einer Website, die ich nach einigem googeln (Hacking Reverse Parking Sensoren) gefunden habe, konnte ich das proprietäre Kommunikationsprotokoll lesen, das der Transceiver an den LCD-Bildschirm sendet. Aus irgendeinem Grund ist das Kommunikationsprotokoll kein typisches wie I2C, UART, CAN, USB usw. und das Protokoll unterscheidet sich je nach Anbieter. Ich empfehle Ihnen dringend, das oben verlinkte Set zu kaufen, wenn Sie meinen Code verwenden möchten, da er speziell für diese Sensoren geschrieben wurde.

Bevor ich das mitgelieferte LCD abtrennte, untersuchte ich die drei Drähte, die den Transceiver und das LCD verbinden. Es gab +5V rotes Kabel, schwarzes Erdungskabel und ein blaues Kabel. Nachdem ich mein Oszilloskop an das blaue Kabel und die Masse angeschlossen hatte, sah ich eine Spur ähnlich der oben gezeigten, aber nicht genau (ich habe das Bild von der oben verlinkten Website verwendet). Mein Trace hatte ein HIGH-Startbit mit längerer Dauer, gefolgt von 17 weiteren Bits mit kürzerer Dauer. Die Bits 0-5 nach dem Startbit enthielten keine nützlichen Informationen. Bits 6-8 entsprechen Sensor A, B, C oder D. Bits 9-16 entsprachen der Länge in Metern. Ich habe eine Arduino-IDE-Skizze beigefügt, die die Sensoren liest und die Daten über die serielle Konsole ausgibt.

Schritt 2: Erstellen Sie das Bitmap-Bild und legen Sie es auf eine MicroSD-Karte

Erstellen des Bitmap-Bildes und Speichern auf einer MicroSD-Karte
Erstellen des Bitmap-Bildes und Speichern auf einer MicroSD-Karte
Erstellen des Bitmap-Bildes und Speichern auf einer MicroSD-Karte
Erstellen des Bitmap-Bildes und Speichern auf einer MicroSD-Karte

Ich habe eine kostenlose Fotobearbeitungssoftware namens GIMP verwendet, um ein Bild meines Autos aus der Draufsicht zuzuschneiden und die Größe zu ändern. Ich habe das Bild dann als 24-Bit-Bitmap-Bild namens "car.bmp" exportiert, das 110 x 250 Pixel groß ist. Ich habe dies auf eine microSD-Karte hochgeladen und die microSD-Karte in meinen Teensy 3.6-Mikrocontroller gesteckt.

Der Hauptgrund, warum ich mich für den Teensy 3.6 anstelle eines UNO entschieden habe, war die Geschwindigkeit, mit der der Teensy eine SD-Karte lesen und das Bild mit dem RA8875-Bildschirmtreiber anzeigen konnte. Mit einem UNO dauerte der Vorgang etwa 8 Sekunden, während ein Teensy 3.6 1,8 Sekunden dauerte.

Schritt 3: Anschließen der Hardware

Anschließen der Hardware
Anschließen der Hardware

Adafruit hat ein wirklich gut aussehendes 7-Zoll-TFT-LCD, das von einem IC namens RA8875 angesteuert wird. Ich habe mich aus zwei Gründen für diesen Display- und Display-Treiber entschieden. Erstens gibt es umfangreiche Bibliotheken, die für das Display vorgefertigt sind jeden Mikrocontroller über SPI, was bedeutet, dass nicht so viele Drähte den Mikrocontroller mit dem RA8875 verbinden.

Dieses Setup hat zwei Nachteile. Erstens gibt es einen Hardwarefehler mit dem RA8875-Board von Adafruit, der die Verwendung des 74HC125-Tri-State-Puffer-ICs erfordert, wenn Sie ein SPI-basiertes Gerät wie eine SD-Karte verwenden möchten. Um den Hardwarefehler besser zu verstehen, lesen Sie bitte das folgende Forum. Zweitens dauert es relativ lange, bis Bilder an das LCD gesendet werden. Die lange Zeit, die es braucht, um ein Bild an das LCD zu senden, ist auch auf die SPI-Verbindung zurückzuführen, die durch die Taktrate der Mikrocontroller und die große Datenmenge, die über den Bildschirmtreiber gesendet werden muss, begrenzt ist sehr wenige Drähte.

Ich habe einen Fritzing-Schema erstellt, damit jeder, der dieses Display erstellen möchte, leicht lesen kann, mit welchen Pins des Teensy 3.6 verbunden ist. Ich habe unten eine.frz-Datei eingefügt. Die einzigen beiden Komponenten, die nicht gekennzeichnet sind, sind die Kondensatoren, bei denen es sich um einen 1F 16V Elektrolytkondensator und einen 100μF Keramikkondensator handelt. Ich habe diese eingeschlossen, um sicherzustellen, dass die Stromversorgung des Teensy-Mikrocontrollers konstant +5 V betrug und keine Spannungsspitzen enthielt (möglicherweise nicht notwendig, aber ich habe sie aufgenommen, da die Spannungsversorgung eines Autos je nach Belastung der Batterie schnell schwanken kann).

Ein paar Dinge zu den Komponenten zu erwähnen. Zuerst nimmt der Pegelumsetzer jedes 5V-Signal und wandelt es in eine 3,3V Teensy 3,6 sichere Spannung um. Dies ist für den OBD I2C-Adapter sowie den Backup-Sensor-Transceiver erforderlich. Zweitens benötigen die I2C-Leitungen des Teensy 4,7 kΩ Pull-Up-Widerstände. Drittens sind die vier Widerstände, die das "Nachtzeitkabel" (das Dimmkabel) und das "Backup-Engage-Kabel" verbinden, notwendig, um als Spannungsteiler zu dienen, um die 12V-13V-Signale auf etwa 2,5-3V-Signale zu senken.

UPDATE 22.07.18: Ich habe festgestellt, dass der interne Temperatursensor des OBD-I2C-Moduls sehr seltsame Zahlen ausgibt. Manchmal funktionierte es, aber meistens gab das Modul Temperaturen über 400 ° F aus. Aus diesem Grund habe ich mich entschieden, meinen eigenen ds18b20-Temperatursensor hinzuzufügen. Sie können hier gerne jede Art von Temperatursensor verwenden, aber Sie müssen den Arduino-Code bearbeiten.

UPDATE 01.03.19: Teensy 3.6 startet nicht, wenn es extrem kalt ist. Ich habe eine Power-On-Reset-Schaltung hinzugefügt, um sicherzustellen, dass sie richtig bootet.

Schritt 4: RA8875-Anzeigetreiber und Grafikdesign

RA8875 Displaytreiber und Grafikdesign
RA8875 Displaytreiber und Grafikdesign

Der RA8875-Anzeigetreiber verfügt über eine Bibliothek namens Adafruit_RA8875, die ich beim Erstellen der Formen verwendet habe, die auf der ersten Seite und der zweiten Seite zu sehen sind. Die Bibliothek für den RA8875 kann nur Linien, Rechtecke, abgerundete Rechtecke, Dreiecke, Ellipsen und Kreise erstellen, daher müssen die Grafiken geschickt gestaltet werden, um komplexere Formen zu erstellen. Zum Beispiel ist der graue Ring auf der ersten Seite eigentlich ein vollständiger grauer Kreis mit größerem Durchmesser, gefolgt von einem vollen schwarzen Kreis mit kleinerem Durchmesser. Außerdem enthält ein kleiner Abschnitt der Backup-Sensorseite 2 Dreiecke, die so angeordnet sind, dass sie eine Polygonform bilden. Ich habe dies getan, um die Farbe eines einzelnen Abschnitts der Backup-Sensorseite zu ändern. Die Arduino-Datei für das Display enthält eine Reihe von Punkten, die ich verwendet habe, um zu verfolgen, wo die Dreiecke und andere Formen waren.

Ich habe diese großartige Website verwendet, um RGB565-Farben auszuwählen und sie in der Skizze zu definieren, damit ich nicht standardmäßige Farben verwenden kann, die bereits in der Adafruit_RA8875-Bibliothek vordefiniert sind.

In Bezug auf Schriftarten unterstützt die Adafruit_RA8875-Bibliothek nur eine, es sei denn, Sie kommentieren einen Abschnitt der Bibliothek aus, wodurch Sie die Schriftarten der Adafruit_GFX-Bibliothek verwenden können. Ich habe die modifizierte Adafruit_RA8875-Bibliothek unten eingefügt. Ich habe nur ein paar Codezeilen auskommentiert und konnte dann die Schriftarten in der Adafruit_GFX-Bibliothek verwenden. Um die 7-Segment-Schriftart zu verwenden, die ich in diesem Projekt verwendet habe, stellen Sie bitte sicher, dass sich die Datei "FreeSevenSegNumFont.h" im Schriftartenordner in der Adafruit_GFX-Bibliothek befindet.

Schritt 5: Hochladen der Skizze

Hochladen der Skizze
Hochladen der Skizze
Hochladen der Skizze
Hochladen der Skizze

Um die Skizze auf ein Teensy 3.6 hochzuladen, müssen Sie Teensyduino installieren. Dann müssen Sie die Bibliotheken Adafruit_RA8875 und Adafruit_GFX am winzigen Bibliotheksspeicherort ersetzen (nicht an Ihrem typischen Speicherort in Dokumenten). Auf dem Mac musste ich in den Anwendungen mit der rechten Maustaste auf das Arduino-Anwendungssymbol klicken und dann zu /Contents/Java/hardware/teensy/avr/libraries navigieren. Unter Windows bin ich mir ziemlich sicher, dass es sich unter Ihrem C-Laufwerk in den Programmdateien x86, Arduino und dann im Hardwareordner befindet. Sobald Sie dies getan haben, müssen Sie den Speicherort des Skizzenbuchs in der Arduino-Anwendung ändern, indem Sie ihn in den Einstellungen dort bearbeiten, wo sich Ihre Teensy-Bibliotheken befinden (dh /Applications/Arduino.app/Contents/Java/hardware/teensy/avr).

UPDATE 22.07.16: Aufgrund des Problems mit dem internen Temperatursensor, über das ich zuvor gesprochen habe, musste ich einen DS18B20-Modultemperatursensor installieren. Sie sehen 4 Arduino-Skizzen in der Zip-Datei. Bitte laden Sie die display_code-Skizze hoch, wenn Sie den internen Temperatursensor des OBD-II I2C-Moduls verwenden möchten. Bitte laden Sie die Skizze display_code_with_new_temperature_sensor hoch, wenn Sie das oben verlinkte DS18B20-Modul verwenden möchten.

UPDATE 17.11.17: Ich habe mehrere Fehler in der Software behoben, darunter der DS18B20, der eine Temperatur von 185 Fahrenheit ausgibt, das Display schaltet sich bei kaltem Wetter überhaupt nicht ein und Pixel bleiben in der falschen Farbe hängen, wenn das Display gedimmt wird.

Verwenden Sie dann das Bild, das ich oben habe, um sicherzustellen, dass Ihre Teensy-Einstellungen mit dem Bild übereinstimmen. Ich fand heraus, dass das Übertakten des Teensy auf 240 MHz dem I2C OBD-II-Adapter nicht erlaubte, mit dem Teensy zu kommunizieren. Klicken Sie abschließend einfach auf Hochladen.

Ich habe ziemlich umfangreiche Kommentare in den Arduino-Skizzendateien geschrieben. Dort finden Sie eine Erklärung zur Funktionsweise der Software. Bitte zögern Sie nicht, mich bei Fragen zu kontaktieren. Ich werde versuchen, sie nach bestem Wissen und Gewissen zu beantworten. Viel Glück!

Schritt 6: 3D-Druck eines LCD-Gehäuses

3D-Druck eines LCD-Gehäuses
3D-Druck eines LCD-Gehäuses
3D-Druck eines LCD-Gehäuses
3D-Druck eines LCD-Gehäuses
3D-Druck eines LCD-Gehäuses
3D-Druck eines LCD-Gehäuses

Ich habe eine 3D-gedruckte obere und untere LCD-Abdeckung erstellt, um das 7-Zoll-Display zu schützen. Ich habe die. IPT-Erfinder-Teildateien sowie die. STL-Dateien angehängt.

Ich habe auch einen Teil namens backup_sensor_ring.ipt eingefügt, bei dem es sich um einen Ring handelt, der um die oben verlinkten Backup-Sensoren passt. Mein Auto hatte bereits vorgebohrte Backup-Sensorlöcher, die für die Backup-Sensoren, die ich bei Amazon gekauft hatte, zu groß waren, also musste ich einen Ring erstellen, der auf die Backup-Sensoren passte. Wenn Sie mit dem im Set enthaltenen Rundbohrer in Ihre Stoßstange bohren möchten, benötigen Sie dieses Teil nicht.

Schritt 7: Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft

Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft
Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft
Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft
Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft
Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft
Aufteilen des OBD-II-Ports, damit Arduino nur Strom hat, wenn das Auto läuft

Ich stellte kurz nach dem Einbau meines Displays fest, dass das Display immer an war, auch wenn das Auto aus war. Bei der OBD-II-Pinbelegung habe ich festgestellt, dass die 12-V-Stromleitung zum OBD-II-Anschluss immer direkt mit der Batterie verbunden ist.

Um dies zu umgehen, habe ich einen OBD-II-Splitter gekauft, den Draht zu Pin 16 an einem der beiden Anschlüsse am Splitter abgeschnitten und dann diesen abgeschnittenen Draht mit einem Stromkreis verbunden.

Dann ging ich mit meinem Multimeter zum Sicherungskasten auf der Fahrerseite und testete die vorhandenen Sicherungen, um zu sehen, welche Sicherung Strom bekam, nachdem der Schlüssel in die Zündung gedreht wurde.

Schließlich habe ich die Sicherung, die ich gefunden habe, mit einem Stromkreiskabel verbunden, so dass sich das Display jetzt nur noch einschaltet, wenn mein Auto läuft. Bitte recherchieren Sie, wie Sie Ihrem Auto richtig eine Schaltung hinzufügen. Ich fand dieses Youtube-Tutorial gut.

Empfohlen: