I'm trying to make a IOT radiator valve so I can manage the heating of every room in my house automatically with a system I'm building.


I've pulled apart a cheap "smart" radiator valve to salvage its 3.0V (25 Ohm) motorised worm-screw component, that adjusts the flow of water through the actual TRV valve that is on the radiator (to regulate its heat).

I'm using a 3.3V battery power supply (0.5 Amps) to power the ESP-01S control board I'm using along with the wormscrew motor.

I've allocated two GPIO pins on the ESP-01S board (represented as A and B below) for controlling the direction of the motor, since it is not a servo. I've coded the board so that the pins will never be both +ve at the same time (to prevent the following control circuit from short circuiting).

wiring diagram controlling worm screw motor

Above is an image of the circuit diagram I've developed to handle the polarity switching that the motor requires, in order for the flow of water through the TRV valve to be increased/decreased on demand. When the wormscrew is fully retracted, the valve is closed, but when it is fully extended, the valve is fully open.

When A is "on" (+ve), B will be "off", resulting in A's NPN transistor (Aₜ) to be on, while B's NPN transistor (Bₜ) stays off. This allows current to flow from A to Ground through the motor making it spin in one direction and vice-versa when the polarity of A and B are swapped.

The transistors are 'S8050'.

The problem

The motor spins fine when connected straight to +ve pin and ground. However in my circuit, it runs much slower and the power supply for the board and motor gets so hot that it almost blows out and it's scalding to touch. Any ideas to why this is happening and how I can stop it would be much appreciated!

I've played around putting some resistors on the base pins of the transistors to reduce the current going through them, but that just makes the motor stop all together. Is the resistance of the circuit too high and so it is pulling too much power, or is the opposite true?

I am a complete noob when it comes to electronics, but I don't want that to stop me making this project for my Dad, so any advice would be greatly received! If I have missed any crucial information, please feel free to ask and I will try my best to supply it.

  • \$\begingroup\$ you are using the ESP-01S to drive the motor directly ... I'm surprised that the ESP-01S did not self destruct immediately \$\endgroup\$
    – jsotola
    Commented Jan 16, 2021 at 21:00
  • \$\begingroup\$ Further - the esp has no hope of driving the motor directly. How is the motor normally driven? \$\endgroup\$
    – Kartman
    Commented Jan 16, 2021 at 21:01
  • \$\begingroup\$ Hey jsotola and @Kartman. Thanks for the comments. I had originally intended for the ESP to solely drive the base pins of the transistors and the motor to be powered from the battery but after further testing, I realised I could get away with powering the motor directly from the ESP just fine \$\endgroup\$ Commented Jan 17, 2021 at 15:09
  • \$\begingroup\$ "I could get away with powering the motor directly from the ESP just fine": no, you can't. \$\endgroup\$
    – Hearth
    Commented Jan 17, 2021 at 18:58

1 Answer 1


Ohm’s Law tells you it draws 3/0.25=12 A to start and transistor is far too small in power rating to handle cool operation. The current gain drops towards 10% of hFE as a switch so your base current is under-driven and Rce is 1.5 Ohms

Try <50mOhm Nch 1V=Vth FET instead which is necessary.

Your battery won’t last long either.

If Base =0 Ohms you get slightly lower Vce(sat) and slightly more RPM. It will also slow down with a battery charge. With a CMOS driver ~ 50 Ohm @3V that's (3-0.7=2.3) >> 2.3V/50= 46mA then you can drive motor best with what you have and run cooler than what you had. This is OK for the short time you expect.

  • \$\begingroup\$ Thanks Tony for the answer. Oh I see what you mean. I just measured again and it is actually 25 Ohms not 0.25 Ohms making it 0.12 Amps! I'll edit my original post now thank you. As for the battery life: the motor will only be powered for max 15 seconds about twice a day while the battery will be charged using the heat of the radiator whenever the heating is on. Worse comes to worse will just recharge batteries in a dedicated battery charger \$\endgroup\$ Commented Jan 17, 2021 at 15:55
  • \$\begingroup\$ Now you know how to make it more efficient at full speed. Using < 10% for RdsOn of motor R. The BJT was too high Rce when saturated depending on uC load . You could use Rbase=<50 from GPIO =<50 ohms \$\endgroup\$ Commented Jan 17, 2021 at 16:03
  • \$\begingroup\$ Thank you Tony! The power unit doesn't overheat at all (cold to touch) and the motor spins! I put 50 ohms resistor on the transistor bases like you said and one on each GPIO pin (A & B). I don't know what you mean by the "using < 10% for RdsOn of motor" but could it have something to do with why the motor spins so slowly? Do I need to reduce the resistance on those transistor bases to speed it up? I'll run some tests. Thank you! \$\endgroup\$ Commented Jan 17, 2021 at 17:25
  • \$\begingroup\$ depends on family CMOS driver ~ 50 Ohm have a 25% tolerance or 25 Ohms +/- 25% RdsON is the FET switch resistance and DCR is the motor R. for a NPN we call it Rce=Vce/Ic. For efficiency you would like the switch to be 0 but may tolerate < 10% of motor DC-R \$\endgroup\$ Commented Jan 17, 2021 at 18:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.