Pages: 1 [2]   Go Down
Author Topic: Real Speaker (not Piezo)  (Read 7285 times)
0 Members and 1 Guest are viewing this topic.
Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 639
Posts: 34726
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
It sounds like I should be hooking up 120 VAC to the speaker, using an NPN transistor
Noooooooooooooooooooooo!!!!

Keep mains and speakers well apart.
Logged

SF Bay Area (USA)
Offline Offline
Tesla Member
***
Karma: 137
Posts: 6805
Strongly opinionated, but not official!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The speaker has that 1.5W, 8 ohms rating.
P = I*V,  V = I*R, and so P = V2/R   or...
1.5 = V2/8
12 = V2
3.5 = V  (approximately.)

So you don't need more than 3.5V to drive the speaker.  110V would make sparks and let the magic smoke out.
On the other hand, back to P=I*V, or 1.5 = I * 3.5 gives us
I = 1.5/3.5 = 0.43A, more than 10 times the current output of the Arduino.  That's why you need the resistor as well.
With an appropriate limit of 40mA, you'd get P = I^2R or about 0.01W... (additional power dissipated in the resistors.)

You could get some louder by connecting multiple pins to multiple resistors before connecting the speaker, adding their total current capability.

Cheap powered speakers are so common and cheap these days that they're probably a better route.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
The simplest way is to use a transistor, with a lowish collector resistor say 100R. Then couple it into the speaker with a capacitor. That will stop excessive DC current through the coils but still allow AC to get through. The bigger the capacitor the louder it will be. Start off with 1uF.

Excuse the stupid question, but why not only use DC current?  Does that harm the speaker?  So far I have only used DC and it is working fine, just too quiet.  (Thus the circuit is resistor from ground to a transistor controlled by the Arduino pin, to the speaker, to the + end of a 9V battery.)  
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
The speaker has that 1.5W, 8 ohms rating.
P = I*V,  V = I*R, and so P = V2/R   or...
1.5 = V2/8
12 = V2
3.5 = V  (approximately.)
So you don't need more than 3.5V to drive the speaker.  110V would make sparks and let the magic smoke out.
On the other hand, back to P=I*V, or 1.5 = I * 3.5 gives us
I = 1.5/3.5 = 0.43A, more than 10 times the current output of the Arduino.  That's why you need the resistor as well.
With an appropriate limit of 40mA, you'd get P = I^2R or about 0.01W... (additional power dissipated in the resistors.)

You could get some louder by connecting multiple pins to multiple resistors before connecting the speaker, adding their total current capability.

Cheap powered speakers are so common and cheap these days that they're probably a better route.

Thanks very much for spelling it out for me!  That's very helpful.  It makes a lot of sense.  Up here in Canada, things tend to be ridiculously overpriced---you don't want to know what I paid for this speaker---but I will see if I can find a powered one.  
Logged

SE USA
Offline Offline
Faraday Member
**
Karma: 41
Posts: 3783
@ssh0le
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dc current keeps it running like an electromagnet, might be the source of your too quiet too, your cone cant really move much if its stuck out at the far end

if you can just get the ac sound wave to the speaker it should be louder, and you do this with a capacitor cause they block dc current after they "fill up" but let ac pass on through
Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 8
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks, Osgeld!  

I decided to try using multiple Arduino pins to direct more current through the speaker.  Since it didn't need any more parts, I was able to implement this idea quickly (and without spending another $10 on an unpowered 1.5W speaker).  

With four pins on each side high/low (eight total), it seems to work.  Of course, it uses up a lot of pins, and the volume still isn't great (0.2 W max out of 1.5 W possible for the speaker), but it was really easy.  

I see how to use a capacitor and either four SCRs or four transistors to get the same power with just three Arduino pins.  But I don't have the parts right now.  

For the benefit of anybody else looking for easy ways to get decent (not great) volume out of an Arduino with a small speaker and minimal extra parts, I'll sketch out my calculations and some code below.  

* A single pin is limited to 40 mA current on the Arduino.  Groups of pins are also limited, but importantly the ground pin itself is limited to 200 mA current.  So that's basically the upper bound.  

* With a single pin and 40 mA current through an 8 Ohm speaker, the power into the speaker is P = I^2 R ~= 0.013 W.  To get this current, a resistor with value (5 V / 0.04 A) - 8 Ohms = 117 Ohms is needed in series with the speaker.

* With four pins and 160 mA current through the same speaker, the power is 0.20 W --- still well below the max of 1.5 W, but 16 times more than before.  A 23.25 Ohm resistor is needed.  

* The circuit connects pins 3,4,5,6 to each other, and pins 8,9,10,11 to each other.  To avoid any short circuits, it is important to switch every pin in the group simultaneously---so you can't use digitalWrite() one pin at a time.  Here is some sample code:

Initialization:
PORTB |= B1111;      // PORTB references pins 8 through 13, B1111 represents 1111 in binary, thus this command turns on pins 8,9,10,11

Basic loop:
PORTB ^= B1111;        // toggle the state of pins 8-13
PORTD ^= B111100; // PORTD references pins 0 through 7 (0 and 1 are for TX and RX, so I start with 2)
delayMicroseconds(1500);

By alternating between having 8-11 HIGH, 3-6 LOW; and 8-11 LOW, 3-6 HIGH, this code generates square waves.  (It is important to alternate back and forth for volume, so the speaker is pushed in both directions.)  

Using 5 pins would in theory increase the power another 50%, while pushing the Arduino's current to its absolute maximum.  The appropriate resistance to add is 17 Ohms.  But I ran out of low-value resistors, and couldn't get the effective resistance any lower than 23 Ohms.
Logged

Ontario, Canada
Offline Offline
Full Member
***
Karma: 0
Posts: 117
Arduino . . . the little board that could!
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Slightly off topic, however . . .

breic I am not sure what part of Canada you live in, but if you live anywhere in Southern Ontario you should not have paid more than $2-3 dollars for any small 1.5 watt speaker between 1.5-3 inches in diameter.

There are lots of good vendors to choose from . . . just stay away from "The Source" which was formeraly known as Radio Shack.
Logged

Manchester (England England)
Offline Offline
Brattain Member
*****
Karma: 639
Posts: 34726
Solder is electric glue
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Excuse the stupid question, but why not only use DC current?  Does that harm the speaker?

Yes DC will harm a speaker.
Logged

Pages: 1 [2]   Go Up
Jump to: