Alla Sharif University of Technology ho lavorato come ingegnere software embedded su un dispositivo di monitoraggio della climatizzazione in un ambiente di ricerca. Il mio compito era semplice da dire e lungo da fare: acquisire i dati dei sensori ambientali, elaborarli, registrarli e mostrarli agli utenti in modo chiaro. Da allora, in Germania e in Italia, ho ritrovato la stessa catena ovunque ci fosse un dato fisico da trasformare in una decisione.
Si parte dal segnale, non dal codice. Quali grandezze servono, con che frequenza, con che precisione? Che cosa succede quando un sensore si stacca, satura o restituisce un valore assurdo? Rispondere prima evita il problema più comune: scoprire mesi dopo che i dati registrati non bastano per la domanda a cui dovevano rispondere.
Il firmware, in C o C++ sul microcontrollore, fa poche cose ma deve farle sempre: legge i sensori, mette un timestamp a ogni misura, scarta o marca i valori fuori dall'intervallo plausibile e li impacchetta. Ogni pacchetto ha delimitatori e un checksum, che si tratti di una linea seriale, di un bus I²C, di un CAN bus o di un collegamento radio: il ricevitore deve poter riconoscere un pacchetto corrotto invece di mostrarlo come un dato vero.
La registrazione è la parte che viene sempre sottovalutata. Salvo i dati grezzi, con i metadati della sessione, prima di qualsiasi elaborazione, e non li sovrascrivo mai. Un file per sessione, con data e ora nel nome, basta per iniziare. Quei file servono per il debug, per i collaudi e, più avanti, per addestrare i modelli.
L'elaborazione, di solito in Python, applica filtri, conversioni di unità e calibrazioni, e calcola le grandezze derivate. La calibrazione va versionata come il codice: se cambia il coefficiente di un sensore, i dati vecchi e quelli nuovi devono restare confrontabili. Alla fine c'è la visualizzazione, pensata per chi usa il dispositivo: poche grandezze, leggibili, con i valori anomali evidenziati.
Poi si testa tutta la catena, non i pezzi. Iniettare valori noti dal lato del sensore e verificare che arrivino identici fino allo schermo è il modo più rapido per trovare un errore di scala, un'unità sbagliata o un pacchetto perso. È lo stesso principio che ho usato a Voltfang, ad Aquisgrana, costruendo il pacchetto per leggere i dati CAN delle batterie e la generazione automatica dei report di collaudo.
Oggi questa esperienza è il motivo per cui mi fido poco di un modello AI senza guardare come sono nati i suoi dati. Manutenzione predittiva, rilevamento di anomalie, previsioni: funzionano quando l'acquisizione è stata progettata bene. Se stai pensando a un progetto di questo tipo, la pagina su sistemi embedded e IoT spiega come lavoro.