Datalog

Buona sera a tutti, sono alle primissime armi, e mi trovo qui a chiede il vostro aiuto per capire e quindi via via imparare sempre di più, nell'utilizzo dell'arduino. Ho acquistato un arduino uno R3 e un datalogger Real-time Datalog & IO shield v1.0 for Arduino della Neuelectronics http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=20, ma a parte accendere i led, non ci capisco un granchè, e cioè: vorrei imparare bene ad usare il datalogger per un aapplicazioncina semplice semplice (per voi) e cioè registrare su sd il log del cambio di stato di un input: quante volte un input è passato dallo stato 1 a zero e viceversa (simultato tramite un pulsantino come input). Il log dovrebbe tracciare data, ora e lo stato (aperto/chiuso oppure alto/basso oppure acceso/spento).. Non so se sono riuscito a spiegarmi. Ho letto e cercato di eseguire ciò che nel sito dove ho acuistato lo shield in questione, ma non ne vado fuori. Per favore, riuscite ad auitarmi?

Molte grazie

Shield molto interessante...

Cerca di essere più preciso: hai scritto o almeno provato a compilare ed eseguire qualche sketch ? Quali sono, se li hai provati, le parti degli esempi che non comprendi ? Qual è il tuo livello di conoscenza del C/C++ ?

Nella IDE 1.0 o precedenti sotto file > example > SD ci sono degli esempi, hai provato a caricarli?

ciao

Lo shield mette a disposizione una lib, questa: http://www.nuelectronics.com/download/projects/sensor_pff.zip

ma tu puoi usare la libreria SD inclusa nell'IDE, che contiene anche esempi di come usare una schedina SD. Guarda poi gli esempi di input, sempre allegati all'IDE, metti tutto insieme e scrivi il codice che poi lo guardiamo.

Dimenticavo: come avrai notato lo shield in questione ha due periferiche: la scheda sd e l'RTC (real time clock). Il mio consiglio (parlo per esperienza personale :-) ) è di iniziare a prendere confidenza con le necessarie librerie una alla volta (gli esempi inclusi nell'installazione di Arduino sono molto utili in questo senso).

Si ho provato a caricare gli esempi ma non succede niente; nella sd (che ho formattato fat e che è da 512mb)non c'è scritto nulla.

Grazie

burzatta: Si ho provato a caricare gli esempi ma non succede niente; nella sd (che ho formattato fat e che è da 512mb)non c'è scritto nulla.

Grazie

Cosa intendi dire con "non succede niente" ? Quale/i esempi/o hai caricato ? Se uno sketch di esempio necessita di "qualcosa" sulla sd è sufficiente creare qualche file di testo con un PC ed inserire poi la scheda sull'Arduino. Occhio al tipo di formattazione, però: se ricordo bene, le librerie disponibili per Arduino supportano soltanto il formato FAT16. Sono da escludere quindi schede di memoria superiori ad 1GB (a dire il vero mi pare funzionino anche le 2GB, ma non sono sicuro al 100%).

che ide usi?

Sono da escludere quindi schede di memoria superiori ad 1GB (a dire il vero mi pare funzionino anche le 2GB, ma non sono sicuro al 100%).

sisi vanno eccome :)

per quel che ne so io, max 2 gb. ma l'hai formattata con winzoz7?

Marbi: per quel che ne so io, max 2 gb. ma l'hai formattata con winzoz7?

Si l'ho inzozzata con windows ma non con quel mattone inutile del 7 .... xp basta e avanza :D

La FAT16 supporta max 2 GB, la FAT32 32 GB. La libreria SD allegata all'IDE supporta entrambi i filesystem: http://arduino.cc/en/Reference/SD

EDIT: @burzatta: consiglio anche di vedere questo: http://arduino.cc/en/Tutorial/Datalogger

Grazie leo, non l'avevo notato...

Ragazzi, ho provato l'esempio presente nell'ide di arduino (Datalogger con un solo input un pulsante al posto dei 3), ma non funziona, il serial monitor mi dice:

"Initializing SD card...Card failed, or not present error opening datalog.txt error opening datalog.txt"

Premetto che la sd è una micro sd con adattatore, è una Dikon micro sd da 512mb formattata fat16 e con un file nominato appunto datalog.txt

Mi potete aiutare per favore? Grazie

Occhio a questa parte:

// On the Ethernet Shield, CS is pin 4. Note that even if it's not
// used as the CS pin, the hardware CS pin (10 on most Arduino boards,
// 53 on the Mega) must be left as an output or the SD library
// functions will not work.
const int chipSelect = 4;

Ho provato a leggere lo schema del tuo shield: CS è PD5, che mi pare corrisponda all'IO n. 5 della scheda UNO R3. Quindi credo che al posto del 4 tu debba mettere 5. Tutto al condizionale perché potrei aver preso un granchio :-P

Ci deve postare uno sketch su cui sta lavorando altrimenti possiamo stare qui fino al 21/12/2012

Ottimo, Grazie funziona!!
Il file datalog.txt è stato popolato da dei numeri…
Ora però avrei un altro problema, e cioè capire come popolare il file con data, ora e stato (che può essere acceso o spento)

Mi puoi aiutare, perchè non so come fare?
Grazie

pablos lo sketch è il seguente: (è quello dell’esempio dell’ide di arduino uno r3)

#include <SD.h>

const int chipSelect = 5;

void setup()
{
Serial.begin(9600);
Serial.print(“Initializing SD card…”);
// make sure that the default chip select pin is set to
// output, even if you don’t use it:
pinMode(10, OUTPUT);

// see if the card is present and can be initialized:
if (!SD.begin(chipSelect)) {
Serial.println(“Card failed, or not present”);
// don’t do anything more:
return;
}
Serial.println(“card initialized.”);
}

void loop()
{
// make a string for assembling the data to log:
String dataString = “”;

// read three sensors and append to the string:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += “,”;
}
}

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
File dataFile = SD.open(“SN123456.txt”, FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// print to the serial port too:
Serial.println(dataString);
}
// if the file isn’t open, pop up an error:
else {
Serial.println(“error opening datalog.txt”);
}
}

ok è il dataString che devi costruire con davanti l’ora, colleghi tutto insieme e verrà stampata anche l’ora
solo che non hai miscelato lo sketch del timer io non avendolo non posso dirti di +, posso dirti che la stringa finale prima di essere scritta dovrà essere

String ora =00;
String minuti=00;
String secondi=00;
dataString = ora + “:” + minuti + “:” + secondi + " > " + dataString ;

prova a mettere questo dove trovi

if (analogPin < 2) {
dataString += “,”;
}

ovviamente quando avrai implementato l’orologio al posto degli 00 dovrai mettere il get_hour get_minute … ecc

mi da questo errore in compilazione: C:\Documents and Settings\Fra\Desktop\ARDUINO\arduino-1.0-windows\arduino-1.0\hardware\arduino\cores\arduino\dht11.c:3:22: error: wprogram.h: No such file or directory C:\Documents and Settings\Fra\Desktop\ARDUINO\arduino-1.0-windows\arduino-1.0\hardware\arduino\cores\arduino\dht11.c:18: error: expected '=', ',', ';', 'asm' or 'attribute' before 'read_dht11_dat' C:\Documents and Settings\Fra\Desktop\ARDUINO\arduino-1.0-windows\arduino-1.0\hardware\arduino\cores\arduino\dht11.c:39: error: expected ')' before '*' token