Note that Thingspeak updates can be no more often than 15 seconds so you need to choose a different service if you want 5 second updates.
Adding the call to updateTS() and the delay() adds at least 5 seconds to every iteration of the inner loop so by the time you do this 10 times almost a minute has passed before you can change the voltage at all.
Why do you call setPwmDuty() 10 times with the same value? Seems pointless.. the value you set remains active on the pin until you change it.
I would try something like
v=analog(source_voltage)
if (v<14.85) {
if (i<1022) i++;
}
if (v>15.0) {
if (i>0) i--;
}
Timer1.setPwmDuty(10,i)
updateTS() // etc
So at least you can respond every 5 seconds or so.
If the load is likely to change more rapidly than this it will make it very hard to control it and make regular updates to Thingspeak