Sistema completo per acquisizione, visualizzazione e analisi dati del sensore di pressione freni per vetture da competizione. Il progetto integra una GUI desktop in Python con una scheda Adafruit Feather M4 CAN per acquisizione dati in tempo reale.
- Descrizione
- Componenti Hardware
- Requisiti Software
- Installazione
- Collegamenti Hardware
- Utilizzo
- FunzionalitΓ
- Formato Dati
- Troubleshooting
Il sistema permette di:
- Acquisire dati dal sensore di pressione freni a 10 Hz (ogni 100ms)
- Visualizzare in tempo reale i valori su grafico interattivo
- Registrare stint completi con salvataggio su memoria flash
- Analizzare dati storici caricandoli dalla memoria
- Esportare dati in formato CSV per analisi approfondite
- Tipo: Sensore ratiometrico 0-170 bar
- Range tensione: 0.5V - 4.5V @ 5V alimentazione (0.33V - 2.97V @ 3.3V)
- Output: Analogico lineare
- Modello: Adafruit Feather M4 CAN Express
- Flash: 2MB QSPI integrata per salvataggio dati
- ADC: 12-bit (risoluzione 0-4095)
- Comunicazione: USB seriale @ 115200 baud
- Python: 3.8 o superiore
- Sistema Operativo: Windows, macOS, Linux
- Librerie richieste:
PyQt6>= 6.4.0 (interfaccia grafica)pyqtgraph>= 0.13.0 (grafici in tempo reale)pyserial>= 3.5 (comunicazione seriale)numpy>= 1.24.0 (elaborazione dati)
- PlatformIO (consigliato) o Arduino IDE
- Librerie:
Adafruit SPIFlash>= 5.1.1SdFat - Adafruit Fork>= 2.3.54
Scaricare ed installare tramite il file .exe disponibile nella sezione "Release"
# Clona o scarica il repository
cd PressioneFreniGUI-PoliMarche
# Installa le dipendenze Python
pip install -r requirements.txt# Naviga nella cartella del firmware
cd GUI_Pressione_Freni
# Compila e carica il firmware
pio run --target upload- Installa l'Arduino IDE
- Aggiungi il supporto per Adafruit SAMD boards:
- File β Preferenze β URL aggiuntive per gestione schede
- Aggiungi:
https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
- Installa "Adafruit SAMD Boards" dal Board Manager
- Installa le librerie richieste dal Library Manager:
- Adafruit SPIFlash
- SdFat - Adafruit Fork
- Apri
GUI_Pressione_Freni/src/main.cpp - Seleziona scheda: Adafruit Feather M4 CAN (SAMD51)
- Carica lo sketch
Sensore di Pressione Feather M4 CAN
βββββββββββββββββββ ββββββββββββββββββββ
β β β β
β VCC (3.3V) ββββββββββββββββ€ 3V3 β
β GND ββββββββββββββββ€ GND β
β SIGNAL ββββββββββββββββ€ A4 (Pin 18) β
β β β β
βββββββββββββββββββ ββββββββββββββββββββ
β
β USB
βΌ
Computer
| Sensore | Feather M4 | Descrizione |
|---|---|---|
| VCC | 3V3 | Alimentazione sensore (3.3V) |
| GND | GND | Massa comune |
| SIGNAL | A4 | Segnale analogico (0.33V - 2.97V) |
β οΈ NON alimentare il sensore a 5V - la Feather usa logica 3.3V- Usare cavi schermati per ridurre interferenze
- Controllare la polaritΓ prima di alimentare
- Il sensore Γ¨ ratiometrico: l'output scala proporzionalmente con l'alimentazione
- Connetti la Feather M4 CAN al computer via USB
- Avvia la GUI (se uso manuale):
altrimenti avviare tramite il programma installato
python main.py
- Seleziona la porta COM della Feather dal menu a tendina
- Clicca "Connetti"
- Verifica che lo status bar mostri "Connesso a COMX"
- Clicca "Inizia Stint" per avviare la registrazione
- Il grafico si aggiorna in tempo reale (10 Hz)
- I valori Min/Max/Media vengono calcolati automaticamente
- Clicca "Termina Stint" al termine della sessione
- Dopo aver terminato uno stint, clicca "Salva su Flash"
- I dati vengono trasferiti e salvati nella memoria della Feather
- Il file viene nominato automaticamente:
stint_YYYYMMDD_HHMMSS.json - Attendi conferma "Stint salvato su memoria flash!"
- Clicca "Carica da Flash"
- Seleziona lo stint desiderato dalla lista
- Clicca OK per caricare e visualizzare i dati
- Il grafico viene congelato automaticamente per l'analisi
- Con uno stint caricato o grafico bloccato, clicca "Esporta CSV"
- Il file CSV viene salvato nella cartella corrente
- Formato:
stint_export_YYYYMMDD_HHMMSS.csv
| Pulsante | Funzione | Stato Richiesto |
|---|---|---|
| Connetti/Disconnetti | Stabilisce/chiude connessione seriale | - |
| Aggiorna | Ricarica lista porte COM disponibili | Disconnesso |
| Inizia Stint | Avvia registrazione dati | Connesso |
| Termina Stint | Ferma registrazione | Stint attivo |
| Salva su Flash | Salva stint su memoria Feather | Stint terminato |
| Carica da Flash | Carica stint salvato | Connesso |
| Esporta CSV | Esporta dati su file locale | Grafico bloccato |
| Blocca/Sblocca Grafico | Ferma/riprendi acquisizione | Connesso |
| Gestisci Memoria | Visualizza info, elimina file, formatta | Connesso |
- Asse X: Tempo in secondi dall'inizio acquisizione
- Asse Y: Pressione in bar (0-170 bar)
- Aggiornamento: 10 Hz (100ms)
- Buffer: Ultimi 1000 campioni (100 secondi)
- Pressione corrente: Valore in tempo reale (font grande, grassetto)
- Minimo: Pressione minima rilevata
- Massimo: Pressione massima rilevata
- Media: Pressione media calcolata
- Spazio totale disponibile (2 MB QSPI)
- Spazio utilizzato dagli stint
- Spazio libero rimanente
- Numero di file salvati
- Elimina File Selezionati: Rimuove stint specifici (selezione multipla)
- Formatta: Elimina TUTTI gli stint salvati (richiede conferma)
- β Disconnessione improvvisa gestita senza crash
- β Reset automatico interfaccia in caso di errore
- β Conferme prima di operazioni distruttive
- β Verifica integritΓ file salvati
- β Timeout su operazioni seriali
Dati Real-Time:
timestamp,pressione
12345,45.67
12445,46.12
12545,44.89
Comandi/Risposte:
// Lista file
FILES:
- stint_20251127_143022.json (5432 bytes)
- stint_20251127_150015.json (8901 bytes)
END_FILES
// Caricamento dati
DATA_START
{"date":"2025-11-27T14:30:22","duration":89.5,"samples":895,"data":[...]}
DATA_END
// Conferme
OK:File saved: /stints/stint_20251127_143022.json (5432 bytes)
ERROR:Flash not available
{
"date": "2025-11-27T14:30:22.123456",
"duration": 89.5,
"samples": 895,
"data": [
{
"timestamp": "14:30:22.123",
"time": 0.0,
"pressure": 0.45
},
{
"timestamp": "14:30:22.223",
"time": 0.1,
"pressure": 12.34
}
// ... altri campioni
]
}Tempo (s),Pressione (bar)
0.00,0.45
0.10,12.34
0.20,23.56
0.30,34.78
...Il sensore Γ¨ configurato con i seguenti parametri:
// Configurazione nel firmware
#define MAX_PRESSURE 170.0f // Pressione massima (bar)
#define Vref 3.3f // Tensione riferimento ADC
#define res 4095 // Risoluzione ADC (12-bit)
// Formula di conversione
float valoreADC = lettura_ADC * (Vref / res);
float pressione = (valoreADC - 0.33) * 170.0 / (2.97 - 0.33);| Pressione (bar) | Tensione @ 3.3V | ADC (12-bit) |
|---|---|---|
| 0 | 0.33 V | ~410 |
| 85 (metΓ scala) | 1.65 V | ~2048 |
| 170 (fondo scala) | 2.97 V | ~3686 |
Il firmware implementa un filtro a media mobile (10 campioni) per ridurre il rumore dell'ADC.
Cause:
- Cavo USB allentato
- Problemi di alimentazione
- Interferenze USB
Soluzioni:
- Controlla che il cavo sia ben inserito
- Usa una porta USB diretta (evita hub non alimentati)
- Il programma si resetterΓ automaticamente
Cause:
- Memoria flash non inizializzata
- Filesystem corrotto
Soluzioni:
- Ricarica il firmware sulla Feather
- Usa il comando "FORMAT" per riformattare
- Verifica che le librerie SPIFlash siano installate correttamente
Cause:
- Collegamenti sbagliati
- Sensore guasto
- Calibrazione errata
Soluzioni:
- Verifica i collegamenti (vedi schema sopra)
- Controlla la tensione sul pin A4 con multimetro:
- Riposo: ~0.33V
- Pressione applicata: aumenta fino a 2.97V
- Verifica che il sensore sia alimentato a 3.3V (NON 5V!)
Soluzioni:
- Aggiorna le librerie Python:
pip install --upgrade -r requirements.txt - Verifica compatibilitΓ sistema operativo
- Controlla log errori nella console
Verifiche:
- Controlla spazio disponibile ("Gestisci Memoria")
- Verifica che il file non sia troppo grande
- Prova a formattare la memoria
- Riavvia la Feather
| Comando | Descrizione | Risposta |
|---|---|---|
SAVE:filename:json_data |
Salva stint su flash | OK:... o ERROR:... |
LIST |
Lista file salvati | FILES: ... END_FILES |
LOAD:filename |
Carica stint | DATA_START ... DATA_END |
DELETE:filename |
Elimina file | OK:... o ERROR:... |
INFO |
Info memoria | INFO_START ... INFO_END |
FORMAT |
Formatta memoria | OK:... |
DEBUG |
Info debug sistema | DEBUG_INFO: ... END_DEBUG |
PressioneFreniGUI-PoliMarche/
β
βββ main.py # GUI Python principale
βββ requirements.txt # Dipendenze Python
βββ README.md # Questa documentazione
βββ LICENSE # Licenza GNU GPL v3
β
βββ GUI_Pressione_Freni/ # Firmware Feather M4 CAN
βββ platformio.ini # Configurazione PlatformIO
βββ src/
β βββ main.cpp # Codice firmware principale
βββ include/
βββ lib/
βββ test/
Alessandro Zingaretti
Polimarche Racing Team - UNIVPM
UniversitΓ Politecnica delle Marche
Questo progetto Γ¨ rilasciato sotto licenza GNU General Public License v3.0 (GPL-3.0).
Per il testo completo della licenza, consulta il file LICENSE o visita:
https://www.gnu.org/licenses/gpl-3.0.html
Copyright Β© 2025 Alessandro Zingaretti - Polimarche Racing Team
v1.0 - Novembre 2025
- Acquisizione dati real-time 10 Hz
- Salvataggio stint su flash QSPI
- Gestione completa memoria
- Esportazione CSV
- Protezione disconnessioni
Per problemi, domande o suggerimenti, puoi contattarmi tramite zingaale@gmail.com.
π Buona acquisizione dati! π