Hallo Bastelfreunde,
ich möchte gerne meine Station um ein Schneehöhensensor erweitern.
Ich habe bis jetzt schon eine Entwicklungsschaltung fertig.
Hat schon Jemand etwas ähnliches gebastelt?
Schneehöhensensor mit Arduino bauen
-
Thrillhouse -
23. August 2014 um 17:23 -
Erledigt
-
-
Top - mehr davon ...
Hab zwar kaum Ahnung davon, aber Arduino und Steckbrett liegen bereit. -
Der momentane Aufbau und Sketch ist noch sehr einfach gehalten. Jetzt warte ich erstmal auf neue Teile um die ganze Sache mit dem Internet zu verbinden.
Ein Problem könnte noch bei sinkender Temperatur auftreten. Schall breitet sich bei niedrigen Temperaturen anders aus....das werde ich mal bei -25Grad im Froster meiner Lieblings Wirtschaft testen
Ansonsten kostet der Spaß Später um die 30€ und das wäre mehr als klasseHier nochmal das Bild von dem Schaltplan und der Sketch:
Code
Alles anzeigen#include <LiquidCrystal.h> LiquidCrystal lcd(7, 8, 9,10,11,12); int pingPin = 5; int inPin = 6; void setup() { // LCD initialisieren lcd.begin(16, 2); // cursor setzen (spalte 0, zeile 0) lcd.setCursor(0,0); // Nachricht schreiben lcd.print(" Wetterstation "); } void loop() { long dauer, cm; pinMode(pingPin, OUTPUT); digitalWrite(pingPin, LOW); delayMicroseconds(2); digitalWrite(pingPin, HIGH); delayMicroseconds(10); digitalWrite(pingPin, LOW); pinMode(inPin, INPUT); dauer = pulseIn(inPin, HIGH); cm = 50 - (dauer / 58); // umrechnen in zentimeter 50 ist Installationshöhe zum Boden LcdClearLine(1); lcd.setCursor(0,1); lcd.print("Schnee: "); lcd.print(cm, DEC); lcd.print(" cm"); delay(500); } // hilfsfunktion zum leeren einer zeile void LcdClearLine(int r) { lcd.setCursor(0,r); for (int i = 0; i < 16; i = i + 1) { lcd.print(" "); } }
-
HC-SR04 sind bestellt, die liegen hier nun nicht rum ...
Der Rest ist ja vorhanden.
Irgendeine Heizung ist bestimmt bei dem Außeneinsatz auch noch notwendig.
Ich bin schon gespannt was für Varianten fertig gebastelt werden.
Eventuell Saint Smart LCD Keypad nutzbar ? Dann bleibt alles schon kompakt mit wenig Verdrahtung. -
Die frage ist, ob nur der Sensor nach draußen kommt oder alles.
Heizung ist wohl nicht nötig wenn das ethernetshild drauf kommt. Das soll nämlich etwas warm werden.
Ich werde alles denke mit einem Arduino NANO verbauen. Momentan liegt der Stromverbrauch bei 70mAh mit LCD und 50mAh ohne LCD.
Über ein Solarmodul denke ich auch noch nach.
Klar würde das mit dem KeyPad gehen aber das ist Preislich auch höher angesetzt.
Arduion UNO + KeyPad LCD etwa 20€
Arduino NANO + 2x16 LCD etwa 10€Das Display könnte man auch weg lassen zum Stromsparen und die Höhe über den Serial Monitor ausgeben lassen.
-
Hallo Bastelfreunde,
habe auch mal versucht etwas zustande zu bringen. Mit Beispielen aus dem Netz bin ich jetzt soweit gekommen,
das ich 2 Temperatursensoren auslese, die Werte in eine MSQL Datenbank schreibe und dann auslesen kann.
Anstelle der Temperatursensoren müsste jetzt der Ultraschallsensor genutz werden. Da ich kein großer Programmiere bin, komm ich da nicht weiter.
Vielleicht bekommt ihr das hin. Hier mal der Sketch und die PHP Dateien.C
Alles anzeigen/*************************************************************************************************************************** PROJEKT: Temperaturlogger * Beschreibung: Temperaturwerte von 2 ds1820 Temperatursensoren werden an ein php-Script gesendet, * dass diese Daten in eine MySQL-Datenbank schreibt, * * * Folgende Werte müssen angepasst werden * --------------------------------------------------------------------------------------------------------------------------* Intervall = Zeitraum in welchen Abständen die Temperaturdaten vom Arduino zur Datenbank übertragen werden sollen, * mac[] = MAC-Adresse des Ethernet Shields * ip[] = IP-Adresse über die der Arduino erreichbar sein soll. * server[] = IP-Adresse des Servers auf den die Daten übertragen werden sollen. herauszufinden mit ping www.domain.de * host[] = Name der Domain zu der die Verbindung aufgebaut werden soll * url[] = Pfad und Name der Datei die für den Upload der übergebenen Daten zur Datenbank zuständig ist. * key[] = Kennwort dass mit dem Kennwort in der php-Datei übereinstimmen muss (Sicherheitsaspekt) * *****************************************************************************************************************************/ #include <SPI.h> #include <Ethernet.h> // library for ethernet functions #include <DallasTemperature.h> // library for temperature sensors #include <OneWire.h> // library for the onewire bus OneWire ds(6); // pin für Temperatursensoren //DeviceAdressen der einzelnen ds1820 Temperatursensoren. DeviceAddress sensor1 = { 0x10, 0x90, 0x44, 0xDD, 0x1, 0x8, 0x0, 0xFD }; DeviceAddress sensor2 = { 0x10, 0xDF, 0x2, 0xDD, 0x1, 0x8, 0x0, 0xD9 }; //ETHERNET-SETTINGS byte mac[] = { 0x10, 0x90, 0x44, 0xDD, 0x1, 0x8, 0x0, 0xFD }; // MAC-Adresse des Arduino byte ip[] = { 192, 168, 1, 18 }; // IP-Adresse des Arduino byte gateway[] = { 192, 168, 1, 1 }; // Gateway byte subnet[] = { 255, 255, 255, 0 }; // SubNet //byte server[] = {81, 169, 145, xxx }; // IP-Adresse der Domain EthernetClient client; char host[] = "deine Domain.de"; // Domain char url[] = "/arduinodb.php"; // Pfad zur PHP-Datei char key[] = "xxxxx"; // Kennwort aus PHP-Datei char serverName[] = "www.deine Domain.de"; char c; // Variable für Rückgabe des Servers long Interval = 30; // Upload-Interval in Minuten DallasTemperature sensors(&ds); int numSensors; // Variable zum speichern der Anzahl der Temperatur-Sensoren void setup() { delay(1000); Serial.begin(9600); Serial.flush(); delay(200); Serial.println("Arduino TemperaturLogger"); Serial.println("Ethernet initialisieren..."); Ethernet.begin(mac, ip); Interval = Interval * 1000 * 60; // Das in Minuten angegebene Interval in Millisekunden umrechnen delay(1000); // warten, bis Ethernet gestartet //Sensoren abfragen sensors.begin(); Serial.println("Temperatur-Sensoren ermitteln..."); numSensors = sensors.getDeviceCount(); // Anzahl der angeschlossenen Sensoren in numSensors speichern if (numSensors > 0) // Es wurde mindestens 1 Sensor gefunden { Serial.print(numSensors); Serial.println( " Temperatur-Sensoren gefunden."); } else // Es wurde kein Sensor gefunden { Serial.println("Keine Temperatur-Sensoren gefunden."); } } void loop() { float temp1 = getTemperature(sensor1); // Temperatur von Sensor 1 ermitteln float temp2 = getTemperature(sensor2); // Temperatur von Sensor 2 ermitteln Serial.print("Temp1: "); Serial.println(temp1); Serial.print("Temp2: "); Serial.println(temp2); Daten_senden(temp1, temp2); // Temperaturdaten an Server übertragen delay(700); byte maxReads = 10; //Seconds while ((maxReads-- > 0) && client.connected()) // Antwort des Servers lesen { delay(1000); while (client.available()) { char response = client.read(); Serial.print(response); } } client.stop(); Serial.println("Done."); client.flush(); delay(Interval); } /****************************** * Daten an Server schickenn * * *******************************/ void Daten_senden(float T1, float T2) { if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen { Serial.println("Verbunden, Sende Daten..."); client.print("GET " + String(url)); Serial.println("GET " + String(url)); client.print("?T1="); Serial.print("?T1="); client.print(T1); Serial.println(T1); client.print("&T2="); Serial.print("&T2="); client.print(T2); Serial.println(T2); client.print("&key=" + String(key)); Serial.print("&key=" + String(key)); client.println(" HTTP/1.1"); Serial.println(" HTTP/1.1"); client.print("Host: " + String(host)); Serial.print("Host: " + String(host)); client.println(); Serial.println(); client.println("User-Agent: Arduino"); Serial.println("User-Agent: Arduino"); client.println("Connection: close"); Serial.println("Connection: close"); client.println(); Serial.println(); } else { Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****"); } } /************************************* * Temperatur der Sensoren auslesen * * *************************************/ void writeTimeToScratchpad(byte* address) { ds.reset(); ds.select(address); ds.write(0x44, 1); delay(1000); } void readTimeFromScratchpad(byte* address, byte* data) { ds.reset(); ds.select(address); ds.write(0xBE); for (byte i = 0; i < 9; i++) { data[i] = ds.read(); } } float getTemperature(byte* address) { int tr; byte data[12]; writeTimeToScratchpad(address); readTimeFromScratchpad(address, data); tr = data[0]; if (data[1] > 0x80) { tr = !tr + 1; //two's complement adjustment tr = tr * -1; //flip value negative. } int cpc = data[7]; int cr = data[6]; tr = tr >> 1; return tr - (float)0.25 + (cpc - cr) / (float)cpc; }
-
Hier geht es weiter.
Die PHP-Datei für die Verbindung zum MSQL Server:PHP<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>db.inc.php</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><?phpdefine('DB_SERVER',"z.B.rdbms.strato.de");define('DB_NAME',"DB181xxxx");define('DB_USER',"U181xxxx");define('DB_PASSWORD',"testexxx"); $conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);if(is_resource($conn)){ mysql_select_db(DB_NAME, $conn); mysql_query("SET NAMES 'utf8'", $conn); mysql_query("SET CHARACTER SET 'utf8'", $conn);}?></body></html>
Die PHP-Datei arduino die vom Sketch aufgerufen wird:
PHP<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Arduino PHP</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><?phpinclude("db.inc.php");$conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);if(is_resource($conn)){ mysql_select_db(DB_NAME, $conn); mysql_query("SET NAMES 'utf8'", $conn); mysql_query("SET CHARACTER SET 'utf8'", $conn);}define("KEY","testexxx");if(isset($_GET['key'])){ if($_GET['key'] == KEY) { if(isset($_GET['T1']) && isset($_GET['T2'])) { $TEMP1 = mysql_real_escape_string($_GET['T1']); $TEMP2 = mysql_real_escape_string($_GET['T2']); $DATUM = date("Y-m-d H:i:s"); $result = mysql_query("INSERT INTO arduino_temperaturen (datumzeit, temp1, temp2) VALUES('".$DATUM."', '".$TEMP1."', '".$TEMP2."') ") or die(mysql_error()); if(mysql_affected_rows() == 1) { $result = "Temperaturwerte gespeichert"; } else $result = "Fehler beim speichern der Daten in der MySQL-Datenbank"; } else $result = "Keine Temperaturwerte übergeben"; } else $result = "Falscher Key";} else $result = "Kein Key übergeben"; print_r($result);?></body></html>
Die PHP-Datei zur Abfrage:
PHP
Alles anzeigen<?php include("db.inc.php"); $q_data = mysql_query("SELECT DATE_FORMAT(datumzeit,'%d.%m.%Y') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i') AS ZEIT, temp1, temp2 FROM arduino_temperaturen ORDER BY datumzeit DESC LIMIT 1") or die(mysql_error()); if(mysql_num_rows($q_data) > 0) { $r_data = mysql_fetch_array($q_data); $DATUM = $r_data['DATUM']; $temp1 = number_format($r_data['temp1'], 2, '.', ''); $temp2 = number_format($r_data['temp2'], 2, '.', ''); $ZEIT = $r_data['ZEIT']; } else { $E = 1; $M = "Es wurden keine Temperaturwerte in der Datenbank gefunden!"; } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="user-scalable=yes, width=device-width"> <title>ARDUINO - Aktuelle Temperatur</title> </head> <body> <?php //Wenn Daten in der Datenbank gefunden wurden, diese ausgeben if(!isset($E)) { ?> <h2>Letzter gespeicherter Temperatur-Messwert</h2> <h3><?php echo $DATUM.", ".$ZEIT." Uhr";?></h3> Innen: <?php echo $temp1;?>C Aussen:<?php echo $temp2;?>C <?php } else { // Meldung ausgeben wenn noch keine Daten in der Datenbank stehen echo $M; } ?> </body> </html>
Grüsse Bernd
-
Hi Bernd,
sehr interessant!
Ich habe heute erst meine Ethernet-Shilds bekommen....ist aus China schon ein weiter Weg
Derzeit bin ich noch an einem anderen Projekt dran (Geigerzähler und UV Sensor)
Ich werde denke alles über einen Arduino laufen lassen. Die Tage beschäftige ich mich mit der Materie und kann Dir dann bestimmt was passendes zu deinem Code Sagen -
Hallo,
ich habe die Code`s jetzt soweit das es läuft.
Muss nur noch hin bekommen, wie ich den Wert der Schneehöhe in meine Webseite reinbekomme.
Falls es jemanden hilft, hier mal die funktionierenden Dateien:Sketch für Arduino
Code#include <SPI.h>#include <Ethernet.h> // library for ethernet functions//ETHERNET-SETTINGSbyte mac[] = { 0x10, 0x90, 0x44, 0xDD, 0x1, 0x8, 0x0, 0xFD }; // MAC-Adresse des Arduinobyte ip[] = { 192, 168, 1, 18 }; // IP-Adresse des Arduinobyte gateway[] = { 192, 168, 1, 1 }; // Gatewaybyte subnet[] = { 255, 255, 255, 0 }; // SubNet//byte server[] = {81, 169, 145, 157 }; // IP-Adresse ursprungwetter.de bei StratoEthernetClient client;char host[] = "ursprungwetter.de"; // Domainchar url[] = "/ultraarduinodb.php"; // Pfad zur PHP-Dateichar key[] = "xxxxx"; // Kennwort aus PHP-Dateichar serverName[] = "www.ursprungwetter.de";char c; // Variable für Rückgabe des Serverslong Interval = 1; // Upload-Interval in Minutenint trigger=7;int echo=6;long dauer=0;long entfernung=0;void setup() {delay(1000); Serial.begin (9600);pinMode(trigger, OUTPUT);pinMode(echo, INPUT);Serial.println("Ethernet initialisieren...");Ethernet.begin(mac, ip);Interval = Interval * 1000 * 60; // Das in Minuten angegebene Interval in Millisekunden umrechnendelay(1000); // warten, bis Ethernet gestartet}void loop() {digitalWrite(trigger, LOW);delay(5);digitalWrite(trigger, HIGH);delay(10);digitalWrite(trigger, LOW);dauer = pulseIn(echo, HIGH);entfernung = (dauer/2) / 29.1;if (entfernung >= 500 || entfernung <= 0){Serial.println("Kein Messwert");}else{Serial.print(entfernung);Serial.println(" cm");}delay(5000);Daten_senden(entfernung); // Temperaturdaten an Server übertragendelay(5000);byte maxReads = 10; //Seconds while ((maxReads-- > 0) && client.connected()) // Antwort des Servers lesen { delay(1000); while (client.available()) { char response = client.read(); Serial.print(response); } } client.stop(); Serial.println("Done."); client.flush(); delay(Interval);}/****************************** * Daten an Server schickenn * ********************************/void Daten_senden(float entfernung){ if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen { Serial.println("Verbunden, Sende Daten..."); client.print("GET " + String(url)); Serial.println("GET " + String(url)); client.print("?entfernung="); Serial.print("?entfernung="); client.print(entfernung); Serial.println(entfernung); client.print("&key=" + String(key)); Serial.print("&key=" + String(key)); client.println(" HTTP/1.1"); Serial.println(" HTTP/1.1"); client.print("Host: " + String(host)); Serial.print("Host: " + String(host)); client.println(); Serial.println(); client.println("User-Agent: Arduino"); Serial.println("User-Agent: Arduino"); client.println("Connection: close"); Serial.println("Connection: close"); client.println(); Serial.println(); } else { Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****"); }}
Die PHP-Datei für die Verbindung zum MSQL Server
SQL<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>ultradb.inc.php</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head><body><?phpdefine('DB_SERVER',"rdbms.strato.de");define('DB_NAME',"DB18xxxx");define('DB_USER',"U182xxxx");define('DB_PASSWORD',"xxxxx"); $conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD);if(is_resource($conn)){ mysql_select_db(DB_NAME, $conn); mysql_query("SET NAMES 'utf8'", $conn); mysql_query("SET CHARACTER SET 'utf8'", $conn);}?></body></html>
Die PHP-Datei arduino die vom Sketch aufgerufen wird
SQL
Alles anzeigen<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Arduino Ultra PHP</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php include("ultradb.inc.php"); $conn = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD); if(is_resource($conn)) { mysql_select_db(DB_NAME, $conn); mysql_query("SET NAMES 'utf8'", $conn); mysql_query("SET CHARACTER SET 'utf8'", $conn); } define("KEY","xxxx"); if(isset($_GET['key'])) { if($_GET['key'] == KEY) { if($_GET['entfernung']) { $ENTFERNUNG = mysql_real_escape_string($_GET['entfernung']); $DATUM = date("Y-m-d H:i:s"); $result = mysql_query("INSERT INTO arduino_schnee (datumzeit, entfernung) VALUES('".$DATUM."', '".$ENTFERNUNG."') ") or die(mysql_error()); if(mysql_affected_rows() == 1) { $result = "Schneehöhe gespeichert"; } else $result = "Fehler beim speichern der Daten in der MySQL-Datenbank"; } else $result = "Keine Schneehöhe übergeben"; } else $result = "Falscher Key"; } else $result = "Kein Key übergeben"; print_r($result); ?> </body> </html>
Geht weiter
-
Die PHP-Datei zur Abfrage
SQL
Alles anzeigen<?php include("ultradb.inc.php"); $q_data = mysql_query("SELECT DATE_FORMAT(datumzeit,'%d.%m.%Y') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i') AS ZEIT, entfernung FROM arduino_schnee ORDER BY datumzeit DESC LIMIT 1") or die(mysql_error()); if(mysql_num_rows($q_data) > 0) { $r_data = mysql_fetch_array($q_data); $DATUM = $r_data['DATUM']; $entfernung = number_format($r_data['entfernung'], 2, '.', ''); $ZEIT = $r_data['ZEIT']; } else { $E = 1; $M = "Es wurde keine Schneehöhe in der Datenbank gefunden!"; } ?> <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="user-scalable=yes, width=device-width"> <title>ARDUINO - Aktuelle Schneehöhe</title> </head> <body> <?php //Wenn Daten in der Datenbank gefunden wurden, diese ausgeben if(!isset($E)) { ?> <h2>Letzte gespeicherte Schneehöhe</h2> <h3><?php echo $DATUM.", ".$ZEIT." Uhr";?></h3> Schneehöhe: <?php echo $entfernung;?>C <?php } else { // Meldung ausgeben wenn noch keine Daten in der Datenbank stehen echo $M; } ?> </body> </html>
Viel Spaß beim tüfteln.Bernd
-
-
Spannende Sache, aber können die Sensoren eine Oberfläche aus Schnee, die ja mehr oder weniger diffus ist, genau messen?
-
IR Sensor wäre auch eine Möglichkeit. Müsste man mal ausprobieren.
Könnte ja mal paar Tage schneien. Nur so mal zum testen.
Meine Seite ist jetzt fertig. -
Das mit dem Schnee und Ultraschall geht...der DWD macht es, an manchen Stationen nicht anders.
Das Problem ist die Kälte. Bei tiefen Temperaturen breitet sich der Schall unterschiedlich schnell aus.
Mein test im Froster steht noch aus aber ich denke bei einem Messraum um die 50cm sollte das nichts ausmachen.
Mit den IR sensoren hab ich noch keine Erfahrung gemacht. Aber sind dies auch etwas schwieriger zu integrieren weil bei bestimmten Abständen der Pegel steigt oder sinkt.
So genau sollen sie auch nicht sein...und störanfällig durch Sonnenlicht.Ich habe mir gerade eine Schaltung mit Schneehöhe und UV Sensor aufgebaut.
Der Originale Davis UV Sensor ist ja übelst teuer und meiner macht es auch echt primaJetzt steht erstmal die ganze ethernetsache an
-
Hallo,
ich sage mal so, Sonne oben, Schnee unten. Der IR hat einen Filter und das Signal ist auch noch moduliert . Wenn es keine Direkte Einstrahlung ist, sollten auch keine Probleme auftreten. Die Genauigkeit ist gleich wenn nicht besser. (immer gut Mittelwert bilden, auch bei Deinem Code:) aus dem Buch oder?) Wie genau solls denn sein m/cm oder mm? Die Messung selber ist total einfach. An ADC legen und einfach sie Spannung umrechnen. Die Flanken steigen oder fallen sind für PWM oder Triggersignal gedacht, sollte hier aber nicht benötigt werden.
Gruß Silvio
-
Ja danke für den Denkanstoß...ich werde mich mal damit befassen.
Momentan ärgere ich mich mit Bernd seinem Sketch rum.....da ist alles ducheinander und kann garnicht richtig laufen
-
Soooo, Bernd und ich haben es nun gemeinsam geschafft einen funktionierenden Sketch zu schreiben.
Hier ist das DingC
Alles anzeigen//Schneehöhensensor mit Upload auf FTP Server //By B. Scheffler & F. Bamberg #include <SPI.h> #include <Ethernet.h> // library für Ethernet Funktionen //ETHERNET-SETTINGS ----Hier Müssen Eure Daten stehen byte mac[] = { 0x90, 0x00, 0x4E, 0x58, 0xA1, 0x28 }; // MAC-Adresse deines Arduino byte ip[] = { 192, 168, 178, 33 }; // IP-Adresse des Arduino byte gateway[] = { 192, 168, 178, 1 }; // Gateway byte subnet[] = { 255, 255, 255, 0 }; // SubNet //byte server[] = {81, 169, 145, 47 }; // IP-Adresse ursprungwetter.de bei Strato EthernetClient client; char host[] = "meineDomain.de"; // Domain char url[] = "/ultraarduinodb.php"; // Pfad zur PHP-Datei char key[] = "********"; // FTP Kennwort bzw. MySQL Kennwort char serverName[] = "www.meineDomain.de"; char c; // Variable für Rückgabe des Servers long Interval = 1; // Upload-Interval in Minuten int trigger=5; // Der Digitale Pin5 dieser ist für das Senden des Signals zuständig int echo=6; // Der Digitale Pin6 dieser ist für das Empfangen des Signals zuständig long dauer=0; long entfernung=0; void setup() { delay(1000); Serial.begin (9600); pinMode(trigger, OUTPUT); pinMode(echo, INPUT); Serial.println("Ethernet initialisieren..."); Ethernet.begin(mac, ip); Interval = Interval * 1000 * 60; // Das in Minuten angegebene Interval in Millisekunden umrechnen delay(1000); // warten, bis Ethernet gestartet } void loop() { pinMode(trigger, OUTPUT); digitalWrite(trigger, LOW); delay(2); digitalWrite(trigger, HIGH); delay(10); digitalWrite(trigger, LOW); pinMode(echo, INPUT); dauer = pulseIn(echo, HIGH); entfernung = 50 - (dauer / 58); // enternung = 50 ist die Installationshöhe vom Sensor zu Boden. Hier 50cm. Dieser kann je nach Bedarf angepasst werden if (entfernung >= 500 || entfernung < 0) { Serial.println("Kein Messwert"); } else { Serial.print(entfernung); Serial.println(" cm"); } delay(5000); Daten_senden(entfernung); // entfernung an Server übertragen delay(5000); byte maxReads = 10; //Seconds while ((maxReads-- > 0) && client.connected()) // Antwort des Servers lesen { delay(1000); while (client.available()) { char response = client.read(); Serial.print(response); } } client.stop(); Serial.println("Done."); client.flush(); delay(Interval); } /****************************** * Daten an Server schicken * * *******************************/ void Daten_senden(float entfernung) { if (client.connect(serverName, 80)) // Verbindung zum Server aufbauen { Serial.println("Verbunden, Sende Daten..."); client.print("GET " + String(url)); Serial.println("GET " + String(url)); client.print("?entfernung="); Serial.print("?entfernung="); client.print(entfernung); Serial.println(entfernung); client.print("&key=" + String(key)); Serial.print("&key=" + String(key)); client.println(" HTTP/1.1"); Serial.println(" HTTP/1.1"); client.print("Host: " + String(host)); Serial.print("Host: " + String(host)); client.println(); Serial.println(); client.println("User-Agent: Arduino"); Serial.println("User-Agent: Arduino"); client.println("Connection: close"); Serial.println("Connection: close"); client.println(); Serial.println(); } else { Serial.println(" ***** VERBINDUNG KANN NICHT HERGESTELLT WERDEN *****"); } }