What is the most power efficient way of having two Arduinos communicate over a few meters?

Hi!

The question is as simple as it sounds. In my case the Arduinos would be about seven meters (23 ft) apart, and both Arduinos would be stationary. Power efficiency is key, as the setup should be able to run on battery for several weeks. The Arduinos would exchange information at irregular and varying frequencies ranging from about twice a second to twice an hour, and also asynchronously (so one could send data twice a second whilst the other sends data back twice an hour). In summary - we don't know the transmission frequencies, but let's assume that overall it's going to be frequently.

Is nRF24L01+ the way to go here, or would the frequent and asynchronous transmission rates yield it too power inefficient after all? What mA rates are we talking about? How does it compare to some kind of wired solution? And what wired solutions are safe to interference and can preserve a clear signal over this distance? There will be lots of other cables with amps flying around in the proximity...

Many thanks!

CAN bus comes to mind.

1 Like

Serial cable RX to TX and TX to RX. Set the baud rate to 115200
RS-232 (at +- 12V) is good for about 1/2 mile. With shielding, even further. At 0 and +5 the noise margin isn't as high but should work perfectly over 10's of meters.

Ports are built in. TX module can shut down, but RX needs to be listening.

If they each had RTC's they could just listen at specific times. Once a day do a time sync so there's no drift.

RX, TX and GND

What have you done to implement low power operation so far?

1. If using UNO-UNO, then use Software UART (SUART) Port at 9600 Bd (Fig-1).
uartUnoUno-1
Figure-1:

2. If using MEGA-MEGA, then use UART1 Port at 115200 bd.

@anon57585045
I was thinking of using two Pro Minis at 3.3V for minimum power consumption. Want to clarify also that the communication is bi-directional.

@madmark2150
No RTCs I'm afraid. The thing is also that we never know when one of them will have something to transmit. It's almost like a burglar alarm - it will mostly not trasmit anything, but when something happens, the info needs to be sent and received by the other device almost immediately.

What would the power consumption be of having both Arduinos constantly listen on RX? How does that compare to having listen constantly over nRF24L01+?

Any RF receiver running constantly is a power hog. Why can you not add RTC's?

By the way, I think you don't need to really go to 3.3V to get power reduction... the main reason 3.3V Minis use less power is because they run at half the clock speed. But you can do that at 5V also. There is a difference but it's secondary to clock speed and sleep duty cycle.

Yep. GND was implied since we ALWAYS tie our grounds together! LOL

Listening isn't power hungry, driving the line is, but doesn't take squat when not actively sending. RS-232 idles high, drives low for two bit times to start and runs from there. 8N1 is usual protocol as this allows direct binary to be sent. Parity can only be used on 7-bit (ASCII) data.
Uhh, silly question: Since you're running a cable already why not add a power line? The master can power the remote(s).
Then you could use POE (Power Over Ethernet) to schlep power everywhere, no batteries.

@anon57585045
I get your point, maybe the 5V Pro Minis are just as good at half the clock speed. As for the RTCs, I have no experience of those or how to make it work. In fact, I don't have much Arduino experience at all. But if you think RTCs are the key to making this as power efficient as possible, well, then I just gotta read up on it. So you think having the Arduinos wake up and go to sleep twice a second is more power efficient than listen all the time?

@madmark2150
In fact, both Arduinos will be connected to the same 12V lead acid battery, but I think it will be more efficient to give each one of them it's own local step-down, rather than running a seven meter long 5V cable between them. Ethernet cables are a blessing of course, but I'm afraid PoE shields can get quite expensive, and I consider the Arduino Uno to be too power hungry in itself. Also, isn't PoE running at 24V at least?

Isn't that kind of obvious? The challenge is synchronization because you want to wake just before the remote unit transmits.

I second the idea of a hardware serial link. It's painless and easy. You might have phantom powering issues when one CPU is up and the other down. RS-485 or RS-422 would solve that, and be more noise immune.

Not to me :smiley: Personally I would get much more tired from having to wake up twice a second than just sitting it out...

Do you have any ideas on how to make the synchronization work? Do I need any specific hardware for RS-485 or RS-422?

Three wires, serial, RX, TX and GND are all you need.

You can have one processor in power down sleep mode awakened by a transmission from another.

Yes for 485 or 422 you need an interface module. Synchronization is an academic exercise, based on pure common sense. You can run the scenarios in your head, beginning with turn on where a receiver has no idea what's going on...

Ooh, good point but it depends on the integrity of the received signals being maintained through power down of the remote processor. That might be hard to enforce. Okay, maybe not, since Vcc is still on during sleep....

Output pins retain their state during power-down sleep mode, which can lead to unwanted current draw, but solves the problem of signal synchronization.

A "blip" on TX, followed by a suitable wakeup delay, then some transmitted serial data, should work.

The issue then becomes the line interface configuration. Is it just TTL level TX to RX? That would work but isn't very noise immune over several meters.

I've successfully transmitted weather sensor data for long periods of time, without error, over about 15 meters, using TTL serial (1200 baud).

Sure, I believe. I've done even crazier things that worked perfectly. :slight_smile: Just saying, close attention to wiring, shielding and so on, is needed for that.

There will be lots of other cables with amps flying around in the proximity...