You can use a single supply OpAmp to eliminate need for - supply :
View attachment 144487
You can adjust the fdbk values R3/R4 to manage full scale current. I assumed Arduino
output max of 3.3V, you should tolerance all DC and passive values to make sure you
get the ranges you need.
And then use Arduino PWM as DAC :
https://www.phippselectronics.com/using-a-pwm-module-as-a-dac/
The RC LPF you can adjust to control ripple. Note it introduces latency, so consider that
in your PID loop.
Pass transistor needs a heatsink, that design :
https://www.ti.com/lit/an/slva462/slva462.pdf
Also you can consider using a darlington if needed, due to limitations (if encountered) getting
enough base current out of OpAmp needed for pass transistor.
Regards, Dana.