I am interfacing to a vibrating disk motor from robotshop.ca.
The motor draws 80mA and the arduino max current per pin is 40mA. Can I still power this directly off the arduino if I use a pwm output set to a duty cycle less than %50? Or do I need to buffer the signal with at least a simple transitor circuit? (e.g. hooked up to a 2n3904 and the pwm output connected to the transistor base via 100k resistor)
i wouldnt risk it. use a transistor. dont forget that motors have lot of inductance, and i dont think the arduino would like that directly connected to it.
I would recommend using a transistor as well, but I have used those motors with both a diecimilla and a Sparkfun Wee (now renamed the Pro Mini, I believe) for short periods of time (i.e. ramping PWM up and down from o to 255 over a second or so for a few cycles) during tests with no permanent damage.
You definitely get more oompf with a transistor, tho! ;D
I use a pwm output set to a duty cycle less than %50?
A PWM signal is a digital signal so although 50% will average out at 40mA the peak current you will be taking will be 80mA. It is peak current you must consider not average. You can only relay on averaging when you are talking about heat (power) dissipation.