kleiner integrierter PC speaker mit arduino Leonardo betreiben

Hallo habe eine Frage und zwar möchte ich mit dem Arduino einen vom PC ausgebauten kleinen Lautsprecher betreiben und ich frage mich wie ich das anschließen soll:

soll ich diesen direkt zu GND und DigitalPin anschließen, oder soll ich dazu einen Widerstand vorschalten?-Wenn ja welchen Widerstand und wie groß sollte dieser sein und warum kommt da ein Widerstand?

Ich weiß nicht wieviel Ohm der Lautsprecher hat.

Wäre froh über eine Erklärung.

Danke sehr :wink:

milito: Hallo habe eine Frage und zwar möchte ich mit dem Arduino einen vom PC ausgebauten kleinen Lautsprecher betreiben und ich frage mich wie ich das anschließen soll:

soll ich diesen direkt zu GND und DigitalPin anschließen, oder soll ich dazu einen Widerstand vorschalten?

Wenn Du es schön machen willst, dann schließt Du einen Lautsprecher über einen kleinen Verstärker an, so wie hier im Tutorial gezeigt: http://arduino.cc/en/Tutorial/SimpleAudioPlayer

Beim direkten Anschließen eines Lautsprechers fließen wegen des geringen Widerstands in der Lautsprecherspule viel zu hohe Ströme, die den Controller beschädigen können.

Notfalls kannst Du bei den 8-Bit Atmegas einen geigneten Widerstand oder Kondensator in Reihe vor den Lautsprecher schalten, mit dem der maximal fließende Strom verringert wird.

Aber bei mangelhafter Auslegung und zu hohen fließenden Strömen über einen Arduino Output-Pin kann der Controller beschädigt werden und "durchbrennen".

AH ok habe es mit einfacher vorgestellt, also könnte der Widerstand nicht ausreichend sein.

Hatte nämlich hier diesbezüglich was gefunden:

http://arduino.cc/en/Tutorial/tone

Mir geht es nur darum: brauche einen Lautsprecher, da ich die Batteriespannung überwache und wenn die Spannung kleiner 7V ist, soll ein Warnsignal ausgegeben werden.

Wäre das nicht so wie auf dem aufgelisteten Link möglich?

Problem ist, weiß nicht wieviel Ohm der PC-speaker ist, den ich ausgebaut habe, da ist keinerlei Beschriftung? Woher soll ich wissen welchen widerstand ich brauche, bzw wie würde ich es ausrechnen?

milito: Problem ist, weiß nicht wieviel Ohm der PC-speaker ist, den ich ausgebaut habe, da ist keinerlei Beschriftung?

Der genaue Wert ist für Deinen Anwendungsfall vollkommen irrelevant, er ist auch bei Kleinlautsprechern so gering (ca. 5 bis 25 Ohm Impedanz), dass der Arduino bei einem Direktanschluss aus einem 5V Output Pin mehr Strom liefern müßte als die Spezifikation maximal erlaubt.

milito: Wäre das nicht so wie auf dem aufgelisteten Link möglich?

Ja, das mit dem 100 Ohm Widerstand als Vorwiderstand zur Strombegrenzung funktioniert, um den Strom auf ein erlaubtes Mass zu reduzieren. Der Ton ist damit gut hörbar, aber nicht besonders laut. Probier's aus!

danke sehr :D, inwiefern meinst du das mit :

Der genaue Wert ist für Deinen Anwendungsfall vollkommen irrelevant, er ist auch bei Kleinlautsprechern so gering (ca. 5 bis 25 Ohm Impedanz), dass der Arduino bei einem Direktanschluss aus einem 5V Output Pin mehr Strom liefern müßte als die Spezifikation maximal erlaubt.

Verstehe das nicht ganz, warum er merh strom liefern müsste :frowning:

ok, d.h. es ist irrelevant ob es ein 4 ohm oder 8 ohm lautsprecher ist, die 100 ohm reichen aus?

d.h. gehe direkt zu GND vom arduino und mit dem roten kabel mit einem 100ohm vorwiderstand

GND---------------------- GND(Arduino)
SIngal -------[ 100ohm] – Digital pin ]

milito: Der genaue Wert ist für Deinen Anwendungsfall vollkommen irrelevant, er ist auch bei Kleinlautsprechern so gering (ca. 5 bis 25 Ohm Impedanz), dass der Arduino bei einem Direktanschluss aus einem 5V Output Pin mehr Strom liefern müßte als die Spezifikation maximal erlaubt.

Verstehe das nicht ganz, warum er merh strom liefern müsste :(

Kennst Du das "Ohmsche Gesetz"?

U= R*I bzw. I=U/R

Auch wenn Du es bei schnell wechselnden Spannungen an einer Lautsprecherspule strenggenommen nicht so verwenden kannst, kannst Du es als groben Anhalt betrachten.

Dann setze mal ein U=5V und beispielsweise R=8 Ohm

I = 5V/8Ohm = 0,625 A

D.h. wenn der Controller keinen nennenswerten Innenwiderstand hätte und so viel Strom liefern könnte, müßten bis zu 625 mA aus dem Arduino-Pin herauskommen, damit die Spannung bei 5V bleibt, wenn der Lautsprecher mit 5V angesteuert wird.

Das spezifizierte absolute Maximum-Rating für Atmega-Controller sagt aber wohl eher was von max. 40 mA an einem Pin, die unter bestimmten Begleitumständen gezogen werden dürfen, im Normalfall nicht mehr als 20 mA.

625 mA sind gegenüber max. 40 mA eine Überlastung um das 15-fache. Wenn es keinen Vorwiderstand gibt.

Tatsächlich würde bei so einem Direktanschluß natürlich der Innenwiderstand des Controllers eine Rolle spielen, es würden immer weniger als 625 mA bei 5V fließen und in der Praxis würde auch die Spannung auf deutlich unter 5V einbrechen. Trotzdem würde der Output-Pin strommäßig überlastest, wenn Du einen niederohmigen Lautsprecher direkt ohne weitere strombegrenzende Bauteile an einen Arduino-Output anschließt.

Und ob der Lautsprecher 4 oder 8 oder 16 Ohm Impedanz hat, spielt allenfalls bei der Höhe der Stromüberlastung eine Rolle, aber nicht dabei, dass eine Stromüberlastung stattfinden würde. Die 100 Ohm als Vorwiderstand sorgen dafür, dass der Atmega-Controller auf der sicheren Seite betrieben wird.

Interessant wäre mal zu erfahren, um was für einen Lautsprecher es sich hier handelt. Typ, Bild, …

Wenn es sich nur einem Piezo Buzzer handelt, könnte man diesen unter umständen direkt betrieben, da bei den meisten Geräten der Bemessungsstrom bei < 1mA liegt.

Das soll aber nicht heißen, dass du ihn jetzt einfach am Arduino testen kannst.

Dem was Jurs geschrieben hat, ist eigentlich nichts hinzuzufügen. Dennoch würde ich noch einen Kondensator (>= 100nF) zum Widerstand in Reihe schalten.

Falls dein Outputpin auf HIGH steht, fließt dann kein Strom. Der Wechselstromanteil (= der Ton) kommt aber durch.

Wenn du jedoch wirklich nur einen Warnton ausgeben willst, dann nimm einen 5V Piezo Buzzer Der pfeift, wenn du nur Spannung anlegst. Dann kannst du mit wenig Aufwand ein sehr lautes "Piep, Piep, Piep, .... , Piep, Piep, Piep" erzeugen.

Oh danke sehr, ok also ich werde euch morgen mal ein Bild von dem ausgebauten Speaker hochladen, ich kann das nämlich nicht ohne Modelbezeichnung nicht unterscheide, ob es ein Piezo buzzer ist oder ein normaler speaker.

Gibt es eventuell Erkennungsmerkmale, um die beiden zu unterscheiden?-- Damit ich was dazulerne, wäre es mir wichtig.

AH ok danke für die sehr guten Erklärungen und den link.

Dann lade ich ein Bild zum Lautsprecher rein, vielleicht kann man entziffern was für eine Art das ist.

Sowas wäre ein Piezzo Buzzer, der auf dem Mainboard zum Einsatz kommt zur Ausgabe von Fehlercodes ;) http://exploringarduino.com/wp-content/uploads/2013/06/piezo-buzzer.jpg

Aber Gunther, die Teile können schon ein bisschen mehr wie piep ;) http://www.youtube.com/watch?v=mBiq-eXGxb0

sschultewolter: Sowas wäre ein Piezzo Buzzer, der auf dem Mainboard zum Einsatz kommt zur Ausgabe von Fehlercodes ;)

Aber Gunther, die Teile können schon ein bisschen mehr wie piep ;)

Stefan hier muß ich dir wiedersprechen: Das im Video ist kein Piezo Buzzer oder Piezo Summer, das ist ein Piezo-Lautsprecher. Ein Piezo Buzzer / Summer erzeugt selbsttätig beim Anlegen einer Versorgungsspannung einen (sehr lauten) Ton fester Frequenz. Den muß ich nur EIN- und AUSschalten.

Wohingegen ein Piezolautsprecher eben ein Lautsprecher ist, den ich mit einer Frequenz speisen muß, damit er einen Ton von sich gibt.

Okay, ja dann ist bei mir auf dem Mainboard ein Piezolautsprecher gewesen. Wobei die Teile beim Chinesen meist als Piezo Buzzer angeboten werden, funktionieren aber wie im Video.

so leute hab es versucht, aber da kommt kein ton raus, nur wenn man den speaker am Ohr hält, hört man ein ticken :(.

Habe es mit folgendermßen gemacht:

if (VoltageIn <=  7.00)
  {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(speakerPin,LOW);
    delayMicroseconds(500);
  }
  //Wenn größer 7V, Batterie ok 
  else 
  {
    digitalWrite(speakerPin, LOW);
  }

Habe es mit der Ton library versucht und da kommt ein ton raus, warum geht das nicht so, wie in meinem Beispiel`?
Übrigens das das Bauteil sieht genau so aus, wie das hocheladene bild in den vorherigen Thread

Wo ist der ganze Sketch? 500µS dürften für digitalWrite/analogRead etwas zu wenig sein. Versuche es mit einigen Sketchbeispielen wie diesen…

int speakerPin = 9;

int length = 15; // the number of notes
char notes[] = "ccggaagffeeddc "; // a space represents a rest
int beats[] = { 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 4 };
int tempo = 300;

void playTone(int tone, int duration) {
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playNote(char note, int duration) {
  char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' };
  int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 };

  // play the tone corresponding to the note name
  for (int i = 0; i < 8; i++) {
    if (names[i] == note) {
      playTone(tones[i], duration);
    }
  }
}

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  for (int i = 0; i < length; i++) {
    if (notes[i] == ' ') {
      delay(beats[i] * tempo); // rest
    } else {
      playNote(notes[i], beats[i] * tempo);
    }

    // pause between notes
    delay(tempo / 2); 
  }
}

hi habe es mit eigenen versucht, aber es geht nicht :

schau hier:

const float RefVolt = 5;
const float R1 = 4700;
const float R2 = 4700;
const float ResistorDiv= (R1 + R2)/(1023.0*R2);
const int BatteryPin= 0;
const int speakerPin = 8;

void setup()
{
  Serial.begin(9600);
  pinMode(speakerPin,OUTPUT);
}

void loop()
{
  int AD_value = analogRead(BatteryPin);
  float VoltageIn= ResistorDiv * AD_value * RefVolt;
  
  //Serial.println(AD_value);
  Serial.println("Battery Voltage: ");
  Serial.print(VoltageIn);
  Serial.print("V");
  Serial.println();
  //Falls gemessene Batteriespannung <= 6.5V, Warnung ausgeben-> LED on
  if (VoltageIn <=  7.00)
  {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(500);
    digitalWrite(speakerPin,LOW);
    delayMicroseconds(500);
  }
  //Wenn größer 7V, Batterie ok 
  else 
  {
    digitalWrite(speakerPin, LOW);
  }
  delay(4000);
}

Hi danke nochmal ich habe es hinbekommen,

arduino stellt die functionen tone(), noTone(),
somit geht das :smiley:

danke nochmal :wink: