Navigation

    • Register
    • Login
    • OpenHardware.io
    • Categories
    • Recent
    • Tags
    • Popular
    1. Home
    2. DannyM
    • Profile
    • Following
    • Followers
    • Topics
    • Posts
    • Best
    • Groups

    DannyM

    @DannyM

    5
    Reputation
    17
    Posts
    605
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online
    Website www.mothan.nl Location The Netherlands Age 53

    DannyM Follow

    Best posts made by DannyM

    • RE: BMP085 + DHT22

      @pepson

      I did what you tried to do, and it worked, also in Domoticz two temps are visible.

      This is my code:

      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik Ekblad
       * 
       * DESCRIPTION
       * Pressure sensor example using BMP085 module  
       * http://www.mysensors.org/build/pressure
       * Toegevoegd: na 10x dezelfde waarde te hebben gelezen bij TeEmp en Hum toch een waarde aan de GW sturen.
       */
       
      #include <SPI.h>
      #include <Wire.h>
      #include <DHT.h>  
      #include <MySensor.h>  
      #include <Adafruit_BMP085.h>
      
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      
      #define BARO_CHILD 0
      #define TEMP_CHILD 1
      #define CHILD_ID_HUM 2
      #define CHILD_ID_TEMP 3
      
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      
      const float ALTITUDE = 1.05; // <-- adapt this value to your own location's altitude.
      
      // Sleep time between reads (in seconds). Do not change this value as the forecast algorithm needs a sample every minute.
      const unsigned long SLEEP_TIME = 60000; 
      
      const char *weather[] = { "stabiel", "zonnig", "bewolkt", "onstabiel", "onweer", "onbekend" };
      enum FORECAST
      {
      	STABIEL = 0,		// "Stable Weather Pattern"
      	ZONNIG = 1,			// "Slowly rising Good Weather", "Clear/Sunny "
      	BEWOLKT = 2,		// "Slowly falling L-Pressure ", "BEWOLKT/Rain "
      	ONSTABIEL = 3,	// "Quickly rising H-Press",     "Not Stable"
      	ONWEER = 4,	    // "Quickly falling L-Press",    "ONWEER"
      	ONBEKEND = 5		// "ONBEKEND (More Time needed)
      };
      
      Adafruit_BMP085 bmp = Adafruit_BMP085();      // Digital Pressure Sensor 
      MySensor gw;
      
      float lastPressure = -1;
      float lastTempBMP = -1;
      int lastForecast = -1;
      
      const int LAST_SAMPLES_COUNT = 5;
      float lastPressureSamples[LAST_SAMPLES_COUNT];
      
      // this CONVERSION_FACTOR is used to convert from Pa to kPa in forecast algorithm
      // get kPa/h be dividing hPa by 10 
      #define CONVERSION_FACTOR (1.0/10.0)
      
      int minuteCount = 0;
      bool firstRound = true;
      // average value is used in forecast algorithm.
      float pressureAvg;
      // average after 2 hours is used as reference value for the next iteration.
      float pressureAvg2;
      
      float dP_dt;
      
      DHT dht;
      float lastTempDHT;
      float lastHum;
      
      boolean metric = true; 
      
      MyMessage tempMsg(TEMP_CHILD, V_TEMP);
      MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
      MyMessage forecastMsg(BARO_CHILD, V_FORECAST);
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      void setup() 
      {
      	gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
      	// Send the sketch version information to the gateway and Controller
      	
      	gw.sendSketchInfo("BaroHum", "2.0");
      
      	if (!bmp.begin()) 
      	{
      		Serial.println("Could not find a valid BMP085 sensor, check wiring!");
      		while (1) {}
      	}
      
      	// Register sensors to gw (they will be created as child devices)
      	gw.present(BARO_CHILD, S_BARO);
      	gw.present(TEMP_CHILD, S_TEMP);
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
       
      	metric = gw.getConfig().isMetric;
      }
      
      void loop() 
      {
      	float pressure = bmp.readSealevelPressure(ALTITUDE) / 100.0;
      	float temperatureBMP = bmp.readTemperature();
      
      	if (metric) 
      	{
      		// Convert to fahrenheit
      		temperatureBMP = temperatureBMP * 9.0 / 5.0 + 32.0;
      	}
      
      	int forecast = sample(pressure);
      
      	Serial.print("Temperature = ");
      	Serial.print(temperatureBMP);
      	Serial.println(metric ? " *C" : " *F");
      	Serial.print("Pressure = ");
      	Serial.print(pressure);
      	Serial.println(" hPa");
      	Serial.print("Forecast = ");
      	Serial.println(weather[forecast]);
      
      
      	if (temperatureBMP != lastTempBMP) 
      	{
      		gw.send(tempMsg.set(temperatureBMP, 1));
      		lastTempBMP = temperatureBMP;
      	}
      
      	if (pressure != lastPressure) 
      	{
      		gw.send(pressureMsg.set(pressure, 0));
      		lastPressure = pressure;
      	}
      
      	if (forecast != lastForecast)
      	{
      		gw.send(forecastMsg.set(weather[forecast]));
      		lastForecast = forecast;
      	}
      
        delay(dht.getMinimumSamplingPeriod());
      
      float temperatureDHT = dht.getTemperature();
        if (isnan(temperatureDHT)) {
            Serial.println("Failed reading temperature from DHT");
        } else if (temperatureDHT != lastTempDHT  || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          lastTempDHT = temperatureDHT;
          if (!metric) {
            temperatureDHT = dht.toFahrenheit(temperatureDHT);
          }
          nNoUpdatesTemp = 0;
          gw.send(msgTemp.set(temperatureDHT, 1));
          Serial.print("T: ");
          Serial.println(temperatureDHT);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
        
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum  || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
            lastHum = humidity;
      
            nNoUpdatesHum = 0;
            gw.send(msgHum.set(humidity, 1));
            Serial.print("H: ");
            Serial.println(humidity);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesHum++;
        }
      
      	gw.sleep(SLEEP_TIME);
      }
      
      float getLastPressureSamplesAverage()
      {
      	float lastPressureSamplesAverage = 0;
      	for (int i = 0; i < LAST_SAMPLES_COUNT; i++)
      	{
      		lastPressureSamplesAverage += lastPressureSamples[i];
      	}
      	lastPressureSamplesAverage /= LAST_SAMPLES_COUNT;
      
      	return lastPressureSamplesAverage;
      }
      
      
      
      // Algorithm found here
      // http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
      // Pressure in hPa -->  forecast done by calculating kPa/h
      int sample(float pressure)
      {
      	// Calculate the average of the last n minutes.
      	int index = minuteCount % LAST_SAMPLES_COUNT;
      	lastPressureSamples[index] = pressure;
      
      	minuteCount++;
      	if (minuteCount > 185)
      	{
      		minuteCount = 6;
      	}
      
      	if (minuteCount == 5)
      	{
      		pressureAvg = getLastPressureSamplesAverage();
      	}
      	else if (minuteCount == 35)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change * 2; // note this is for t = 0.5hour
      		}
      		else
      		{
      			dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value.
      		}
      	}
      	else if (minuteCount == 65)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) //first time initial 3 hour
      		{
      			dP_dt = change; //note this is for t = 1 hour
      		}
      		else
      		{
      			dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 95)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 1.5; // note this is for t = 1.5 hour
      		}
      		else
      		{
      			dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 125)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		pressureAvg2 = lastPressureAvg; // store for later use.
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2; // note this is for t = 2 hour
      		}
      		else
      		{
      			dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 155)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2.5; // note this is for t = 2.5 hour
      		}
      		else
      		{
      			dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 185)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 3; // note this is for t = 3 hour
      		}
      		else
      		{
      			dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
      		}
      		pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
      		firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
      	}
      
      	int forecast = ONBEKEND;
      	if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval.
      	{
      		forecast = ONBEKEND;
      	}
      	else if (dP_dt < (-0.25))
      	{
      		forecast = ONWEER;
      	}
      	else if (dP_dt > 0.25)
      	{
      		forecast = ONSTABIEL;
      	}
      	else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05)))
      	{
      		forecast = BEWOLKT;
      	}
      	else if ((dP_dt > 0.05) && (dP_dt < 0.25))
      	{
      		forecast = ZONNIG;
      	}
      	else if ((dP_dt >(-0.05)) && (dP_dt < 0.05))
      	{
      		forecast = STABIEL;
      	}
      	else
      	{
      		forecast = ONBEKEND;
      	}
      
      	// uncomment when debugging
      	//Serial.print(F("Forecast at minute "));
      	//Serial.print(minuteCount);
      	//Serial.print(F(" dP/dt = "));
      	//Serial.print(dP_dt);
      	//Serial.print(F("kPa/h --> "));
      	//Serial.println(weather[forecast]);
      
      	return forecast;
      }
      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik Ekblad
       * 
       * DESCRIPTION
       * Pressure sensor example using BMP085 module  
       * http://www.mysensors.org/build/pressure
       * Toegevoegd: na 10x dezelfde waarde te hebben gelezen bij TeEmp en Hum toch een waarde aan de GW sturen.
       */
       
      #include <SPI.h>
      #include <Wire.h>
      #include <DHT.h>  
      #include <MySensor.h>  
      #include <Adafruit_BMP085.h>
      
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      
      #define BARO_CHILD 0
      #define TEMP_CHILD 1
      #define CHILD_ID_HUM 2
      #define CHILD_ID_TEMP 3
      
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      
      const float ALTITUDE = 1.05; // <-- adapt this value to your own location's altitude.
      
      // Sleep time between reads (in seconds). Do not change this value as the forecast algorithm needs a sample every minute.
      const unsigned long SLEEP_TIME = 60000; 
      
      const char *weather[] = { "stabiel", "zonnig", "bewolkt", "onstabiel", "onweer", "onbekend" };
      enum FORECAST
      {
      	STABIEL = 0,		// "Stable Weather Pattern"
      	ZONNIG = 1,			// "Slowly rising Good Weather", "Clear/Sunny "
      	BEWOLKT = 2,		// "Slowly falling L-Pressure ", "BEWOLKT/Rain "
      	ONSTABIEL = 3,	// "Quickly rising H-Press",     "Not Stable"
      	ONWEER = 4,	    // "Quickly falling L-Press",    "ONWEER"
      	ONBEKEND = 5		// "ONBEKEND (More Time needed)
      };
      
      Adafruit_BMP085 bmp = Adafruit_BMP085();      // Digital Pressure Sensor 
      MySensor gw;
      
      float lastPressure = -1;
      float lastTempBMP = -1;
      int lastForecast = -1;
      
      const int LAST_SAMPLES_COUNT = 5;
      float lastPressureSamples[LAST_SAMPLES_COUNT];
      
      // this CONVERSION_FACTOR is used to convert from Pa to kPa in forecast algorithm
      // get kPa/h be dividing hPa by 10 
      #define CONVERSION_FACTOR (1.0/10.0)
      
      int minuteCount = 0;
      bool firstRound = true;
      // average value is used in forecast algorithm.
      float pressureAvg;
      // average after 2 hours is used as reference value for the next iteration.
      float pressureAvg2;
      
      float dP_dt;
      
      DHT dht;
      float lastTempDHT;
      float lastHum;
      
      boolean metric = true; 
      
      MyMessage tempMsg(TEMP_CHILD, V_TEMP);
      MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
      MyMessage forecastMsg(BARO_CHILD, V_FORECAST);
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      void setup() 
      {
      	gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
      	// Send the sketch version information to the gateway and Controller
      	
      	gw.sendSketchInfo("BaroHum", "2.0");
      
      	if (!bmp.begin()) 
      	{
      		Serial.println("Could not find a valid BMP085 sensor, check wiring!");
      		while (1) {}
      	}
      
      	// Register sensors to gw (they will be created as child devices)
      	gw.present(BARO_CHILD, S_BARO);
      	gw.present(TEMP_CHILD, S_TEMP);
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
       
      	metric = gw.getConfig().isMetric;
      }
      
      void loop() 
      {
      	float pressure = bmp.readSealevelPressure(ALTITUDE) / 100.0;
      	float temperatureBMP = bmp.readTemperature();
      
      	if (metric) 
      	{
      		// Convert to fahrenheit
      		temperatureBMP = temperatureBMP * 9.0 / 5.0 + 32.0;
      	}
      
      	int forecast = sample(pressure);
      
      	Serial.print("Temperature = ");
      	Serial.print(temperatureBMP);
      	Serial.println(metric ? " *C" : " *F");
      	Serial.print("Pressure = ");
      	Serial.print(pressure);
      	Serial.println(" hPa");
      	Serial.print("Forecast = ");
      	Serial.println(weather[forecast]);
      
      
      	if (temperatureBMP != lastTempBMP) 
      	{
      		gw.send(tempMsg.set(temperatureBMP, 1));
      		lastTempBMP = temperatureBMP;
      	}
      
      	if (pressure != lastPressure) 
      	{
      		gw.send(pressureMsg.set(pressure, 0));
      		lastPressure = pressure;
      	}
      
      	if (forecast != lastForecast)
      	{
      		gw.send(forecastMsg.set(weather[forecast]));
      		lastForecast = forecast;
      	}
      
        delay(dht.getMinimumSamplingPeriod());
      
      float temperatureDHT = dht.getTemperature();
        if (isnan(temperatureDHT)) {
            Serial.println("Failed reading temperature from DHT");
        } else if (temperatureDHT != lastTempDHT  || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          lastTempDHT = temperatureDHT;
          if (!metric) {
            temperatureDHT = dht.toFahrenheit(temperatureDHT);
          }
          nNoUpdatesTemp = 0;
          gw.send(msgTemp.set(temperatureDHT, 1));
          Serial.print("T: ");
          Serial.println(temperatureDHT);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
        
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum  || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
            lastHum = humidity;
      
            nNoUpdatesHum = 0;
            gw.send(msgHum.set(humidity, 1));
            Serial.print("H: ");
            Serial.println(humidity);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesHum++;
        }
      
      	gw.sleep(SLEEP_TIME);
      }
      
      float getLastPressureSamplesAverage()
      {
      	float lastPressureSamplesAverage = 0;
      	for (int i = 0; i < LAST_SAMPLES_COUNT; i++)
      	{
      		lastPressureSamplesAverage += lastPressureSamples[i];
      	}
      	lastPressureSamplesAverage /= LAST_SAMPLES_COUNT;
      
      	return lastPressureSamplesAverage;
      }
      
      
      
      // Algorithm found here
      // http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
      // Pressure in hPa -->  forecast done by calculating kPa/h
      int sample(float pressure)
      {
      	// Calculate the average of the last n minutes.
      	int index = minuteCount % LAST_SAMPLES_COUNT;
      	lastPressureSamples[index] = pressure;
      
      	minuteCount++;
      	if (minuteCount > 185)
      	{
      		minuteCount = 6;
      	}
      
      	if (minuteCount == 5)
      	{
      		pressureAvg = getLastPressureSamplesAverage();
      	}
      	else if (minuteCount == 35)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change * 2; // note this is for t = 0.5hour
      		}
      		else
      		{
      			dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value.
      		}
      	}
      	else if (minuteCount == 65)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) //first time initial 3 hour
      		{
      			dP_dt = change; //note this is for t = 1 hour
      		}
      		else
      		{
      			dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 95)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 1.5; // note this is for t = 1.5 hour
      		}
      		else
      		{
      			dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 125)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		pressureAvg2 = lastPressureAvg; // store for later use.
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2; // note this is for t = 2 hour
      		}
      		else
      		{
      			dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 155)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2.5; // note this is for t = 2.5 hour
      		}
      		else
      		{
      			dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 185)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 3; // note this is for t = 3 hour
      		}
      		else
      		{
      			dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
      		}
      		pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
      		firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
      	}
      
      	int forecast = ONBEKEND;
      	if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval.
      	{
      		forecast = ONBEKEND;
      	}
      	else if (dP_dt < (-0.25))
      	{
      		forecast = ONWEER;
      	}
      	else if (dP_dt > 0.25)
      	{
      		forecast = ONSTABIEL;
      	}
      	else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05)))
      	{
      		forecast = BEWOLKT;
      	}
      	else if ((dP_dt > 0.05) && (dP_dt < 0.25))
      	{
      		forecast = ZONNIG;
      	}
      	else if ((dP_dt >(-0.05)) && (dP_dt < 0.05))
      	{
      		forecast = STABIEL;
      	}
      	else
      	{
      		forecast = ONBEKEND;
      	}
      
      	// uncomment when debugging
      	//Serial.print(F("Forecast at minute "));
      	//Serial.print(minuteCount);
      	//Serial.print(F(" dP/dt = "));
      	//Serial.print(dP_dt);
      	//Serial.print(F("kPa/h --> "));
      	//Serial.println(weather[forecast]);
      
      	return forecast;
      }
      
      posted in Development
      DannyM
      DannyM
    • RE: help . power supply and add motion sensor to vera controller

      @Reza

      Hi, for question 2, you can go to this url on this website, everything is explained thee.
      vera#including-new-sensors

      You only have to startup your device two times, after initiate a start in the Vera Mysensors plugin.

      For question 2; you can use a usb to telephone charger for it too..

      posted in My Project
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Yes, that did it,

      Thanks @sundberg84 and @TheoL for your time..

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      @TheoL I use a telephone charger most of the time, I'm a beginner with all.
      Hope to make this a battery oparated sensor, will search for the components you mentioned.

      thanks

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      @MLs

      Hi, thanks for your input, whit setup of the pins you used I have no more failed to read from DHT sensors in my serial monitor.

      Now I need to revise my sketch, so it will send correct values.

      Thanks again!

      posted in Troubleshooting
      DannyM
      DannyM

    Latest posts made by DannyM

    • RE: BMP085 + DHT22

      @pepson

      I did what you tried to do, and it worked, also in Domoticz two temps are visible.

      This is my code:

      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik Ekblad
       * 
       * DESCRIPTION
       * Pressure sensor example using BMP085 module  
       * http://www.mysensors.org/build/pressure
       * Toegevoegd: na 10x dezelfde waarde te hebben gelezen bij TeEmp en Hum toch een waarde aan de GW sturen.
       */
       
      #include <SPI.h>
      #include <Wire.h>
      #include <DHT.h>  
      #include <MySensor.h>  
      #include <Adafruit_BMP085.h>
      
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      
      #define BARO_CHILD 0
      #define TEMP_CHILD 1
      #define CHILD_ID_HUM 2
      #define CHILD_ID_TEMP 3
      
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      
      const float ALTITUDE = 1.05; // <-- adapt this value to your own location's altitude.
      
      // Sleep time between reads (in seconds). Do not change this value as the forecast algorithm needs a sample every minute.
      const unsigned long SLEEP_TIME = 60000; 
      
      const char *weather[] = { "stabiel", "zonnig", "bewolkt", "onstabiel", "onweer", "onbekend" };
      enum FORECAST
      {
      	STABIEL = 0,		// "Stable Weather Pattern"
      	ZONNIG = 1,			// "Slowly rising Good Weather", "Clear/Sunny "
      	BEWOLKT = 2,		// "Slowly falling L-Pressure ", "BEWOLKT/Rain "
      	ONSTABIEL = 3,	// "Quickly rising H-Press",     "Not Stable"
      	ONWEER = 4,	    // "Quickly falling L-Press",    "ONWEER"
      	ONBEKEND = 5		// "ONBEKEND (More Time needed)
      };
      
      Adafruit_BMP085 bmp = Adafruit_BMP085();      // Digital Pressure Sensor 
      MySensor gw;
      
      float lastPressure = -1;
      float lastTempBMP = -1;
      int lastForecast = -1;
      
      const int LAST_SAMPLES_COUNT = 5;
      float lastPressureSamples[LAST_SAMPLES_COUNT];
      
      // this CONVERSION_FACTOR is used to convert from Pa to kPa in forecast algorithm
      // get kPa/h be dividing hPa by 10 
      #define CONVERSION_FACTOR (1.0/10.0)
      
      int minuteCount = 0;
      bool firstRound = true;
      // average value is used in forecast algorithm.
      float pressureAvg;
      // average after 2 hours is used as reference value for the next iteration.
      float pressureAvg2;
      
      float dP_dt;
      
      DHT dht;
      float lastTempDHT;
      float lastHum;
      
      boolean metric = true; 
      
      MyMessage tempMsg(TEMP_CHILD, V_TEMP);
      MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
      MyMessage forecastMsg(BARO_CHILD, V_FORECAST);
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      void setup() 
      {
      	gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
      	// Send the sketch version information to the gateway and Controller
      	
      	gw.sendSketchInfo("BaroHum", "2.0");
      
      	if (!bmp.begin()) 
      	{
      		Serial.println("Could not find a valid BMP085 sensor, check wiring!");
      		while (1) {}
      	}
      
      	// Register sensors to gw (they will be created as child devices)
      	gw.present(BARO_CHILD, S_BARO);
      	gw.present(TEMP_CHILD, S_TEMP);
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
       
      	metric = gw.getConfig().isMetric;
      }
      
      void loop() 
      {
      	float pressure = bmp.readSealevelPressure(ALTITUDE) / 100.0;
      	float temperatureBMP = bmp.readTemperature();
      
      	if (metric) 
      	{
      		// Convert to fahrenheit
      		temperatureBMP = temperatureBMP * 9.0 / 5.0 + 32.0;
      	}
      
      	int forecast = sample(pressure);
      
      	Serial.print("Temperature = ");
      	Serial.print(temperatureBMP);
      	Serial.println(metric ? " *C" : " *F");
      	Serial.print("Pressure = ");
      	Serial.print(pressure);
      	Serial.println(" hPa");
      	Serial.print("Forecast = ");
      	Serial.println(weather[forecast]);
      
      
      	if (temperatureBMP != lastTempBMP) 
      	{
      		gw.send(tempMsg.set(temperatureBMP, 1));
      		lastTempBMP = temperatureBMP;
      	}
      
      	if (pressure != lastPressure) 
      	{
      		gw.send(pressureMsg.set(pressure, 0));
      		lastPressure = pressure;
      	}
      
      	if (forecast != lastForecast)
      	{
      		gw.send(forecastMsg.set(weather[forecast]));
      		lastForecast = forecast;
      	}
      
        delay(dht.getMinimumSamplingPeriod());
      
      float temperatureDHT = dht.getTemperature();
        if (isnan(temperatureDHT)) {
            Serial.println("Failed reading temperature from DHT");
        } else if (temperatureDHT != lastTempDHT  || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          lastTempDHT = temperatureDHT;
          if (!metric) {
            temperatureDHT = dht.toFahrenheit(temperatureDHT);
          }
          nNoUpdatesTemp = 0;
          gw.send(msgTemp.set(temperatureDHT, 1));
          Serial.print("T: ");
          Serial.println(temperatureDHT);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
        
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum  || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
            lastHum = humidity;
      
            nNoUpdatesHum = 0;
            gw.send(msgHum.set(humidity, 1));
            Serial.print("H: ");
            Serial.println(humidity);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesHum++;
        }
      
      	gw.sleep(SLEEP_TIME);
      }
      
      float getLastPressureSamplesAverage()
      {
      	float lastPressureSamplesAverage = 0;
      	for (int i = 0; i < LAST_SAMPLES_COUNT; i++)
      	{
      		lastPressureSamplesAverage += lastPressureSamples[i];
      	}
      	lastPressureSamplesAverage /= LAST_SAMPLES_COUNT;
      
      	return lastPressureSamplesAverage;
      }
      
      
      
      // Algorithm found here
      // http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
      // Pressure in hPa -->  forecast done by calculating kPa/h
      int sample(float pressure)
      {
      	// Calculate the average of the last n minutes.
      	int index = minuteCount % LAST_SAMPLES_COUNT;
      	lastPressureSamples[index] = pressure;
      
      	minuteCount++;
      	if (minuteCount > 185)
      	{
      		minuteCount = 6;
      	}
      
      	if (minuteCount == 5)
      	{
      		pressureAvg = getLastPressureSamplesAverage();
      	}
      	else if (minuteCount == 35)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change * 2; // note this is for t = 0.5hour
      		}
      		else
      		{
      			dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value.
      		}
      	}
      	else if (minuteCount == 65)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) //first time initial 3 hour
      		{
      			dP_dt = change; //note this is for t = 1 hour
      		}
      		else
      		{
      			dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 95)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 1.5; // note this is for t = 1.5 hour
      		}
      		else
      		{
      			dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 125)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		pressureAvg2 = lastPressureAvg; // store for later use.
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2; // note this is for t = 2 hour
      		}
      		else
      		{
      			dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 155)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2.5; // note this is for t = 2.5 hour
      		}
      		else
      		{
      			dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 185)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 3; // note this is for t = 3 hour
      		}
      		else
      		{
      			dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
      		}
      		pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
      		firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
      	}
      
      	int forecast = ONBEKEND;
      	if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval.
      	{
      		forecast = ONBEKEND;
      	}
      	else if (dP_dt < (-0.25))
      	{
      		forecast = ONWEER;
      	}
      	else if (dP_dt > 0.25)
      	{
      		forecast = ONSTABIEL;
      	}
      	else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05)))
      	{
      		forecast = BEWOLKT;
      	}
      	else if ((dP_dt > 0.05) && (dP_dt < 0.25))
      	{
      		forecast = ZONNIG;
      	}
      	else if ((dP_dt >(-0.05)) && (dP_dt < 0.05))
      	{
      		forecast = STABIEL;
      	}
      	else
      	{
      		forecast = ONBEKEND;
      	}
      
      	// uncomment when debugging
      	//Serial.print(F("Forecast at minute "));
      	//Serial.print(minuteCount);
      	//Serial.print(F(" dP/dt = "));
      	//Serial.print(dP_dt);
      	//Serial.print(F("kPa/h --> "));
      	//Serial.println(weather[forecast]);
      
      	return forecast;
      }
      /**
       * The MySensors Arduino library handles the wireless radio link and protocol
       * between your home built sensors/actuators and HA controller of choice.
       * The sensors forms a self healing radio network with optional repeaters. Each
       * repeater and gateway builds a routing tables in EEPROM which keeps track of the
       * network topology allowing messages to be routed to nodes.
       *
       * Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
       * Copyright (C) 2013-2015 Sensnology AB
       * Full contributor list: https://github.com/mysensors/Arduino/graphs/contributors
       *
       * Documentation: http://www.mysensors.org
       * Support Forum: http://forum.mysensors.org
       *
       * This program is free software; you can redistribute it and/or
       * modify it under the terms of the GNU General Public License
       * version 2 as published by the Free Software Foundation.
       *
       *******************************
       *
       * REVISION HISTORY
       * Version 1.0 - Henrik Ekblad
       * 
       * DESCRIPTION
       * Pressure sensor example using BMP085 module  
       * http://www.mysensors.org/build/pressure
       * Toegevoegd: na 10x dezelfde waarde te hebben gelezen bij TeEmp en Hum toch een waarde aan de GW sturen.
       */
       
      #include <SPI.h>
      #include <Wire.h>
      #include <DHT.h>  
      #include <MySensor.h>  
      #include <Adafruit_BMP085.h>
      
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      
      #define BARO_CHILD 0
      #define TEMP_CHILD 1
      #define CHILD_ID_HUM 2
      #define CHILD_ID_TEMP 3
      
      #define HUMIDITY_SENSOR_DIGITAL_PIN 3
      
      const float ALTITUDE = 1.05; // <-- adapt this value to your own location's altitude.
      
      // Sleep time between reads (in seconds). Do not change this value as the forecast algorithm needs a sample every minute.
      const unsigned long SLEEP_TIME = 60000; 
      
      const char *weather[] = { "stabiel", "zonnig", "bewolkt", "onstabiel", "onweer", "onbekend" };
      enum FORECAST
      {
      	STABIEL = 0,		// "Stable Weather Pattern"
      	ZONNIG = 1,			// "Slowly rising Good Weather", "Clear/Sunny "
      	BEWOLKT = 2,		// "Slowly falling L-Pressure ", "BEWOLKT/Rain "
      	ONSTABIEL = 3,	// "Quickly rising H-Press",     "Not Stable"
      	ONWEER = 4,	    // "Quickly falling L-Press",    "ONWEER"
      	ONBEKEND = 5		// "ONBEKEND (More Time needed)
      };
      
      Adafruit_BMP085 bmp = Adafruit_BMP085();      // Digital Pressure Sensor 
      MySensor gw;
      
      float lastPressure = -1;
      float lastTempBMP = -1;
      int lastForecast = -1;
      
      const int LAST_SAMPLES_COUNT = 5;
      float lastPressureSamples[LAST_SAMPLES_COUNT];
      
      // this CONVERSION_FACTOR is used to convert from Pa to kPa in forecast algorithm
      // get kPa/h be dividing hPa by 10 
      #define CONVERSION_FACTOR (1.0/10.0)
      
      int minuteCount = 0;
      bool firstRound = true;
      // average value is used in forecast algorithm.
      float pressureAvg;
      // average after 2 hours is used as reference value for the next iteration.
      float pressureAvg2;
      
      float dP_dt;
      
      DHT dht;
      float lastTempDHT;
      float lastHum;
      
      boolean metric = true; 
      
      MyMessage tempMsg(TEMP_CHILD, V_TEMP);
      MyMessage pressureMsg(BARO_CHILD, V_PRESSURE);
      MyMessage forecastMsg(BARO_CHILD, V_FORECAST);
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      
      void setup() 
      {
      	gw.begin();
        dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
      
      	// Send the sketch version information to the gateway and Controller
      	
      	gw.sendSketchInfo("BaroHum", "2.0");
      
      	if (!bmp.begin()) 
      	{
      		Serial.println("Could not find a valid BMP085 sensor, check wiring!");
      		while (1) {}
      	}
      
      	// Register sensors to gw (they will be created as child devices)
      	gw.present(BARO_CHILD, S_BARO);
      	gw.present(TEMP_CHILD, S_TEMP);
        gw.present(CHILD_ID_HUM, S_HUM);
        gw.present(CHILD_ID_TEMP, S_TEMP);
       
      	metric = gw.getConfig().isMetric;
      }
      
      void loop() 
      {
      	float pressure = bmp.readSealevelPressure(ALTITUDE) / 100.0;
      	float temperatureBMP = bmp.readTemperature();
      
      	if (metric) 
      	{
      		// Convert to fahrenheit
      		temperatureBMP = temperatureBMP * 9.0 / 5.0 + 32.0;
      	}
      
      	int forecast = sample(pressure);
      
      	Serial.print("Temperature = ");
      	Serial.print(temperatureBMP);
      	Serial.println(metric ? " *C" : " *F");
      	Serial.print("Pressure = ");
      	Serial.print(pressure);
      	Serial.println(" hPa");
      	Serial.print("Forecast = ");
      	Serial.println(weather[forecast]);
      
      
      	if (temperatureBMP != lastTempBMP) 
      	{
      		gw.send(tempMsg.set(temperatureBMP, 1));
      		lastTempBMP = temperatureBMP;
      	}
      
      	if (pressure != lastPressure) 
      	{
      		gw.send(pressureMsg.set(pressure, 0));
      		lastPressure = pressure;
      	}
      
      	if (forecast != lastForecast)
      	{
      		gw.send(forecastMsg.set(weather[forecast]));
      		lastForecast = forecast;
      	}
      
        delay(dht.getMinimumSamplingPeriod());
      
      float temperatureDHT = dht.getTemperature();
        if (isnan(temperatureDHT)) {
            Serial.println("Failed reading temperature from DHT");
        } else if (temperatureDHT != lastTempDHT  || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
          lastTempDHT = temperatureDHT;
          if (!metric) {
            temperatureDHT = dht.toFahrenheit(temperatureDHT);
          }
          nNoUpdatesTemp = 0;
          gw.send(msgTemp.set(temperatureDHT, 1));
          Serial.print("T: ");
          Serial.println(temperatureDHT);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesTemp++;
        }
        
        float humidity = dht.getHumidity();
        if (isnan(humidity)) {
            Serial.println("Failed reading humidity from DHT");
        } else if (humidity != lastHum  || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
            lastHum = humidity;
      
            nNoUpdatesHum = 0;
            gw.send(msgHum.set(humidity, 1));
            Serial.print("H: ");
            Serial.println(humidity);
        } else {
          // Increase no update counter if the temperature stayed the same
          nNoUpdatesHum++;
        }
      
      	gw.sleep(SLEEP_TIME);
      }
      
      float getLastPressureSamplesAverage()
      {
      	float lastPressureSamplesAverage = 0;
      	for (int i = 0; i < LAST_SAMPLES_COUNT; i++)
      	{
      		lastPressureSamplesAverage += lastPressureSamples[i];
      	}
      	lastPressureSamplesAverage /= LAST_SAMPLES_COUNT;
      
      	return lastPressureSamplesAverage;
      }
      
      
      
      // Algorithm found here
      // http://www.freescale.com/files/sensors/doc/app_note/AN3914.pdf
      // Pressure in hPa -->  forecast done by calculating kPa/h
      int sample(float pressure)
      {
      	// Calculate the average of the last n minutes.
      	int index = minuteCount % LAST_SAMPLES_COUNT;
      	lastPressureSamples[index] = pressure;
      
      	minuteCount++;
      	if (minuteCount > 185)
      	{
      		minuteCount = 6;
      	}
      
      	if (minuteCount == 5)
      	{
      		pressureAvg = getLastPressureSamplesAverage();
      	}
      	else if (minuteCount == 35)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change * 2; // note this is for t = 0.5hour
      		}
      		else
      		{
      			dP_dt = change / 1.5; // divide by 1.5 as this is the difference in time from 0 value.
      		}
      	}
      	else if (minuteCount == 65)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) //first time initial 3 hour
      		{
      			dP_dt = change; //note this is for t = 1 hour
      		}
      		else
      		{
      			dP_dt = change / 2; //divide by 2 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 95)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 1.5; // note this is for t = 1.5 hour
      		}
      		else
      		{
      			dP_dt = change / 2.5; // divide by 2.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 125)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		pressureAvg2 = lastPressureAvg; // store for later use.
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2; // note this is for t = 2 hour
      		}
      		else
      		{
      			dP_dt = change / 3; // divide by 3 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 155)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 2.5; // note this is for t = 2.5 hour
      		}
      		else
      		{
      			dP_dt = change / 3.5; // divide by 3.5 as this is the difference in time from 0 value
      		}
      	}
      	else if (minuteCount == 185)
      	{
      		float lastPressureAvg = getLastPressureSamplesAverage();
      		float change = (lastPressureAvg - pressureAvg) * CONVERSION_FACTOR;
      		if (firstRound) // first time initial 3 hour
      		{
      			dP_dt = change / 3; // note this is for t = 3 hour
      		}
      		else
      		{
      			dP_dt = change / 4; // divide by 4 as this is the difference in time from 0 value
      		}
      		pressureAvg = pressureAvg2; // Equating the pressure at 0 to the pressure at 2 hour after 3 hours have past.
      		firstRound = false; // flag to let you know that this is on the past 3 hour mark. Initialized to 0 outside main loop.
      	}
      
      	int forecast = ONBEKEND;
      	if (minuteCount < 35 && firstRound) //if time is less than 35 min on the first 3 hour interval.
      	{
      		forecast = ONBEKEND;
      	}
      	else if (dP_dt < (-0.25))
      	{
      		forecast = ONWEER;
      	}
      	else if (dP_dt > 0.25)
      	{
      		forecast = ONSTABIEL;
      	}
      	else if ((dP_dt > (-0.25)) && (dP_dt < (-0.05)))
      	{
      		forecast = BEWOLKT;
      	}
      	else if ((dP_dt > 0.05) && (dP_dt < 0.25))
      	{
      		forecast = ZONNIG;
      	}
      	else if ((dP_dt >(-0.05)) && (dP_dt < 0.05))
      	{
      		forecast = STABIEL;
      	}
      	else
      	{
      		forecast = ONBEKEND;
      	}
      
      	// uncomment when debugging
      	//Serial.print(F("Forecast at minute "));
      	//Serial.print(minuteCount);
      	//Serial.print(F(" dP/dt = "));
      	//Serial.print(dP_dt);
      	//Serial.print(F("kPa/h --> "));
      	//Serial.println(weather[forecast]);
      
      	return forecast;
      }
      
      posted in Development
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Hi all,

      All works fine now! After the reshuffle of the connection pins it does what I want it to do.
      Only thing I need to change is the sleeptime, it's now set to 6000 and when no change send a value to the GW after ten readings. But it is to often now..

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      @MLs

      Hi, thanks for your input, whit setup of the pins you used I have no more failed to read from DHT sensors in my serial monitor.

      Now I need to revise my sketch, so it will send correct values.

      Thanks again!

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Hi all,

      Now I have bought a stepdown regulator to regulate the power for the radio.
      The readings of the sensor are the same as not using the stepdown regulator. So what can be wrong?
      Or is it not possible to use a LDR and a DHT11 together?

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      @TheoL I use a telephone charger most of the time, I'm a beginner with all.
      Hope to make this a battery oparated sensor, will search for the components you mentioned.

      thanks

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Yes, that did it,

      Thanks @sundberg84 and @TheoL for your time..

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Maybe This has something to do with it:

       dht.setup(LIGHT_SENSOR_ANALOG_PIN); 
      

      The Lightsensor isn't belonging to the DHT sensor.. I think 😕

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      I have now rebooted my GW so sending will be OK:

      send: 1-1-0-0 s=255,c=0,t=17,pt=0,l=3,sg=0,st=fail:1.5
      send: 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=fail:0
      sensor started, id=1, parent=0, distance=1
      send: 1-1-0-0 s=255,c=3,t=11,pt=0,l=16,sg=0,st=fail:HumidityAndLight
      send: 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=fail:0.2
      send: 1-1-0-0 s=0,c=0,t=7,pt=0,l=0,sg=0,st=fail:
      send: 1-1-0-0 s=1,c=0,t=6,pt=0,l=0,sg=0,st=fail:
      find parent
      send: 1-1-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,st=bc:
      send: 1-1-0-0 s=2,c=0,t=16,pt=0,l=0,sg=0,st=fail:
      Failed reading temperature from DHT
      Failed reading humidity from DHT
      send: 1-1-0-0 s=2,c=1,t=23,pt=7,l=5,sg=0,st=fail:61.2
      L: 61.2
      Failed reading temperature from DHT
      Failed reading humidity from DHT
      send: 1-1-0-0 s=2,c=1,t=23,pt=7,l=5,sg=0,st=ok:6.9
      L: 6.9
      Failed reading temperature from DHT
      Failed reading humidity from DHT
      send: 1-1-0-0 s=2,c=1,t=23,pt=7,l=5,sg=0,st=ok:7.1
      L: 7.1
      
      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      @sundberg84 My node is approx 3 meters away from the gateway, and now I am powering it from the computer, it's an Arduino Nano with USB cable.

      posted in Troubleshooting
      DannyM
      DannyM
    • RE: DHT and LDR separately working, but together not, what's wrong?

      Hi @sundberg84 I made a higher delay before of the reading of the lightLevel, [delay(1000);] But that didn't change any of the outcome.
      What about the capacitator? do I have to use another one?

      posted in Troubleshooting
      DannyM
      DannyM