Arduino Uno voltage regulator gets hot when driving relay

Im tryng to drive a relay with my arduino uno. Im using this circuit found on this page: http://www.glacialwanderer.com/hobbyrobotics/?p=9 Only difference is that im using 1N4007 diode what shouldnt make any difference and this relay: http://www.kysanelectronics.com/Products/datasheet_display.php?recordID=1225

Im powering my circuit and arduino from same 9v adapter and taking 3.3V for relay from arduino 3.3V output.

The problem is that when i power on the relay (turn arduino digital pin 3 high) the voltage regulator on arduino board gets really hot (http://www.advanced-monolithic.com/pdf/ds1117.pdf)

Is there something wrong with the circuit or should i use seperate power suplys?

How many amps of current are you drawing?

Data sheet says:

The AMS1117 series of adjustable and fixed regulators are easy to use and are protected against short circuit and thermal overloads. Thermal protection circuitry will shut-down the regulator should the junction temperature exceed 165°C at the sense point.

The power dissipation of the AMS1117 is equal to:

PD = ( VIN - VOUT )( IOUT )

Maximum junction temperature will be equal to:

TJ = TA(MAX) + PD(Thermal Resistance (junction-to-ambient))

Maximum junction temperature must not exceed 125°C.

and Thermal Resistance Control Section -40°C to 125°C SO-8 package j JA= 160°C/W Power Transistor -40°C to 125°C TO-252 package j JA= 80°C/W Storage temperature - 65°C to +150°C SOT-223 package j JA= 90°C/W* * With package soldering to copper area over backside ground plane or internal power plane j JA can vary from 46°C/W to >90°C/W depending on mounting technique and the size of the copper area.

Thermal Considerations The AMS1117 series have internal power and thermal limiting circuitry designed to protect the device under overload conditions. However maximum junction temperature ratings of 125°C should not be exceeded under continuous normal load conditions. Careful consideration must be given to all sources of thermal resistance from junction to ambient. For the surface mount package SOT-223 additional heat sources mounted near the device must be considered. The heat dissipation capability of the PC board and its copper traces is used as a heat sink for the device. The thermal resistance from the junction to the tab for the AMS1117 is 15°C/W. Thermal resistance from tab to ambient can be as low as 30°C/W.

That circuit is fine, and a 1n4007 diode is fine too. The problem is that the 5v version of that relay (which I assume is the one you are using) takes 100mA, and the voltage regulator has to pass all of that current. If the regulator gets too hot, it will partially shut down before it gets damaged.

If you want it to run cooler, there are a few solutions:

  1. Use an external 5v regulator with a heat sink instead.

  2. Use the 9v version of that relay instead of the 5v version, and power the relay from 9v instead of 5v.

  3. Use a 5v relay that takes a lower coil current.

  4. If you have connected the 9v adapter to the Vin pin of the Arduino, connect it to the barrel jack instead, so that the protection diode takes some of the power dissipation away from the voltage regulator. If you then connect 2 or 3 1n400x (x = 1 to 7) diodes between the 9v supply and the barrel jack, each diode will take some of the power disspation.

  5. Depending on what you are using the relay to switch, you might be able to use a transistor or mosfet instead, or a solid-state relay (SSR). What are you controlling with the relay?