Don't forget that the OP,
@user112358, wants a
continuously variable range of current from zero to about 3 A to his 5 Ω load. How about a pulse width modulator connected to a boost supply that delivers 15 V? It could vary both the duty cycle
and the pulse repetition rate, charging an output capacitor to deliver the necessary current. Vary the duty cycle until some minimum current is produced at a fixed PRF (ordinary PWM) and then, at that duty cycle, begin to decrease the pulse repetition rate to approach zero current. Should be a "piece of cake" to program an Arduino Mega to do that. Advantage: practically zip for power dissipation. Disadvantage: some increased ripple at lower currents because of the variable decreasing pulse repetition rate.
I don't know of any other way to reach zero output with a PWM. Some circuits just turn the PWM output off, instead of lowering the PRF, after reaching a minimum threshold. It is then turned back on again when the difference between actual output (filtered) and the command value reaches another threshold. This can have a pulsing, or strobe, effect on the output which may be undesirable. You could also implement a hybrid approach, where a linear circuit operates at very low current outputs and the PWM takes over at some intermediate current and continues to bear the load until maximum current is reached.