Vai al contenuto
PLC Forum


Arduino funzionamento scheda SD card


Rwhite

Messaggi consigliati

Buongiorno a tutti,

sto sviluppando un datalogger utilizzando Arduino MKR1010 con scheda SD Card, per controllo temperatura e umidita.

Ho imbastito un semplice codice e funziona regolarmente quando utilizzo il pc come monitor.

Se lancio lo stesso codice in stand-alone non viene salvato alcun dato sulla SD Card.

Ho provato utilizzare il codice dell'esempio fornito dalla Ide di Arduino, e succede la stessa identica cosa.

Immagino ci sia qualche piccolo errore, qualcuno mi può aiutare?

grazie

 

Questo è il codice dell'esempio:

/*
  SD card datalogger

 This example shows how to log data from three analog sensors
 to an SD card using the SD library.

 The circuit:
 * analog sensors on analog ins 0, 1, and 2
 * SD card attached to SPI bus as follows:
 ** MOSI - pin 11
 ** MISO - pin 12
 ** CLK - pin 13
 ** CS - pin 4 (for MKRZero SD: SDCARD_SS_PIN)

 created  24 Nov 2010
 modified 9 Apr 2012
 by Tom Igoe

 This example code is in the public domain.

 */

#include <SPI.h>
#include <SD.h>

const int chipSelect = 4;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("Initializing SD card...");

  // 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:
    while (1);
  }
  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("datalog.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");
  }
}

 

Graziano

Link al commento
Condividi su altri siti


I lettori SD card per arduino in genere hanno i segnali con livello 3.3V. Quelle decenti hanno i traslatori di livello sulla scheda, le più economiche no.

Hai verificato la presenza dei traslatori?

Link al commento
Condividi su altri siti

2 ore fa, Livio Orsini ha scritto:

lettori SD card per arduino in genere hanno i segnali con livello 3.3V.

La scheda Arduino che sta usando è a 3.3 V, quindi vale la pena di controllare se i traslatori ci sono e nel caso toglierli/bypassarli.

 

3 ore fa, Rwhite ha scritto:

Ho imbastito un semplice codice e funziona regolarmente quando utilizzo il pc come monitor.

Compreso la scrittura su SD?

 

3 ore fa, Rwhite ha scritto:

Se lancio lo stesso codice in stand-alone non viene salvato alcun dato sulla SD Card.

Come alimenti il tutto senza PC?

 

Uno schema + foto dei collegamenti aiuterebbe a capire.

 

Ciao, Ale.

Modificato: da ilguargua
precisazione
Link al commento
Condividi su altri siti

Salve a tutti e grazie a chi mi ha risposto.

Si, usando il pc come monitor funziona regolarmente anche in scrittura.

In stand-alon alimento con un alimentatore 220v 5v Usb.

Scusa Livio, la mia ignoranza in materia, i traslatori? grazie

Grazie a tutti

Graziano

 

IMG_20200527_110308[1].jpg

IMG_20200527_105945[1].jpg

Link al commento
Condividi su altri siti

Intanto prova a commentare tutti i riferimenti alla Serial, visto che standalone non la usi, poi se riesci a collegare qualche led (con relativa resistenza, mi raccomando!) puoi mettere una sorta di debug (es. setup() terminato OK, SD.begin() OK, SD.open() OK, etc.

A proposito, vedo che nel codice esegui ad ogni passaggio del loop() SD.open() senza mai effettuare un SD.close(). Sei sicuro che vada bene?

 

Ciao, Ale.

Link al commento
Condividi su altri siti

16 minuti fa, Rwhite ha scritto:

Scusa Livio, la mia ignoranza in materia, i traslatori?

 

Non avendo fatto attenzione ho ipotizzato che tu usassi il classico "uno" a 5V.

In questo caso la scheda SD, che lavora a 3.3V, ha necessità di essere interfacciata tramite appositi dipositivi bidirezionali che traslano 3.3V a 5V e viceversa.

 

 

10 minuti fa, ilguargua ha scritto:

vedo che nel codice esegui ad ogni passaggio del loop() SD.open() senza mai effettuare un SD.close(). Sei sicuro che vada bene?

 

 

Guarda che lo chiude regolarmente.

 

  File dataFile = SD.open("datalog.txt", FILE_WRITE);

  // if the file is available, write to it:
  if (dataFile) {
    dataFile.println(dataString);
    dataFile.close();

Lo chiude se, e solo se, il file è aperto.

Link al commento
Condividi su altri siti

16 minuti fa, Livio Orsini ha scritto:

Guarda che lo chiude regolarmente.

Mi era sfuggito, il codice senza tag lo leggo peggio...

 

Ciao, Ale.

Link al commento
Condividi su altri siti

Ciao a tutti,

il codice l'ho copiato pari pari dagli esempi, senza fare modifiche, questo per evitare eventuali miei errori.

Ho pensato di usare eventualmente Arduino 1, ma vorrei anche capire perchè non funziona, visto che vorrei fare delle piccole applicazioni con MKR1010.

grazie

Graziano

 

Link al commento
Condividi su altri siti

38 minuti fa, Rwhite ha scritto:

ma vorrei anche capire perchè non funziona,

Hai provato a commentare le chiamate alle seriale? Quella scheda ha l'USB nativa (sul chip principale) e non vorrei che si impallasse senza connessione.

 

Ciao, Ale.

Link al commento
Condividi su altri siti

Ragionandoci potrebbe anhce succedere.Con arduino non succede ma non conoscendo MKR1010 direi che commentare tutti i Serial.print è una verifica rapida ed indolore.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...