Un sistema di diagnostica a bordo basato su Raspberry Pi

Esistono oggi in commercio diversi dispositivi che permettono di compiere una diagnostica della propria auto in modo autonomo. Ognuno ha le proprie funzionalità e possibilità di personalizzazione, ma molti di essi sono costosi e non permettono la possibilità di espansione o modifica tranne che per mezzo di un costo aggiuntivo. Lo scopo di questo articolo è presentare una dashboard per auto, che mostra interattivamente in tempo reale le informazioni importanti del veicolo: velocità, giri motore, carburante, stato della batteria. Tutto ciò avviene per mezzo di messaggi inviati sul bus CAN del veicolo tramite un cavo OBD-II ed elaborati da una singola scheda computer Raspberry Pi 3.

Introduzione

Le auto moderne viaggiano lentamente verso l'integrazione a bordo di microprocessori e dispositivi elettronici per rendere i veicoli più intelligenti ed economici. Tali dispositivi elettronici sono chiamati unità di controllo elettronico (ECU) e sono principalmente utilizzati per assistere il conducente e prendere decisioni complesse. Le ECU in un veicolo sono collegate tra loro tramite CAN-BUS, che rappresenta di fatto il protocollo standard per la comunicazione a bordo. Le ECU possono così comunicare tra loro trasmettendo pacchetti di dati contenenti informazioni diagnostiche e dai sensori. É possibile accedere a tali informazioni, sullo stato di salute del veicolo, tramite la porta OBD (diagnostica di bordo) che viene fornita in tutte le auto moderne.

Il progetto

Il progetto che andremo a descrivere in questo articolo copre lo sviluppo e la progettazione di una dashboard integrata in un'auto elettrica completamente nuova. Il progetto vede la collaborazione tra una casa produttrice automobilistica e un team di ricerca dell'Università di Pisa. Il progetto si pone come obiettivo quello di creare una soluzione completamente scalabile di un quadro strumenti digitale (dashboard) per auto implementato su un sistema embedded a basso costo come il Raspberry Pi. Il dispositivo finale risulta adattabile ad altri veicoli con poche modifiche fisiche o di software. In futuro potrebbero essere ampliate le sue capacità con l'aggiunta del modulo GPS, IMU, eccetera.

Il sistema proposto risulta completamente autonomo e può lavorare in tempo reale sfruttando l'accelerazione hardware. L'auto elettrica usata nel progetto è dotata di più ECU che trasmettono informazioni dei sensori sullo stato del veicolo come la temperatura, la velocità, l'rpm, lo stato di carica, etc. Queste informazioni possono essere raccolte e visualizzate tramite un display LCD. In tal modo, è possibile monitorare in modo semplice e sicuro i parametri delle auto mentre si guida. Il sistema è costituito da un Raspberry Pi 3 che comunica con le ECU del veicolo tramite adattatore USB OBD-II. I dati raccolti vengono poi analizzati dall'applicazione GUI scritta utilizzando il framework QT5 per l'accelerazione hardware. L'applicazione GUI utilizza C ++ e codice sorgente QML per il rendering dei misuratori e degli indicatori dell'auto in tempo reale. Tale applicazione viene mostrata su un display da 7 pollici HDMI montato direttamente davanti al conducente del veicolo. Il sistema è alimentato da un circuito stampato personalizzato che fornisce alimentazione al Raspberry Pi all'accensione, ma consente al Pi di spegnersi in sicurezza una volta spento il quadro strumenti.

Architettura del sistema

Lo schema a blocchi del sistema di monitoraggio del veicolo proposto è mostrato in Figura 1. Il sistema è costituito da un Display LCD 7 pollici HDMI che mostra il quadro strumenti digitale dell'auto tramite un'interfaccia utente. Il sistema è assemblato e installato all'interno dell'auto elettrica direttamente davanti al conducente del veicolo. Il sistema include anche un modulo OBD-II OBDLink Sx, una scheda Raspberry Pi 3 B (RPi) e un alimentatore. OBDLink Sx funziona come interfaccia tra la porta OBD dell'auto elettrica e la porta USB della scheda Raspberry Pi. RPi invia specifici comandi di richiesta dati all'adattatore OBD che interroga le ECU per leggere i parametri di misura e di stato dal veicolo. A questo punto, il cavo OBD trasferisce la richiesta dati alla porta OBD. Quindi, una risposta dall'OBD viene restituita dall'auto con i dati e le informazioni richieste. I dati vengono inoltrati all'RPi tramite l'adattatore USB OBD ed elaborati per essere inviati nell'applicazione GUI sviluppata in C ++ / QML nel framework Qt. I dati elaborati vengono infine visualizzati nel cruscotto digitale sullo schermo LCD per essere monitorati dal guidatore.

Figura 1: diagramma a blocchi del sistema proposto

Una scheda controller di alimentazione (PSC) è stata progettata per spegnere correttamente la scheda Raspberry Pi senza rischi di danneggiare la scheda SD. Vediamo adesso nel dettaglio ogni componente del sistema.

Lo standard OBD-II

Ogni auto o camion venduto dal 1996 è dotato di una porta OBD-II (On-Board Diagnostic II) utilizzata per richiedere dati principalmente per finalità diagnostiche. Tale porta OBD-II è costituita da un connettore a 16 pin situato sotto il cruscotto lato guidatore. Sebbene tutti i produttori di automobili siano incaricati di installare lo stesso connettore a 16 pin, essi sono liberi di implementare uno dei cinque protocolli di segnalazione OBD-II di base. Questi protocolli sono:

  • SAE J1850 PWM (Pulse Width Modulation) utilizzato nei veicoli Ford;
  • SAE J1850 VPM (Variable Pulse Width) utilizzato nei veicoli General Motors;
  • ISO9141-2 e ISO14230-4 utilizzati in Asia e in una varietà di veicoli europei;
  • ISO15765 CAN in tutti i veicoli prodotti dopo il 2008.

Per comunicare con le ECU dei veicoli tramite tali protocolli, è possibile inviare codici esadecimali chiamati OBD-II PIDs (Parameter IDs) che sono codici predefiniti assegnati ad un determinato parametro in un'auto. Generalmente, questi PID sono costituiti da due o più coppie di numeri esadecimali. I primi due numeri esadecimali si riferiscono a uno dei dieci servizi diagnostici OBD comunemente chiamati "modi" secondo l'ultimo standard OBD-II SAE J1979. La seconda coppia di numeri esadecimali corrisponde al parametro esatto di quella modalità, infatti, ogni sensore è assegnato ad un certo numero PID. Il Raspberry Pi è collegato alla porta OBD tramite un lettore OBD responsabile della lettura dei parametri del veicolo e di trasmetterli tramite USB.

OBDLink Sx

Il tipico modo per interfacciarsi con una porta OBD è utilizzando un lettore OBD specifico o un adattatore USB-OBD collegato a un PC. La maggior parte degli adattatori USB-OBD utilizza internamente un microcontrollore ELM327 prodotto da una società denominata ELM Electronics e appositamente predisposto per il servizio suddetto. Il chip ELM327 funge da ponte tra l'auto e un computer e di solito viene fornito con un'interfaccia utente per la diagnosi dell'auto. Funziona anche con tutti e cinque i protocolli supportando la comunicazione USB, Wi-Fi o Bluetooth. [...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2000 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici e potrai fare il download in formato PDF eBook e Mobi per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend