Skip to content
  • MySensors
  • OpenHardware.io
  • Categories
  • Recent
  • Tags
  • Popular
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Brand Logo
  1. Home
  2. Development
  3. RelayActuator problem - sometimes nothing happens

RelayActuator problem - sometimes nothing happens

Scheduled Pinned Locked Moved Development
14 Posts 5 Posters 4.1k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • BulldogLowellB BulldogLowell

    @Moshe-Livne

    You could show a schematic of your rig and detail what type/size power supply you are using.

    Moshe LivneM Offline
    Moshe LivneM Offline
    Moshe Livne
    Hero Member
    wrote on last edited by
    #5

    @BulldogLowell Calling it schematic would be an overkill. It is a nano powered by a 1A wall socket.

    BulldogLowellB 1 Reply Last reply
    0
    • Moshe LivneM Moshe Livne

      @BulldogLowell Calling it schematic would be an overkill. It is a nano powered by a 1A wall socket.

      BulldogLowellB Offline
      BulldogLowellB Offline
      BulldogLowell
      Contest Winner
      wrote on last edited by BulldogLowell
      #6

      @Moshe-Livne said:

      @BulldogLowell Calling it schematic would be an overkill. It is a nano powered by a 1A wall socket.

      Are you powering the relay in parallel <to> edit: with the Arduino or from Arduino's Vcc?

      1 Reply Last reply
      0
      • Moshe LivneM Offline
        Moshe LivneM Offline
        Moshe Livne
        Hero Member
        wrote on last edited by
        #7

        currently from the arduino vcc. I have no idea how to wire it directly from the wall power. without breaking it, that it.

        BulldogLowellB 1 Reply Last reply
        0
        • Moshe LivneM Moshe Livne

          currently from the arduino vcc. I have no idea how to wire it directly from the wall power. without breaking it, that it.

          BulldogLowellB Offline
          BulldogLowellB Offline
          BulldogLowell
          Contest Winner
          wrote on last edited by
          #8

          @Moshe-Livne said:

          currently from the arduino vcc. I have no idea how to wire it directly from the wall power. without breaking it, that it.

          Assuming you have a 5V power supply and a single channel 5V relay, it will have a Ground, Vcc and IN pins.

          Connect with a wire from arduino's Vin (not Vcc) and arduino's ground. The third third (IN) will go to the arduino pin you are using to control the relay... start there.

          Moshe LivneM 1 Reply Last reply
          0
          • BulldogLowellB BulldogLowell

            @Moshe-Livne said:

            currently from the arduino vcc. I have no idea how to wire it directly from the wall power. without breaking it, that it.

            Assuming you have a 5V power supply and a single channel 5V relay, it will have a Ground, Vcc and IN pins.

            Connect with a wire from arduino's Vin (not Vcc) and arduino's ground. The third third (IN) will go to the arduino pin you are using to control the relay... start there.

            Moshe LivneM Offline
            Moshe LivneM Offline
            Moshe Livne
            Hero Member
            wrote on last edited by
            #9

            @BulldogLowell Thanks, will do

            1 Reply Last reply
            0
            • C Offline
              C Offline
              Chester
              wrote on last edited by
              #10

              @Moshe-Livne Depending on whether your incoming power is replaceable or hard wired in your module...

              You could look into picking up one of those dual voltage wall warts, that have one output with 1A, and one output with 2.1A. You could then just use one USB lead from the 1A output to run the Arduino and radio, then use the 2.1A output to power the relay board with a sufficient loading ability.

              I have done this with my 8 port SSR relay card, and so far in testing it has been super stable, and I have had no glitches in radio performance due to power drops from turning on or off the relays.

              1 Reply Last reply
              0
              • M Offline
                M Offline
                madmax
                wrote on last edited by
                #11

                Hello

                i have a sketch with dth22 motion and relay

                it's not optimal but it works

                i want to add another relay but it doesn't work have you a soluce

                thanks

                #include <MySensor.h>
                #include <DHT.h>
                #include <SimpleTimer.h>
                
                #define CHILD_ID_HUM 1
                #define CHILD_ID_TEMP 2
                #define CHILD_ID_MOTION 3
                #define CHILD_ID_RELAY 4
                
                #define MOTION_SENSOR_DIGITAL_PIN 3
                #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                #define INTERRUPT MOTION_SENSOR_DIGITAL_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                #define RELAY  5// Arduino Digital I/O pin number for first relay (second on pin+1 etc)
                #define RELAY_ON 0  // GPIO value to write to turn on attached relay
                #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
                
                unsigned long SLEEP_TIME = 600000; // Sleep time between reads (in milliseconds) - 10mins
                
                DHT dht;
                SimpleTimer timer;
                float lastTemp;
                float lastHum;
                boolean lastTripped;
                boolean metric = true;
                MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                
                MySensor gw;
                void setup()  
                { 
                  // Initialize library and add callback for incoming messages
                  gw.begin(incomingMessage, AUTO, true);
                  
                  dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
                
                  // Send the Sketch Version Information to the Gateway
                  gw.sendSketchInfo("HumTempRelayMotion", "1.0");
                
                  // Register all sensors to gw (they will be created as child devices)
                  gw.present(CHILD_ID_HUM, S_HUM);
                  gw.present(CHILD_ID_TEMP, S_TEMP);
                  gw.present(CHILD_ID_MOTION, S_MOTION);
                  gw.present(CHILD_ID_RELAY, S_LIGHT);
                  pinMode(RELAY, OUTPUT);
                  digitalWrite(RELAY, gw.loadState(RELAY)?RELAY_OFF:RELAY_ON);
                  
                  //Serial.begin(9600);
                  timer.setInterval(30000, getMeasure);
                  metric = gw.getConfig().isMetric;
                  
                }
                
                void loop()      
                {  
                  // Alway process incoming messages whenever possible
                  gw.process();
                  timer.run();
                  
                  boolean tripped = digitalRead(MOTION_SENSOR_DIGITAL_PIN) == HIGH;    
                  if (tripped != lastTripped) {
                    lastTripped = tripped;
                    Serial.print("M: ");
                    Serial.println(tripped);
                    gw.send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
                  }
                
                }
                
                void incomingMessage(const MyMessage &message) {
                  // We only expect one type of message from controller. But we better check anyway.
                  if (message.type==V_LIGHT) {
                     // Change relay state
                     digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
                     // Store state in eeprom
                     gw.saveState(message.sensor, message.getBool());
                     // Write some debug info
                     Serial.print("Incoming change for sensor:");
                     Serial.print(message.sensor);
                     Serial.print(", New status: ");
                     Serial.println(message.getBool());
                   } 
                }
                
                void getMeasure() {
                  delay(dht.getMinimumSamplingPeriod());
                
                  float temperature = dht.getTemperature();
                  if (isnan(temperature)) {
                      Serial.println("Failed reading temperature from DHT");
                  } else if (temperature != lastTemp) {
                    lastTemp = temperature;
                    if (!metric) {
                      temperature = dht.toFahrenheit(temperature);
                    }
                    gw.send(msgTemp.set(temperature, 1));
                    Serial.print("T: ");
                    Serial.println(temperature);
                  }
                  
                  float humidity = dht.getHumidity();
                  if (isnan(humidity)) {
                      Serial.println("Failed reading humidity from DHT");
                  } else if (humidity != lastHum) {
                      lastHum = humidity;
                      gw.send(msgHum.set(humidity, 1));
                      Serial.print("H: ");
                      Serial.println(humidity);
                  }
                }```
                BulldogLowellB 1 Reply Last reply
                0
                • M madmax

                  Hello

                  i have a sketch with dth22 motion and relay

                  it's not optimal but it works

                  i want to add another relay but it doesn't work have you a soluce

                  thanks

                  #include <MySensor.h>
                  #include <DHT.h>
                  #include <SimpleTimer.h>
                  
                  #define CHILD_ID_HUM 1
                  #define CHILD_ID_TEMP 2
                  #define CHILD_ID_MOTION 3
                  #define CHILD_ID_RELAY 4
                  
                  #define MOTION_SENSOR_DIGITAL_PIN 3
                  #define HUMIDITY_SENSOR_DIGITAL_PIN 4
                  #define INTERRUPT MOTION_SENSOR_DIGITAL_PIN-2 // Usually the interrupt = pin -2 (on uno/nano anyway)
                  #define RELAY  5// Arduino Digital I/O pin number for first relay (second on pin+1 etc)
                  #define RELAY_ON 0  // GPIO value to write to turn on attached relay
                  #define RELAY_OFF 1 // GPIO value to write to turn off attached relay
                  
                  unsigned long SLEEP_TIME = 600000; // Sleep time between reads (in milliseconds) - 10mins
                  
                  DHT dht;
                  SimpleTimer timer;
                  float lastTemp;
                  float lastHum;
                  boolean lastTripped;
                  boolean metric = true;
                  MyMessage msgHum(CHILD_ID_HUM, V_HUM);
                  MyMessage msgTemp(CHILD_ID_TEMP, V_TEMP);
                  MyMessage msg(CHILD_ID_MOTION, V_TRIPPED);
                  
                  MySensor gw;
                  void setup()  
                  { 
                    // Initialize library and add callback for incoming messages
                    gw.begin(incomingMessage, AUTO, true);
                    
                    dht.setup(HUMIDITY_SENSOR_DIGITAL_PIN); 
                  
                    // Send the Sketch Version Information to the Gateway
                    gw.sendSketchInfo("HumTempRelayMotion", "1.0");
                  
                    // Register all sensors to gw (they will be created as child devices)
                    gw.present(CHILD_ID_HUM, S_HUM);
                    gw.present(CHILD_ID_TEMP, S_TEMP);
                    gw.present(CHILD_ID_MOTION, S_MOTION);
                    gw.present(CHILD_ID_RELAY, S_LIGHT);
                    pinMode(RELAY, OUTPUT);
                    digitalWrite(RELAY, gw.loadState(RELAY)?RELAY_OFF:RELAY_ON);
                    
                    //Serial.begin(9600);
                    timer.setInterval(30000, getMeasure);
                    metric = gw.getConfig().isMetric;
                    
                  }
                  
                  void loop()      
                  {  
                    // Alway process incoming messages whenever possible
                    gw.process();
                    timer.run();
                    
                    boolean tripped = digitalRead(MOTION_SENSOR_DIGITAL_PIN) == HIGH;    
                    if (tripped != lastTripped) {
                      lastTripped = tripped;
                      Serial.print("M: ");
                      Serial.println(tripped);
                      gw.send(msg.set(tripped?"1":"0"));  // Send tripped value to gw
                    }
                  
                  }
                  
                  void incomingMessage(const MyMessage &message) {
                    // We only expect one type of message from controller. But we better check anyway.
                    if (message.type==V_LIGHT) {
                       // Change relay state
                       digitalWrite(message.sensor-CHILD_ID_RELAY+RELAY, message.getBool()?RELAY_ON:RELAY_OFF);
                       // Store state in eeprom
                       gw.saveState(message.sensor, message.getBool());
                       // Write some debug info
                       Serial.print("Incoming change for sensor:");
                       Serial.print(message.sensor);
                       Serial.print(", New status: ");
                       Serial.println(message.getBool());
                     } 
                  }
                  
                  void getMeasure() {
                    delay(dht.getMinimumSamplingPeriod());
                  
                    float temperature = dht.getTemperature();
                    if (isnan(temperature)) {
                        Serial.println("Failed reading temperature from DHT");
                    } else if (temperature != lastTemp) {
                      lastTemp = temperature;
                      if (!metric) {
                        temperature = dht.toFahrenheit(temperature);
                      }
                      gw.send(msgTemp.set(temperature, 1));
                      Serial.print("T: ");
                      Serial.println(temperature);
                    }
                    
                    float humidity = dht.getHumidity();
                    if (isnan(humidity)) {
                        Serial.println("Failed reading humidity from DHT");
                    } else if (humidity != lastHum) {
                        lastHum = humidity;
                        gw.send(msgHum.set(humidity, 1));
                        Serial.print("H: ");
                        Serial.println(humidity);
                    }
                  }```
                  BulldogLowellB Offline
                  BulldogLowellB Offline
                  BulldogLowell
                  Contest Winner
                  wrote on last edited by
                  #12

                  @madmax

                  there are examples on the forum on multiple relays on one MCU... try searching the forum.

                  1 Reply Last reply
                  0
                  • M Offline
                    M Offline
                    madmax
                    wrote on last edited by
                    #13

                    @BulldogLowell said:

                    are examples on the forum on multiple relays on one MCU... try searching the forum.

                    yes i see but with dth 22 it's difficult
                    i use simpletimer.h with this

                    BulldogLowellB 1 Reply Last reply
                    0
                    • M madmax

                      @BulldogLowell said:

                      are examples on the forum on multiple relays on one MCU... try searching the forum.

                      yes i see but with dth 22 it's difficult
                      i use simpletimer.h with this

                      BulldogLowellB Offline
                      BulldogLowellB Offline
                      BulldogLowell
                      Contest Winner
                      wrote on last edited by
                      #14

                      @madmax

                      yes, so go to mutlti relay, add your libraries for simple timer and DHT. Thge relay code is non-blocking so you should be able to fold it in quite nicely.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      15

                      Online

                      11.7k

                      Users

                      11.2k

                      Topics

                      113.1k

                      Posts


                      Copyright 2025 TBD   |   Forum Guidelines   |   Privacy Policy   |   Terms of Service
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • MySensors
                      • OpenHardware.io
                      • Categories
                      • Recent
                      • Tags
                      • Popular