SD- µSD Adapter als SD-Sheld verwenden?

Hi Freaks,

Nach etlichen Seiten SuFu und vielen von Euren Beiträgen will ich mal in den Raum werfen, ob es möglich ist, einen Micro-SD- SD Adapter mit ein paar Strippen nach dem Adapter- Schaltplan (der mit den 1,8k und 3,3k Widerständen...) an den UNO zu koppeln.

Wenn ich die Infos hier richtig verstanden habe, dann kann der Arduino mit der 3,3V Anpassung direkt SD-Card.

Hintergrund für meine 'Spielereien' ist ein Datalogger, welcher im 10 min Abstand Werte speichert. Im Kopf habe ich daher eine Batterie, eine SD Karte, den Arduino, ein Transistor um die 12V extern auf einen Transmitter/ Sensor zu legen. Wenn mir einer dann noch 'mal eben' das Stromsparen mit Stand by/ Idle mode erklären kann, wäre das supi, aber ich SuFu-che ja noch... :wink:

Greetz, Linpotec

Hi Freaks,

da der Post mittlerweile auf Seite drei gelandet ist, hier nochmal die Bitte um eure Comments:

Ich habe eine (Gülle) Pott, der vom Stand (Ich habe einen 4- 20mA Sensor, 24V, oder eine 12V Druckmessung, 0-5V zur Verfügung) und eine Temperaturmessung mit PTC zur Verfügung. Die exakten Daten, also Stand in mm und Temperatur in µ° sind nicht wichtig, hier ist eher eine Tendenz +- 5% notwendig.

Zum Testen läuft das Sketch

/*
  Logger 2 Channel
  Erfassung zweier analoge Signale, akt. Wärmetank Gala
 
  Done TR 11.06.2012
 */
 
int LED12 = 12;  // Out 12, Power auf Sensoren
int LED13 = 13;  // Out 13, Onboard LED, Kontrolle/ aktiv  
int PB2 = 2;     // Taster an Pin2
int EIN2;        // Status Pin2
int PB3 = 3;     // Taster an Pin3
int EIN3;        // Status Pin3
int TDEL = 1000; // Verz. Zeit
int TDIS = 0;    // Zeit in min

// analogRead(0) = Ch0, Level Wasser
// analogRead(1) = Ch1, Temperature Wasser
// analgoRead(2) = Ch2, N/A
// analogRead(3) = Ch3, N/A

// the setup routine runs once when you press reset:
void setup() {       
  // Initialisiere seriellen Transfer
  Serial.begin(9600);
  // initialize digital pins
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  
// Initialize analog pins

// print Header

  Serial.println("Logger, TR");
  Serial.println("");
  Serial.println("Zeitstempel; LH2O; TH2O; Delay");
  Serial.println("");
  Serial.println("start");

}


// Loop fängt hier an
void loop() {
 
  int EIN2 = digitalRead(PB2);
  if(EIN2 == HIGH)
  {
  TDEL = 600;
  }
  else
  {
  TDEL = 3000;
  
  
  delay(TDEL);
  delay(TDEL);
  TDIS = TDEL / 600;
  
  }
  
  long STAMP = millis();
  
  //digitalWrite(LED12, HIGH);
  digitalWrite(LED13, HIGH);
  int LH2O = analogRead(0);
  int TH2O = analogRead(1);
  
  Serial.print(STAMP);
  Serial.print("; ");
  Serial.print(LH2O);
  Serial.print("; ");  
  Serial.print(TH2O);
  Serial.print("; ");
  Serial.print(TDIS);
  Serial.println("; ");
  
  delay(200);
  //digitalWrite(LED12, LOW);
  digitalWrite(LED13, LOW);
}

// End

auf der seriellen Schnittstelle.

Die Umschaltung der Zeiten ist zum Testen gedacht, Schalter ein, 10 sec Takt, Schalter offen, 10 min Takt.

Da die Messung über ca. 1/2 Jahr und fern ab einer Stromversorgung laufen soll, will ich eine wasserdichte Kiste, den Ardu und die Mimik in dem Miniraum an dem Behälter (passt...) mit einer Autobatterie einbauen, welche dann alle 1- 2 Wochen kontrolliert/ geladen wird.

Konkrete Fragen also:

  • Kann ich den Adapter µSD- SD-Karte über eine Platine mit der 5zu 3,3V an den Ardu anschließen, oder muss da noch zusätzliche Intelligenz/ Pegelanpassung durchgeführt werden?
  • Wie sieht es mit dem Stromverbauch im 'Delay' aus, gibt es dort einen besseren Weg, in der Wartezeit mit ein paar µA zu arbeiten und den Prozessor nur zum Einlesen/ Schreiben aufwachen zu lassen?
  • meine Zeitstempel lasse ich zur Zeit über die Millis laufen. die Laufzeit wird entsprechend bei ca. 50 Tagen liegen. Kann ich nach Ablauf (Also millis checken, wenn die aktuelle Zeit z.B. vorher über 50000 und hinterher unter 1000 war, weiß ich ja, dass ein Überlauf stattgefunden hat...) eine neue Datei kreieren, und dann in diese für die nächste Zeit schreiben? (alternativ RTC, aber wenn möglich noch nicht...)

Ich hoffe, dieses Projekt (ok, für die Freaks 5 min Arbeit, aber ich wollte ja 'nur al eben was mitloggen'...) interessiert Euch, vielleicht kann man in diesem Thread eine Neulingtutorial erschaffen, mit welchem, und der Tante SuFu diese Basic- Function logisch und verständlich, und auch kompakt erklärt wird...

Greetz, Regards, Linpotec

  • Für die SD oder µSD brauchst Du Pegelwandler. Du kannst aber auch einen 3,3V Arduino mini pro nehmen oder einen Standalone Arduino aufbauen.
  • Der Stromverbrauch während delay ist gleich wie im Normalbetrieb. Der Controller macht ja nichts anderes als Zälen bis die Wartezeit vorbei ist. Zum Stromsparen braucht es einen de verscheidenen Sleep Modusse. Du m,ußt aber auch die gesamte Schaltung auf Stromsparen trimmen. Ein Arduino UNO zB spart im Sleep-modus wenig Strom da die Elektronik um den ATmega viel verbraucht.
    *Das mit den millis geht gut. Du mußt aber einen Sleep-Modus suchen in dem der Timer für die Millis-Funktion nicht abgeschaltet wird. Alternativ kannst Du das 1Hz Signal der RTC fürs erhöhen einer unsigned long Variablen nutzen und so 136 Jahre ohne Überlauf hinkommen.

Grüße Uwe

Ich bin zwar auch kein Fan von Widerstandsteilern, aber das Shield von Seeedstudio hier funktioniert prima:

Es benutzt zur Pegelwandlung nur je zwei Widerstände (siehe Schaltplan).

Grüße,
Oliver

olikraus:
Ich bin zwar auch kein Fan von Widerstandsteilern, aber das Shield von Seeedstudio hier funktioniert prima:
SD Card Shield | Seeed Studio Wiki
Es benutzt zur Pegelwandlung nur je zwei Widerstände (siehe Schaltplan).

Grüße,
Oliver

Ich sehe 6 Widerstände (1,8k und 3,3kOhm) als 3 Spannungsteiler geschaltet. Klassische Schaltung also.

@Linpotec
Aber wieso verwendest Du keinen 3,3V Arduino?

Grüße Uwe

Es benutzt zur Pegelwandlung nur je zwei Widerstände (siehe Schaltplan).

... je ... pro Signal ...

Technische Wunder kann Seeedstudio wohl auch noch nicht vollbringen :smiley:
Aber danke für die Klarstellung.

Oliver

Da habe ich es anders verstanden als Du es geschreiben hast. :wink: :wink:

Grüße Uwe

THX Freaks,

Ich habe mich durch den UNO vom Arduino Fieber anstecken lassen. Nach dem Einlesen und delay-en musste ich dann feststellen, dass die Speicherung auf SD möglich, aber halt mit extra Aufwand zu machen ist.

Da ich in den nächsten Tagen bei C*** vorbeikomme, werde ich mir die R's besorgen und aus dem Adapter einen Heißklebershield basteln, unfairerweise hat Sain die SD Platine bei A*****on aktuell nicht mehr im Angebot, somit werde ich erstmal basteln...

nxt step wird dann die RTC sein, die 136 Jahre ]:smiley: reizen mich...

Greetz, Linpotec

µSD Adapter als SD-Shield verwenden?

Prima Idee !

Ich hab mir als erste "Anwendung" für meinen ersten Uno das adafruit datalogger Shield
http://www.watterott.com/de/Adafruit-Data-Logging-Shield für ca. 18 EUR
mitbesorgt, es war auch einfach und lehrreich zusammenzulöten und zu benutzen.

Die SD-Karten Halterung selbst ist tatsächlich "nur" Mechanik, und solche Dinger gibt es einzeln selten und zu sehr unterschiedlichen Preisen. Statt da einen µSD Adapter hineinzustecken könnte man tatsächlich die paar Drähte direkt am Adapter anlöten.
Ob man für die drei Eingangssignale nun einen Pegelwandler-Chip ( wie Adafruit ) oder 3*2 Widerstände nimmt, oder gleich den µC mit 3.3 V betreibt, ist wohl Geschmackssache.

Bei den RTC scheint wohl der DS1307 Standard zu sein, wobei ich nicht verstehe, warum der DS-1337 bei Reichelt deutlich billiger ist.
Einen PCF8583 (mit mehr batteriegepuffertem RAM), habe ich z.B. bei RS gefunden. Im Eigenbau kommt noch Quarz und Batterie dazu, fertig.

Ein SD Steckplatz hat außer den Kontakten noch 2 Taster die den Schreibschutz der eingelegten SD-Karte (mechanischer Schieber auf der SD-Karte) und die Anwesenheit einer Karte kontrollieren. Wenn beides nicht wischtig ist dann tuts ein µSd Adapter mit angelöteten Drähten auch.
Grüße Uwe