Arduino übermittelt Temperaturen

Ausgehend von Mats Vanselows getTemperatur() Funktion (http://www.mats-vanselow.de/2009/03/25/temperaturen-messen-mit-arduino und einem Beispiel aus der Ethernet Library habe ich einen kleinen Client geschrieben, der alle 10 Minuten die Temperatur aus einem LM35 Sensor ausliest und per HTTP-Request an ein PHP-Skript auf meiner Homepage schickt. Da der LM35 nicht genau kalibriert ist und wohl sowieso maximal auf ein halbes Grad genau ist, habe ich mittels zwei anderer Thermometer (die wiederum selbst voneinander abweichen) die ungefähre Abweichung des LM35 bestimmt und ziehe die 2° Celsius einfach ab.

Hier der entsprechende Processing-Code:

#include <Ethernet.h>
bool connected = false;
 
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 0, 99 };
// IP-Adresse des Webservers
byte serverIP[] = {111,111,111,111};
 
Client client(serverIP,80);
 
 
int inPin = 5;          // input pin 1
float inValTotal;
int i;
int runs = 5;          // Anzahl der Durchläufe
int waittime = 20;     // ms zwischen Durchläufen
int delayVal = 1000;   // Intervall für Serial Output
 
float getTemperatur() {
 
  inValTotal = 0;
  for(i = 0;i<runs;i++){
    inValTotal = inValTotal + analogRead(inPin);
    delay(waittime);
  }
 
  inValTotal = inValTotal / runs / 2;
  return(inValTotal-2);
}
 
 
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  Serial.println("setup done");
 
}
 
void loop()
{
  Serial.println("Entered loop");
if (!connected){ 
   Serial.println("Not connected");
  if (client.connect()){
      connected = true;
      Serial.println("Connected to Server");
      Serial.println("Sending request to server");
      client.print("GET /storetemp.php?t=");
      client.print(getTemperatur());
      client.println(" HTTP/1.1");
      client.println("Host: www.mydomain.com");
      client.println("User-Agent: Arduino");
      client.println("Accept: text/html");
      client.println();
     } else {
        Serial.println("Cannot connect to server");
      }
    }   
  else {
    delay(500);
    while (client.connected() && client.available()) {
        char c = client.read();
        Serial.print(c);
      }
      Serial.println();
       client.stop(); 
       connected=false;
}
 
  Serial.println("Done now");
  delay(600000);
}

Hier der Code des PHP-Skripts, es schickt als Antwort Zeit und erhaltene Temperatur zurück zum Arduino und speichert die Temperatur mit Zeitstempel in einer Textdatei. Im nächsten Schritt werde ich wohl sicher eine MySQL-Datenbank hintersetzen, für den Moment reicht es aber völlig aus.

<?php
header('Content-type: text/plain');
echo date("d.m.Y-H:i:s") . " Temperatur= " . $_GET['t'];
 
$myFile = "testFile.txt";
$fh = fopen($myFile, 'a') or die("can't open file");
fwrite($fh, date("d.m.Y-H:i:s") . " Temperatur= " . $_GET['t']."\n");
fclose($fh);
?>
</php>

Und abschließend ein Auszug aus der Textdatei:

04.10.2009-09:22:29 Temperatur= 21.00
04.10.2009-09:22:37 Temperatur= 21.00
04.10.2009-09:22:44 Temperatur= 21.00
04.10.2009-09:22:52 Temperatur= 21.00
04.10.2009-09:23:00 Temperatur= 21.00
04.10.2009-09:23:07 Temperatur= 20.90
04.10.2009-09:23:15 Temperatur= 21.00
04.10.2009-09:23:33 Temperatur= 21.00

Uwe

Uwe Ziegenhagen likes LaTeX and Python, sometimes even combined. Do you like my content and would like to thank me for it? Consider making a small donation to my local fablab, the Dingfabrik Köln. Details on how to donate can be found here Spenden für die Dingfabrik.

More Posts - Website