Ciao, no, non avevo dimenticato che stiamo parlando di un 2T, ma effettivamente, hai ragione, un 2T sporcherebbe e renderebbe inutilizzabile una wideband (lambda a banda larga), forse ad eccezione di quei motori 2T ad inniezione diretta come gli envinrude E-TEC o i motori rotax E-TEC (stessa tecnologia licenziata da ROTAX) che vengono montati sui prodotti Sky-Doo (motoslitte da neve), infatti questi motori dichiarano una pulizia allo scarico pari al 4T quindi su questi è possibile montare le sonda lambda, ma avevo dimenticato che il tuo progetto è di inniezione indiretta, scusa.
In realtà se la ECU ha la mappa inniezione ben calibrata, e tutte le tabelle di correzione in funzione Temp. aria, temp. motore, press. barometrica, e arricchimento derivata farfalla, a meno che non succeda qualcosa di inatteso come la perdita di pressione benzina ecc difficile che vi siano condizioni di pericolo per il motore, ovviamente, forse per questo progetto, l'uso di termocoppia allo scarico sarebbe un MUST HAVE, ovviamente richiederebbe un circuito amplificatore visto il segnale molto debole delle termocoppie (si usa un chip ->AD595A).
Aggiornamento: Ho visto che con la programmazione ARDUINO di questi MCU non si possono superare certe prestazioni, programmando direttamente in C sfruttando i registri del micro si potrà andare molto più veloce. Esempio, se creiamo una semplice routine che accende e spegne un led con delay in microsecondi invece di ms, ed usando digitalWrite(), misurando con oscilloscopio otterremo una frequenza di 97-117KHz in funzione del pin usato (quelli con opzione PWM sono più lenti) ma se facessimo la stessa cosa con i registri, si otterrebbe una frequenza di 2,6MHz ovvero 20 volte di più! Quindi ci tocca studiare anche questo!! sarà per più avanti, per ora mi basta imparare l'arduino semplice!
per Nick85:
Ciao, interessante il tuo progetto, fai attenzione al segnale del negativo bobina, vedi che se questo non è filtrato ta un circuito, in realtà ti troveresti con dei picchi velocissimi di tensione alta fino a 400V (chiamata flyback e si produce ogni qualvolta si scarica la bobina). Di solito i contagiri hanno circuiti protetti contro queste veloci sovratensioni, quindi devi fare molta attenzione a questo. Ho qualche chema di circuito appositamente per "sensare" questo tipo di segnale, appena lo trovo te lo mando, ma grossolanamente, consiste di un diodo skotty, alcune resistenze ed un fotoaccoppiatore MOC205 se non ricordo male, in sostanza, taglia le sovratensioni e per maggiore sicurezza viene isolato dalla MCU con il fotoaccoppiatore al quale poi gli arriva un segnale entro i 0-5V.
L'idea di base è che il programma o firmware dell'ipotetica ECU Arduino sia in flash, ma le mappe in EEPROM, sarebbero meno della memoria max disponibile, quindi anche più veloce della SD da caricare (una SD mi sembra ha un tempo di lettura di 200ms vs 10ms dell' EEPROM interna se non ricordo male). Quindi, all'avviamento, in setup() legge i dati dall'EEPROM e le salva in delle array adeguatamente create in modo di avere tutti i dati necessari in RAM, ma è daverificare quante risorse disponibili restano, potrebbe bloccarsi il micro se andiamo ad intaccare tutta la RAM disponibile. Calcola che le mappe da avere come minimo sono:
mappa_inniezione[8][8]; //matrice da 8x8 breakpoints (carico/giri)
mappa_cranking[8]; //serve per la partenza a freddo.
mappa_correzione_Barometrica[8]; //correzione barometrica.
mappa_correzione_Temp_Aria[8]; //correzione in funz. temp. aria.
mappa_correzione_Temp_Mot[8]; //correzione in funz. temp. motore.
breakpoint_carico[8]; //tutti i valori carico selezionati (utile solo se si vogliono manipolare da pc)
breakpoint_giri[8]; //tutti i valori giri in mappa ovviamente saranno in base 8 bit per ovvi motivi di spazio EEPROM. idem che sopra.
Linearizzazione_sensore_TPS[2]; //valore ADC farfalla chiusa (o%), e valore ADC farfalla tutta aperta (100%)
Linearizzazione_sensore_MAP[4};//valore ADC min, ADC max, kpa min e kpa max.
Linearizzazione_sensore_Temp_Mot[8]; // valori ADC a temp. conosciute.
Linearizzazione_sensore_Temp_Air[8]; // valore ADC a temp. conosciute.
Linearizzazione_sensore_Temp_EGT[4]; // valore ADC min, ADC max, Temp. min e Temp. max.
ecc...
Da studiare bene l'organizzazione dei dati in eeprom visto che devono essere ad 8 bit, quindi tutti i dati che superano 255 devono essere espressi in EEPROM come una frazione, ovvero, se per es. i giri mettiamo: 10,20,25,255 possiamo semplicemente moltiplicare per 100 ed otteniamo: 1000, 2000, 2500, 25000 rpm. ma altre forme sono valide (es. x 50 ed otteniamo un max di 12xxx rpm) mmm, cè tanto tanto da lavorare!!