1. Startseite
  2. Portal
  3. Forum
    1. Unerledigte Themen
  4. Galerie
    1. Alben
    2. Karte
  5. Lexikon
  6. Kartensysteme
    1. Europaanalyse
    2. Gewitteranalyse
    3. Nowcast
  7. FAQ
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Forum
  • Galerie
  • Lexikon
  • Seiten
  • FAQ
  • Erweiterte Suche
  1. Forum
  2. RATGEBER
  3. Ratgeber: Hardware
  4. Allgemein - Hardware

Schneehöhensensor mit Arduino bauen

  • Thrillhouse
  • 23. August 2014 um 17:23
  • Erledigt
  • Thrillhouse
    Gast
    • 23. August 2014 um 17:23
    • #1

    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?

    Hier ein Video vom Projekt

  • Sprite01
    Klimaforscher
    Reaktionen
    12
    Punkte
    64.367
    Beiträge
    8.512
    Bilder
    21
    Einträge
    1
    Website
    http://www.DessauWetter.de
    • 23. August 2014 um 21:32
    • #2

    Top - mehr davon ... :thumbup:
    Hab zwar kaum Ahnung davon, aber Arduino und Steckbrett liegen bereit. :)

    Grüße aus dem Süden von Dessau (Stadt Dessau-Roßlau)
    Dirk

    ..... nicht "meckern und motzen", sondern "machen und klotzen" .....

  • Thrillhouse
    Gast
    • 24. August 2014 um 11:54
    • #3

    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 :D
    Ansonsten kostet der Spaß Später um die 30€ und das wäre mehr als klasse 8)

    Hier nochmal das Bild von dem Schaltplan und der Sketch:

    Code
    #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(" ");
      }
    }
    Alles anzeigen
  • Sprite01
    Klimaforscher
    Reaktionen
    12
    Punkte
    64.367
    Beiträge
    8.512
    Bilder
    21
    Einträge
    1
    Website
    http://www.DessauWetter.de
    • 24. August 2014 um 13:02
    • #4

    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.

    Grüße aus dem Süden von Dessau (Stadt Dessau-Roßlau)
    Dirk

    ..... nicht "meckern und motzen", sondern "machen und klotzen" .....

  • Thrillhouse
    Gast
    • 24. August 2014 um 14:36
    • #5

    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.

  • ursprung
    Gast
    • 11. September 2014 um 11:25
    • #6

    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
    /***************************************************************************************************************************
     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;
    }
    Alles anzeigen
  • ursprung
    Gast
    • 11. September 2014 um 11:26
    • #7

    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
    <?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>
    Alles anzeigen

    Grüsse Bernd

  • Thrillhouse
    Gast
    • 12. September 2014 um 23:06
    • #8

    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 ;)

  • ursprung
    Gast
    • 13. September 2014 um 17:25
    • #9

    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
    <!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>
    Alles anzeigen

    Geht weiter

  • ursprung
    Gast
    • 13. September 2014 um 17:26
    • #10

    Die PHP-Datei zur Abfrage

    SQL
    <?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&ouml;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&ouml;he</title>
    </head>
    <body>
     
    <?php
    //Wenn Daten in der Datenbank gefunden wurden, diese ausgeben
    if(!isset($E))
    {
    ?>
      <h2>Letzte gespeicherte Schneeh&ouml;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>
    Alles anzeigen


    Viel Spaß beim tüfteln.

    Bernd

  • silvio
    Diplom-Meteorologe
    Reaktionen
    8
    Punkte
    1.113
    Beiträge
    216
    Website
    https://wetter-kastl.de/
    • 13. September 2014 um 23:14
    • #11

    Hallo alle,

    als Alternative zum Ultraschall (Temp, Dichte Schnee.....) kann ich die Messung mit einem IR Dis. Sensor anregen.

    Sensor

    Beispiel

    Gruß Silvio

    Gruß Silvio

    Wetter Kastl

  • Knolau
    Klimaforscher
    Reaktionen
    28
    Punkte
    4.628
    Beiträge
    881
    Bilder
    3
    • 14. September 2014 um 00:19
    • #12

    Spannende Sache, aber können die Sensoren eine Oberfläche aus Schnee, die ja mehr oder weniger diffus ist, genau messen?

    Viele Grüße

    Sven

  • ursprung
    Gast
    • 14. September 2014 um 16:06
    • #13

    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.

  • Thrillhouse
    Gast
    • 16. September 2014 um 21:16
    • #14

    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 prima ;)

    Jetzt steht erstmal die ganze ethernetsache an :rolleyes:

  • silvio
    Diplom-Meteorologe
    Reaktionen
    8
    Punkte
    1.113
    Beiträge
    216
    Website
    https://wetter-kastl.de/
    • 16. September 2014 um 22:15
    • #15

    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

    Gruß Silvio

    Wetter Kastl

    2 Mal editiert, zuletzt von silvio (17. September 2014 um 18:34)

  • Thrillhouse
    Gast
    • 16. September 2014 um 23:50
    • #16

    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 :rolleyes:

  • Thrillhouse
    Gast
    • 17. September 2014 um 21:40
    • #17

    Soooo, Bernd und ich haben es nun gemeinsam geschafft einen funktionierenden Sketch zu schreiben.
    Hier ist das Ding 8)

    C
    //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 *****");
      }
    }
    Alles anzeigen

Radar

Regenradar

Link-Box

Zellenabstand und Zelleninnenabstand in Tabellen
Wegweiser
Kartenanlyse
Webcam
  1. Datenschutzerklärung
  2. Impressum
  3. Nutzungsbedingungen
  4. Kontakt

Partner
Viktor´s Supportboard
Besucherzaehler



Community-Software: WoltLab Suite™ 6.1.25
© Wetter-Board 2004-2026