Mein neuestes Projekt - Temperaturlogger - Temperatur in Datenbank speichern

Ich habe gerade im FLUUUX-TechBlog mein neues Projekt "Arduino, MySQL - Temperatur-Sensoren über Webserver auslesen" veröffentlicht, in dem ich zeige wie man mit einem Arduino, zwei ds18s20 Temperatursensoren und einem EthernetShield die ermittelten Temperaturen in einer MySQL-Datenbank speichern und diese anschließend wieder auslesen kann.

Ich habe einen Temperatur-Sensor im Wohnzimmer und einen im Schatten auf dem Balkon angebracht. Die Sensoren werden einmal jede Stunde abgefragt und die ermittelten Werte in einer MySQL-Datenbank gespeichert.
Auf http://www.ihrewaesche.de/ARDUINO/Temperatur/ kann man den zuletzt gespeicherten Wert der beiden Sensoren als Text sehen. Außerdem kann man sich die Werte der letzten 12 Stunden, der letzten 7 Tage und des letzten Monats in einem Diagram anzeigen lassen.

Schönes Projekt, gratuliere.
Nur eine Kritik: mißt Du wirklich die Temperaturen mit 1/100 Grad Genauigkeit. Das wäre ein max Fehler unter 0,05% Skalenendwert im Bereich von -20 bis 50 Grad.
Grüße Uwe

Vielen Dank.
Das werde ich noch anpassen. Ich denke das die volle Gradzahl ausreichen sollte.

Hallo profwebapps,

ich habe mir das angeschaut, Toll gemacht das Projekt.

Nun wollte ich das für mich selbst nutzen, nur habe ich DS18 B 20 Sensoren. Da funktioniert dein Sketch nicht, das heißt, die Temperaturwerte stimmen natürlich nicht.

Hast du den Sketch vieleicht auch für meine Sensoren, bzw.wo muss ich was verändern?

Grüße
Michael

Hast du ein Mega im Einsatz? Der gleiche Sketch sollte auch mit 18B20 funktionieren.
Schau mal hier: http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

Fried22:
Hast du den Sketch vieleicht auch für meine Sensoren, bzw.wo muss ich was verändern?

Hast du auch deine Sensoradressen angepasst, also diese Codezeilen geändert:

DeviceAddress sensor1 = { 0x10, 0x98, 0x46, 0x57, 0x2, 0x8, 0x0, 0xF9 };
DeviceAddress sensor2 = { 0x10, 0x59, 0x4B, 0xC0, 0x1, 0x8, 0x0, 0x3E };

Hallo,

wirklich mal ein richtig cooles Projekt. Respekt. :slight_smile:

Läuft die Datenbank auf dem Arduino oder auf einem anderen Rechner im Netz?
Wenn alles auf dem Arduino läuft wäre das gut. Das wäre ähnlich dem was ich später brauche bzw. vor habe.
Bis zum Sensoren auslesen und per Webserver die aktuellen Werte abrufen/anzeigen könnte ich bestimmt alleine schaffen. Es gibt dafür genügend Beispiele. Jedoch die Daten in eine Datenbank für immer zu speichern und in einem Verlauf darstellbar zu machen wäre das Optimum hoch 3.
Zur Zeit kann ich nur Daten in eine Textdatei auf die SDcard schreiben.

Ich habe einen Mega2560 und ein WiFi-Shield mit SDcard.

skorpi08:
Hast du ein Mega im Einsatz? Der gleiche Sketch sollte auch mit 18B20 funktionieren.
Schau mal hier: http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20

Das im Link funktioniert bei mir auch. Nur wenn ich den Sketch von profwebapps nehme und meinen Gegebenheiten anpasse, passen meine Temperaturdaten nicht. Und ich bekomme es einfach nicht umgestellt. Im Serial Monitor werden mir Zimmertemps von über 50° ausgegeben. Ich habe schon viel versucht (3,3V, parasitär, parallel, anderen Widerstand), und im Sketch rumgespielt. Nicht funzt, mir gehen die Ideen aus und meine Nerven sind nicht mehr die besten. Ich habe einen Uno, sollte aber trotzdem gehen, theoretisch zumindest.

Grüße
Michael

Hallo profwebapps,

ich habe mal eine Frage zur Datenbank. Wenn ich 6 Sensoren habe, die jeweils Temperatur und Luftfeuchte messen in eine Datenbank schreibe, bei einem Intervall von sagen wir jede Minute, wie groß wird die Datenbank im einem Jahr? Wie berechnet man da eigentlich? Hast Du da irgendwelche Erfahrungswerte?

Cooles Projekt :slight_smile:

So schnell braucht ihr keine Antwort von ihm erwarten:
Letztes mal Online: 05-06-2013

Besser auf der fluux website melden

@Fried22

poste doch mal deinen Sketch, ich hab den auch mal für einen Uno und DS18B20 angepaßt, daß hat auch gut funktioniert...
Du ja nen ganzen Teil aus dem Sketch weglassen, wenn mich grad nicht alles täuscht...

@Doc

Er schickt die Daten an einen Server in eine SQL Datenbank...Und liest sie zur Darstellung von dort aus.
Noch etwas besser als "Vorlage" finde ich

Mfg
Dominik

Hallo,

Danke für den Link, ist gespeichert. :slight_smile:

Cooles Projekt.

Ich habe was ähnliches gebaut um die Temp. unseres Warmwasser-Boilers zu messen. Dazu habe ich ein ENC28J60 an ein Nano gehängt und einen MiniWebserver geschrieben der auf HTTP requests mit den Werten der analogen Temperaturfühler (LM35) antwortet. Die Werte hab ich mittels Linux Befehl "curl" abgefragt und an MRTG übergeben, der mir die Graphs erstellt hat.
Hier der Code:

/*
BoilMonDuino 1.0 
================
Designed and programmed by ReDiculum (Roland Hansmann)
 
This is an active heat monitor for our warm water boiler.
There is an LM35 analog temp sensor attached on a outbound 
tube attached to the boiler.
Thresholds and alerting is handled by external tools querying
the temperature over periodical HTTP requests.

Example MRTG UNIX subcommand:
`curl IPAddress`

The basic code is provided from the Arduino Forum sample
for a basic web server using EtherShield and EHTER_28J60
libraries from 
http://trollmaker.com/article11/arduino-1-0-with-enc28j60-ethernet-shield-v1-1

CS = D10 (brown)
SI = D11 (orange)
SO = D12 (purple)
SCK = D13 (grey)
RST = RESET (white)
VCC = 3.3V (red)
GND = GND (black)
 
Use at your own risk!
*/

// Libraries
#include "etherShield.h"
#include "ETHER_28J60.h"

// ethernet interface mac address, must be unique on the LAN
static uint8_t mac[6] = {0x54, 0x55, 0x58, 0x10, 0x00, 0x24};
static uint8_t ip[4] = {10,0,72,72}; // IP address for the webserver
static uint16_t port = 80; // Use port 80 - the standard for HTTP

// Declarations
#define TEMP_SENSOR_WARMWASSER_PIN 0      // Analog Input 0
#define TEMP_SENSOR_ERWAERMER_PIN 1 // Analog Input 1
unsigned int tempWarmwasser;
unsigned int tempErwaermer;


ETHER_28J60 e;  // Create object

void setup () {
  Serial.begin(57600);
  
  e.setup(mac, ip, port);
}


void loop () {
   
  // Softreset every 30min  
  if (millis() >= 1800000) {
     asm volatile ("  jmp 0"); // Soft Reset
  }
  
  char* params;
  if (params = e.serviceRequest())
  {
    tempWarmwasser = (4.2 * analogRead(TEMP_SENSOR_WARMWASSER_PIN) * 100.0) / 1024;
    tempErwaermer = (4.2 * analogRead(TEMP_SENSOR_ERWAERMER_PIN) * 100.0) / 1024;
    e.print(tempWarmwasser);
    e.print("\r\n");
    e.print(tempErwaermer);
    e.print("\r\n");
    e.respond();
  }
}

Hallo,

MRTG sieht fast wie ntop aus. :slight_smile: ntop läuft auf meinem Linuxrechner, jedoch mehr zum Spass.

ntop nutzt die RoundRobinDatabase von Tobi Oetiker, der Autor von MRTG :slight_smile:
Also eher umgekehrt, ntop sieht aus wie MRTG