Create relay free potential free switch.

  • Hi there,

    i need some help with an idea i need...
    I looking far a way to control a potential free contact to control an water lock, but without using a relay. if my water lock sees 10K on its connection it keeps it closed so no watering, if it sees 0 ohm it will have permission to water. my plants
    i was thinking to use an opto coupler but those i now need a voltage going tru on the output... or am i wrong.

    or maybe some kind of hal sensor with internal coil controlled by an arduino

  • Mod

    I didn't get what's the problem with the relay

  • battery powered project....

  • Mod

    Transistor? Latching relay? I am just throwing ideas since I haven't fully understood your project.

  • Hardware Contributor

    @Rene046 said in Create relay free potential free switch.:

    battery powered project....

    Why not just use a latching relay ?

  • because i dont want the water lock stay open after power lost.

  • Ok i explain.

    i have and Gardena Watering computer, here i want to connect a controller on battery to
    All this controller has to do via Mysensors is open or close a an switch (the 2 wires of this switch go inside the gardena computer that is looking for an 10k resistance to stop watering the plants, and an open switch 0 ohm to water the plants.

    Some distance further i have an other node that's measuring soil moisture,

    I have this now running by using normal relays, but using 2 of them (2 garden computers ) they use allot of battery power while watering so i was hoping there are some more better options.

  • Mod

    If you are afraid of wasting too much water, just run a command in setup function that checks the status of latching relay and turns it off. In addition there are many arduino projects for watering plants you can look for inspiration

  • Hardware Contributor

    And there are also some latching relays with 2 latches, one to switch on, one to switch off.
    You can just switch off at the beginning of your sketch.
    It's even possible to do that with hardware, to send a pulse to the "switch off" latch when the system is started. So even if your sketch fails to start, your relay will be off.

  • will give it a try.

    this is the sketch i want to implement this in:
    It will be a repeater node,
    I would like to have 2 Relays on pins D3,D4
    And a temperature sensor on D5 (DS1820)
    Eventually an voltage sense pin A3

     * Documentation:
     * Support Forum:
    // Enable debug prints to serial monitor
    #define MY_DEBUG
    // Enable and select radio type attached
    #define MY_RADIO_NRF24
    //#define MY_RADIO_RFM69
    #define MY_RF24_PA_LEVEL RF24_PA_MAX
    // Enabled repeater feature for this node
    #define MY_NODE_ID 1
    #include <SPI.h>
    #include <MySensors.h>
    #include <Bounce2.h>
    #include <SPI.h>
    #include <DallasTemperature.h>
    #include <OneWire.h>
    #define COMPARE_TEMP 1 // Send temperature only if changed? 1 = Yes 0 = No
    #define RELAY_PIN1  3  // Arduino Digital I/O pin number for relay
    #define BUTTON_PIN  7  // dont need this one remove
    #define CHILD_ID 1
    #define RELAY_ON 1
    #define RELAY_OFF 0
    Bounce debouncer = Bounce();
    bool state = false;
    bool initialValueSent = false;
    MyMessage msg(CHILD_ID, V_STATUS);
    void setup()
      // Setup the button
      //pinMode(BUTTON_PIN, INPUT_PULLUP);
      // After setting up the button, setup debouncer
      // Make sure relays are off when starting up
      digitalWrite(RELAY_PIN1, RELAY_OFF);
      // Then set relay pins in output mode
      pinMode(RELAY_PIN1, OUTPUT);
      // Set relay to last known state (using eeprom storage)
      state = loadState(CHILD_ID);
      digitalWrite(RELAY_PIN1, state?RELAY_ON:RELAY_OFF);
    void presentation()  {
      // Startup initialize MySensors library. Set callback for incoming messages. 
      sendSketchInfo("Lamp", "1.0");
      present(CHILD_ID, S_BINARY);
    void loop()
      if (!initialValueSent) {
        Serial.println("Sending initial value");
        Serial.println("Requesting initial value from controller");
        request(CHILD_ID, V_STATUS);
        wait(2000, C_SET, V_STATUS);
      if (debouncer.update()) {
        if ( {
          state = !state;
          send(msg.set(state?RELAY_ON:RELAY_OFF), true); // Send new state and request ack back
    void receive(const MyMessage &message) {
      if (message.isAck()) {
         Serial.println("This is an ack from gateway");
      if (message.type == V_STATUS) {
        if (!initialValueSent) {
          Serial.println("Receiving initial value from controller");
          initialValueSent = true;
        // Change relay state
        state = (bool)message.getInt();
        digitalWrite(RELAY_PIN1, 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(", New status: ");

  • So far 1 relay works perfect adding a second one will be a bid harder because the sketch samples i found use more than 2 i would like to know how to add just a second one.
    also in this sketch in need to find out hoe to remove the button function.
    Adding the temperature sensor seems for me very hard, because i would like to call it every 5 minutes without interrupting the repeater. (No Sleep can be used).
    if i know how to call every 5 minutes the temperature, i think i'll be able to add the also the adc code.

    I someone could point me to some code sample i would be very happy...

  • Mod

    Just use wait() instead of sleep

  • Thanks Gohan,

    Will the repeater function keep working...... ? more like an interrupt when something is seen ?

  • Mod

    The wait is specific for keeping the communications going while pausing the loop

Log in to reply

Looks like your connection to MySensors Forum was lost, please wait while we try to reconnect.