Die energieeffizienteste Methode, um ständig 2 Kilobyte Daten pro Sekunde zu speichern

7

Ich möchte ständig Daten von Sensoren (für einen Aktivitäts-Tracker) speichern und dabei so wenig Batterie wie möglich verbrauchen (ich möchte eine 4/5-Tage-Autonomie bei einer 3000-mAh-Batterie haben), aber ich kann nicht die beste finden Möglichkeit, etwa 2 kByte / s in einem Speicher zu sparen, der groß genug ist, um mehrere Tage Daten aufzunehmen.

Sensoren werden mit einer Geschwindigkeit von 20 Mal pro Sekunde gelesen und erzeugen jedes Mal etwa 100 Bytes.

Welche Möglichkeiten habe ich, um:

  • eine solche Datenmenge (Hardware) speichern?
  • sicherstellen, dass das System mit der erforderlichen Autonomie ordnungsgemäß funktioniert?
Trevör
quelle
2
Welche Optionen haben Sie untersucht? Außerdem sind 2 KB / s eine Menge Daten. Sind Sie sicher, dass alles wichtig ist und es keine Entlassungen gibt?
Asheeshr
1
Sie müssen Ihre Anforderungen weiter klären: Welche Arduino-Karte verwenden Sie, welche Arten von Sensoren gibt es, WO müssen Sie diese 2 KB / s speichern? Es ist wichtig zu verstehen, dass kein Arduino alleine genug Speicher hat, um 2 KB / s an Tagen zu speichern.
Jfpoilpret
1
@AsheeshR Nun, ich habe berechnet, dass alle Daten, die 20 Mal pro Sekunde kommen, ungefähr so ​​hoch sind (2 KB / s), nun ja, das ist es, denn da es ziemlich schwierig sein wird, Aktivitäten zu erkennen, wird das Arduino dies wahrscheinlich nicht tun Ich habe eine solche Rechenleistung, also muss ich das später auf einem Computer tun.
Trevör
1
SD-Karten sind überall mit dem aktuellen Verbrauch. 5 mA beim Schreiben sind die niedrigsten, die ich gesehen habe, 100 mA die höchsten, aber die Spezifikation erlaubt 200 mA. Typisch ist vielleicht 30-50mA. Sie verbrauchen ziemlich viel Strom, wenn sie die SPI-Schnittstelle verwenden.
Cybergibbons
1
Ich denke, es ist wichtig , die von jfpoilpret angedeutete Frage zu beantworten : Welche Daten speichern Sie? Gibt es eine Möglichkeit, nur die minimale Anzahl von Rechenzyklen auf dem Arduino zu verbrauchen, um diese Daten etwas kompakter zu packen? 2 kB / s sind eine angemessene Datenmenge, die ein Mikrocontroller sammeln und an den Speicher senden kann. Und ja, für die Datenerfassung sind SD-Karten die beste Option, schon allein deshalb, weil die Karte zur ordnungsgemäßen Datenanalyse physisch auf einen Computer übertragen werden kann.
WineSoaked

Antworten:

4

Hier gibt es zwei Einschränkungen, und ich denke, es könnte Sie in eine Ecke führen. Größe und dann Leistung.

2 KByte / s sind 2 * 60 * 60 * 24/1024 = 168,75 MByte / Tag. Das ist viel. Die einzige leicht verfügbare Technologie, die mit einem kleinen Mikroprozessor verwendet werden kann, der dieses Datenvolumen speichern kann, ist eine SD-Karte. Es gibt kein so großes serielles EEPROM oder Flash-Chips, und der Arduino kann meines Wissens nicht mit dem NAND-Flash umgehen, der in USB-Sticks und SD-Karten verwendet wird.

SD-Karten können jedoch relativ leistungshungrig sein. Sie ziehen beim Schreiben zwischen 5 mA und 100 mA, normalerweise zwischen 30 und 50 mA. Die SD-Spezifikation besagt, dass das Maximum 200 mA beträgt. Das Schreiben ist auch ziemlich langwierig, da sie eher mit Datenblöcken als mit einzelnen Zellen arbeiten. Ich habe noch nie vollständig analysiert, wie viel Strom sie verbrauchen, aber es ist nicht unbedeutend und viel, viel mehr als serielles EEPROM oder Flash.

Wenn Sie also so viel speichern müssen, haben Sie nur die Wahl zwischen SD-Karten.

Ich würde die Komprimierung der Daten untersuchen. Selbst sehr einfache Schemata können einen großen Unterschied machen.

Cybergibbons
quelle
Vielen Dank für Ihre Antwort ! Was halten Sie davon, die Daten auf einem kleinen Flash-Speicher mit geringem Stromverbrauch (wie diesem: adafruit.com/products/1564 ) zu speichern und dann, wenn dieser Speicher voll ist, auf der SD-Karte zu speichern? Würde es nicht Strom sparen?
Trevör
Ja, es besteht die Möglichkeit, Strom zu sparen. Es ist viel besser, in großen Blöcken auf die SD-Karte zu schreiben, da selbst wenn Sie ein einzelnes Byte ändern, der gesamte Block aktualisiert werden muss. Wie groß dieser Block ist, erinnere ich mich nicht.
Cybergibbons
Eigentlich denke ich, dass ein Arduino wahrscheinlich mit einem bloßen NAND-Blitz umgehen kann (zumindest wenn nur wenige der Pins bereits verwendet werden oder man bereit ist, einen externen Latch als Demultiplexer hinzuzufügen), aber man müsste Datenblätter konsultieren um festzustellen, ob der Stromverbrauch niedriger ist als bei einer sorgfältig ausgewählten SD-Karte.
Chris Stratton
1

Dies wäre mit einer Standard-SD-Karte möglich.

Kapazität

Mit einigen einfachen Berechnungen konnte ich feststellen, dass das Schreiben mit 2 kB / s für 5 Tage nur 0,8 GB verbrauchen würde. Sie könnten wahrscheinlich mit einer 1 oder 2 GB Karte auskommen.

Geschwindigkeit

Ich habe diesen Benchmark gefunden , der besagt, dass es möglich ist, SD-Kartendaten von einem Arduino mit 192 kB / s zu schreiben, was für Ihre Anforderungen mehr als ausreichend sein sollte.

Es gibt viele großartige Tutorials und Beispiele für die Verwendung einer SD-Karte mit einem Arduino. Die offizielle Dokumentation ist immer ein guter Anfang.

Der Doktor
quelle