Feinsicherung


Google-Suche auf MEINE-SCHALTUNG.de :





Dauerkalender


Mini Piano
Mit Berührungssensoren und Arduino


Berührungssensor mit Darlington-Schaltung

Berührungssensor mit Darlington-Schaltung

Bei Aufbau eines Piano- bzw. Klavier- ähnlichen Instrumentes taucht gleich die Frage nach geeigneten Schaltern auf, die die Rolle der Tasten übernehmen sollten. In dem Versuch wird die Aufgabe der Tasten von einfachen Berührungssensoren übernommen, die wir selbst konstruieren werden. Ein solcher Sensor basiert auf einer speziellen Verschaltung von zwei Transistoren und zwei Widerständen. Die Schaltung ist durchaus bekannt und trägt den Namen Darlington-Schaltung. Die Transistoren werden hier so verschaltet, dass die Verstärkungsfaktoren der beiden Transistoren multipliziert werden. Bei Berührung zwei leitenden Sensorflächen, in diesem Fall zwei blanken Drähten, wird der Basis-Stromkreis des ersten Transistors geschlossen und die Schaltung aktiviert.

Berührungssensor mit zwei Drähten

Berührungssensor mit zwei Drähten.

Die Berührungsflächen unseres Berührungssensors bestehen aus zwei blanken Drähten. Ein Draht steht unter Spannung von 5V, der andere ist über einen Widerstand mit der Basis des ersten Transistors verbunden.

Transistoren BC172C

Transistoren BC172C

In dem Beispiel kommen 14 Transistoren BC172C zum Einsatz. Da pro Berührungssensor zwei Transistoren verwendet werden, besteht die Schaltung aus sieben Berührungssensoren, die in der Schaltung als Klavier-Tasten fungieren werden.

Lautsprecher 3W

Lautsprecher 3W

Arduino Nano

Arduino Nano

7-Segmentanzeige

7-Segmentanzeige mit Treiber TM1637

Schaltungen_mit_TM1637


Musiknoten mit Frequenzen

Noten Tabelle

Noten-Tabelle mit zugehörigen Frequenzen

Der Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung

Testschaltung

In dem Programm werden die Töne mit der Funktion tone() generiert. Die zu jeder Taste gehörende Frequenz ist in dem Array Note [] gespeichert. Sobald eine Taste betätigt wird oder genauer gesagt zwei Drähte berührt werden, wird die der Taste zugeordnete Frequenz an die Funktion tone() übergeben. Über den Ausgang D12 wird dann der Lautsprecher angesprochen. Bei dem Versuch wird ein 3W – Lautsprecher (Impedanz 8 Ohm) verwendet. Vor den Lautsprecher wurde, um die Einstellung der Lautstärke zu ermöglichen, in die Schaltung ein Potenziometer (P1) eingepflegt.

Eine weitere Erweiterung der Schaltung neben dem Lautstärkeregler stellt die 7-Segmentanzeige dar. Die Komponente ist nicht unbedingt notwendig und dient nur der Anzeige. Im Laufe des Programms können mithilfe der Anzeige die aktuell abgespielten Frequenzen eingesehen werden. Für die Ansteuerung der Anzeige werden zwei Pins des Arduino benötigt. In dem Beispiel sind das die Pins D10 und D11. Damit die Anzeige richtig funktioniert, muss vor dem Start des Programms die Bibliothek TM1637Display.h installiert werden.

Zum Schluss bekommt die Schaltung noch einen Schalter. Mit ihm kann man in eine andere Tonlage umschalten. Steht der Schalter S1 auf OFF, stehen uns die Noten c‘, d‘, e‘, f‘, g‘, a‘ und h‘ zur Verfügung. Bei eingeschaltetem Schalter S1 wird auf die Noten c‘‘, d‘‘, e‘‘, f‘‘, g‘, a‘‘ und h‘‘ umgeschaltet.

Grundsätzlich ist die Aufgabe, die das Programm zu bewältigen hat, relativ simpel. Nachdem ein Berührungstaster betätigt wird, wird mit einer vordefinierten Frequenz der Lautsprecher zum Schwingen gebracht. Das war‘s.
In diesem Fall müssen wir allerdings das Programm noch ein wenig erweitern. Beim Antippen der Berührungstaster kann es gelegentlich zu kurzen Unterbrechungen des Signals kommen. Das geschieht, wenn man einen Sensor nur leicht berührt oder die Haut besonders trocken ist. Der Effekt ähnelt dem Prellen eines gewöhnlichen mechanischen Tasters. Hier führen wir eine Variable „Wartezeit“ von 10 ms ein und geben dem Signal somit Zeit, sich zu stabilisieren. Bei jeder negativen Flanke des Signals wird die Zeitmessung neu gestartet.

// **************************************************************************************
// Mini - Piano
// Finger-Schalter mit Darlington Schaltung
// Arduino Nano, IDE 1.8.13
// **************************************************************************************

#include <TM1637Display.h>
#define CLK 10                                              // Display Pin CLK
#define DIO 11                                              // Display Pin DIO
                                                            // 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,    // Kammerton = 440
                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);
int Um_Schalter = 2;
int Schalter_1 = 3;
int Schalter_2 = 4;
int Schalter_3 = 5;
int Schalter_4 = 6;
int Schalter_5 = 7;
int Schalter_6 = 8;
int Schalter_7 = 9;
int Lautsprecher = 12;     
String Ausgabe;                             
int Frequenz;         
int Schalter_Nr, Note_Nr;
bool Schalter_Status [] = {2,3,4,5,6,7,8,9};
int Wartezeit = 10;
unsigned long MillisStart, MillisAktuell;
                                                      
void setup() {
    display.setBrightness(10);                              // Anzeige Helligkeit
    display.clear();                                        // Displa löschen
    pinMode (Um_Schalter, INPUT_PULLUP);
    pinMode (Schalter_1, INPUT_PULLUP);
    pinMode (Schalter_2, INPUT_PULLUP);
    pinMode (Schalter_3, INPUT_PULLUP);
    pinMode (Schalter_4, INPUT_PULLUP);
    pinMode (Schalter_5, INPUT_PULLUP);
    pinMode (Schalter_6, INPUT_PULLUP);
    pinMode (Schalter_7, INPUT_PULLUP);
    pinMode (Lautsprecher, OUTPUT);
}


void loop() {

    Schalter_Status [0] = digitalRead(Um_Schalter);
    Schalter_Status [1] = digitalRead(Schalter_1);
    Schalter_Status [2] = digitalRead(Schalter_2);
    Schalter_Status [3] = digitalRead(Schalter_3);
    Schalter_Status [4] = digitalRead(Schalter_4);
    Schalter_Status [5] = digitalRead(Schalter_5);
    Schalter_Status [6] = digitalRead(Schalter_6);
    Schalter_Status [7] = digitalRead(Schalter_7);

    Schalter_Nr = 0;
    for (int i=1; i<8; i++) {
        if (Schalter_Status[i] == LOW) {                    // Schalter_Nr wurde betätigt
            Schalter_Nr = i;
            MillisStart = millis();  }                      // Unterbrechung abfangen
    }

    MillisAktuell = millis();
                                                            // Schalter losgelassen
    if ((Schalter_Nr == 0) && (MillisAktuell > (MillisStart + Wartezeit))) {
        noTone (Lautsprecher);                              // Lautsprecher AUS
    }
                                                        
    if (Schalter_Nr > 0) {     
        Note_Nr = 22 + Schalter_Nr;
        if (Schalter_Status [0] == LOW) { Note_Nr = Note_Nr + 7; }  // Umschalter An?
        Frequenz = Note [Note_Nr];                          // Frequenz auslesen
        Ausgabe = String (Frequenz);    
        display.showNumberDecEx(Ausgabe.toInt(), 0b00000000, false, 4, 4);  // Ausgabe Display      
        tone (Lautsprecher, Frequenz);                      // Ton erzeugen             
    }    
}
// **************************************************************************************     


Kurzvideo

Kurzvideo mit Arduino Mini-Piano.


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz