Si la SD prende un bel po' di ram, soprattutto in lettura e scrittura infatti nel mio progetto ho dovuto abolirla per quanto riguarda il logger, per il caricamento all'avvio del sistema e per gli aggiornamenti dei dati va bene.
Puoi provare con una mega, ma se pensi di espandere lo sketch ti ritroverai come me di nuovo con dei limiti.
Dovresti rivedere se tutte quelle matrici pubbliche le puoi spostare o passare tra le varie funzioni, verificare se gli int non superano i 255 e cambiarli in byte, alcune variabili dichiarale const se non variano .... ma soprattutto i serialprint lunghi danno un sacco di problemi. Studiare le librerie e vedere se puoi fare dei tagli, insomma rivederle. Tu attualmente stai occupando circa 290byte di variabili tutto il resto sta nelle librerie e nei tuoi messaggi seriali.
Arduino con il suo atmel sarebbe valido come strumento, ma pecca su librerie di funzionamento che hanno un po' di difetti, queste non sono ottimizzate per lavorare in simbiosi con molte altre, ciascun utente si inventa la lib usando più risorse di quelle che servono solo perchè a lui serviva quella, senza pensare che possono servirne anche altre nell'intero progetto... prendi ad esempio la libreria UDP per aggiornare i time dai server NTP, perchè mi mette una matrice da 255 byte quando il messaggio non supera i 16 byte (ma siii stiamo larghi non si sa mai), perchè molti nelle lib mettono int o long quando per certo le cifre non arrivveranno mai oltre il byte?
La morale è prendi anche 1terabyte, ma i programmatori dovrebbero pensare di più quando inventano e pubblicano librerie e sketch apparentemente formidabili.
ciao