Sommario:

Display per auto Arduino: 7 passaggi (con immagini)
Display per auto Arduino: 7 passaggi (con immagini)

Video: Display per auto Arduino: 7 passaggi (con immagini)

Video: Display per auto Arduino: 7 passaggi (con immagini)
Video: Tutorial Arduino ITA 19: Display TFT Touchscreen 2024, Dicembre
Anonim
Image
Image
Display per auto Arduino
Display per auto Arduino
Display per auto Arduino
Display per auto Arduino

Ho costruito un display basato sulla diagnostica di bordo (OBD-II) utilizzando un LCD TFT da 7 di Adafruit, un Teensy 3.6, l'adattatore Freematics OBD-II I2C e alcuni sensori di backup economici che ho trovato su Amazon. Il display ha due pagine: uno per quando la mia Honda Accord è in marcia e uno per quando è in retromarcia.

Quando la mia auto è in marcia, vengono visualizzati RPM, MPH, percentuale di carico del motore, tensione della batteria, temperatura dell'abitacolo e temperatura del liquido di raffreddamento del motore (sono disponibili molte altre statistiche del veicolo da visualizzare se non si desidera).

Quando la mia auto è in retromarcia, Teensy 3.6 compatibile con Arduino IDE legge un'immagine bitmap animata della mia auto che ho trovato online, la visualizza e quindi legge i sensori di backup. I quattro sensori hanno ciascuno la loro distanza in piedi più un'animazione dietro l'auto che cambia colore in base alla vicinanza dell'oggetto all'auto (solo verde significa < 5 piedi, verde e giallo significa < 2,6 piedi e verde, giallo, e rosso significa < 1 piede).

Infine, ho aggiunto la possibilità di oscurare il display di notte.

Il risultato finale sembra ottimo e funziona molto bene nella mia auto. Ho anche finito per installarlo nella console centrale, che era un altro processo in cui non entrerò in questa guida. L'elenco delle parti che ho utilizzato per creare questo display LCD è riportato di seguito.

1) Adattatore OBD-II Freematics - $ 35

2) Sensori di backup - $ 15

3) Display LCD TFT da 7 - $ 38

4) Driver display LCD basato su SPI - $ 35

5) Adolescente 3.6 - $ 30

6) Cambio di livello - $4

7) 74HC125 Tri State Buffer IC - $ 6 per confezione da 2 (sono sicuro che potresti trovare questo cheeper altrove)

8) Scheda MicroSD >= 1 GB - $4

9) Filo, condensatori e resistori.

10) LP3470-2.93 CI di ripristino all'accensione - $2

11) (opzionale): Sensore di temperatura DS18B20 - $ 8

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

13) (opzionale): aggiungi un cavo per fusibili del circuito - $ 8 per confezione da 5

Passaggio 1: lettura dei sensori di backup

Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup
Lettura dei sensori di backup

Questo passaggio è complicato perché questi sensori di backup comunicano con un ricetrasmettitore e quindi con un piccolo LCD come mostrato nell'immagine sopra. Volevo un modo per sbarazzarmi del loro display e usare il mio. Con l'aiuto di un sito web che ho trovato dopo aver cercato su Google (Hacking sensori di parcheggio in retromarcia), sono stato in grado di leggere il protocollo di comunicazione proprietario che il ricetrasmettitore invia allo schermo LCD. Per qualche motivo, il protocollo di comunicazione non è tipico come I2C, UART, CAN, USB, ecc. e il protocollo varia a seconda del fornitore. Consiglio vivamente di acquistare il set che ho collegato sopra se utilizzerai il mio codice perché è stato scritto specificamente per quei sensori.

Prima di scollegare l'LCD fornito, ho sondato i tre fili che uniscono il ricetrasmettitore e l'LCD. C'era un filo rosso +5V, un filo nero di terra e un filo blu. Dopo aver collegato il mio oscilloscopio al filo blu e alla massa, ho visto una traccia simile all'immagine vista sopra ma non esattamente (ho usato l'immagine dal sito web linkato sopra). La mia traccia aveva un bit di inizio di durata HIGH più lunga, seguito da 17 bit di durata più breve. I bit 0-5 dopo il bit di inizio non contenevano informazioni utili. I bit 6-8 corrispondono al sensore A, B, C o D. I bit 9-16 corrispondono alla lunghezza in metri. Ho incluso uno schizzo IDE Arduino che legge i sensori e invia i dati sulla console seriale.

Passaggio 2: creazione dell'immagine bitmap e inserimento su una scheda MicroSD

Creazione dell'immagine bitmap e inserimento su una scheda MicroSD
Creazione dell'immagine bitmap e inserimento su una scheda MicroSD
Creazione dell'immagine bitmap e inserimento su una scheda MicroSD
Creazione dell'immagine bitmap e inserimento su una scheda MicroSD

Ho usato un software di fotoritocco gratuito chiamato GIMP per ritagliare e ridimensionare un'immagine della mia auto dalla vista dall'alto. Ho quindi esportato l'immagine come immagine bitmap a 24 bit denominata "car.bmp" che è di 110 pixel per 250 pixel. L'ho caricato su una scheda microSD e ho inserito la scheda microSD nel mio microcontrollore Teensy 3.6.

I motivi principali per cui ho scelto Teensy 3.6 invece di un UNO è stata la velocità con cui Teensy poteva leggere una scheda SD e visualizzare l'immagine utilizzando il driver del display RA8875. Utilizzando un UNO, il processo ha richiesto circa 8 secondi, mentre un Teensy 3.6 ha impiegato 1,8 secondi.

Passaggio 3: collegamento dell'hardware

Collegamento dell'hardware
Collegamento dell'hardware

Adafruit ha un display LCD TFT da 7 davvero bello che è guidato da un IC chiamato RA8875. Ho scelto questo display e driver del display per due motivi. In primo luogo, ci sono ampie librerie prescritte per il display. In secondo luogo, il driver del display può parlare con qualsiasi microcontrollore su SPI, il che significa che non ci sono molti fili che collegano il microcontrollore all'RA8875.

Ci sono due aspetti negativi di questa configurazione. Il primo è il fatto che c'è un bug hardware con la scheda RA8875 di Adafruit che richiede l'uso del buffer IC a tre stati 74HC125 se si desidera utilizzare qualsiasi dispositivo basato su SPI come una scheda SD. Per comprendere più a fondo il bug hardware, leggere il seguente forum. In secondo luogo, è il tempo relativamente lungo necessario per l'invio delle immagini all'LCD. Inoltre, il lungo tempo necessario per l'invio di un'immagine al display LCD è dovuto alla connessione SPI, che è limitata dalla velocità di clock dei microcontrollori e dalla grande quantità di dati che devono essere inviati al driver del display tramite pochissimi fili.

Ho creato uno schema di Fritzing in modo che chiunque voglia creare questo display possa facilmente leggere a quali pin si collegano Teensy 3.6. Ho incluso un file.frz di seguito. Gli unici due componenti che non sono etichettati sono i condensatori, che sono un condensatore elettrolitico 1F 16V e un condensatore ceramico 100μF. Li ho inclusi per assicurarmi che l'alimentazione del microcontrollore Teensy fosse costante DC +5V e non contenesse picchi di tensione (potrebbe non essere necessario ma li ho inclusi perché la tensione di alimentazione di un'auto può fluttuare rapidamente a seconda del carico sulla batteria).

Alcune cose da menzionare sui componenti. Innanzitutto, il traslatore di livello prende qualsiasi segnale da 5 V e lo trasforma in una tensione sicura Teensy 3.6 da 3,3 V. Ciò è necessario per l'adattatore OBD I2C e per il ricetrasmettitore del sensore di backup. In secondo luogo, le linee I2C del teensy richiedono resistori di pull up da 4,7 k. Terzo, i quattro resistori che collegano il "cavo notturno" (il filo di regolazione) e il "filo di attivazione del backup" sono necessari per fungere da divisore di tensione per ridurre i segnali 12V-13V a circa 2,5-3V.

AGGIORNAMENTO 22/07/18: ho trovato che il sensore di temperatura interno del modulo OBD-I2C emetteva numeri molto strani. A volte funzionava, ma la maggior parte delle volte il modulo emetteva temperature superiori a 400 gradi F. Per questo motivo, ho deciso di aggiungere il mio sensore di temperatura ds18b20. Sei più che benvenuto a utilizzare qualsiasi tipo di sensore di temperatura qui, ma dovrai modificare il codice Arduino.

AGGIORNAMENTO 01/03/19: Teensy 3.6 non si avvia quando fa molto freddo. Ho aggiunto un circuito di ripristino all'accensione per assicurarmi che si avvii correttamente.

Passaggio 4: driver dello schermo RA8875 e progettazione grafica

Driver dello schermo RA8875 e progettazione grafica
Driver dello schermo RA8875 e progettazione grafica

Il driver del display RA8875 ha una libreria chiamata Adafruit_RA8875, che ho utilizzato per creare le forme che si vedono nella prima e nella seconda pagina. La libreria per RA8875 può solo creare linee, rettangoli, rettangoli arrotondati, triangoli, ellissi e cerchi, quindi la grafica deve essere progettata in modo intelligente per creare forme più complesse. Ad esempio, l'anello grigio sulla prima pagina è in realtà un cerchio grigio completo di diametro maggiore seguito da un cerchio nero completo di diametro inferiore. Inoltre, una piccola sezione della pagina del sensore di backup contiene 2 triangoli disposti in modo tale da formare una forma poligonale. L'ho fatto in modo da poter cambiare il colore di una singola sezione della pagina del sensore di backup. Il file Arduino per il display contiene una serie di punti che ho usato per tenere traccia di dove si trovavano i triangoli e altre forme.

Ho usato questo fantastico sito Web per scegliere i colori RGB565 e definirli nello schizzo in modo da poter utilizzare i colori non predefiniti già predefiniti nella libreria Adafruit_RA8875.

In termini di caratteri, la libreria Adafruit_RA8875 ne supporta solo uno a meno che non si commenti una sezione della libreria, che consente di utilizzare i caratteri della libreria Adafruit_GFX. Ho incluso la libreria Adafruit_RA8875 modificata di seguito. Ho appena commentato alcune righe di codice e sono stato quindi in grado di utilizzare i caratteri nella libreria Adafruit_GFX. Inoltre, per utilizzare il carattere a 7 segmenti che ho usato in questo progetto, assicurati che il file "FreeSevenSegNumFont.h" che si trova nella cartella dei caratteri nella libreria Adafruit_GFX.

Passaggio 5: caricamento dello schizzo

Caricamento dello schizzo
Caricamento dello schizzo
Caricamento dello schizzo
Caricamento dello schizzo

Per caricare lo schizzo su Teensy 3.6, dovrai installare Teensyduino. Quindi dovrai sostituire le librerie Adafruit_RA8875 e Adafruit_GFX nella posizione della libreria teensy (non la tua posizione tipica nei documenti). Su Mac, dovevo fare clic con il pulsante destro del mouse sull'icona dell'applicazione Arduino nelle applicazioni, quindi accedere a /Contents/Java/hardware/teensy/avr/libraries. Su Windows, sono abbastanza sicuro che sia sotto l'unità C nei file di programma x86, Arduino e quindi nella cartella hardware. Dopo averlo fatto, dovrai cambiare la posizione dello sketchbook nell'applicazione Arduino modificandola nelle preferenze ovunque si trovino le tue librerie adolescenti (ad esempio /Applicazioni/Arduino.app/Contents/Java/hardware/teensy/avr).

AGGIORNAMENTO 22/07/16: a causa del problema del sensore di temperatura interno di cui ho parlato prima, ho dovuto installare un sensore di temperatura del modulo DS18B20. Vedrai 4 schizzi di arduino nel file zip. Caricare lo schizzo display_code se si desidera utilizzare il sensore di temperatura interno del modulo OBD-II I2C. Carica lo schizzo display_code_with_new_temperature_sensor se desideri utilizzare il modulo DS18B20 che ho collegato sopra.

AGGIORNAMENTO 17/11/17: ho corretto diversi bug nel software tra cui il DS18B20 che emetteva una temperatura di 185 Fahrenheit, il display non si accendeva affatto quando faceva freddo e i pixel si bloccavano nel colore sbagliato quando il display è oscurato.

Quindi, usa l'immagine che ho sopra per assicurarti che le tue piccole impostazioni corrispondano all'immagine. Ho scoperto che l'overclocking del teensy a 240 MHz non consentiva all'adattatore I2C OBD-II di comunicare con il teensy. Infine, fai clic su Carica.

Ho scritto commenti piuttosto estesi nei file di schizzo di arduino. Si prega di cercare una spiegazione su come funziona il software. Non esitate a contattarmi per qualsiasi domanda. Cercherò di rispondere al meglio delle mie capacità. Buona fortuna!

Passaggio 6: stampa 3D di una custodia LCD

Stampa 3D di una custodia LCD
Stampa 3D di una custodia LCD
Stampa 3D di una custodia LCD
Stampa 3D di una custodia LCD
Stampa 3D di una custodia LCD
Stampa 3D di una custodia LCD

Ho creato una copertura superiore e inferiore LCD stampata in 3D per proteggere il display da 7 . Ho allegato i file di parte dell'inventore. IPT e i file. STL.

Ho anche incluso una parte chiamata backup_sensor_ring.ipt, che è un anello che si adatta ai sensori di backup che ho collegato sopra. La mia auto aveva già dei fori per i sensori di backup preforati che erano troppo grandi per i sensori di backup che ho acquistato su Amazon, quindi ho dovuto creare un anello che si adattasse ai sensori di backup. Se hai intenzione di forare il paraurti con il trapano circolare incluso nel set, non avrai bisogno di questa parte.

Passaggio 7: dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione

Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione
Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione
Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione
Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione
Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione
Dividere la porta OBD-II in modo che Arduino abbia alimentazione solo quando l'auto è in funzione

Mi sono reso conto poco dopo aver installato il mio display che il display era sempre acceso, anche quando l'auto era spenta. Esaminando il pinout OBD-II, ho scoperto che la linea di alimentazione da 12 V al connettore OBD-II è sempre collegata direttamente alla batteria.

Per ovviare a questo, ho acquistato uno splitter OBD-II, ho tagliato il filo andando al pin 16 su uno dei due connettori sullo splitter, e poi ho collegato quel filo tagliato per aggiungere un filo del circuito.

Quindi, usando il mio multimetro, sono andato alla scatola dei fusibili lato guida e ho testato i fusibili esistenti per vedere quale fusibile ha ottenuto il potere dopo che la chiave è stata girata nell'accensione.

Infine, ho collegato il filo del circuito aggiuntivo al fusibile che ho localizzato in modo che il display si accenda solo quando la mia auto è in funzione. Per favore, fai qualche ricerca su come aggiungere correttamente un circuito alla tua auto. Ho trovato questo tutorial su YouTube per essere buono.

Consigliato: