In diesem Projekt werden wir mit Arduino ein Unterhaltungsstück bauen. Wir alle haben die Angewohnheit, auf Tisch oder Stift zu tippen, um zufällige Musik zu erstellen. Natürlich mag es nicht als guter Manierismus angesehen werden, aber wir alle machen es mindestens einmal gerne. Daher dachte ich daran, es auf die nächste Stufe zu bringen, indem ich Arduinos Fähigkeit nutzte, Töne zu spielen. Sobald Sie dieses Projekt erstellt haben, können Sie Töne erzeugen, indem Sie mit den Fingern auf etwas Leitfähiges tippen und Ihre eigenen Rhythmen erstellen, wie wenn Sie Klavier auf Ihrer Handfläche spielen. Klingt cool, also lass es uns bauen.
Erforderliche Komponenten:
Die für dieses Projekt erforderlichen Materialien sind unten aufgeführt. Es ist nicht zwingend erforderlich, sich daran zu halten. Sobald Sie das Konzept gefunden haben, können Sie es auf Ihre eigene Weise erstellen.
- Arduini Pro Mini
- Peizo-Sprecher
- Flex Sensor
- Fingerhandschuhe
- 10K Widerstände
- BC547 Transistoren
- 9V Batterie
Schaltplan und Erklärung:
Das Schaltbild für dieses Arduino Palm Piano ist unten dargestellt.
Das Projekt verwendet insgesamt vier Sensoren, dh zwei Flex-Sensoren und zwei Darlington-Paare, die als Berührungssensor fungieren. Wir haben auch zwei Pulldown-Widerstände R1 und R2 mit einem Wert von jeweils 10.000 verwendet, die als Pulldown-Widerstand für den Flex-Sensor dienen. Hier wird der Flex-Sensor verwendet, um mit einem Finger drei verschiedene Töne zu erzeugen, je nachdem, wie stark er sich gebogen hat. So können wir mit zwei Fingern 6 Sounds erzeugen. Erfahren Sie hier mehr über den Flex-Sensor.
Darlington-Paar:
Bevor wir fortfahren, ist es wichtig zu wissen, was ein Darlington ist und wie genau es in unserem Projekt funktioniert. Das Darlington-Paar kann als zwei Bipolartransistoren definiert werden, die so verbunden sind, dass der durch den ersten verstärkte Strom durch den zweiten Transistor weiter verstärkt wird. Ein Darlington-Paar ist im Bild unten dargestellt:
Wie oben gezeigt, haben wir zwei BC547-Transistoren verwendet, deren Kollektoren zum Sammeln gebunden sind und deren Emitter des ersten Transistors mit der Basis des zweiten Transistors verbunden ist. Diese Schaltung wirkt als Verstärker mit einer Verstärkung, was bedeutet, dass jedes kleine Signal, das an die Basis des ersten Transistors gegeben wird, ausreicht, um die Basis des zweiten Transistors vorzuspannen. Unser Körper fungiert hier als Masse. Wenn wir also die Basis des Transistors berühren, wird der zweite Transistor vorgespannt. Auf diese Weise haben wir den Berührungssensor für dieses Projekt gebaut.
Pin Nr. 2 und 3 sind die Interrupt-Pins am Arduino, die mit internen Pull-up-Widerständen hochgezogen werden. Diese Pins werden dann bei jedem Schließen des Darlington-Schalters gegen Masse gehalten. Auf diese Weise jedesmal, wenn wir den Draht (von der Basis des 1 Berühren st Transistor) ein Interrupt wird vom Arduino ausgelöst werden.
Die Verwendung von zwei Fingern kann nur zwei Arten von Tönen erzeugen, daher habe ich auch einen Flex-Sensor hinzugefügt, der den Ton abhängig davon ändert, wie stark er gebogen ist. Ich habe programmiert, drei verschiedene Töne pro Finger zu erzeugen, je nachdem, wie stark der Finger (Flex-Sensor) gebogen ist. Sie können die Anzahl erhöhen, wenn Sie mehr Töne an Ihren Fingerspitzen haben möchten.
Ich habe das komplette Brett auf einem Perf-Brett gemacht, damit es leicht in meine Handflächen passt, aber Sie können auch ein Steckbrett verwenden. Stellen Sie einfach sicher, dass Ihr Körper irgendwann den Boden des Stromkreises berührt. Sobald Sie alles gelötet haben, sollte es ungefähr so aussehen
Ich habe zwei Fingerhandschuhe verwendet, um die Drähte des Darlington-Paares und des Flex-Sensors wie oben gezeigt in Position zu halten. Sie können sich eine eigene (wenn möglich bessere) Idee einfallen lassen, um sie zu sichern, während Sie Ihre Töne spielen.
Arduino-Programmierung:
Das Programm für diesen Arduino Tap Tone Generator ist ziemlich einfach. Wir müssen nur auf Interrupts von den Darlington-Drähten achten und wenn wir einen finden, müssen wir einen Ton spielen, der davon abhängt, wie stark der Flex-Sensor gebogen ist. Der vollständige Code ist am Ende dieses Beitrags angegeben, aber ich habe unten einige wichtige Abschnitte erläutert.
Hinweis: Dieses Programm funktioniert mit Hilfe der Bibliothek "Pitches.h". Stellen Sie daher sicher, dass Sie die Header-Datei zu Ihrem Programm hinzugefügt haben, bevor Sie sie kompilieren. Sie können die Header-Datei Pitches.h hier herunterladen.
In der Setup- Funktion initialisieren wir Pin 2 und 3 als Eingang mit Pull-up-Widerständen. Wir erklären sie auch als Interrupt - Pins und führen die TONE1 (), wenn es eine Unterbrechung an Pin 2 und der Tone2 () Funktion, wenn es einen Interrupt auf dem 3 rd Pin. Diese Interrupts werden immer dann ausgelöst, wenn diese Pins aus ihrem hochgezogenen Zustand LOW werden.
void setup () {pinMode (2, INPUT_PULLUP); pinMode (3, INPUT_PULLUP); attachInterrupt (digitalPinToInterrupt (2), Ton1, NIEDRIG); attachInterrupt (digitalPinToInterrupt (3), Ton2, NIEDRIG); Serial.begin (9600); }}
Innerhalb der Schleifenfunktion prüfen wir ständig, wie stark der Flex-Sensor gebogen ist. Mein FlexSensor 1 gab zum Beispiel Werte um 200 an, wenn er flach gelassen wurde, und ging bis auf 130 zurück, wenn ich ihn maximal bog. Daher habe ich den Wert von 200 auf 130 als 1 bis 3 abgebildet, da ich 3 verschiedene Typen spielen muss von Tönen. Sie müssen diese beiden Linien basierend auf Ihren Flex-Sensorwerten und der Anzahl der Töne anpassen.
void loop () {flexSensor1 = map (analogRead (A0), 200, 130, 1,3); // Mit Ihren eigenen Werten basierend auf Ihrem Flex-Sensor abbilden flexSensor2 = map (analogRead (A1), 170,185,1,3); // Mit Ihren eigenen Werten basierend auf Ihrem Flex-Sensor abbilden}
Wie wir gesehen haben früher die Funktion TONE1 () wird ausgeführt, wenn eine Unterbrechung an Pin 2. Welche innerhalb des geschieht erkannt wird TONE1 () Funktion oben dargestellt ist. Wir betrachten die Werte von FlexSensor1 und spielen einen Ton, der auf dem flexSesnor-Wert basiert. Töne werden mit der Tonfunktion von Arduino gespielt. Wir haben die Funktion ton () in unserem vorherigen Projekt erklärt.
void Ton1 () {if (flexSensor1 == 1) Ton (8, NOTE_D4,50); sonst wenn (flexSensor1 == 2) Ton (8, NOTE_A3,50); sonst wenn (flexSensor1 == 3) Ton (8, NOTE_G4,50); sonst Ton (8, NOTE_D4,50); }}
Die folgende Zeile dient zum Abspielen des Tons. Sie können jeden Ton abspielen, der in der Header-Datei „Pitches.h“ verfügbar ist. In der obigen Zeile wird beispielsweise NOTE_A3 am Pin für eine Dauer von 50 Millisekunden abgespielt.
Ton (8, NOTE_A3,50); // Ton (PinNum, Notenname, Dauer);
Arbeiten:
Sobald Ihre Hardware fertig ist, laden Sie den Code hoch und befestigen Sie ihn an Ihren Fingern. Stellen Sie sicher, dass Ihr Körper irgendwann die Masse des Stromkreises berührt. Berühren Sie nun einfach ein leitfähiges Material oder Ihren Körper und Sie sollten in der Lage sein, den jeweiligen Ton zu hören. Sie können Ihre eigene Melodie oder Musik spielen, indem Sie in unterschiedlichen Intervallen und Positionen tippen.
Das folgende Video zeigt die vollständige Arbeitsweise des Projekts. Ich hoffe, Ihnen hat das Projekt gefallen. Vorschläge oder Fragen können im Kommentarbereich unten veröffentlicht werden. Überprüfen Sie auch unser Arduino Audio Player und Arduino Tone Generator Project.