Pages: 1 [2]   Go Down
Author Topic: Neues Projekt: Arduino-Datenlogger mit PHP und MySQL  (Read 4183 times)
0 Members and 1 Guest are viewing this topic.
Heidelberg
Offline Offline
Full Member
***
Karma: 1
Posts: 207
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Kennlinien bezog sich auf die Möglichkeiten aus dem Datenblatt des LM35, habe gerade die Dioden ausgepackt um den Levellift bis -40 C zu machen. Deswegen interessiert mich alles rund um das Bauteil 
Logged

 

Bern, Switzerland
Offline Offline
Jr. Member
**
Karma: 2
Posts: 53
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Schönes Projekt!
Leider habe ich kein Aquarium mehr, sonst hätte ich etwas Ähnliches gemacht.
Ich habe mit meiner Klimamessstation fast dasselbe realisiert...solltest Du Hilfe mit der Datenbank brauchen, helfe ich gerne weiter.

http://arduino.andres.li
Logged

Bremen / Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mahlzeit Andre,

Vielen Dank für die Blumen.

Dein Projekt ist ja schon viel weiter, als ich es bin! Respekt. Finde es super! Auch gut erklärt.

Auf Dein Angebot, mir zu helfen, komme ich gern zurück:

Gibt es da schon ein Update? Wie misst du denn nun die Feuchte im Boden an verschiedenen Stellen? Da habe ich nämlich auch noch keine Idee zu. Ich hatte im letzten Jahr Tomaten gepflanzt. Die waren sehr lecker. Habe da natürlich auch schon an ein Bewässerungssystem gedacht und eine Pumpe gekauft. Weiter bin ich aber nicht...

Was mich noch interessieren würde:
Kann ich ein paar Zeilen Code Deiner Webseite bekommen? Wie machst Du die Trend-Pfeile und die Bildung der Durchschnittswerte? Wie wird der aktuellste Wert unten auf der Seite abgefragt?
Ist der Umgang mit dem W-LAN-Shield problemlos? Sodass ich meinen Arduino-Code quasi nur um die Library erweitern müsste?

Ach ja, das Diagramm auf der Seite hat gerade einen Fehler in Zeile 40. Das kenne ich smiley-wink
edit: Fehler taucht nur auf, wenn keine Tage gewählt sind. Vielleicht kannst Du da ein "Min" einbauen?

Ich werde diese Woche mal versuchen, meinen Temperatur-Fühler ins Wasser zu lassen, um endlich Live-Werte in die Datenbank zu bekommen. Muss den Sensor noch wasserdicht verpacken...

edit: Was mir noch aufgefallen ist, da Du ja schon viele Werte hast: Kann man mit JPGraph auch "scrollbare Diagramme" erstellen? Angenommen ich möchte eine Temperatur an verschiedenen Tagen immer zur selben Uhrzeit ablesen. Dann wird es in einer Mehrtages-Ansicht schwer. Hätte man aber den "Zoom" auf Stunden, könnte man scrollen... Das werde ich mal weiter verfolgen. Die Monats-Ansichten finde ich gut!

Lieben Gruß
Jens

« Last Edit: March 28, 2011, 06:24:38 am by Poldi » Logged

Bern, Switzerland
Offline Offline
Jr. Member
**
Karma: 2
Posts: 53
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo

Leider gibt es in diesem Projekt noch kein Update...ich sammle erst mal Daten und Erfahrung in der Zuverlässigkeit von diesem Aufbau.

Die Trendpfeile Stelle ich so dar:
Code:
<H3><b>Temperaturtrend:</b></H3>
<img src="/trend/
<?php
//get the db ready
    
error_reporting(E_ALL);

    @
mysql_connect("Pfad der Datenbank""Datenbank""Passwort SQL") OR die(mysql_error());
    
mysql_select_db("Datenbankname") OR die(mysql_error());

    
$sql "SELECT zeit, temperatur FROM ip ORDER BY zeit DESC";
    
$result mysql_query($sql) OR die(mysql_error());
$i=0;
while (
$i <= 6) {
$array=mysql_fetch_array($result);
        
$temp[$i]=$array[1];
$i++;
};
$temp1 = (($temp[4] + $temp[3] + $temp[2]) / 3);
$temp2 = (($temp[1] + $temp[0]) / 2);

if (
$temp2 >= $temp1) {
echo "tempup.jpg";
}
else {
echo "tempdown.jpg";
}
?>

">

...so bilde ich den Jahresschnitt:
Code:
<?php


//get the db ready
    
error_reporting(E_ALL);

    @
mysql_connect("Pfad Datenbank""Datenbank""Kennwort SQL") OR die(mysql_error());
    
mysql_select_db("Datenbankname") OR die(mysql_error());

    
$sql "SELECT temperatur FROM ip";
    
$result mysql_query($sql) OR die(mysql_error());

//push the data into $data array to get it plotted

$i=0;
$durchschnitt 0;
while (
$array=mysql_fetch_array($result)) {
        
$temperatur[$i]=$array[0];
$durchschnitt $durchschnitt $temperatur[$i];
$i++;
};

$durchschnitt $durchschnitt / ($i+1);
$durchschnitt number_format($durchschnitt2);

echo 
$durchschnitt;


?>

...und so den aktuellen Temperaturwert:
Code:
<?php

//get the db ready
    
error_reporting(E_ALL);

    @
mysql_connect("Pfad Datenbank""Benutzername""Kennwort") OR die(mysql_error());
    
mysql_select_db("Datenbank") OR die(mysql_error());

    
$sql "SELECT temperatur, feuchte, zeit FROM ip ORDER BY zeit DESC";
    
$result mysql_query($sql) OR die(mysql_error());

//push the data into $data array to get it plotted

$i=0;
while (
$i <= 1) {
$array=mysql_fetch_array($result);
        
$temperatur[$i]=$array[0];
$feuchte[$i]=$array[1];
$zeit[$i]=$array[2];
$i++;
};

echo 
"<FONT SIZE=10>";
echo 
"<font color=\"#FF0000\">";
echo 
$temperatur[0];
echo 
"&ordm;C";
echo 
"</font>";
echo 
"<font color=\"#000000\"> / &nbsp;";
echo 
"</font>";
echo 
"<font color=\"#0000FF\">";                       
echo 
$feuchte[0];
echo 
"%";
echo 
"</font>";
echo 
"</FONT>";
echo 
"<br>";

echo 
"@ ";
echo 
"$zeit[0]";

?>

....so den Tages Maximal- und Minimalwert:
Code:
<H3><b>Tagesh&ouml;chst /-Tiefst:<br>
<?php
$heuteAnfang 
date("Y-m-d 00:00:01");
$heuteEnde date("Y-m-d 23:59:59");

//get the db ready
    
error_reporting(E_ALL);

    @
mysql_connect("Pfad Datenbank""Benutzer""Kennwort") OR die(mysql_error());
    
mysql_select_db("Datenbankname") OR die(mysql_error());

    
$sql "SELECT solar FROM ip WHERE zeit > '$heuteAnfang' AND zeit < '$heuteEnde' ORDER BY solar DESC";
    
$result mysql_query($sql) OR die(mysql_error());

//push the data into $data array to get it plotted

$i=0;
while (
$array=mysql_fetch_array($result)) {
        
$solar[$i]=$array[0];
$i++;
};

$sql "SELECT solar FROM ip WHERE zeit > '$heuteAnfang' AND zeit < '$heuteEnde' ORDER BY solar ASC";
    
$result mysql_query($sql) OR die(mysql_error());
$i=0;
while (
$array=mysql_fetch_array($result)) {
        
$solar2[$i]=$array[0];
$i++;
};

if (!empty(
$solar[0])) {
echo 
$solar[0];
}
else {
echo 
"-.-";
}
echo 
"&ordm;C / ";
if (!empty(
$solar2[0])) {
echo 
$solar2[0];
}
else {
echo 
"-.-";
}
?>

Zur Zeit wurde ein Fehler angezeigt weil die WLAN-Verbindung aus irgendeinem Grund immer wieder abreist.
Wieso dies so ist habe ich noch nicht herausgefunden. Die ersten rund 150 Tage lief alles ohne Unterbruch (im 5-Minuten-Intervall), seit einigen
Wochen habe ich immer wieder Unterbrüche.

Eigentlich läuft WLAN sehr stabil, woher diese Unterbrüche kommen weis ich zur Zeit noch nicht.
Was beim WLAN-Shield sicher anders sein mag ist die limitierte Anzahl von HTML Code pro darzustellende Seite.
Aber für den Aufruf eines Formulares und die Übergabe der Werte reicht es allemal aus.

Das Diagramm hat nur ein Fehler gezeigt weil an diesem Tag noch keine Messung verfügbar war.
Dies sollte eigentlich nie passieren, auch wenn man die Anzahl Tage auf 0 setzt.

Scrollbare Diagramme habe ich noch nicht getestet. Ich war schon zufrieden damit die Temperatur und die Feuchte ins gleiche Diagramm zu bringen.
Aber vielleicht liesse sich mit jgraph ein Diagramm darstellen, in welchem mehrere Tage überlappt dargestellt werden.
Damit könnte man die Veränderungen jeweils zur gleichen Uhrzeit sichtbar machen.

Falls Du weiteren Code benötigst helfe ich gerne weiter.

Gruss
« Last Edit: March 28, 2011, 12:57:50 pm by schwizer » Logged

Bremen / Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin!

Mensch, dass nenne ich mal eine schnelle Antwort!

Vielen Dank für die Code-Schnipsel! Dann kann ich meine Seite ja bei Gelegenheit mal aufwerten. SUPER! DANKE!

Fällt Dir auch noch etwas ein, wie man ein spezielles Datum abfragen kann? Die Wahl nach Tagen bis heute ist aber auch schon echt gut. Ich werde da auf jeden Fall weiter dran bleiben. Auch scrollbare Diagramme interessieren mich sehr.

Dein Problem mit den Aussetzern nach bestimmter Zeit kenne ich auch. Ich habe ein Projekt (beruflich) am laufen. Dort war es eine scheinbar magische Grenze von 90 Tagen, bis das Ethernet-Shield nicht mehr wollte. Eine eingebaute Status-LED (dreifarbig Grün, Gelb, Rot) zeigte immer Grün, wenn keine Daten vorhanden waren (kommen alle 90 Sekunden), Gelb während der Übertragung und Rot, wenn die Übertragung nicht geklappt hat. Nach besagten Tagen wechselte die LED immer nur noch von Gelb nach Rot. Nach einem Reset hat alles wieder funktioniert.
Aus diesem Grund habe ich es nun so programmiert, dass Übertragungsfehler gezählt werden. Ist der dritte Fehler aufgetreten schaltet ein Ausgang. Über einen Transistor (2N2222) wird das Board neu gestartet. Die nötige Hardware habe ich aus diesem Beitrag: http://www.faludi.com/itp_coursework/meshnetworking/XBee/XBee_program_Arduino_wireless.html (siehe Schaltbild).

Dies ist zwar nicht optimal, denke ich, aber es funktioniert (*toi toi toi*) bis heute zuverlässig. Wenn ich auch keine Ahnung habe, wie oft es neu startet...

Vielleicht ist das ja etwas, dass Du probieren magst?

Freue mich darauf, wieder von Dir zu lesen  smiley-wink

Lieben Gruß
Poldi
Logged

Bremen / Germany
Offline Offline
Full Member
***
Karma: 1
Posts: 140
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo nochmal,

Was mir eben gerade aufgefallen ist: Werden die Achsen bei Deinen Diagrammen automatisch in ihren Werten gesetzt? Oder schaust Du beispielsweise bei den Monats-Diagrammen, welchen Bereich Du brauchst und setzt ihn von Hand? Falls automatisch, wie hast Du das in JPGraph gelöst?

Lieben Gruß
Poldi

PS: Habe meinen Sensor auch wieder an, um mal Werte in die Datenbank zu bekommen smiley-wink
Logged

Bern, Switzerland
Offline Offline
Jr. Member
**
Karma: 2
Posts: 53
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bei meinem Diagramm werden die Achsen automatisch skaliert.
Übrigens, ich habe jetzt die Ursache der Unterbrüche gefunden....das Steckernetzteil des Internetmodem war schlecht eingesteckt  smiley-mad

Das Diagramm baue ich so auf:
Code:
$graph = new Graph(900,600,"auto");
Logged

Pages: 1 [2]   Go Up
Jump to: