Navigation

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

    Mad6969

    @Mad6969

    0
    Reputation
    3
    Posts
    186
    Profile views
    0
    Followers
    0
    Following
    Joined Last Online

    Mad6969 Follow

    Best posts made by Mad6969

    This user hasn't posted anything yet.

    Latest posts made by Mad6969

    • RE: Combining relay and temperature sketch

      Ok, now I have another problem.

      When I build the relay/dht node, I first made the thing work with the relay with button actuator sketch alone (the DHT was plugged, but it was an additional feature I wanted to add).

      Now, it seems that my power source doesn't have enough power to make the relay to close. The led on my relay board blinks when the relay is on and off, but nothing.

      That's weird.. I'll try running the relay sketch alone, just to see.

      posted in Troubleshooting
      Mad6969
      Mad6969
    • RE: Combining relay and temperature sketch

      @gohan said in Combining relay and temperature sketch:

      wait(1000)

      Oh.. like I said : something stupid..

      Thanks a lot. 🙂

      I also had "#define MY_NODE_ID 7", because I couldn't see the relay on my Vera.

      posted in Troubleshooting
      Mad6969
      Mad6969
    • RE: Combining relay and temperature sketch

      Hello,

      I'm trying to do the same thing but with just one relay and a DHT22. So I combined the "air humidity sensor" sketch and the "relay with button" one.

      Each sketch works fine, but when I combine them, I get an error form the DHT
      "Failed reading humidity from DHT
      Failed reading temperature from DHT!"

      But sometimes, I get the temp/hum in the serial monitor. I first thought that I misswired something, but it work perfectly with the other sketch.

      So.. I (obviously) missed something in the program and I can't see what (probably something stupid, I'm new to arduino and mysensors.)

      Here's my code (basicly a copy/paste of the two sketches). Any advice?

      /**
      * 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
      * Version 1.1 - 2016-07-20: Converted to MySensors v2.0 and added various improvements - Torben Woltjen (mozzbozz)
      * 
      * DESCRIPTION
      * This sketch provides an example of how to implement a humidity/temperature
      * sensor using a DHT11/DHT-22.
      *  
      * For more information, please visit:
      * http://www.mysensors.org/build/humidity
      * 
      */
      
      // Enable debug prints
      #define MY_DEBUG
      
      // Enable and select radio type attached 
      #define MY_RADIO_NRF24
      //#define MY_RADIO_RFM69
      //#define MY_RS485
      
      #include <SPI.h>
      #include <MySensors.h>  
      #include <DHT.h>
      
      //Relay sketch
      #include <Bounce2.h>
      
      
      // Set this to the pin you connected the DHT's data pin to
      #define DHT_DATA_PIN 8
      
      // Set this offset if the sensor has a permanent small offset to the real temperatures
      #define SENSOR_TEMP_OFFSET 0
      
      // Sleep time between sensor updates (in milliseconds)
      // Must be >1000ms for DHT22 and >2000ms for DHT11
      static const uint64_t UPDATE_INTERVAL = 60000;
      
      // Force sending an update of the temperature after n sensor reads, so a controller showing the
      // timestamp of the last update doesn't show something like 3 hours in the unlikely case, that
      // the value didn't change since;
      // i.e. the sensor would force sending an update every UPDATE_INTERVAL*FORCE_UPDATE_N_READS [ms]
      static const uint8_t FORCE_UPDATE_N_READS = 10;
      
      #define CHILD_ID_HUM 2
      #define CHILD_ID_TEMP 3
      
      float lastTemp;
      float lastHum;
      uint8_t nNoUpdatesTemp;
      uint8_t nNoUpdatesHum;
      bool metric = true;
      
      MyMessage msgHum(CHILD_ID_HUM, V_HUM);
      MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
      DHT dht;
      
      //Relay Sketch
      
      #define RELAY_PIN  4  // Arduino Digital I/O pin number for relay 
      #define BUTTON_PIN  5  // Arduino Digital I/O pin number for button 
      #define CHILD_ID 1   // Id of the sensor child
      #define RELAY_ON 1
      #define RELAY_OFF 0
      
      Bounce debouncer = Bounce(); 
      int oldValue=0;
      bool state;
      
      MyMessage msg(CHILD_ID,V_LIGHT);
      
      
      void presentation()  
      { 
      // Send the sketch version information to the gateway
      sendSketchInfo("Test403", "1.1");
      
      // Register all sensors to gw (they will be created as child devices)
      present(CHILD_ID_HUM, S_HUM);
      present(CHILD_ID_TEMP, S_TEMP);
      
      metric = getControllerConfig().isMetric;
      
      present(CHILD_ID, S_LIGHT);
      
      }
      
      
      void setup()
      {
      dht.setup(DHT_DATA_PIN); // set data pin of DHT sensor
      if (UPDATE_INTERVAL <= dht.getMinimumSamplingPeriod()) {
        Serial.println("Warning: UPDATE_INTERVAL is smaller than supported by the sensor!");
      }
      // Sleep for the time of the minimum sampling period to give the sensor time to power up
      // (otherwise, timeout errors might occure for the first reading)
      sleep(dht.getMinimumSamplingPeriod());
      
      // Setup the button
       pinMode(BUTTON_PIN,INPUT);
       // Activate internal pull-up
       digitalWrite(BUTTON_PIN,HIGH);
       
       // After setting up the button, setup debouncer
       debouncer.attach(BUTTON_PIN);
       debouncer.interval(5);
      
       // Make sure relays are off when starting up
       digitalWrite(RELAY_PIN, RELAY_OFF);
       // Then set relay pins in output mode
       pinMode(RELAY_PIN, OUTPUT);   
           
       // Set relay to last known state (using eeprom storage) 
       state = loadState(CHILD_ID);
       digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
      
      
      }
      
      
      void loop()      
      {  
      // Force reading sensor, so it works also after sleep()
      dht.readSensor(true);
      
      // Get temperature from DHT library
      float temperature = dht.getTemperature();
      if (isnan(temperature)) {
        Serial.println("Failed reading temperature from DHT!");
      } else if (temperature != lastTemp || nNoUpdatesTemp == FORCE_UPDATE_N_READS) {
        // Only send temperature if it changed since the last measurement or if we didn't send an update for n times
        lastTemp = temperature;
        if (!metric) {
          temperature = dht.toFahrenheit(temperature);
        }
        // Reset no updates counter
        nNoUpdatesTemp = 0;
        temperature += SENSOR_TEMP_OFFSET;
        send(msgTemp.set(temperature, 1));
      
        #ifdef MY_DEBUG
        Serial.print("T: ");
        Serial.println(temperature);
        #endif
      } else {
        // Increase no update counter if the temperature stayed the same
        nNoUpdatesTemp++;
      }
      
      // Get humidity from DHT library
      float humidity = dht.getHumidity();
      if (isnan(humidity)) {
        Serial.println("Failed reading humidity from DHT");
      } else if (humidity != lastHum || nNoUpdatesHum == FORCE_UPDATE_N_READS) {
        // Only send humidity if it changed since the last measurement or if we didn't send an update for n times
        lastHum = humidity;
        // Reset no updates counter
        nNoUpdatesHum = 0;
        send(msgHum.set(humidity, 1));
      
        #ifdef MY_DEBUG
        Serial.print("H: ");
        Serial.println(humidity);
        #endif
      } else {
        // Increase no update counter if the humidity stayed the same
        nNoUpdatesHum++;
      }
      
      //Relay voidloop
      debouncer.update();
      // Get the update value
      int value = debouncer.read();
      if (value != oldValue && value==0) {
          send(msg.set(state?false:true), true); // Send new state and request ack back
      }
      oldValue = value;
      } 
      
      void receive(const MyMessage &message) {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.isAck()) {
         Serial.println("This is an ack from gateway");
      }
      
      if (message.type == V_LIGHT) {
         // Change relay state
         state = message.getBool();
         digitalWrite(RELAY_PIN, state?RELAY_ON:RELAY_OFF);
         // Store state in eeprom
         saveState(CHILD_ID, state);
        
         // Write some debug info
         Serial.print("Incoming change for sensor:");
         Serial.print(message.sensor);
         Serial.print(", New status: ");
         Serial.println(message.getBool());
       } 
      }
      
      posted in Troubleshooting
      Mad6969
      Mad6969