Without researching your circuit i want to warmly recommend something. Prepare three stages on your feedback, and have their sum on another opamp. One stage is buffer, another one is integrator and the third one is derivator. Each should have a nice convenient potentiometer to set the gain. Then you will be able to tune your system for best performance.
Edit
Most importantly, simulate before you go to solder anything!!!
Edit
Based on assumption that your components are appropriate for voltage and current, and that you know the basics, I will explain what you should do to close the loop.
I will add a little bit more info. First of all, your PWM controller must have a saw-tooth waveform of constant frequency and "command signal" which is basically voltage, that you compare to this saw-tooth. If the command is smaller than the saw-tooth, your switch is on, otherwise- off. Make sure it works for a constant command, this is an open-loop PWM controller.
Now you have to close the loop. Closing the loop basically means making your error zero. So you have first of all to measure it by subtracting your output voltage from a reference voltage. Reference is generated by a zener diode with resistor. Or you can take an IC that will do it inside more accurately. The output voltage is usually higher than your reference, so use resistor divider, so error is 0 when the divided voltage equals to your reference.
Now when you have your error, feed it to the three opamp circuits I mentioned: one with just gain, another one- integrator, third- derivator. Add all three- the result should be used as the PWM command signal (remember?).
And you will have to tune the system, so use potentiometers around opamps.
You probably already know that in a standard high-side switching circuit you would not have this issue. That's because the ground reference of input and output share the same node.
In your circuit the low-side switch breaks that connection so now the output's ground must remain isolated from the input ground. This also means you can no longer use the same ground reference.
A solution could be to move L1 down so that it still sits between D1 and C1 but using their opposite nodes (anode of D1, negative plate of C1) then the positive input voltage rail will be the common reference. However that will still does not solve the voltage regulation issue. With some opamp circuitry you could work around that put it will not be easy.
Also the internal reference voltage of the Arduino is referenced to input ground. This means you cannot use it as a reference for the output voltage directly.
The most easy solution I see is moving the reference comparator to the output circuit so in parallel with C1, similar to how isolated mains supplies sense the output voltage. Then use an opto coupler to feed back a signal to the Arduino.
You have chosen a topology that almost no one uses and now you know why that is. High side switching using a PMOS or even using an NMOS and some gate driver (as you need a gate voltage higher than Vin to properly drive the NMOS) is much easier.
Best Answer
For any given load, a switcher will transfer a given amount of energy thousands of times per second. This is how the buck regulator works.
Let's say your op-amp is switching at 10kHz (because it's a slow sort of device and will have slew rate problems compared to other devices). Let's also say you are aiming to deliver 5V across a 10 ohm resistor. Resistor power is 25/10 watts = 2.5 watts.
To calculate energy per switching cycle divide this power by frequency because power = joules per second. At 10kHz, the energy you transfer per switch cycle is 250\$\mu J\$.
This energy powers your load resistor but, if you removed your load resistor, this energy gets dumped into the output capacitor and its voltage rises a little (or a lot) higher than normal.
Let's say your output capacitor is 10uF - if suddenly it was imbibed with 250\$\mu J\$, how much would it rise in voltage?
We know that capacitor energy is \$\dfrac{C V^2}{2}\$ therefore we can calculate the voltage rise and this is: -
\$\sqrt{\dfrac{250\times 10^{-6} \times 2}{10\times 10^{-6}}}\$ = 7.07V.
It's a little bit subtler than this - in the above I assumed the capacitor was being charged with energy from a zero voltage state. In fact it already has 5V across it and this means that the previously stored energy + influx energy (from the inductor) is 125\$\mu J\$ + 250\$\mu J\$ = 375\$\mu J\$.
If you do the reverse math, the peak voltage on the capacitor becomes 8.66V i.e. 3.66 volts higher than the 5V rail.
You could put an argument together to consider the losses in the diode also - this may trim half a volt of the absolute peak voltage.
So, you either need to increase the capacitance a lot or, decrease the transfer energy by increasing the operating frequency. Modern switchers regularly operate at 500kHz and this means the energy per cycle reduces from 250\$\mu J\$ to 5\$\mu J\$ in this example.
Should this be the case (500kHz operation), the rogue energy from the inductor would make the capacitor's stored energy 130\$\mu J\$ and this means a peak voltage of 5.1 volts - probably quite acceptable for load dumping on a switcher.
Operating at higher frequencies requires faster silicon but, the ability to control load variations (and their repercussions), on a cyclic basis, means much tighter control of the output voltage.
This is just an example to see where you might be going wrong.