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. My Project
  3. RelayWithButtonActuator (6 channel)

RelayWithButtonActuator (6 channel)

Scheduled Pinned Locked Moved My Project
33 Posts 3 Posters 15.1k Views 2 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.
  • V Offline
    V Offline
    vampircik
    wrote on last edited by
    #7

    arduino.png

    1 Reply Last reply
    0
    • B Offline
      B Offline
      BartE
      Contest Winner
      wrote on last edited by BartE
      #8

      @vampircik this code snippet should work.

      The switch 1 till 6 should be connected to pin A0, A1, A2, A3, 4 and 5 and should connect to ground.

      The SN74HC595 should be connected with:

      • pin 14 (DS) to Arduino pin 6

      • pin 12 (LATCH/ST_CP) to Arduino pin 7

      • pin 8 (CLK/SH_CP) to Arduino pin 11

      • pin 16 (Vcc) and pin 10 (MR) to + 5 volt

      • pin 8 (GND) and pin 13 (OE) to ground

      • relay 1-6 to pin 15 (Q0), 1 (Q1), 2 (Q2), 3 (Q3), 4 (Q4) and 5 (Q4) the other relay pins connected to ground
        (note 18/1: fixed pin number error as posted below)

      /**
       * 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 - Bart Eversdijk - 6 switch version with Shift Register (SN74HC595)
       * 
       * DESCRIPTION
       * Example sketch showing how to control physical relays. 
       * This example will remember relay state after power failure.
       * http://www.mysensors.org/build/relay
       */ 
      
      #include <MySigningNone.h>
      #include <MyTransportNRF24.h>
      #include <MyTransportRFM69.h>
      #include <MyHwATMega328.h>
      #include <MySensor.h>
      #include <Bounce2.h>
      #include <SPI.h>
      #define MYS_INIT_DELAY 500
      
      #define PIN_SR_DATA      6  // shift register data pin   -- data out - 74HC595 (DS) pin 14 
      #define PIN_SR_LATCH     7  // shift register latch pin  -- data out - 74HC595 (RCLK) pin 12 
      #define PIN_SR_CLOCK     8  // shift register clock pin  -- data out - 74HC595 (CLK) pin 11
      
      struct SWITCHES {
          byte      currentStatus; 
          int       SwitchPin;   // To which Arduino pin this switch is connected
          Bounce    debouncer;
          MyMessage switchMsg;
      };
      
      SWITCHES switches[] = {
                {0, A0, Bounce(), MyMessage(0, V_LIGHT)},    // Arduino pin A0
                {0, A1, Bounce(), MyMessage(1, V_LIGHT)},    // Arduino pin A1
                {0, A2, Bounce(), MyMessage(2, V_LIGHT)},    // Arduino pin A2
                {0, A3, Bounce(), MyMessage(3, V_LIGHT)},    // Arduino pin A3
                {0,  4, Bounce(), MyMessage(4, V_LIGHT)},    // Arduino pin D4
                {0,  5, Bounce(), MyMessage(5, V_LIGHT)}     // Arduino pin D5
              };
      #define MAXSWITCHES (sizeof(switches)/sizeof(SWITCHES))
      
      
      // NRFRF24L01 radio driver (set low transmit power by default) 
      MyTransportNRF24 radio(RF24_CE_PIN, RF24_CS_PIN, RF24_PA_LEVEL_GW);  
      //MyTransportRFM69 radio;
      // Message signing driver (none default)
      //MySigningNone signer;
      // Select AtMega328 hardware profile
      MyHwATMega328 hw;
      // Construct MySensors library
      MySensor gw(radio, hw);
      
      void setup()  
      {   
          // Initialize library and add callback for incoming messages
          gw.begin(incomingMessage, AUTO, true);
          
          // Send the sketch version information to the gateway and Controller
          gw.sendSketchInfo("RelaySix", "1.1");
      
          // Fetch relay status
          for (int id=0; id < MAXSWITCHES; id++) {
             pinMode(switches[id].SwitchPin, INPUT);
             // Activate internal pull-up
             digitalWrite(switches[id].SwitchPin, HIGH); 
              
             gw.present( id, S_LIGHT );
             delay( MYS_INIT_DELAY );
      
             // Pull the gateway's current dim level - restore light level upon sendor node power-up
             gw.request( id, V_STATUS );
             delay( MYS_INIT_DELAY );
             
             // After setting up the button, setup debouncer
             switches[id].debouncer.attach(switches[id].SwitchPin);
             switches[id].debouncer.interval(5);
          }
          
          // Set shift register pins
          pinMode(PIN_SR_DATA,     OUTPUT);
          pinMode(PIN_SR_LATCH,    OUTPUT);
          pinMode(PIN_SR_CLOCK,    OUTPUT);
          digitalWrite(PIN_SR_LATCH, HIGH);
          
          // Switch off all relays
          sendRelayValues();
      }
      
      
      void loop() 
      {
          // Alway process incoming messages whenever possible
          gw.process();
        
          for (byte id = 0; id < MAXSWITCHES; id++) {
              // Button change detected
              if (switches[id].debouncer.update()) {
                 Serial.print (F("Switch #"));
                 Serial.print (id);
                 Serial.print (F(" to "));
                 Serial.println (switches[id].debouncer.read());
                 
                 // Button release detected toggle relay
                 if (!switches[id].debouncer.read()) {
                   // Toggle relay status
                   switches[id].currentStatus = (switches[id].currentStatus ? 0 : 1);
                   
                   // Set the actual relay status (all 6 at once)
                   sendRelayValues();
                   
                   // Inform the gateway of the current switch status...
                   gw.send(switches[id].switchMsg.set(switches[id].currentStatus));
                 }
              }
          }
      }
      
      void sendRelayValues() {
          // Actually send the valve bits
          digitalWrite(PIN_SR_LATCH, LOW);
      
          // Shift out all station bit values
          // from the highest bit to the lowest
          for(int id = 0; id < 8; id++)  {
              digitalWrite(PIN_SR_CLOCK, LOW);
              if (id < MAXSWITCHES) {
                digitalWrite(PIN_SR_DATA, (switches[id].currentStatus > 0 ? HIGH : LOW));
              } else {
                digitalWrite(PIN_SR_DATA, LOW);
              }
              digitalWrite(PIN_SR_CLOCK, HIGH);          
          }
          // Set new data active
          digitalWrite(PIN_SR_LATCH, HIGH);
      }
      
      void incomingMessage(const MyMessage &message) {
        if (message.isAck()) {
           Serial.println("This is an ack from gateway");
        }
        
        if (message.type == V_LIGHT) {
           byte id = (message.sensor % MAXSWITCHES);
      
           // Store new value
           switches[id].currentStatus = message.getBool() ? 1 : 0;
           
           // Set the actual relay status (all 6 at once)
           sendRelayValues();
           
           // Inform the gateway of the current switch status...
           gw.send(switches[id].switchMsg.set(switches[id].currentStatus));
                 
           // Write some debug info
           Serial.print("Incoming change for sensor:");
           Serial.print(message.sensor);
           Serial.print(", New status: ");
           Serial.println(message.getBool());
         } 
      }
      
      

      About your "willing to pay" remark in the original post, just make a donation to the MySensors project

      1 Reply Last reply
      0
      • V Offline
        V Offline
        vampircik
        wrote on last edited by
        #9

        Thank you. Today I will try. according to the results let you know.

        1 Reply Last reply
        0
        • V Offline
          V Offline
          vampircik
          wrote on last edited by
          #10

          @BartE said:

          pin 8 (CLK) to Arduino pin 11

          pin 16 (Vcc) to + 5 volt

          pin 8 (GND) to ground

          ?
          Arduino pin 11 = (GND) ?

          1 Reply Last reply
          0
          • V Offline
            V Offline
            vampircik
            wrote on last edited by
            #11

            pin 8 (CLK) to Arduino pin 11
            pin 8 (GND) to ground

            contrary

            1 Reply Last reply
            0
            • V Offline
              V Offline
              vampircik
              wrote on last edited by
              #12

              pin 14 (DS) to Arduino pin 6

              relay 1-6 to pin 14 (Qa)

              contraryмикросхема.png

              1 Reply Last reply
              0
              • V Offline
                V Offline
                vampircik
                wrote on last edited by
                #13
                This post is deleted!
                1 Reply Last reply
                0
                • V Offline
                  V Offline
                  vampircik
                  wrote on last edited by
                  #14

                  pin 14 (DS) to Arduino pin 6
                  pin 8 (CLK) to Arduino pin 11
                  pin 8 (GND) to ground
                  relay 1-6 to pin 14 (Qa),
                  микрик.png

                  1 Reply Last reply
                  0
                  • K Offline
                    K Offline
                    korttoma
                    Hero Member
                    wrote on last edited by
                    #15

                    Maybe it should be like this:

                    relay 1-6 to pin 15 (Q0), 1 (Q1), 2 (Q2), 3 (Q3), 4 (Q4) and 5 (Q5)

                    • Tomas
                    1 Reply Last reply
                    0
                    • V Offline
                      V Offline
                      vampircik
                      wrote on last edited by
                      #16

                      pin 8 (CLK) to Arduino pin 11

                      and with the contact what to do?

                      K 1 Reply Last reply
                      0
                      • V Offline
                        V Offline
                        vampircik
                        wrote on last edited by
                        #17

                        Arduino pin 11 = MOSI NRF24

                        1 Reply Last reply
                        0
                        • V Offline
                          V Offline
                          vampircik
                          wrote on last edited by
                          #18

                          wiring.png
                          it seems to me must be so connected. except for the screen?

                          1 Reply Last reply
                          0
                          • V vampircik

                            pin 8 (CLK) to Arduino pin 11

                            and with the contact what to do?

                            K Offline
                            K Offline
                            korttoma
                            Hero Member
                            wrote on last edited by
                            #19

                            @vampircik said:

                            pin 8 (CLK) to Arduino pin 11

                            and with the contact what to do?

                            Looking att the code @BartE posted it seems like it was supposed to be

                            pin 11 (CLK) to Arduino pin 8

                            • Tomas
                            1 Reply Last reply
                            0
                            • V Offline
                              V Offline
                              vampircik
                              wrote on last edited by
                              #20

                              ok try. ...............

                              1 Reply Last reply
                              0
                              • K Offline
                                K Offline
                                korttoma
                                Hero Member
                                wrote on last edited by
                                #21

                                So the correct instructions should have been:

                                pin 14 (DS) to Arduino pin 6
                                pin 12 (RCLK) to Arduino pin 7
                                pin 11 (CLK) to Arduino pin 8
                                pin 16 (Vcc) to + 5 volt
                                pin 8 (GND) to ground

                                relay 1-6 to pin 15 (Q0), 1 (Q1), 2 (Q2), 3 (Q3), 4 (Q4) and 5 (Q5) the other relay pins connected to ground

                                Please @BartE correct me if I'm wrong since I have no personal experience from this kind of setup.

                                • Tomas
                                1 Reply Last reply
                                0
                                • V Offline
                                  V Offline
                                  vampircik
                                  wrote on last edited by
                                  #22

                                  collected is not working. the controller displays the switch, but it does not control the Arduino.

                                  1 Reply Last reply
                                  0
                                  • V Offline
                                    V Offline
                                    vampircik
                                    wrote on last edited by
                                    #23

                                    includes buttons, it is displayed on the controller, with only relay nothing happens

                                    1 Reply Last reply
                                    0
                                    • V Offline
                                      V Offline
                                      vampircik
                                      wrote on last edited by
                                      #24

                                      так.jpg

                                      1 Reply Last reply
                                      0
                                      • K Offline
                                        K Offline
                                        korttoma
                                        Hero Member
                                        wrote on last edited by
                                        #25

                                        Do you get anything in the serial monitor for your Relay Node?

                                        • Tomas
                                        1 Reply Last reply
                                        0
                                        • V Offline
                                          V Offline
                                          vampircik
                                          wrote on last edited by
                                          #26

                                          send: 18-18-0-0 s=255,c=0,t=18,pt=0,l=3,sg=0,st=ok:1.5
                                          send: 18-18-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0
                                          read: 0-0-18 s=255,c=3,t=6,pt=0,l=1,sg=0:M
                                          repeater started, id=18, parent=0, distance=1
                                          send: 18-18-0-0 s=255,c=3,t=11,pt=0,l=8,sg=0,st=ok:RelaySix
                                          send: 18-18-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=ok:1.1
                                          send: 18-18-0-0 s=0,c=0,t=3,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=0,c=2,t=2,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=1,c=0,t=3,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=1,c=2,t=2,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=2,c=0,t=3,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=2,c=2,t=2,pt=0,l=0,sg=0,st=ok:
                                          send: 18-18-0-0 s=3,c=0,t=3,pt=0,l=0,sg=0,st=fail:
                                          send: 18-18-0-0 s=3,c=2,t=2,pt=0,l=0,sg=0,st=fail:
                                          send: 18-18-0-0 s=4,c=0,t=3,pt=0,l=0,sg=0,st=fail:
                                          send: 18-18-0-0 s=4,c=2,t=2,pt=0,l=0,sg=0,st=fail:
                                          send: 18-18-0-0 s=5,c=0,t=3,pt=0,l=0,sg=0,st=fail:
                                          send: 18-18-0-0 s=5,c=2,t=2,pt=0,l=0,sg=0,st=fail:
                                          find parent
                                          send: 18-18-255-255 s=255,c=3,t=7,pt=0,l=0,sg=0,st=bc:
                                          read: 0-0-18 s=0,c=1,t=2,pt=0,l=1,sg=0:0
                                          send: 18-18-0-0 s=0,c=1,t=2,pt=1,l=1,sg=0,st=ok:0
                                          Incoming change for sensor:0, New status: 0
                                          read: 0-0-18 s=1,c=1,t=2,pt=0,l=1,sg=0:0
                                          send: 18-18-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,st=ok:0
                                          Incoming change for sensor:1, New status: 0
                                          read: 0-0-18 s=2,c=1,t=2,pt=0,l=1,sg=0:0
                                          send: 18-18-0-0 s=2,c=1,t=2,pt=1,l=1,sg=0,st=ok:0
                                          Incoming change for sensor:2, New status: 0
                                          read: 0-0-18 s=255,c=3,t=8,pt=1,l=1,sg=0:0
                                          parent=0, d=1
                                          Switch #1 to 1
                                          Switch #2 to 1
                                          Switch #3 to 1
                                          Switch #4 to 1
                                          Switch #5 to 1
                                          Switch #1 to 0
                                          send: 18-18-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #1 to 1
                                          Switch #2 to 0
                                          send: 18-18-0-0 s=2,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #2 to 1
                                          Switch #0 to 1
                                          Switch #0 to 0
                                          send: 18-18-0-0 s=0,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #3 to 0
                                          send: 18-18-0-0 s=3,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #3 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #5 to 0
                                          send: 18-18-0-0 s=5,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #5 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #5 to 0
                                          send: 18-18-0-0 s=5,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #5 to 1
                                          Switch #5 to 0
                                          send: 18-18-0-0 s=5,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #5 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #5 to 0
                                          send: 18-18-0-0 s=5,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #5 to 1
                                          Switch #3 to 0
                                          send: 18-18-0-0 s=3,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #3 to 1
                                          Switch #3 to 0
                                          send: 18-18-0-0 s=3,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #3 to 1
                                          Switch #3 to 0
                                          send: 18-18-0-0 s=3,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #3 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #4 to 0
                                          send: 18-18-0-0 s=4,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #4 to 1
                                          Switch #5 to 0
                                          send: 18-18-0-0 s=5,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #5 to 1
                                          Switch #0 to 1
                                          Switch #0 to 0
                                          send: 18-18-0-0 s=0,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #0 to 1
                                          Switch #0 to 0
                                          send: 18-18-0-0 s=0,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #2 to 0
                                          send: 18-18-0-0 s=2,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #2 to 1
                                          Switch #2 to 0
                                          send: 18-18-0-0 s=2,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #2 to 1
                                          Switch #1 to 0
                                          send: 18-18-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #1 to 1
                                          Switch #1 to 0
                                          send: 18-18-0-0 s=1,c=1,t=2,pt=1,l=1,sg=0,st=ok:1
                                          Switch #1 to 1

                                          1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          25

                                          Online

                                          12.0k

                                          Users

                                          11.2k

                                          Topics

                                          113.4k

                                          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