3.6 KiB
Analisi Termica Forno — Cevolani
Script Python per l'analisi del profilo termico di una scatola che attraversa un forno industriale, con acquisizione tramite sensori IR.
Setup (Windows)
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
Avvio rapido
Tutto il progetto è accessibile tramite un menu interattivo:
python main.py
Il menu si ripete dopo ogni operazione finché non si preme 0 per uscire.
Le voci del menu vengono costruite automaticamente in base alle cartelle presenti nel progetto: aggiungere una nuova cartella induttoreX/ con un appX.py la fa apparire automaticamente.
Struttura del progetto
temperatura/
├── data.csv # dati acquisiti (input)
├── main.py # menu interattivo
├── report_completo.py # generatore report PDF + LaTeX
├── requirements.txt
├── start/
│ ├── calcola_t_amb.py # calcola T∞ media ponderata
│ └── plot_temperatura.py # visualizza i dati raw
└── induttoreX/ # una cartella per ogni induttore
├── appX.py # script di fit (parametri hardcoded)
├── induttoreX.png # grafico generato
└── reportX.md # report generato
Voci del menu
Calcola T ambiente
Script: start/calcola_t_amb.py
Calcola la temperatura ambiente media ponderata sul tempo (regola dei trapezi) usando la colonna temp_amb IR [C] dell'intera acquisizione. Stampa i risultati a console e genera start/report.md.
Il valore ottenuto viene usato come costante
T∞in tutti i fit.
Plot dati raw
Script: start/plot_temperatura.py
Visualizza il profilo grezzo di entrambe le serie (temp_obj IR e temp_amb IR) nell'intervallo definito dalle variabili T0 e T_END in cima al file. Salva il grafico in start/plot_temperatura.png.
Induttore X — appX.py
Script: induttoreX/appX.py
Esegue la regressione non lineare sul tratto di acquisizione definito dalle variabili T0 e T_END in cima allo script (modificabili manualmente). Produce:
induttoreX/induttoreX.png— grafico con dati raw e curva di fit sovrappostiinduttoreX/reportX.md— equazione trovata, parametri stimati con incertezze (1σ) e R²
Per aggiungere un nuovo induttore: copiare uno script esistente, aggiornare T0, T_END (e W0_START/W0_END se serve escludere un intervallo), e salvarlo in una nuova cartella induttoreX/.
Report completo (PDF + LaTeX)
Script: report_completo.py
Legge automaticamente tutti i reportX.md presenti nelle cartelle induttore*/ e genera:
report_completo.tex— sorgente LaTeX compilabile con MikTeX o TeX Livereport_completo.pdf— PDF professionale con cover page, scheda documento, header/footer e tabella riepilogativa finale
Il PDF viene generato direttamente da Python tramite reportlab (nessuna dipendenza esterna richiesta).
Dati
data.csv — colonne utilizzate:
| Colonna | Descrizione |
|---|---|
time since start [ms] |
tempo dall'inizio (convertito in secondi negli script) |
temp_obj IR [C] |
temperatura della scatola (target del fit) |
temp_amb IR [C] |
temperatura ambiente (usata per calcolare T∞) |
Modello di fitting
Tutti i fit usano il modello di raffreddamento di Newton:
T(t) = T∞ + A · exp( -(t - t₀) / τ )
con T∞ fissa (calcolata da calcola_t_amb.py) e parametri A, τ liberi, stimati con regressione non lineare (metodo TRF di scipy.optimize.curve_fit).