Skip to content

a2beckj/Dokumentation_Trefz_Becka

Repository files navigation

Projekt 'Messstation am Münsteraner Hafen'

Unsere senseBox soll Temperatur-, Feuchtigkeits-, Feinstaub- und UV-Werte messen und im 10-Sekunden Takt auf die OSM-Plattform übertragen.

Ziel

Durch Erfassen der verschiedenen Werte sollen mögliche Korrelationen zwischen den Naturerscheinungen festgestellt werden. Auf Basis der Werte soll im Anschluss eine Karte erstellt werden, um die zuvor erhobenen Messwerte besser darstellen zu können.

Materialien

Aus der senseBox:edu

  • Genuino UNO
  • Ethernet Shield v1.0
  • Genuino Board
  • Temperatur- und Luftfeuchtigkeitssensor (HDC 1008)
  • UV-Sensor (VEML6070)
  • Jumpwires
  • Strom-Adapter

Zusätzliche Hardware

  • Base Shield v2.0
  • Feinstaubsensor (SHINYEI PPD42)
  • Verbindungskabel
  • Netzwerkkabel
  • Panzertape, Isolierband und Heißkleber
  • WetterBox der Firma FIBOX, sowie kleinere Schutzboxen für Außensensoren

Setup Beschreibung

Hardwarekonfiguration

  • Ethernet Shield v1.0 auf das Genuino UNO stecken.
  • Base Shield v2.0 auf das Ethernet Shield v1.0 stecken.
  • Anschließen von Temperatur-/bzw. Luftfeuchtigkeits- und UV-Sensor über das Genunio Board an das Base Shield v2.0 (wie in Softwaresketch beschrieben).
  • Anschließen des Feinstaubsensors an Port D8 des Base Shield v2.0.
  • Löcher in die WetterBoxen bohren um die korrekte Verkabelung und die geeignete Luftzufuhr für die Sensoren zu gewährleisten.
  • Montieren der Messstation mit UV-Sensor in die FIBOX-WetterBox mittels Heißkleber.
  • Befestigung der Außensensoren in die kleineren WetterBoxen und anschließend Befestigung an der FIBOX-Wetterbox mittels Heißkleber, Isolierband und Panzertape.
  • Netzwerkkabel an Ethernet Shield v1.0 anschliessen und mit dem Router(sowie der Stromzufuhr) verbinden.
  • Messstation an geeignetem Ort aufstellen.

Softwaresketch

Zunächst sind folgende Bibliotheken herunterzuladen und in die Arduino-Dateistruktur zu integrieren:

Diese Bibliotheken müssen anschließend im Programmcode wie folgt implementiert werden:

#include <SPI.h>
#include <Ethernet.h>
#include <Wire.h>  
#include <HDC100X.h>

Hier sieht man den Programmcode mit den ID's, die uns von der opensensemap nach Einrichtung des Messstandortes überliefert wurden: (Die individuell überlieferte Sensor-ID wurde im Folgenden durch 'SENSORID' ersetzt)

//SenseBox ID
#define SENSEBOX_ID "SENSEBOXID"
 
//Sensor IDs
#define TEMPSENSOR_ID "SENSORID" //Temperatur
#define SENSOR1_ID "SENSORID" // Luftfeuchtigkeit
#define UVSENSOR_ID "SENSORID" // UV-Strahlung
#define SENSOR2_ID "SENSORID" // Feinstaub
 
//Ethernet-Parameter
char server[] = "www.opensensemap.org";
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Diese IP Adresse nutzen falls DHCP nicht möglich
IPAddress myIP(192, 168, 0, 42);
EthernetClient client;
 
//Messparameter
int postInterval = 10000; //Uploadintervall in Millisekunden
long oldTime = 0;

Die Deklaration der Variablen der verschiedenen Sensoren:

//Temperatursensor
float Humi = 0;
float Temp = 0;
HDC100X HDC(0x43);
 
//UV Sensor
#define I2C_ADDR 0x38
#define IT_1_2 0x0 //1/2T
#define IT_1   0x1 //1T
#define IT_2   0x2 //2T
#define IT_4   0x3 //4T
 
//Feinstaubsensor
int pin = 8;
unsigned long duration;
unsigned long starttime;
unsigned long sampletime_ms = 2000;
unsigned long lowpulseoccupancy = 0;
float ratio = 0;
float concentration = 0;

Im setup werden die verschiedenen Sensoren sowie Bibliotheken und Anschlüsse und Verbindungen (z.B. Ethernet) initialisiert:

void setup()
{
  Serial.begin(9600);

Hier erfolgt die Initialisierung der eingesetzen Sensoren:

  //Temperatursensor
  HDC.begin(HDC100X_TEMP_HUMI, HDC100X_14BIT, HDC100X_14BIT, DISABLE);
 
  //UV Sensor
  Wire.begin();
  Wire.beginTransmission(I2C_ADDR);
  Wire.write((IT_1<<2) | 0x02);
  Wire.endTransmission();
  delay(500);
 
  //Feinstaubsensor
  pinMode(8,INPUT);

Der von OSM überlieferte Code um die Ethernet-Verbindung zu initialisieren:

  Serial.print("Starting network...");
  //Ethernet Verbindung mit DHCP ausführen..
  if (Ethernet.begin(mac) == 0)
  {
    Serial.println("DHCP failed!");
    //Falls DHCP fehltschlägt, mit manueller IP versuchen
    Ethernet.begin(mac, myIP);
  }
  Serial.println("done!");
  delay(1000);
  Serial.println("Starting loop.");
 
 
  starttime = millis();//get the current time;
}

Nach der Initialisierung startet der loop mit der Berechnung der verschiedenen Messwerte der Sensoren: (Eränzt um die postFloatValue-Funktion welche die Messwerte mit der OSM-Plattform synchronisiert)

void loop()
{
  //Upload der Daten mit konstanter Frequenz
  if (millis() - oldTime >= postInterval)
  {
    oldTime = millis();
 
  //Temperatur/Feuchtigkeit loop
  Humi = HDC.getHumi();
  postFloatValue(Humi, 1, SENSOR1_ID);
  Temp = HDC.getTemp();
  postFloatValue(Temp, 1, TEMPSENSOR_ID);
 
   //UV Sensor loop
  byte msb=0, lsb=0;
  uint16_t uv;
  Wire.requestFrom(I2C_ADDR+1, 1); //MSB
  delay(1);
  if(Wire.available())
    msb = Wire.read();
  Wire.requestFrom(I2C_ADDR+0, 1); //LSB
  delay(1);
  if(Wire.available())
    lsb = Wire.read();
  uv = (msb<<8) | lsb;
  uv = uv*5.625;        //Multiplizieren mit Umrechnungsfaktor
  delay(1000);
   postFloatValue(uv, 1, UVSENSOR_ID);
 
 
  //Feinstaubsensorloop
  duration = pulseIn(pin, LOW);
  lowpulseoccupancy = lowpulseoccupancy+duration;
 
  if ((millis()-starttime) >= sampletime_ms)//if the sampel time = = 30s
  {
    ratio = lowpulseoccupancy/(sampletime_ms*10.0);  // Integer percentage 0=&gt;100
    concentration = 1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // using spec sheet curve
 
    lowpulseoccupancy = 0;
    starttime = millis();
  }
  postFloatValue(concentration, 1, SENSOR2_ID);
}
}

Im weiterführenden Programmcode des loops stehen die Anweisungen, die uns von OSM übergeben wurden:

void postFloatValue(float measurement, int digits, String sensorId)
{
  //Float zu String konvertieren
  char obs[10];
  dtostrf(measurement, 5, digits, obs);
  //Json erstellen
  String jsonValue = "{\"value\":";
  jsonValue += obs;
  jsonValue += "}"; 
  //Mit OSeM Server verbinden und POST Operation durchführen
  Serial.println("-------------------------------------");
  Serial.print("Connectingto OSeM Server...");
  if (client.connect(server, 8000))
  {
    Serial.println("connected!");
    Serial.println("-------------------------------------");    
    //HTTP Header aufbauen
    client.print("POST /boxes/");client.print(SENSEBOX_ID);client.print("/");client.print(sensorId);client.println(" HTTP/1.1");
    client.println("Host: www.opensensemap.org");
    client.println("Content-Type: application/json");
    client.println("Connection: close"); 
    client.print("Content-Length: ");client.println(jsonValue.length());
    client.println();
    //Daten senden
    client.println(jsonValue);
  }else
  {
    Serial.println("failed!");
    Serial.println("-------------------------------------");
  }
  //Antwort von Server im seriellen Monitor anzeigen
  waitForServerResponse();
}
 
void waitForServerResponse()
{
  //Ankommende Bytes ausgeben
  boolean repeat = true;
  do{
    if (client.available())
    {
      char c = client.read();
      Serial.print(c);
    }
    //Verbindung beenden
    if (!client.connected())
    {
      Serial.println();
      Serial.println("--------------");
      Serial.println("Disconnecting.");
      Serial.println("--------------");
      client.stop();
      repeat = false;
    }
  }while (repeat);
}

OpenSenseMap Registrierung

Die Registrierung erfolgt über Angabe des Namens und der E-Mail-Adresse auf dem OSM-Portal. Im Anschluss kann man die Art der Station, die Eigenschaften der benutzten Sensoren und den Standort der geplanten Station festgelegen. Daraufhin wird der individuelle Sketch für die Verbindung der Messstation zum OSM-Portal versandt.

Stationsaufbau

Die Station sollte so aufgebaut werden, dass die Verfälschung der Daten möglichst gering ausfällt und alle Sensoren funktionieren können. In unseren Fall haben wir den Feinstaubsensor und den Temperatur- und Luftfeuchtigkeitssensor so angebracht, dass sie keinen Schatten auf unseren UV-Sensor werfen. Diese beiden Sensoren sind außerdem außerhalb der Box angebracht, damit die Luftzufuhr gewährleistet ist. Jedoch müssen sie trotzdem vor Nässe geschützt sein.

Kontakt

Alina Trefz, a_tref01@uni-muenster.de

Judith Becka, j_beck60@uni-muenster.de

Münster, 08.04.2016

About

Dokumentation der Realisierung unserer Messtation

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors