4-20mA output from Arduino
Here is a schematic snippet from one of my current projects that requires 8 channels of computer-controlled 4-20 mA current output:



V0 is a analog voltage that controls the current going out CURR0+ and coming back to CURR0-.  In this case, 20 mA results from V0 = 3.0 V.  V0 can go to 3.3 V, so there is 10% overrange capability.

Q7 controls the current sourced onto CURR0+.  That is controlled by Q9, which is in turn controlled by the opamp.  The opamp adjusts the current thru Q7 to whatever it takes for the voltage V0 to appear across R34.  By Ohm's law, that regulates the current thru R34.

The various resistors around Q9 and Q7 are to provide a reasonable voltage adjust range out of the opamp, and have the mapping from opamp output voltage to CURR0+ current be reasonably linear and independent of the gains of Q9 and Q7.  C35 adds stability, and R31 provides the impedance for C35 to work against.

V0 is coming from a MCP4728 12 bit D/A driven by a microcontroller via a IIC bus.  However, you can create that any way you like.  Low pass filtering a PWM output, for example, might work for you.