Has anyone made a 2 or 4 channel relay , and is that worked correct ?
-
Hi @Reza
The start logs looks ok. Does the relay/node log say anything when you send a command from your controller. Any info from your controller?
Did you define your pins for the relay? A long shot but someone wrote it worked when they changed from 3,4,5,6 to 4,5,6,7 for some reason.
In most cases though it seems to be a power problem. Try changin your power source and see what happens.What im most curous about at this point is to see the log from your relay when you send a on/off command for the two relays.
-
Hi @Reza
The start logs looks ok. Does the relay/node log say anything when you send a command from your controller. Any info from your controller?
Did you define your pins for the relay? A long shot but someone wrote it worked when they changed from 3,4,5,6 to 4,5,6,7 for some reason.
In most cases though it seems to be a power problem. Try changin your power source and see what happens.What im most curous about at this point is to see the log from your relay when you send a on/off command for the two relays.
@sundberg84 said:
Hi @Reza
The start logs looks ok. Does the relay/node log say anything when you send a command from your controller. Any info from your controller?
Did you define your pins for the relay? A long shot but someone wrote it worked when they changed from 3,4,5,6 to 4,5,6,7 for some reason.
In most cases though it seems to be a power problem. Try changin your power source and see what happens.What im most curous about at this point is to see the log from your relay when you send a on/off command for the two relays.
now I have a 2channel relay , i want test for 2channel but this is similar to 4channel .
in pics

in1=pin3 , in2=pin4 . the pin 3 is not working , now in2 is working , but if i change pin3 and 4 in1 will working. also i change 2 line of program to and wiring in1=5 and in2=4 but now pin4 dont work ....
#define RELAY_1 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 2 // Total number of attached relays
now -
Looks great - but taking steps here i want to know what happens in the serial log on your node when you send a on/off command from your controller?
-
@sundberg84 said:
Hi @Reza
The start logs looks ok. Does the relay/node log say anything when you send a command from your controller. Any info from your controller?
Did you define your pins for the relay? A long shot but someone wrote it worked when they changed from 3,4,5,6 to 4,5,6,7 for some reason.
In most cases though it seems to be a power problem. Try changin your power source and see what happens.What im most curous about at this point is to see the log from your relay when you send a on/off command for the two relays.
now I have a 2channel relay , i want test for 2channel but this is similar to 4channel .
in pics

in1=pin3 , in2=pin4 . the pin 3 is not working , now in2 is working , but if i change pin3 and 4 in1 will working. also i change 2 line of program to and wiring in1=5 and in2=4 but now pin4 dont work ....
#define RELAY_1 4 // Arduino Digital I/O pin number for first relay (second on pin+1 etc)
#define NUMBER_OF_RELAYS 2 // Total number of attached relays
now -
Looks great - but taking steps here i want to know what happens in the serial log on your node when you send a on/off command from your controller?
@sundberg84 said:
Looks great - but taking steps here i want to know what happens in the serial log on your node when you send a on/off command from your controller?
read: 0-0-2 s=2,c=1,t=2,pt=0,l=1,sg=0:1
send: 2-2-0-0 s=2,c=1,t=2,pt=0,l=1,sg=0,st=ok:1
Incoming change for sensor:2, New status: 1 -
@Reza we are kind of guessing in the dark right now. Can you post your sketch (as code, use the </> format button)
@AWI said:
@Reza we are kind of guessing in the dark right now. Can you post your sketch (as code, use the </> format button)
#include <MySigningNone.h> #include <MyTransportNRF24.h> #include <MyTransportRFM69.h> #include <MyHwATMega328.h> #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 NUMBER_OF_RELAYS 2 // Total number of attached relays #define RELAY_ON 1 // GPIO value to write to turn on attached relay #define RELAY_OFF 0 // GPIO value to write to turn off attached relay // 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("Relay", "1.0"); // 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); } } 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 digitalWrite(message.sensor-1+RELAY_1, 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()); } } -
@Reza - ok communication looks good. My vote will be on power.
I would try to power the relay separately and see what happens (not from Arduino). -
@Reza - ok communication looks good. My vote will be on power.
I would try to power the relay separately and see what happens (not from Arduino). -
@Reza From your images you are not - do you have another adaptor for the relay?
-
@Reza From your images you are not - do you have another adaptor for the relay?
-
Strange... im out of ideas at this point. Hardware failure?
Im not that good looking at the code, but I maybe someone else is. -
Strange... im out of ideas at this point. Hardware failure?
Im not that good looking at the code, but I maybe someone else is.@sundberg84 said:
Strange... im out of ideas at this point. Hardware failure?
Im not that good looking at the code, but I maybe someone else is.:( thank you
this is strange for me too . pin 3 dont working . but pin4 worked . also if i change cable of pin 3 and 4 other relay working and pin 3 dont work
I change 2 line :
#define RELAY_1 4
#define NUMBER_OF_RELAYS 2
but so pin 4 dont work and pin 5 working.... -
I'm a noob at electronics and arduinos and have a wild imagination :smiley:
I had a theory but was unsure, so I decided to test it first rather than cause more confusion.
I know this is a place of sharing, but more than once I caused more problems when trying to help.
I don't want to bring some stupid idea into the fold.
I'll report back.
-
@sundberg84 said:
Strange... im out of ideas at this point. Hardware failure?
Im not that good looking at the code, but I maybe someone else is.:( thank you
this is strange for me too . pin 3 dont working . but pin4 worked . also if i change cable of pin 3 and 4 other relay working and pin 3 dont work
I change 2 line :
#define RELAY_1 4
#define NUMBER_OF_RELAYS 2
but so pin 4 dont work and pin 5 working....I guess reality is stranger than fiction.
To eliminate any bad connections I started by this:
void setup() { pinMode(3, OUTPUT); pinMode(4, OUTPUT); pinMode(5, OUTPUT); pinMode(6, OUTPUT); digitalWrite(3,LOW); digitalWrite(4,LOW); digitalWrite(5,LOW); digitalWrite(6,LOW); } void loop() { for( int i=3;i<=6;i++){ digitalWrite(i,HIGH); delay(500); } for( int i=3;i<=6;i++){ digitalWrite(i,LOW); delay(500); } }Using a 4 relay board, connected pins 3 through 6, I get a nice effect of all pins light up in sequence and then turn off in sequence.
With the relay sketch from the examples (lib 2.0.0) and debugging the load state values which where set to 0 for each sensor I have for each relay (off, ON, ON, ON).
Then on the setup I decide to reduce it to this:
void setup() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); digitalWrite(pin,LOW); Serial.print("Pin "); Serial.print(pin); Serial.println(" to LOW"); } }Same result or each relay (off, ON, ON, ON).
Starting repeater (RNNRA-, 2.0.0-beta) Radio init successful. Pin 3 to LOW Pin 4 to LOW Pin 5 to LOW Pin 6 to LOW send: 15-15-0-0 s=255,c=3,t=15,pt=0,l=2,sg=0,st=ok: send: 15-15-0-0 s=255,c=0,t=18,pt=0,l=10,sg=0,st=ok:2.0.0-beta send: 15-15-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0 read: 0-0-15 s=255,c=3,t=6,pt=0,l=1,sg=0:M send: 15-15-0-0 s=255,c=3,t=11,pt=0,l=5,sg=0,st=ok:Relay send: 15-15-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=ok:1.0 send: 15-15-0-0 s=1,c=0,t=3,pt=0,l=0,sg=0,st=ok: Presenting sensor:1 send: 15-15-0-0 s=2,c=0,t=3,pt=0,l=0,sg=0,st=ok: Presenting sensor:2 send: 15-15-0-0 s=3,c=0,t=3,pt=0,l=0,sg=0,st=ok: Presenting sensor:3 send: 15-15-0-0 s=4,c=0,t=3,pt=0,l=0,sg=0,st=ok: Presenting sensor:4 Init complete, id=15, parent=0, distance=1So I decided to re-initialize the pins once more in the loop section:
void loop() { if (isFirstTime){ for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++,pin++) { currState = loadState(sensor); pinMode(pin, OUTPUT); digitalWrite(pin,LOW); Serial.print("Current Status sensor:"); Serial.print(sensor); Serial.print("\t"); Serial.print("State:"); Serial.print(currState); Serial.print("\t"); Serial.print("Pin:"); Serial.println(pin); // Set relay to last known state (using eeprom storage) digitalWrite(pin, currState?RELAY_ON:RELAY_OFF); wait(500); } isFirstTime = false; } }Now I have all relays off:
Init complete, id=15, parent=0, distance=1 Current Status sensor:1 State:0 Pin:3 Current Status sensor:2 State:0 Pin:4 Current Status sensor:3 State:0 Pin:5 Current Status sensor:4 State:0 Pin:6Now sending some messages:
Relay 1Current Status sensor:4 State:0 Pin:6 read: 0-0-15 s=1,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:1 On pin:3, New status: 1 read: 0-0-15 s=1,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:1 On pin:3, New status: 0Works fine but guess what, Relay 4 also turned ON after Relay 1
Relay 2:
read: 0-0-15 s=2,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:2 On pin:4, New status: 1 read: 0-0-15 s=2,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:2 On pin:4, New status: 0Works fine but Relay 4 blinks and stays on
Relay 3:
read: 0-0-15 s=3,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:3 On pin:5, New status: 1 read: 0-0-15 s=3,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:3 On pin:5, New status: 0Works fine but Relay 4 blinks and stays on
Relay 4:
read: 0-0-15 s=4,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:4 On pin:6, New status: 1 read: 0-0-15 s=4,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:4 On pin:6, New status: 0Relay 4 blinks and stays on
These relays are solid state 5v, arduino pro mini 5v and I both used the power from computer USB and a 6000 mAh phone battery with the same results.
Here is the full code:
/** * 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 * * DESCRIPTION * Example sketch showing how to control physical relays. * This example will remember relay state after power failure. * http://www.mysensors.org/build/relay */ // Define Node ID #define MY_NODE_ID 15 // Enable debug prints to serial monitor #define MY_DEBUG // Enable and select radio type attached #define MY_RADIO_NRF24 //#define MY_RADIO_RFM69 // Enable repeater functionality for this node #define MY_REPEATER_FEATURE #include <SPI.h> #include <MySensor.h> #define RELAY_1 3 // Arduino Digital I/O pin number for first relay (second on pin+1 etc) #define NUMBER_OF_RELAYS 4 // Total number of attached relays #define RELAY_ON HIGH // GPIO value to write to turn on attached relay #define RELAY_OFF LOW // GPIO value to write to turn off attached relay bool isFirstTime = true; bool currState; void setup() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); digitalWrite(pin,LOW); Serial.print("Pin "); Serial.print(pin); Serial.println(" to LOW"); } } void presentation() { // Send the sketch version information to the gateway and Controller sendSketchInfo("Relay", "1.0"); 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) present(sensor, S_LIGHT); Serial.print("Presenting sensor:"); Serial.println(sensor); } } void loop() { if (isFirstTime){ for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++,pin++) { currState = loadState(sensor); pinMode(pin, OUTPUT); digitalWrite(pin,LOW); Serial.print("Current Status sensor:"); Serial.print(sensor); Serial.print("\t"); Serial.print("State:"); Serial.print(currState); Serial.print("\t"); Serial.print("Pin:"); Serial.println(pin); // Set relay to last known state (using eeprom storage) digitalWrite(pin, currState?RELAY_ON:RELAY_OFF); wait(500); } isFirstTime = false; } } void receive(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-1+RELAY_1, message.getBool()?RELAY_ON:RELAY_OFF); // Store state in eeprom saveState(message.sensor, message.getBool()); // Write some debug info Serial.print("Incoming change for sensor:"); Serial.print(message.sensor); Serial.print(" On pin:"); Serial.print(message.sensor-1+RELAY_1); Serial.print(", New status: "); Serial.println(message.getBool()); } }This could be some issue with the development branch of 2.0.0, its been some time since I refreshed.
So refreshing the libs I see a new before() section and an empty setup() from the RelayActuator example
void before() { for (int sensor=1, pin=RELAY_1; sensor<=NUMBER_OF_RELAYS;sensor++, pin++) { // Then set relay pins in output mode pinMode(pin, OUTPUT); // Set relay to last known state (using eeprom storage) digitalWrite(pin, loadState(sensor)?RELAY_ON:RELAY_OFF); } } void setup() { }Now it runs fine
Starting repeater (RNNRA-, 2.0.0-beta) Radio init successful. send: 15-15-0-0 s=255,c=3,t=15,pt=0,l=2,sg=0,st=ok: send: 15-15-0-0 s=255,c=0,t=18,pt=0,l=10,sg=0,st=fail:2.0.0-beta send: 15-15-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0 read: 0-0-15 s=2Starting repeater (RNNRA-, 2.0.0-beta) Radio init successful. send: 15-15-0-0 s=255,c=3,t=15,pt=0,l=2,sg=0,st=ok: send: 15-15-0-0 s=255,c=0,t=18,pt=0,l=10,sg=0,st=fail:2.0.0-beta send: 15-15-0-0 s=255,c=3,t=6,pt=1,l=1,sg=0,st=ok:0 read: 0-0-15 s=255,c=3,t=6,pt=0,l=1,sg=0:M send: 15-15-0-0 s=255,c=3,t=11,pt=0,l=5,sg=0,st=ok:Relay send: 15-15-0-0 s=255,c=3,t=12,pt=0,l=3,sg=0,st=ok:1.0 send: 15-15-0-0 s=1,c=0,t=3,pt=0,l=0,sg=0,st=ok: send: 15-15-0-0 s=2,c=0,t=3,pt=0,l=0,sg=0,st=ok: send: 15-15-0-0 s=3,c=0,t=3,pt=0,l=0,sg=0,st=fail: send: 15-15-0-0 s=4,c=0,t=3,pt=0,l=0,sg=0,st=ok: Init complete, id=15, parent=0, distance=1 read: 0-0-15 s=1,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:1, New status: 1 read: 0-0-15 s=1,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:1, New status: 0 read: 0-0-15 s=2,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:2, New status: 1 read: 0-0-15 s=2,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:2, New status: 0 read: 0-0-15 s=3,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:3, New status: 1 read: 0-0-15 s=3,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:3, New status: 0 read: 0-0-15 s=4,c=1,t=2,pt=0,l=1,sg=0:1 Incoming change for sensor:4, New status: 1 read: 0-0-15 s=4,c=1,t=2,pt=0,l=1,sg=0:0 Incoming change for sensor:4, New status: 0All relays behaving as expected before and after running a clearEEPROMconfig sketch.
So perhaps there is an issue with v1.5 but it seems the development branch of 2.0 is fine.
Or you can try to debug the hell out of it with plenty of Serial.prints.
Check with a simple sketch if your relays are fine.
If so check what are you getting from the loadState, make sure its boolean, initialize the pins to LOW in setup and if it doesn't work again in loop just once.
Try to have the relays always starting as off with no load or save state.
Cheers
-
if any one built a 2 or 4 channel please help me , please send me the codes that you use , and wiring and please told me what you use adaptor ( how much V and A ) ? which arduino use ?
@Reza Since it's already a long thread I didn't want to read everything. But just a stupid question. Did you measure the relay? It would be my starting point. Because if that's not working, the rest will not work either.
Also I once had a relay connected to a ProMini 5V, which I powered over FDTI. But I forgot to setup my FDTI programmer to 5V. By this the Arduino didn't have enough power to switch on the relay. It took me a while before I discovered that, because the NFR24L01+ antenna was working just fine.
Before I add an external power source to an Arduino, I always feed the Arduino through the USB of my computer. In my experience it has always supplied enough power for controlling a relay state. You could try it, just to eliminate power supply issues.
Just a few tips for you my friend. I hope you'll be able to find the cause of your troubles really soon.
Take care.
-
@Reza Since it's already a long thread I didn't want to read everything. But just a stupid question. Did you measure the relay? It would be my starting point. Because if that's not working, the rest will not work either.
Also I once had a relay connected to a ProMini 5V, which I powered over FDTI. But I forgot to setup my FDTI programmer to 5V. By this the Arduino didn't have enough power to switch on the relay. It took me a while before I discovered that, because the NFR24L01+ antenna was working just fine.
Before I add an external power source to an Arduino, I always feed the Arduino through the USB of my computer. In my experience it has always supplied enough power for controlling a relay state. You could try it, just to eliminate power supply issues.
Just a few tips for you my friend. I hope you'll be able to find the cause of your troubles really soon.
Take care.
@TheoL said:
@Reza Since it's already a long thread I didn't want to read everything. But just a stupid question. Did you measure the relay? It would be my starting point. Because if that's not working, the rest will not work either.
Also I once had a relay connected to a ProMini 5V, which I powered over FDTI. But I forgot to setup my FDTI programmer to 5V. By this the Arduino didn't have enough power to switch on the relay. It took me a while before I discovered that, because the NFR24L01+ antenna was working just fine.
Before I add an external power source to an Arduino, I always feed the Arduino through the USB of my computer. In my experience it has always supplied enough power for controlling a relay state. You could try it, just to eliminate power supply issues.
Just a few tips for you my friend. I hope you'll be able to find the cause of your troubles really soon.
Take care.
hi thank you for help me , connected the in1 to pin3 and in2 to pin4 , but pin 4 work and 3 dont work ! (voltag Priority is pin 3 , is this true ? but pin 3 is off and pin4 is work !! also i change pin3 and 4 so other relay is work and other one connect to pin3 dont work ! i test this with a adaptor 5V and 1A but dont work , do need i use a adaptor with more amper ?
also i use a "ClearEepromConfig" program for my arduino and program relay again but dont work again...
( my arduino is a arduino nano )