Go Down

Topic: Temperatur-Logger mit Stopuhr... Zwischenstand (Read 615 times) previous topic - next topic

emsig

Aug 17, 2013, 03:05 pm Last Edit: Aug 18, 2013, 07:46 pm by emsig Reason: 1
Hallo Allerseits!!!

Ich möchte ein Messgerät bauen, dass zum einen Temperatur mit Zeitstempel auf SD-Karte speichert und zum anderen, Temperatur am LCD anzeigt und die Zeit zwischen 2 Temperaturen stopt.

zur Veranschaulichung hab ich ein kleines Funktionsdiagramm gebastelt:



Das Loggen der Temperatur bereitet mir keine (und wenn, dann sind sie mir nicht bekannt) Probleme. Die Herausforderung sehe ich bei der Stopuhr, welche bei einer bestimmten Temperatur (z.b.: 80°C) starten und in der Abkühlphase bei einer weiteren Temperatur (z.B.: 50°C) stopen soll. Es kann aber auch vorkommen, dass wenn die 80°C erreicht sind (Stopuhr startet) die Temperatur noch einmal ansteigt. Jetzt bräuchte ich quasi einen automatischen RESET, der erst beim erneuten erreichen der Starttemperatur wieder bei Null anfängt.

Der Temperaturverlauf sieht wie folgt aus:


Hardware im Moment:
* Arduino Uno
* LCD
* Datalogging shield mit RTC
* I2C Temperatursensor DS18B20 (später MAX31855 mit K-Type Fühler für höhere Temperaturen)


Nun zu meiner eigentliche(n) Frage(n), wo ich um eure Mithilfe bitte:
grundsätzlich: Wo fange ich an, wo höre ich auf?

1. Die RTC liefert mir ja nur Sekunden als kleinsten Nenner, da die Messdauer im Normalfall <20 Sekunden ist, bräuchte ich auch hundertstel, speziell in der Loggingdatei. Es bringt mir nichts, wenn ich zigmal den selben Zeitstempel stehen hab. Wie bekomme ich auch hundertstel Sekunden?

2. Datum als Dateiname mit fortlaufender Nummer oder Buchstabe z.B.: 170813_a.txt oder 17081301.txt
wie bekomme ich das am einfachsten gebacken?


Anmerkung: Die Tasten Start/Stop und RESET liegen auf je einem Analogeingang als Digitalinput, da die "echten" DI/DO bereits durch LCD, SD-card shield, eine Led und I2C Leitung bereits am Limit ist.

Als visuellen Hinweis, daß die Messung bzw. Aufzeichnung läuft möchte ich noch eine LED und/oder die Hintergrundbeleuchtung des LCDs blinken lassen.
z.B.:
Aufzeichnung -> Led blinkt
Zeitmessung -> Hintergrund blinkt

Was auch noch wichtig ist, ist die Laufzeit des Programmes. Es gibt solche Geräte im industriellen Bereich, die mit einer Meßfrequenz von 100 Hz arbeiten, sprich alle 10ms eine Messung. Das wäre auch bei meinem Meßgerät in etwa die gewünschte Abtastrate. Im Moment schaffe ich nicht mehr als 6 Messungen pro Sekunde... :-/

Würde mich sehr über eure Hilfe freuen. Wenn auch nicht gleich ein fertiger Code hier steht, bin ich zumindest für Hinweise über die generelle Herangehensweise bei solchen Projekten sehr DANKBAR!!!

schöne Grüße
Bernhard

dlca

#1
Aug 17, 2013, 04:09 pm Last Edit: Aug 17, 2013, 04:15 pm by dlca Reason: 1
Hi,

erstmal zum Quelltext: Im Prinzip brauchst du nur eine Abfrage, ob der vorherige Wert größer war, als der jetzt gemessene. Nach dem Motto:
if messwert > 80 then go
if messwert aktuell > messwert_alt then reset
if messwert < 50 then stop
Das ist jetzt nur pseudocode, aber das Prinzip sollte damit erleutert sein. Nur solltest du bei der Abfrage von alt gegenüber neu einen gewissen Puffer verwenden, da die Werte immer geringfügig schwanken.
Das du nicht mehr als 6 Messwerte pro Sekunde rausbekommst würde ich dem Sensor zuschreiben. I2c ist nicht das schnellste Verfahren. Bei einem P/N-TC am Analogeingang wird man wahrscheinlich mehr Werte rausbekommen.
Ach ja und die Zeit kannst du einfach mit der Funktion millis() stoppen. Die gibt dir die tausendstel-Sekunden seit dem Start des Arduino aus.
Also etwa so:
real Start = millis()
real Stop = Start - millis()

greetings
Nils

TERWI

Ich würde mit der Hardware, deren gelieferten Werten und der Verarbeitung dazu erst mal nen Kopf machen.
Sprich: Jedes Hardware-/Programm-Teil erst mal für sich einzeln.
Z.B. erst mal das wichtigste Element - den Tempsensor. Was liefert der für Werte in welchem Bereich ? Wie genau ist / muss das mit welcher Auflösung.
Nur erst mal den Sensor nehmen, ein Sketch drumherumbasteln, dass du erst mal die gelieferten Daten auf dem Schirm siehst.
Leg ihn in den Backofen, pack ihn in Eis und sonst noch wie und sei dir erst mal sicher, was du dabei herausbekommst.

Passt das alles, das nächste Teil - z.B. die RTC. Muss das sein oder reicht auch der Dino-Takt ? Muss man vielleicht nur synchronisieren ? (Da kann der Udo bestimmt ein paar Takte mehr zu sagen...)
Wie genau brauchst du denn die Messwertfolge ? Minuten, Sekunden, Millis ?
Wenn das soweit fertig, mit dem Sensor kombinieren und dann weitersehen.

So in etwa ....
To young to die - never to old for rock'n roll

emsig

Danke euch Beiden für eure Infos!

kurzer Zwischenstand:

Die Hardware ist mir soweit vertraut. Einen Templogger habe ich bereits am Laufen. Mich wirfts "lediglich" mit der Zeitmessung zwischen zwei Temperaturen.

irgendwie bekomm ich das nicht gebacken. Hatte es zwar schon soweit hinbekommen, dass er bei einer bestimmten Temperatur (>80°C) anfing die Zeit zu messen, jedoch startete die Stopuhr bei jedem loop von neuen... gibt es da einen "Trick"?

habs auch versucht für den Meßbereich zw. 80° und 50° eine Funktion (TempStat = 1) zu deffinieren. solange TempStat = 1 ist soll die Stopuhr laufen. Die Temparaturrichtung (abkühlen) hab ich dabei noch nicht berücksichtigt.

hat jemand einen möglichen (neuen) Ansatz? Oder links wo ich mich schlau machen kann? ic h hab bis jetzt noch nicht das richtige gefunden, vielleicht such ich auch nach dem falschen, bin mit dem ganzen Codes noch nicht so vertraut...  :(


Go Up