Zahnräder (Maschinenantrieb)


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Lautsprecher mit Lautstärkeregler
(mit Arduino)


Lautsprecher 3W

Lautsprecher 3W

An Arduino lassen sich neben einem einfachen Summer (Buzzer) auch kleine Lautsprecher direkt anschließen. Bei Lautsprecher mit großer Leistung muss man einen Widerstand dazwischen schalten, um die Stromaufnahme zu begrenzen. In der Schaltung wird ein 3W - Lautsprecher (Abmessungen 70mm x 31mm x 16mm) direkt an einen Arduino-Ausgang angeschlossen. Der Innenwiderstand dieses Mini-Lautsprechers beträgt 8 Ohm. Da man mit einem solchen Tongeber schon mal ordentlich „Krach“ machen kann, soll man über einen Lautstärkeregler nachdenken. Über den Arduino-Pin werden an den Lautsprecher nur diverse Frequenzen weitergegeben, die er in akustische Schwingungen umsetzen muss. Der Pegel bleibt bei einem High-Signal stets bei 5V.
Zu diesem Zweck schalten wir zwischen Arduino und dem Lautsprecher ein Potenziometer mit einem in Reihe geschalteten Kondensator. Auf diese Weise wird die Stromaufnahme des Lautsprechers begrenzt. Bei dem Kondensator handelt es sich um einen Elektrolyten mit einer Kapazität von 100 µF. Das Potenziometer hat einen Wert von 1 kOhm. Um den Bereich, in dem man gar nichts mehr hören kann, abzufangen, kommt noch ein Widerstand zum Einsatz. Auf diese Weise kann man die Lautstärke von Min bis Max einstellen und durchgehend Töne wahrnehmen.

Arduino Nano

Arduino Nano

Im Programm wird einfachheitshalber die Funktion tone() verwendet. Dabei muss man darauf achten, welchen Arduino-Pin man für den Lautsprecher vorsieht. Er wird mit dem ersten Parameter an die tone() Funktion übergeben.

7-Segmentanzeige

7-Segmentanzeige mit Treiber

Die Schaltung wird zusätzlich mit einer 7-Segmentanzeige ergänzt. Die Anzeige ist nicht unbedingt notwendig. Hier werden die aktuellen Frequenzen, die gerade an den Lautsprecher weitergeleitet werden, angezeigt. Solche Anzeige könnte man z.B. auch mit dem seriellen Monitor realisieren. Bei der Anzeige handelt es sich um ein Modul, das u.a. den Treiber TM1637 beinhaltet. Auf diese Weise wird Verdrahtungsaufwand verringert. Für die Ansteuerung der Anzeige werden nur zwei Leitungen benötigt. Das Modul arbeitet im Spannungsbereich 3,3 bis 5V und kann auch z.B. an Raspberry Pi angeschlossen werden.

Schaltungen_mit_TM1637


Noten Tabelle

Noten-Tabelle mit zugehörigen Frequenzen

Damit die Schaltung etwas mehr Farbe bekommt, bekommen ihren Auftritt zusätzlich noch drei farbige Leuchtdioden. Sie werden in Abhängigkeit von der gerade gespielten Frequenz geschaltet. Die blaue Leuchtdiode ist dabei für die niedrigeren, die rote für die mittleren und schließlich die gelbe Leuchtdiode für die höheren Frequenzen zuständig. Auf diesem Wege könnte man eine einfache Party-Beleuchtung realisieren. Bei den Leuchtionen ist stets an einen passenden Vorwiderstand zu denken. Der hier fließende Strom soll die Obergrenze von 20 mA nicht überschreiten. Da die Arduino-Ausgänge mit 5V arbeiten, soll der Widerstand einen Mindestwert von 250 Ohm aufweisen (R = U / I). Die Leuchtdioden in unserer Schaltung werden mit drei Widerständen im Wert von 1 kOhm abgesichert.

Schaltplan

Schaltplan

Eine weitere Erweiterung der Schaltung stellen zwei einfache Taster dar. Bei Betätigen der Schalter wird das Musikstück mit jeweils einem anderen Tempo abgespielt. Man kann beim Programmieren jedem Ton eine feste Tonlänge zuordnen. Die Alternative ist, man führt einen „Tondauer_Faktor“ als Variable ein. Mit dieser Variable werden dann anschließend die vorbestimmten Tonlängen multipliziert. So lässt sich ein Stück je nach Belieben und Bedarf mit unterschiedlichen Geschwindigkeiten ausführen.

Das Thema „Geschwindigkeit“ ist in der Welt der Musik nichts Neues. Im Jahr 1928 schrieb der französische Komponist Maurice Ravel auf Bestellung der Tänzerin, Schauspielerin und Choreografin Ida Rubinstein das berühmte Stück Bolero. Die ersten Aufführungen des Werkes als Konzertstück bekamen keinen Applaus und wurden mit Pfiffen quittiert. Zu monoton und zu langweilig, hieß es damals. Der Komponist sagte, das Stück in richtiger Ausführung dauert 17 Minuten. Es folgten bekannte Einspielungen von Bolero, die nur 14 Minuten dauerten. Die berühmteste Interpretation von Bolero, die von Herbert von Karajan, dauert 16 Minuten. Wie man sieht, ein „Tondauer_Faktor“ kann durchaus von großer Bedeutung sein.

Testschaltung

Testschaltung


In dem Beispiel wird ein Fragment des bekannten Stückes von John Denver „Take Me Home, Country Roads“ abgespielt. Der Musiker erreichte mit dem Song im Jahr 1971 den zweiten Platz der amerikanischen Charts.

// **************************************************************************************
// Lautsprecher mit Lautstärkeregler
// Fragment von Take Me Home, Country Roads von John Denver
// Arduino Nano, IDE 1.8.13
// **************************************************************************************


#include <TM1637Display.h>
#define CLK 6
#define DIO 7
                                                          // Frequenzen der Noten
int Note [] = { 27,   31, 
                33,   37,   41,   44,   49,   55,   62,   
                65,   73,   82,   87,   98,   110,  123,
                131,  147,  165,  175,  196,  220,  247,
                262,  294,  330,  349,  392,  440,  494,
                523,  587,  659,  698,  784,  880,  988,
                1047, 1175, 1319, 1397, 1568, 1760, 1976,
                2093, 2349, 2637, 2794, 3136, 3520, 3951,
                4186, 4699 };

TM1637Display display(CLK, DIO);
String Ausgabe;
int Summer = 3;                                  
int Taster_S1 = 4;                                        // Tempo 1
int Taster_S2 = 5;                                        // Tempo 2
int LED_BL = 9;                                           // LED blau
int LED_RT = 10;                                          // LED rot
int LED_GB = 11;                                          // LED gelb
int Tondauer_Faktor;
int Frequenz;   
bool Musik_Start;       
int i;
                                                          // Take Me Home, Country Roads
int Melodie [72][2] =  { {24, 10}, {24, 10}, {25, 20}, {24, 20}, {99, 20}, {25, 10}, 
                         {24, 10}, {25, 20}, {27, 20}, {99, 20}, {28, 10}, {28, 10}, 
                         {29, 20}, {28, 20}, {25, 10}, {25, 10}, {25, 10}, {24, 10},
                         {25, 10}, {27, 40}, {99, 20}, {99, 20}, {24, 10}, {24, 10}, 
                         {25, 20}, {24, 20}, {25, 10}, {27, 10}, {27, 10}, {29, 10}, 
                         {29, 20}, {99, 20}, {28, 10}, {28, 10}, {28, 10}, {28, 10}, 
                         {29, 20}, {28, 20}, {25, 10}, {27, 10}, {27, 10}, {28, 10}, 
                         {27, 20}, {27, 10}, {28, 10}, {29, 60}, {29,  5}, {28,  5}, 
                         {27, 10}, {28, 60}, {29, 10}, {28, 10}, {27, 40}, {99, 20}, 
                         {29, 10}, {31, 10}, {32, 60}, {32, 10}, {31, 10}, {31, 10}, 
                         {29, 50}, {29,  5}, {28,  5}, {27, 10}, {29, 50}, {29,  5}, 
                         {29,  5}, {28, 5},  {27, 60}, {27, 10}, {28, 10}, {27, 40}
                      };
                                                          // LEDs abhängig von 
                                                          // Frequenz ein/aus
void LED_On (int Note_Nr) {
        digitalWrite (LED_BL, LOW);
        digitalWrite (LED_RT, LOW);
        digitalWrite (LED_GB, HIGH);  
    if (Note_Nr < 29) {
        digitalWrite (LED_BL, LOW);
        digitalWrite (LED_RT, HIGH);
        digitalWrite (LED_GB, LOW);  }
    if (Note_Nr < 25) {
        digitalWrite (LED_BL, HIGH);
        digitalWrite (LED_RT, LOW);
        digitalWrite (LED_GB, LOW);  }        
}

void setup() {
    display.setBrightness(10);                            // Anzeige Helligkeit
    display.clear();
    pinMode (Taster_S1, INPUT_PULLUP);
    pinMode (Taster_S2, INPUT_PULLUP);
    pinMode (Summer, OUTPUT);
    pinMode (LED_BL, OUTPUT);
    pinMode (LED_RT, OUTPUT);
    pinMode (LED_GB, OUTPUT);
}


void loop() {

    if (digitalRead(Taster_S1) == LOW) {                  // Taster 1 = tempo 1
        Tondauer_Faktor = 20;
        Musik_Start = true;
    }
    if (digitalRead(Taster_S2) == LOW) {                  // Taster 2 = tempo 2
        Tondauer_Faktor = 15;
        Musik_Start = true;
    }
    
    if (Musik_Start) {                                    // Beispiel-Musik abspielen
        for (i = 0; i < 72; i++) {                        
            int Note_Nr = Melodie [i][0];                 // Nummer der Note
            LED_On(Note_Nr);                              // LEDs ein/aus
            if (Note_Nr == 99) { Frequenz = 0; }          // Note 99 = Pause
            else { Frequenz = Note [Note_Nr]; }           // Frequenz bestimmen
            Ausgabe = String (Frequenz);                  // Zahl in String umwandeln
            int Zeit = Melodie [i][1] * Tondauer_Faktor;  // Tempo bestimmen
            display.showNumberDecEx(Ausgabe.toInt(), 0b00000000, false, 4, 4);  // Ausgabe Display
            tone (Summer, Frequenz, Zeit);                // Ton erzeugen
            delay(Zeit);                                  // Wartezeit
        }
        Musik_Start = false;
    }
}
// **************************************************************************************      


Kurzvideo

Kurzvideo mit Take Me Home, Country Roads


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz