The motors in my pumps are Chinese brushed motors, and I doubt much thought went into precision of winding wires, so it is likely this reason my pumps produced differently. None the less, I’ve found something of a work around that is getting me much closer to perfect dosing. I’ve found that the static multipliers I used previously in code were very incorrect and lead to inaccuracy. It turns out, that the multiplier variable needs recalibration depending the requested dose volume. Like 0-10ml I set the multiplier to 1005 ms, 10-20ml = 960-940ms and it continues to curve until about 40ml doses, then it plateaus at 900ms. So let’s say I wanted a dose of 64ml of anything, I tell Arduino through Blynk that the multiplier to be used in the math is 900 milliseconds and the Arduino keeps the pump active for 64ml x 900ms = 57.6 seconds the pump is powered on for. Of course there are other factors such as viscosity, tubing size, length and rigidity, available current and voltage. I’ve seen videos of people running 12v motors upwards of 18 volts for increased output, but likely will greatly shorten motor life.
Brushless motors and also stepper motors look like better options in terms of accuracy, but first there’s the increased cost per motor, but also in my situation, added I/O per motor are required and my project is already nearing the max point. I have unused I/O pins earmarked for PH, EC, water temp and dissolved O2, 13 valves, 8 more relays, two CO2 sensors. All of the I/O budgeting aside though, it might even be wise to assign the dosing module it’s very own Arduino and monitor and control that via I2C, but this is beyond my budget ATM, but after a few chops, who knows, the sky is the limit!
Video update of the pumps progress