I'm interested in the general concept of sending both power and data to a remote location (like my central heating unit does) where the remote unit is connected by a single 2-wire cable.
It all looks rather complex, is there a reason why this wouldn't work, at least for sending from the local to the remote? ...
A quick test of this exact setup reveals that the remote (an Arduino Uno) is getting only 2.3V. No doubt the current-limiting resistor is responsible for that. However a more power-friendly remote, designed to use only a milliamp or so, would be more feasible. There would be less current, and therefore less voltage drop.
Or is there a fundamental flaw in this plan?
I'm thinking here that async serial, while idle, is constantly sending a HIGH bit, which therefore would power the other end, and the occasional data byte would be covered by the power stored in the capacitor.
Would it be better to move the resistor (to the other side of the diode) so it only has to regulate current for 4.3V rather than 5V?
And if you wanted to use a balanced electrical protocol, like RS485, would it be feasible to have a bridge rectifier at the remote end, to convert the balanced signal back into DC?
That looks feasible to me, although I would use a Schottky diode rather than the 1N4004. As well as increasing the output voltage, this will avoid D0 being at a voltage sufficiently higher than the "5V in" supply for the remote Arduino pin protection diode to conduct as well.
You could reduce the resistor to 120 ohms, which will draw 35mA from the pin briefly during startup, but much less once the "5V in" supply has stabilized.
I wouldn't recommend putting the resistor the other side of the diode, because then D0 can be at a higher voltage than "5V in", and the pin protection diode of the remote Arduino will take the current instead of your own diode.
For higher output current, you could buffer D1 using a few logic gates in parallel, then you could use a smaller resistor. You need to take care not to exceed the package maximum Vcc current, so you may need to use multiple packages.
I've seen a similar arrangement used to generate +12V and -12V to power a remote RS232 tranceiver.
Well, one flaw is that to power a Uno takes around 45 mA, and the output pin can only supply 20 mA continuous. Of course the current-limiting resistor isn't going to help.
Either I would have to reduce the current requirements (eg. a processor without the USB chip etc.) or do what you suggest and have a unity-gain buffer that provides more current.
Why can't you use a transistor on the local end to modulate the 5V feed from the local power rail so you have no 40mA current limit. You would need to put a resistor on the remote input pin though.
The problem with the resistor and the diode is that, at its heart, the resistor and capacitor act as an averaging mechanism, in addition to the voltage divider formed by the resistor and the circuitry at the receiving end.
You could use two transistors, one normally switches power to the Data/Power line. Then when you send a Low, that transistor switches off, and another grounds the line. The far end is wired up just as you show it.
You might not even need the second grounding transistor, if the capacitance of the transmission wires isn't too high versus the data rate. A resistor connected to ground from that Data/Power line may be sufficient to pull it Low quickly enough, then you just need a PNP or P-channel MOSFET transistor to switch power on and off.
Just to summarize what everyone has presented, and a thought or two of my own. I literally drew a schematic. Sorry, I tried fritzing, but am not up to speed on that yet, so it did not work.
Decrease resistor on source, to get a bit more power.
Change the diode to a Schottky to get a bit more voltage to the capacitor/slave.
Add 10k and zener to get a safe signal into the slave.
And of course, a low power cpu would be a great help to.
If you don't have a zener to protect the input D0, what will happen if the 5V pin on the slave is at 3.5 volts, and you send 5 volts to pin D0. Input pins being 1.5 volts higher than the 5V pin would be dangerous wouldn't it?
That's a good point. With mine, or with a sufficiently low resistor, it shouldn't be more than one diode drop above. Woulda, shoulda, coulda. So probably a good idea to do something to avoid what jackwp points out.
I would think with a schottky diode, you'd be fine as it would be less than the voltage required to forward bias the internal protection diodes. However, it is as simple as adding a diode in series with the line going to the receiving Arduino to drop out one diode drop of voltage.