Controlling existing relays



  • Hi,

    First of, I'm really new to both home automation and arduino, but really excited about the possibilities. So please be gentle! 🙂 So far I've ordered a bunch of arduino boards, sensors and misc stuff based on a few of the helpful examples listed here to get me started. I really think MySensors.org is a great way to get into home automation if you like to build stuff like I do!

    My technical knowledge however is more on the programming side so I'll start of with a hardware question and see how far my (unfortunately somewhat rusty) programming skills take me after that. 🙂

    In my house built in the early 90's I've got these kind of momentary/pulse (I think) buttons in every room controlling most of the lighting in the house:
    https://www.dropbox.com/s/lfbg7c3pqilnhek/WP_20150420_19_40_43_Pro.jpg?dl=0

    When I press one of the buttons in any room a corresponding relay in my main electrical cabinet switches on or off, thus turning the light in the room on or off. The relays look like this:
    https://www.dropbox.com/s/sux7bujrr4ae1qd/WP_20150420_08_03_25_Pro.jpg?dl=0

    My question is; what hardware would I need in addition to an Arduino Nano to control each of these relays, and how should I wire it to the existing relays? Or would I need to replace the relays completely?

    To add another layer of complexity, would it be possible to add a dimmer to some of the relays in order to be able to dim the lights in certain rooms?

    Thanks in advance the help!


  • Hero Member

    @twosh, your relays are 24V driven, so Arduino can't control them directly. You need a separated 5V/3.3V power to feed the Arduino/radio, and a circuit between Arduino output and relay.

    Maybe you can start from here http://www.electroschematics.com/8975/arduino-control-relay/

    Make sure you connect the GND from Arduino power supply also to the GND of your existing relay panel.

    To re-wire the relay panel (mains AC) with Arduino boards in, if you are not 100% sure about what do do, don't to it. The risk of electrical shock / spark / fire is real.

    And also make sure to check the http://www.mysensors.org/build/relay .

    Good luck!


  • Hero Member

    @twosh To add to the previous post, your current relays are 24V AC driven, so the typical examples that you see on the net about hooking up a relay to the Arduino won't work in your case. It might be easiest to add a relay, which switches the 24 VAC, between the Arduino and your existing relay. You also indicated that the existing switches are momentary, so there is likely a control panel that takes the momentary signal and then latches the relay on and off. Are you planning to remove the control panel and reuse the switches and relays with Arduino's as your control panel? The other thing to consider are the lights on your existing switches. I'm guessing that they are also 24 VAC, so you would need to find a way to control them as well, or potentially replace them with LEDs and power them with DC.

    Re. your question on dimmers, it is possible to add a dimming circuit which would connect between the existing relay and the actual light, or to replace the relay with a dimming circuit. If you make the Arduino's your control panel, then you could program the existing buttons to dim and brighten the lights, if you hold them down. Google "ac dimmer circuit arduino" and you'll find lots of examples.

    Cheers
    Al



  • Thanks for your input @rvendrame & @Sparkman !

    So basically I should connect my Arduino with e.g. this one http://www.ebay.com/itm/5V-12V-24V-10A-1-Channel-Relay-Module-Optocoupler-H-L-Level-Triger-for-Arduino-/181479686454 so that the Arduino triggers this relay, which in turn triggers my current relay, right?

    Well, the buttons being momentary is just my guess pretty much just based on that they "spring" back and lights up, as well as if we have a power shortage, pressing a button doesn't change anything - the light is still on if it was on before the outage. But then again, as I said, hardware isn't my forte so I could be completely wrong.

    In any case, you're probably right about the control panel, @Sparkman, since I guess that it is the thin wire going into the relay that sends the on/off impulse and since it's only one wire I guess there need to be some master box somewhere where all the rooms' wires are connected.

    Reg. dimmer had had thought about adding a z-wave dimming circuit after the relay, but just thought about not getting any power to stay connected if the relay was off. When the light would turn on, it would probably require some time before it would connect to my VeraEdge again and thus enable dimming. But using and Arduino to power the circuit it would always be connected to my controller, thus enabling "dimming" even though the light would be off. I'll think some more about this.

    Thanks again for the advice!


  • Hero Member

    @twosh said:

    So basically I should connect my Arduino with e.g. this one http://www.ebay.com/itm/5V-12V-24V-10A-1-Channel-Relay-Module-Optocoupler-H-L-Level-Triger-for-Arduino-/181479686454 so that the Arduino triggers this relay, which in turn triggers my current relay, right?

    Yes, but if you're planning on controlling multiple, then I would look at something like this: http://www.ebay.com/itm/310574415181. If you leave your existing control panel in place, the issue you'll have is that the existing switch must be on before you can control with the Arduino. As well, if you switch it off from the Arduino, the control panel won't know about it and the indicator on your existing switch will likely stay on. Do you have any info on brand/model of the existing system?

    The main issue with having a z-wave switch that is not powered is that it can no longer route packets for other devices. If each device can talk to your controller direct, then that's not an issue, but if other devices need to route through that switch to reach the controller, then those devices may no longer work properly using z-wave.

    Cheers
    Al


  • Hero Member

    I suppose the relays are impulse relays, which need a impulse to change the state (on/off). I'm using the Relay-Modules you mentioned above to control my impulse relays. My impulse relays are controlled with 230V. The relays are connected in parallel to the existing switches and use a 100ms impulse to change the state.
    Works like a charme.


  • Hero Member

    @TimO If they are indeed latching relays, then controlling them from an Arduino and leaving the functionality of the existing systems will be much easier, especially if the lights on the switches are also controlled by the relay.

    Cheers
    Al



  • Latching relays - I can see a small latch physically move when I switch on / off the lights. I think they might be powering my button lights as well since there are a thin wire connected to each relay in addition to the 230V wire. At least that thin wire must be for the impulse making the relay switch. Does this simplify things @Sparkman ?

    @TimO , could you visualize how you have connected the different parts, or better yet use my uploaded pic to show me how I should connect everything?

    Greatly appreciated!


  • Hardware Contributor

    It would be nice if your relays could hold with DC voltage. Do you have a chance to remove one of them, just to try it? Use a 24 DC voltage and try to make a relay click to close. See if it holds. If it does than you can use Mosfets to control them. Be careful, 220AC is lethal.


  • Hero Member

    @twosh said:

    Latching relays - I can see a small latch physically move when I switch on / off the lights. I think they might be powering my button lights as well since there are a thin wire connected to each relay in addition to the 230V wire. At least that thin wire must be for the impulse making the relay switch. Does this simplify things @Sparkman ?

    Yes it does, you would need to wire the new Arduino controlled relay in parallel with the existing wires (the ones to contact A1 and A2). One side of the 24 VAC power supply should be connected to either A1 or A2 and then the other side of the AC supply is connected through the switch to the other terminal. Just hook up the new relay the same way using the same 24VAC power supply if possible.

    Also, if you want to know the status of the light, you could add voltage/current sensors on the output side that would connect to an input pin on the Arduino. If you're not comfortable working on the high-voltage side, you could measure the pulses on the 24VAC side as well.

    Cheers
    Al


  • Hardware Contributor

    If they don't hold, then you can use a semiconductor called triac. Here is how you use one:
    triaccontroller.png
    It is not 240V AC that you are going to regulate, it is going to be your relays 24V AC control signal. And load is your relay.



  • Thanks guys! I will try to get a friend over who knows his stuff when it comes to electricity to help me out with the wiring.

    Breaking it down, I'll need one arduino for controlling the relay board, and if I want a dimmer I would need to rig another Arduino with a dimmer circuit after each 230v relay I want to dim the lamps for.

    @ceech - nice! I'll keep that diagram as an option as well - it would basically eliminate the need for the Arduino relay board I guess.

    Thanks again!



  • @ceech Just wondering, did you get a chance to test this circuit? I've been wanting to do this for a while., guess will be my next project. Will be great if I could get a kit on Ebay. 🙂




  • Hardware Contributor

    @jeylites No, I didn't try. It will work, though. You can try on a breadboard. You don't even need all the elements. Remove the 100ohm resistor and 0,1uF cap for testing. And the resistors can be replaced with similar. Be careful with the mains voltage, please. I'm tempted to make some boards just to try.



  • @ceech Perhaps I should test one on a bread board. ..



  • @ceech said:

    If they don't hold, then you can use a semiconductor called triac. Here is how you use one:
    triaccontroller.png
    It is not 240V AC that you are going to regulate, it is going to be your relays 24V AC control signal. And load is your relay.

    Based on @jeylites comments I'm starting to think that this triac circuit completely replaces the current relay (not just the Arduino relay board), as well as adding dimmer functionality - is this correct? Confused

    But would I loose the current physical buttons' functionality or could those also be wired into the triac?



  • @twosh

    Yes indeed, this is a dimmer not a Relay. If you need a relay functionality you could employ a solid state relay or mechanical one. Why I say this is the waveform gets altered when going through Traic and its not good for certain electronic items.Excluding a light bulb. See picture below for better understating. I wish i could explain more but in the process of doing something...LOL

    I didn't quite understand what you meant by "current physical buttons" ....

    dimmertheory_1236784371.jpg


  • Hardware Contributor

    @twosh Yes, it is adding the dimmer functionality, but you would need an additional optocoupler and bridge rectifier for it to work. The MOC3061 IC knows about zero crossing of the AC signal and cuts some signal as @jeylites explained. That shouldn't bother you for now. As long as you apply 5V or 0V on the input side, the circuit behaves as a switch.
    Let's not completely replace everything at the moment. Let us say that we are just going to add this circuit to your 24V AC relay coil. You can still use the physical switch. But remember - the voltage fed into the BTA41 triac should be 24V AC in this case.



  • Want to share my progress since my 8 relay arrived today! 🙂

    I've successfully modified the relay example sketch to use two analogue pins for the 7:th and 8:th relays, so everything software wise is fine for now.

    I connected one of the arduino relay outputs to one of my house relays for testing and succeeded to get the house relay to switch on by having the arduino relay low. But I can't get the house relay to turn off again, no matter if I turn the arduino relay high, nor low again. I had to use the physical light switch to turn the relay off again.

    What am I missing..?



  • @twosh you should post your sketch.



  • Here's my sketch @jeylites !

    I'm using this 8 channel relay board: http://www.ebay.com/itm/181242936438?rmvSB=true

    Had to switch the GPIO HIGH/LOW values around compared to the original sketch, and added two analogue pins controlling channel 7 and 8 on the board.

    // Example sketch showing how to control physical relays. 
    // This example will remember relay state even after power failure.
    
    #include <MySensor.h>
    #include <SPI.h>
    
    #define RELAY_1  3  // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
    #define RELAY_1A  0  // Arduino Analog I/O pin number for first relay (second on pin+1 etc)
    #define NUMBER_OF_RELAYS 6 // Total number of attached relays
    #define NUMBER_OF_ANALOG_RELAYS 2 // Total number of attached relays
    #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
    
    MySensor gw;
    
    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("Relay", "1.0 AD");
    
      // Fetch relay status
      for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) {
        // Register all sensors to gw (they will be created as child devices)
        gw.present(sensor, S_LIGHT);
        // Then set relay pins in output mode
        pinMode(pin, OUTPUT);   
        // Set relay to last known state (using eeprom storage) 
        digitalWrite(pin, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
      }
    
      // Fetch and present the analogue relays  
      int sensor=NUMBER_OF_RELAYS+1;
      gw.present(sensor++, S_LIGHT);
      pinMode(A0, OUTPUT);
      digitalWrite(A0, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
      gw.present(sensor++, S_LIGHT);
      pinMode(A1, OUTPUT);
      digitalWrite(A1, gw.loadState(sensor)?RELAY_ON:RELAY_OFF);
      
    }
    
    
    void loop() 
    {
      // Alway process incoming messages whenever possible
      gw.process();
    }
    
    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
         if (message.sensor <= NUMBER_OF_RELAYS)
           digitalWrite(message.sensor-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF);
         else if (message.sensor == NUMBER_OF_RELAYS+1) //First analogue sensor
           digitalWrite(A0, message.getBool()?RELAY_ON:RELAY_OFF);
         else //Second analogue sensor
           digitalWrite(A1, 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());
       } 
    }
    


  • @twosh Try this sketch below it works. You can change outputs around by changing const int relayPin [] = {A2, A3, A4, A5, A6, A7}; & const int buttonPin[] = {3, 4, 5, 6, 7, 8};

    
    // This is the final sketch
    // Example sketch showing how to control physical relays. 
    // This example will remember relay state even after power failure.
    
    #include <MySensor.h>
    #include <SPI.h>
    #include <Bounce2.h>
    #define RELAY_ON 0                      // switch around for realy HIGH/LOW state
    #define RELAY_OFF 1
    //
    MySensor gw;
    
    //#define RADIO_ID 8                    // Radio Id, whatever channel you assigned to
    #define noRelays 6
    const int relayPin[] = {A2, A3, A4, A5, A6, A7};
    const int buttonPin[] = {3, 4, 5, 6, 7, 8};
    
    class Relay				// relay class, store all relevant data (equivalent to struct)
    {
    public:                             		 
      int buttonPin;			// physical pin number of button
      int relayPin;				// physical pin number of relay
      byte oldValue;               		// last Values for key (debounce)
      boolean relayState;             	// relay status (also stored in EEPROM)
    };
    
    Relay Relays[noRelays];	
    Bounce debouncer[noRelays];
    MyMessage msg[noRelays];
    
    void setup(){
    	gw.begin(incomingMessage, AUTO, true);
    	delay(250);
    	gw.sendSketchInfo("MultiRelayButton", "0.9b");
    	delay(250);
    
    	// Initialize Relays with corresponding buttons
    	for (int i = 0; i < noRelays; i++){
    	Relays[i].buttonPin = buttonPin[i];				             // assign physical pins
    	Relays[i].relayPin = relayPin[i];
    	msg[i].sensor = i;						             // initialize messages
    	msg[i].type = V_LIGHT;
    	debouncer[i] = Bounce();						     // initialize debouncer
    	debouncer[i].attach(buttonPin[i]);
    	debouncer[i].interval(5);
    	pinMode(Relays[i].buttonPin, INPUT_PULLUP);
    	pinMode(Relays[i].relayPin, OUTPUT);
    	Relays[i].relayState = gw.loadState(i);			                      // retrieve last values from EEPROM
    	digitalWrite(Relays[i].relayPin, Relays[i].relayState? RELAY_ON:RELAY_OFF);   // and set relays accordingly
    	gw.send(msg[i].set(Relays[i].relayState? true : false));	              // make controller aware of last status
    	gw.present(i, S_LIGHT);							      // present sensor to gateway
    	delay(250);
    
    	}
    }
    
    void loop()
    	{
    	gw.process();
    	for (byte i = 0; i < noRelays; i++){
    	debouncer[i].update();
    	byte value = debouncer[i].read();
    	if (value != Relays[i].oldValue && value == 0){
    	Relays[i].relayState = !Relays[i].relayState;
    	digitalWrite(Relays[i].relayPin, Relays[i].relayState?RELAY_ON:RELAY_OFF);
    	gw.send(msg[i].set(Relays[i].relayState? true : false));
    	gw.saveState( i, Relays[i].relayState );}                 // save sensor state in EEPROM (location == sensor number)
    	
            Relays[i].oldValue = value;
            
    	}
    }
    
    // process incoming message 
    void incomingMessage(const MyMessage &message){
             
            if (message.type == V_LIGHT){ 
            if (message.sensor <noRelays){ 			  // check if message is valid for relays..... previous line if [[[ (message.sensor <=noRelays){ ]]]
            Relays[message.sensor].relayState = message.getBool(); 
            digitalWrite(Relays[message.sensor].relayPin, Relays[message.sensor].relayState? RELAY_ON:RELAY_OFF); // and set relays accordingly
            gw.saveState( message.sensor, Relays[message.sensor].relayState ); // save sensor state in EEPROM (location == sensor number)
    		}
    	}
    }
    


  • Thanks a lot @jeylites !

    A couple of question; you are using physical buttons mapped to your pins d3-d8 - 6 in total. The rest of the digital pins are taken up by the radio I guess, since they are for me. Does that mean that this sketch is limited to 6 relays as well since the Relay class seems to match one button pin with one relay pin. Or can I just define 6 buttons and 8 relays, like this?

    const int relayPin[] = {A0, A1, A2, A3, A4, A5, A6, A7};
    const int buttonPin[] = {3, 4, 5, 6, 7, 8, NULL, NULL};
    

    I could use the A0-A7 pins for my 8 relays but I'm unsure if the above 6+NULL+NULL buttons to 8 relays mapping will cause problems?

    To clarify, the problem I'm facing when using my sketch above is not that the arduino relays would not obey, it is that the relays controlled by the arduino relays stays "on" all the time. The physical buttons i keep mentioning are connected to the HOUSE relays (i.e. lightswitches), not to the Arduino.



  • Found some specs on my house relays: http://www.switchtec.co.uk/relay_catalog/129_LR-28.pdf

    It's the esmi nr-8251 latching relay if this helps!



  • @TimO said:

    I suppose the relays are impulse relays, which need a impulse to change the state (on/off). I'm using the Relay-Modules you mentioned above to control my impulse relays. My impulse relays are controlled with 230V. The relays are connected in parallel to the existing switches and use a 100ms impulse to change the state.
    Works like a charme.

    Could you share your experience in more detail? It feels like you have accomplished what I would like to happen at this point. 🙂


  • Hero Member

    @twosh Based on the spec sheet, I believe your existing latching relays need a 35ms pulse to turn them on and off.

    The standard relay sketch to control your new relays is meant to turn the relays on based on a command from the controller and then another command from the controller to turn them off. It also maintains the relay state by saving them to EEPROM, and sets them to last state on power-up, etc. You don't need most of that. All you need to do is set the relay to on, wait 35 milliseconds and then set the relay to off based on a toggle command from the controller.

    Take a crack at simplifying the sketch, post your results and I, or others, can help with the next steps.

    The one thing to note is that with this system, you won't know if the light is on or on, all you can do is toggle current status. You would have to add current sensors or something like that to be able to know the state. Are there LEDs on the existing system that are on when the light is on and off when the lights are off?

    Cheers
    Al

    PS Have you measured the voltage to the control side of the existing latching relay when operated by a switch?



  • Thank you all for the various ideas and input!

    I've figured out what I had done wrong (not feeding the relays with the common wire correctly). I've also changed the sketch to give a 35 ms impulse, and connected everything. Working great! Here is my sketch if anyone needs it:

    // Example sketch showing how to control physical relays. 
    // This example will NOT remember relay state even after power failure.
    
    #include <MySensor.h>
    #include <SPI.h>
    
    #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
    
    #define noRelays 8
    const int relayPin[] = {A0, A1, A2, A3, A4, A5, 3, 4};
    
    MySensor gw;
    
    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("Relay", "1.0 AD");
    
      // Fetch relay status
      for (int sensor=0; sensor < noRelays; sensor++)
      {
        // Register all sensors to gw (they will be created as child devices)
        gw.present(sensor+1, S_LIGHT);
        // Then set relay pins in output mode
        pinMode(relayPin[sensor], OUTPUT);   
        // Set relay to last known state (using eeprom storage) 
        //digitalWrite(relayPin[sensor], gw.loadState(sensor+1)?RELAY_ON:RELAY_OFF);
      }
    }
    
    
    void loop() 
    {
      // Alway process incoming messages whenever possible
      gw.process();
    }
    
    void incomingMessage(const MyMessage &message)
    {
      // We only expect one type of message from controller. But we better check anyway.
      if (message.type==V_LIGHT)
      {
         if (message.sensor <= noRelays)
         {
             digitalWrite(relayPin[message.sensor-1], RELAY_ON);
             delay(35); // 35 ms impulse used by my relays
             digitalWrite(relayPin[message.sensor-1], 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());
       } 
    }
    
    

    As @Sparkman says, I won't actually know if the light is on or off, since I can't register a change that would happen via the physical light switches in the house. Any suggestions on how to do this is of course welcome! The output side of the house relay is 230 VAC to the lights, and 24 VAC to the leds in the light switches. What kind of hardware would I need for sensing current and reporting it back to the Arduino? Is there any sketch I could use that lays the groundwork?



  • Is this what I would need? http://www.ebay.com/itm/310506962976?rmvSB=true

    How would I wire this? Should it sit between the house relay and the light switch (serial), or would I run it parallel somehow? I guess I would need 8 of these to measure my 8 relays / light switches?

    Thanks!


  • Hero Member

    @twosh Glad to hear you have it working. You could wire something like this in: http://www.ebay.com/itm/221649135732 for each circuit that you want to monitor. They simply put out a voltage relative to the current that you can measure on an analog input. This particular type is hard wired into the 230 VAC side. There are also options that you slip over the 230 VAC. See here for a bunch of options: http://www.ebay.com/sch/i.html?_nkw=arduino+current+sensor.

    Cheers
    Al



  • @Sparkman I think that would work out quite nicely! But I think I would rather stay away from the 230VAC and use it on the 24VAC instead - feels safer. If I don't misunderstand how the current sensor works it shouldn't matter if I hard wire it on 230VAC or 24VAC, right?


  • Hero Member

    @twosh Because the signals on the 24 VAC side are momentary 35 ms pulses and not a continuous current when the lights are on, it would be more difficult to use as there's a chance you could miss them and then you would get out of sync. It would be most accurate to connect on the 230 VAC side. You would disconnect one side of the 230 VAC from the relay, wire it to one side of the large terminal on the module and then use a new short piece of wire (rated for at least 230 VAC/20A) and connect from the other large terminal on the module to the relay. It basically needs to be inserted in the circuit so that the current would flow through it. If you're uncomfortable with that, then you can use one of the modules that slip over the wire. They tend to cost more and also may need additional components to connect it to an analog in on the Arduino. Here's one that will work without additional components: http://www.ebay.com/itm/171737837875. This one is only rated for 5A which likely is enough depending on how many and what types of light bulbs you have on the circuit.

    Cheers
    Al

    PS The added advantage is that you'll also be able to track power usage for those lights.



  • @twosh the above current sensor could be one option or you could build a voltage divider to measure the 24v side. Something like the battery monitor .... this route is cheap and effective. Thought I don't know how you are going to the programming part but will like to see where it goes 🙂



  • Great, thanks for the clarifications @Sparkman !

    Being able to measure power would of course be a nice bonus! I'll think about it. I have another question (of course... 🙂 ).

    The Nano and Pro mini have only 6 analogue inputs, I would be having need for 8... Would I need to use two arduinos or is there any other way?

    Best,
    Tim


  • Hero Member

    @jeylites said:

    the above current sensor could be one option or you could build a voltage divider to measure the 24v side. Something like the battery monitor .... this route is cheap and effective. Thought I don't know how you are going to the programming part but will like to see where it goes 🙂

    It's 24 VAC, so would also need to be rectified.

    Cheers
    Al


  • Hero Member

    @twosh said:

    Great, thanks for the clarifications @Sparkman !

    Being able to measure power would of course be a nice bonus! I'll think about it. I have another question (of course... 🙂 ).

    The Nano and Pro mini have only 6 analogue inputs, I would be having need for 8... Would I need to use two arduinos or is there any other way?

    Best,
    Tim

    You're welcome Tim!

    You can go with multiple Arduinos but I'd consider a Mega instead: http://www.ebay.com/itm/360790082588.

    Cheers
    Al



  • @jeylites - thanks for the alternate suggestion! 🙂

    @Sparkman , to clarify, my light switches does glow constantly when turned on, so there is constant current on the output side of the relay going to the light switches. I've measured the voltage and it is 24VAC. So I think that, disregarding the power measurement possibility, I could use that circuit as well.


  • Hero Member

    @twosh said:

    @Sparkman , to clarify, my light switches does glow constantly when turned on, so there is constant current on the output side of the relay going to the light switches. I've measured the voltage and it is 24VAC. So I think that, disregarding the power measurement possibility, I could use that circuit as well.

    If there's 24 VAC on the output side of the relays as well, then yes, you could use that and you have some other options to be able to measure it including options to use digital pins instead of analog.

    Here's some examples on converting the 24 VAC to 5 VDC: http://rayshobby.net/24vac-to-5vdc-conversion/. Option 4 may be a good choice. In your case, since you would only use it to connect to a digital pin on your Arduino, power draw is very low and some of the issues he talks about don't apply to your case.

    Cheers
    Al



  • Thanks for the link - will read it tomorrow! 🙂



  • I read the site and concluded that I will first of try with the suggested components (thanks again @Sparkman ). Ordered a bunch of them and a Mega. I'll let you know of my progress when they arrive! Thanks everybody!



  • My Mega arrived today so I could load it with my customized sketch that I've worked on for controlling relays as well as measuring current. I'm still waiting for the current sensors, but I've already got a problem... I keep getting "check wires" via the serial monitor, and the Mega is not detected by the gateway.

    Basically I think that the wiring of the radio to the Mega is wrong, but after scavenging the forum and trying a handfull of different wiring combinations I still can't get this to work.

    I have tried using the normal (nano, pro mini) pins, using pins 14-16, 50-52, etc. but nothing seems to work. I have NOT modified any config files yet, but based on the various threads I've read it's unclear to me if you should or shouldn't.

    @Sparkman , do you use a mega yourself, and have successfully wired the radio?

    @hek, would it be possible to add instructions for the Mega (and perhaps the Uno as well) to the general build guide for connecting the radio?



  • Finally found a combination that worked with the mega as a sensor. Here is the pin mapping if it will save time for anyone:

    9 CE
    10 CSN/CS
    52 SCK
    51 MOSI
    50 MISO
    2 IRQ

    Doesn't require any config changes, but I am currently getting some "0;0;3;0;9;version mismatch" in serial monitor. Have 10 uF cap on the radio.



  • Tried powering the Mega from computers USB 5V, and two different 12V DC adapters - still getting version mismatch. Anybody knows what's going on?


  • Hero Member

    @twosh From what I've read before, the version mismatch error is often caused by power issues. Are you getting the errors with the relays connected or without? If the relays are connected, try disconnecting them. If the error goes away, it's likely a power issues. Maybe try powering the radio from a separate 3.3v source.

    Cheers
    Al



  • Thanks for the suggestion, @Sparkman !
    I have just the radio connected for now, but still getting that "version mismatch"-error. I will try getting a separate 3.3v power to the radio tomorrow and see if that would help.



  • @Sparkman
    I tried powering the Megas radio from a Nanos 3.3V pin and GND. The Nano is working fine as a sensor by itself, so I guess the radio gets enough power from it. However, this way I only got "check wires" from the Mega... 😞

    Just a thought; if it helps, I'm defining these pins for the Mega in my sketch, but I don't see how that could affect this particular problem...

    const int relayPin[] = {22, 23, 24, 25, 26, 27, 28, 29};
    const int currentPin[] = {A0, A1, A2, A3, A4, A5, A6, A7, A8, A9};
    

  • Hero Member

    @twosh What happens if you remove those lines or comment them out? I have used a Mega with an NRF24 successfully before with the NRF powered from the 3.3v source on the Mega, but I didn't have any sensors connected. I would try a very simple sketch first to see if that works.

    Cheers
    Al



  • Thanks @sparkman for once again nudging me in the right direction!
    I went trough the code in my sketch a couple of times commenting out various sections and suddenly the sensor started functioning correctly. So I checked that function closely and noticed that I was out of bounds in a for-loop. that stupid NUMBER_OF_CURRENT_PINS +1 . That +1 had accidentally stayed there from an early version of the sketch. Correcting that, my sketch seems to load without problems - go figure! 😛



  • how can I control fan speed using light dimmer sketch in openhab?



  • @twosh said:

    Great, thanks for the clarifications @Sparkman !

    Being able to measure power would of course be a nice bonus! I'll think about it. I have another question (of course... 🙂 ).

    The Nano and Pro mini have only 6 analogue inputs, I would be having need for 8... Would I need to use two arduinos or is there any other way?

    Best,
    Tim

    Have you thought of sticking a hall effect sensor to the outside of the relay. Or in the magnetic flux.

    Phil



  • @phil-pritchard No, not really. As I've mentioned tinkering with hardware is new to me so I don't actually have any knowledge of what exists and whats possible from that side of the table. Would you like to expand on your thoughts? 🙂

    I've ordered a bunch of these hall effect sensors: http://www.ebay.com/itm/221649135732?rmvSB=true


  • Hero Member

    @jemish said:

    how can I control fan speed using light dimmer sketch in openhab?

    You may want to start a new thread as your question is a bit off-topic to the discussion.

    Cheers
    Al


  • Hero Member

    @phil-pritchard said:

    Have you thought of sticking a hall effect sensor to the outside of the relay. Or in the magnetic flux.

    Phil

    The relays are latching relays, so there would only be magnetic flux present for short durations. You would have a pulse when the light was turned on and one when the light was turned of, so you would have to find a way to count these pulses to know what state the light was in. The risk is that you would miss one and then be out of sync.

    Cheers
    Al



  • @twosh any update on your project?
    I have exact the same setup, would love to see your code 🙂


 

323
Online

7.8k
Users

8.7k
Topics

92.9k
Posts