two water pump project for newbie

That circuit, you removed the ground from the relay board to the Arduino. I think it was a ground loop that caused 'weird' stuff to happen. The +V to that 3-pin jumper gave power to the board.

yashiharu:
Pump: 3.3V to 6V @1.8A
Power: 6V/7.5V/8.5V/9V/10V/12V @7A

You'd also mentioned previously that this was a 6V max motor. The 3.3V means that's it's lowest rage of 'useful' voltage. At that and below it may turn but not do much.

Above 6V is overrevving. It'll run, but for a drastically limited lifespan. I once put a 3V tracked tank model on a slot car track (12V.) It was fun but didn't make one lap. :astonished:

It's running at 'full' speed at 6V. At 12V you can PWM it down to -half- and it will -still- be running at the designed 'full' speed.

So, your other notes I discount everything except 6V...

analogWrite(pump, 0) = stop@6v power
digitalWrite(pump, LOW) = stop@6v power

LOW and 0 are synonyms.

Result: can't control the speed, EXCEPT use delay on/off loop which like coughing

Well, that's what PWM really is, except it's switching on/off VERY quickly.

Since you're using an 'unknown' device you need to explore the pump 'range of usefulness' and find out how it behaves. The only thing to find really is at what low voltage (or in this case PWM) the pump starts. The high end will be full speed, that's a given.

Set a loop to range from 0 to [max]. Set a 1/2 or 1-sec delay between each step, and run it while displaying values to the serial monitor. By the '3.3' spec I'm guessing it 'should' start to turn somewhere a little past half the range of the PWM. Now you know the min and max values. Or maybe a bunch more than half the range. Induction motors have an inertia (magnets) to overcome first before starting up at their minimum speed.

You won't know the real -usable- range until you test it with whatever you're pumping. You didn't mention whether it's an immersed or dry pump, so there will be variations how it actually performs.