Pot gets really hot!

So I'm having a situation where whenever I set up my pot to control a servo it gets really really hot to the touch within a few minutes. Just before I started messing with servo's at all, I was doing a ton of work with pots controlling LED's and it never got hot. The pot is setup no different then it was before. I thought maybe the servo is drawing too much current but then I thought that doesn't make sense to me because the servo and the pot are isolated from each other. Its only driven through software so I don't see how the servo could effect the pot in any way through software. My other thought was maybe it was a bad (loose) connection to the pot but idk I tried different slots and wires and even another pot and the problem persists. Anyway I know people are going to ask me for pictures and code and whatnot so everything is shown right here.

What value resistance is the pot?

1 Like

If it's miswired, with the wiper to +V and turned down to a low resistance, then things could get exciting.

its a 10k

Post a clear picture of the pot and wiring.

Never mind turns out I did wire it wrong. ughh kind of embarrassing but hey live and learn. Its because on one side there is a ohm symbol. I thought that meant that the signal goes there figuring it was a variable resistance output. Anyway nope. Its all good. Thanks anyway!

1 Like

Anytime a potentiometer get hot, you may as well just throw it away and get a new one. The carbon track that is the resistance of the potentiometer will drastically change in value.

However I will say this. My sg90 servo seams to have a travel of more like 120 degrees for some reason and yet I get a full 180 without servo.h. What the hell is up with that?

How are you controlling the servo's input signal without a servo library?
Which Arduino are you using?

//Control a SG90 Servo without using the Arduino library

const int servoPin = 7;
const int potPin = A0;

#define potValue  analogRead(potPin)
#define angle map(potValue, 0, 1023, 0, 180)
#define pwm (angle*10) + 500

void setup()
{
  // Serial.begin(9600);
  pinMode(servoPin, OUTPUT);
  pinMode(potPin, INPUT);
}

void loop ()
{
  // Serial.println(potValue);
  // Serial.println(angle);
  // Serial.println(pwm);

  digitalWrite(servoPin, HIGH);
  delayMicroseconds(pwm);
  digitalWrite(servoPin, LOW);
  delay(10);  

}

Not sure why people like to make it like its impossible or so hard to to. Its not hard at all. I'm not totally sure if its perfectly safe for the servo. Perhaps there is some more nuance to it that could potentially blow it out but I kinda doubt it.

Read the documentation. The servo library has means for adjusting what pulse width it issues to correspond to 0 .. 180 degree travel.

You need to determine the minimum and maximum and set that, call it calibration of your servo. Most servos do work on a pulse from 1000 us to 2000 us, but not all, hence the need to do this.

That code is perfectly safe, mostly. Just avoid trying to make it go beyond where it can physically.

With the 10 millisecond delay you are out of spec, typically the signal is at 50 Hz, so a 20 ms delay woukd make it closer to standard. But dumb servos are very forgiving - what you have works, so.
a7

2 Likes

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.