Hardware and software considerations for multi Arduino project

Hi there,

I am designing an IOT comprised of three separate modules, all in indoor with distance of no more than 10 meters between modules, the modules must communicate wirelessly with each other.

My request in this post is to get ideas and directions for the hardware I should use and what software techniques I should implement to achieve best power consumption performance.

The modules are:

A) MAIN MODULE containing service logic and communication capabilities, it will be connected to a wall socket so power saving is not an issue and depending on the location installed it will include WiFi or GSM capabilities. Only this module will communicate with the remote server (Firebase), other modules will communicate wirelessly with this module.

B) SENSORS MODULE including an Accelerometer and on/off input, potentially other sensors as well. This module will be using a battery, it will send data to the main module whenever such data changes (accelerometer moved, switch toggled, etc). it is desired that this module will respond to main module requests or send sensor’s data periodically.

C) RELAYS module, also with a battery. The module will receive commands from the main module to open/close a relays.

There are no physical restrictions in this project and therefore selecting hardware should not be influenced by size or weight.

The system response is near real time, there should be minimal delays and the main module should transmit sensor’s data to Firebase as it happens.

The battery, preferably a standard one like AAA, AA or 9V, must hold at least one year so selected hardware and software design should support it.

My questions:

Should I have a full functioning Arduino on each module or are there alternatives like sensors with some sort of communication capabilities?

Which hardware should I investigate?

For best power savings, what communication method should I use between the sub modules and the main module?

Is there a way to design the software to hibernate until it sees an event worth reporting?

And if yes, would communication event be such awakening event as well, so the sub module can reply to a request sent from the main module while it hibernates?

Thanks in advance for every tip!

Ninora

If you want your sensor modules to be able to respond to commands from the main controller, that means they must always be powered on and listening. Always being powered on is in conflict with your desire to have them consume very low power and survive an entire year on some small battery

blh64:
If you want your sensor modules to be able to respond to commands from the main controller, that means they must always be powered on and listening. Always being powered on is in conflict with your desire to have them consume very low power and survive an entire year on some small battery

Right, I was aware of the conflict and refereed to is where I wrote "or send sensor's data periodically". This is the default if listening to main module will consume too much power. So let's assume there's no need for constant listening, then what? which hardware should I pick and how do I handle it in the software?

ninora:
B) SENSORS MODULE including an Accelerometer and on/off input, potentially other sensors as well. This module will be using a battery, it will send data to the main module whenever such data changes (accelerometer moved, switch toggled, etc). it is desired that this module will respond to main module requests or send sensor’s data periodically.

Are the different modules going to communicate using WiFi (perhaps you are using ESP8266 devices?) or something else.

If a slave is asleep or 950 millisecs and then wakes for 50 millisecs to communicate with the master it will only be active 5% of the time yet it will still get updated every second. And you could probably shave another 25 millisecs off that.

If it is sufficient to be updated (say) once every 20 seconds the "awake" percentage would be very small.

...R

What types of loads will the “relays” be controlling? I put the term in quotes because mechanical relays (as pictured) and battery power are mutually exclusive.

Should I have a full functioning Arduino on each module or are there alternatives like sensors with some sort of communication capabilities?

You can get dirt cheap ESP8266 WiFi modules that have their own intelligence, are very frugal, and are programmed with the Arduino IDE. The main part of you project is power control, as suggested in reply#3, and coming to terms with the relativity of "as it happens".

Robin2:
Are the different modules going to communicate using WiFi (perhaps you are using ESP8266 devices?) or something else.

If a slave is asleep or 950 millisecs and then wakes for 50 millisecs to communicate with the master it will only be active 5% of the time yet it will still get updated every second. And you could probably shave another 25 millisecs off that.

If it is sufficient to be updated (say) once every 20 seconds the “awake” percentage would be very small.

…R

Making ESP8266 asleep 950mS out of each second would be a good solution, but what about other communication protocols such as Zigbee ? would that be a good alternative?

WattsThat:
What types of loads will the “relays” be controlling? I put the term in quotes because mechanical relays (as pictured) and battery power are mutually exclusive.

Good point, the load is minimal, closing a dry contact for the controlled device which in some cases is a massive AC motor.

"Arduino WiFi" = ESP8266.

ninora:
Good point, the load is minimal, closing a dry contact for the controlled device which in some cases is a massive AC motor.

Huh? How can you use minimal and massive in the same sentence without an explanation? From a battery life standpoint, a relay coil is not a minimal load unless it is a latching relay.

Please try again, naming actual devices would be more helpful.

WattsThat:
Huh? How can you use minimal and massive in the same sentence without an explanation? From a battery life standpoint, a relay coil is not a minimal load unless it is a latching relay.

Please try again, naming actual devices would be more helpful.

There's no contradiction whatsoever, just read more carefully and you'll understand.

The load on the Arduino is minimal even if it will be used to turn on a washing machine. As explained above, the module will close a dry contact and for that matter it is absolutely not important if it will use a mechanical relay or a solid state relay or a transistor as a switch or any other minimal power drawing device.

Having to control such dry contact means that the Arduino and whatever communication we will use are what will draw most of the current, hence the question is what hardware to use? is there anything that has such low power consumption that it can listen to communication for one year out of a 9V or other standard small battery?