salvare valori temperatura

ciao a tutti :slight_smile:
ho creato un piccolo progetto con dei led, un rgb un termistore e una fotoresistenza
in che modo posso salvare i dati della temperatura e poi scaricarli sul computer??
devo per forza usare una memory card?
grazie in anticipo :slight_smile:

Puoi anche salvarli su eeprom e poi tramite seriale li leggi li importi ad esempio su excell e finita la lettura la cancelli, solo che la eeprom ha un numero di scritture cancellazioni limitate occhio....
oppure usi una EEPROM o FRAM esterna ad arduino ma la cosa si complica più che ad usare una SD

e come farei a usare una sd?
mi verrebbe a costare molto?
ho sempre avuto un dubbio:quando metto una shield attaccata all'arduino uno mi usa tutti i pin concui l'attacco??

Non ti verrebbe a costare molto, puoi fare tu uno shield con i dovuti partitori e la SD oppure prenderlo già fatto.
Se hai uno shield ethernet ancora meglio, puoi mandare i dati su "google spreadsheet" sono 5 Gb di spazio free per ogni occount google. Vedresti i dati on-line da qualsiasi pc in tempo reale con grafici ecc.

a me bastava semplicemente salvarli :slight_smile:
se no creando un programma in visual basic x il computer ke riceva i valori??
so che si può fare ma nn ho idea di come farlo :slight_smile:

Ti assicuro che non è difficile

http://www.roland-riegel.de/sd-reader/index.html

ok grazie :slight_smile: adesso quando avro tempo(non prima di sabato perchè parto per una gita scolasica a praga) cercherò di guardarci e di capirci qualcosa

Dipende tutto da quanti dati devi memorizzare.
L' eeprom interno al Arduino é da 1KByte.
Gli EEprom esterni sono fino a un centinaio di kByte
Le schedine SD sono fino a 2GByte, quelle SDHC fino a 32GByte
Ciao Uwe

@uwefed ok per ora non posso comprare la shield sd quindi penso di usare l'eproom
come faccio a salvare i dati e soprattutto poi per leggerli come faccio??
quanti dati posso salvare con un kbyte? e se spengo l'arduino si cancellano?
grazie mille :slight_smile:

lupo95:
@uwefed ok per ora non posso comprare la shield sd quindi penso di usare l'eproom
come faccio a salvare i dati e soprattutto poi per leggerli come faccio??

Per salvarli e leggerli è facile, usi la libreria EEPROM:

Per spedirli al computer devi avere una connessione attiva: se non puoi comprarti la Ethernet, l'alternativa è attaccare l'Arduino alla seriale e poi spedire i dati. Però poi devi scriverti un software lato PC che riceva questi dati e li salvi da qualche parte.

quanti dati posso salvare con un kbyte? e se spengo l'arduino si cancellano?
grazie mille :slight_smile:

Sulla quantità dipende da cosa salvi ed in che formato.
Se li salvi su memorie non volatili (Flash, Eeprom), i dati non li perdi staccando l'alimentazione.

grazie mille
c'è una cosa che nn ho capito io ho una variabile chiamata temperatura in cui vengono letti gli ononimi dati
io come faccio a scriverli sulla eproom?
cioè sul link ke mi hai dato c'è scritto "EEPROM.write(i, i);" ma io devo solo mettere la temperatura come faccio??

La temperatura sarà la lettura di un sensore salvata in una variabile. Devi salvare la variabile.
Se la variabile è di tipo int, devi salvarla scomposta nei suoi 2 byte, byte basso e byte alto:
http://arduino.cc/en/Reference/LowByte
http://arduino.cc/en/Reference/HighByte

Tempo fa ho fatto questo sketch in Processing, per salvare appunto dei valori provenienti dalla seriale di Arduino riguardanti la misurazione della temperatura, è facilmente modificabile per ogni esigenza:

// Scrittura su file da Arduino
import processing.serial.*;
Serial mySerial;
PrintWriter output;

void setup() {
  mySerial = new Serial( this, Serial.list()[1], 9600 );  // seleziona la porta seriale di Arduino e la velocità 
  mySerial.bufferUntil('\n'); // Buffer seriale fino a new line
  output = createWriter( "dati.txt" );  // Nome file dati (lo scrive dove risiede il programma)
}

void draw() {
  // Imposta dati con data e tempo
  int gi = day();    // giorno
  int me = month();  // mese
  int an = year();   // anno
  int se = second(); // secondi 
  int mn = minute(); // minuti 
  int or = hour();   // ore 

  if (mySerial.available() > 0 ) {
    String value = mySerial.readStringUntil('\n');   // legge dati da seriale fino a new line 
    if ( value != null ) {
      // scrive dato tempo oppure aggiungere anche data
      String s = String.valueOf(or)+":"+String.valueOf(mn)+"."+String.valueOf(se)+" ";  
      output.print( s );

      output.print( value );   // scrive su file lettura da seriale da Arduino

    }
  }
}

// Esce dal programma alla pressione di qualsiasi tasto
void keyPressed() {
  output.flush(); // Scrive i dati rimanenti su file
  output.close(); // Chiude il file
  exit(); // Esce dal programma
}