Inhaltsverzeichnis:
- Schritt 1: Erforderliche Hardware
- Schritt 2: Erklärung der Multischaltermethode
- Schritt 3: Vergleichstabelle
- Schritt 4: Spielen Sie eine Melodie
Video: DIP Tune Selector mit 1 Pin - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Vor einiger Zeit arbeitete ich an einem "Musikbox"-Projekt, bei dem ich zwischen bis zu 10 verschiedenen Melodie-Schnipseln wählen musste. Eine natürliche Wahl für die Auswahl einer bestimmten Melodie war ein 4-poliger Dip-Schalter, da 4 Schalter 2 bieten4=16 verschiedene Einstellungen. Die Brute-Force-Implementierung für diesen Ansatz erfordert jedoch 4 Geräte-Pins, einen für jeden Schalter. Da ich vorhatte, den ATtiny85 für die Entwicklung zu verwenden, war der Verlust von 4 Pins etwas zu viel. Glücklicherweise bin ich auf einen Artikel gestoßen, der eine geniale Methode zur Verwendung eines analogen Pins beschreibt, um mehrere Schaltereingänge zu handhaben.
Die Multischalter;1-Eingangstechnik verwendet eine Spannungsteilerschaltung, um einen eindeutigen ganzzahligen Wert für jede der 16 möglichen Schaltereinstellungskombinationen bereitzustellen. Dieser Satz von 16 ganzzahligen Bezeichnern wird dann im Anwendungsprogramm verwendet, um einer Einstellung eine Aktion zuzuordnen.
Dieses anweisbare verwendet die Multischaltermethode, um die Melodieauswahl für die Musikboxanwendung zu implementieren. Die ausgewählte Melodie wird dann mit der Arduino-Tonfunktion über einen Piezo-Summer abgespielt.
Schritt 1: Erforderliche Hardware
Die Verwendung der UNO als Implementierungsplattform minimiert die Anzahl der erforderlichen Hardwarekomponenten. Die Implementierung der Multischalter-Eingangsmethode erfordert nur einen 4-poligen Dip-Schalter, die 5 Widerstände für den Spannungsteiler und ein Anschlusskabel für die Anschlüsse. Ein Piezo-Summer wird der Konfiguration für die Implementierung des Musikbox-Stimmwählers hinzugefügt. Optional, je nach Art des verwendeten Dip-Schalters, ist es hilfreich, eine 2x4 8-polige Buchse zu verwenden, um den Dip-Schalter mit dem Steckbrett zu verbinden, da die Standard-Dip-Schalter-Pins zum Löten an ein Perfboard gedacht sind, das nicht direkt an ein Steckbrett angeschlossen wird. Die Steckdose stabilisiert die Dip-Switch-Anschlüsse und verhindert ein leichtes Anheben des Schalters beim Einstellen der Kippschalter.
Name | Mögliche Quelle | Wie verwendet |
---|---|---|
4-poliger Dip-Schalter | Melodieauswahl | |
2x4-Pin-Buchse (optional) | Amazonas | Die Pfosten der meisten Dip-Schalter halten den Schalter in einem Steckbrett nicht sehr gut. Eine Buchse hilft, die Verbindung fester zu machen. Eine Alternative besteht darin, einen Dip-Schalter zu finden, der wirklich für den Einsatz auf Steckbrettern mit normalen IC-Pins geeignet ist. |
Widerstände:
|
Spannungsteiler implementieren | |
passiver Piezo-Summer | Amazonas | Spielen Sie die von der Anwendung gesteuerte Melodie über die Arduino-Tonfunktion |
Schritt 2: Erklärung der Multischaltermethode
In diesem Abschnitt werden die zugrunde liegenden Konzepte für die Multiswitch-Methode diskutiert und die Gleichungen entwickelt, die für die eigenständige Berechnung eindeutiger Kennungen für jede der 16 möglichen Dip-Switch-Einstellungskonfigurationen erforderlich sind. Diese Kennungen können dann in einem Anwendungsprogramm verwendet werden, um eine Schalterkonfiguration einer Aktion zuzuordnen. Zum Beispiel möchten Sie vielleicht, dass die Einstellung - Schalter 1 an, Schalter 2 aus, Schalter 3 aus, Schalter 4 aus (1, 0, 0, 0) - Amazing Grace spielen und (0, 1, 0, 0) spielen Löwe schläft heute Nacht. Der Kürze und Prägnanz halber werden die Konfigurationskennungen im Rest des Dokuments als Komparatoren bezeichnet.
Das grundlegende Konzept für die Multischaltermethode ist die Spannungsteilerschaltung, die aus 2 in Reihe geschalteten Widerständen besteht, die an eine Eingangsspannung angeschlossen sind. Die Ausgangsspannungsleitung ist zwischen den Widerständen R. angeschlossen1 und R2, wie oben gezeigt. Die Ausgangsspannung des Teilers wird berechnet als Eingangsspannung multipliziert mit dem Verhältnis von Widerstand R2 zur Summe von R1 und R2 (Gleichung 1). Dieses Verhältnis ist immer kleiner als 1, sodass die Ausgangsspannung immer kleiner als die Eingangsspannung ist.
Wie im obigen Konstruktionsdiagramm dargestellt, ist der Multischalter als Spannungsteiler mit R. konfiguriert2 fest und R1 gleich dem zusammengesetzten/äquivalenten Widerstand für die 4 Dip-Schalter-Widerstände. Der Wert von R1 hängt davon ab, welche Dip-Schalter eingeschaltet sind und trägt daher zum zusammengesetzten Widerstand bei. Da die Dip-Switch-Widerstände parallel geschaltet sind, wird die Berechnungsgleichung für den äquivalenten Widerstand in Form der Kehrwerte der Komponentenwiderstände angegeben. Für unsere Konfiguration und den Fall, dass alle Schalter eingeschaltet sind, lautet die Gleichung
1/R1 = 1/80000 + 1/40000 + 1/20000 + 1/10000
geben R1 = 5333,33 Volt. Um der Tatsache Rechnung zu tragen, dass bei den meisten Einstellungen mindestens einer der Schalter ausgeschaltet ist, wird der Schalterzustand als Multiplikator verwendet:
1/R1 = s1*1/80000 + s2*1/40000 + s3*1/20000 + s4*1/10000 (2)
wobei der Zustandsmultiplikator, sich, ist gleich 1, wenn der Schalter eingeschaltet ist und gleich 0, wenn der Schalter ausgeschaltet ist. R1 kann nun verwendet werden, um das in Gleichung 1 benötigte Widerstandsverhältnis zu berechnen. Verwenden Sie den Fall, in dem alle Schalter wieder als Beispiel eingeschaltet sind
VERHÄLTNIS = R2/(R1+R2) = 10000/(5333.33+10000) =.6522
Der letzte Schritt bei der Berechnung des vorhergesagten Komparatorwerts ist die Multiplikation von RATIO mit 1023, um die Wirkung der analogRead-Funktion zu emulieren. Die Kennung für den Fall, dass alle Schalter eingeschaltet sind, lautet dann
Komparator15 = 1023*.6522 = 667
Alle Gleichungen zur Berechnung der Kennungen für die 16 möglichen Schalterstellungen sind nun vorhanden. Zusammenfassen:
- R1 wird mit Gleichung 2 berechnet
- R1 und R2 werden verwendet, um den zugehörigen Widerstand RATIO. zu berechnen
- das Verhältnis wird mit 1023 multipliziert, um den Komparatorwert zu erhalten
- optional kann die prognostizierte Ausgangsspannung auch als RATIO*Vin. berechnet werden
Der Komparatorsatz hängt nur von den für den Spannungsteiler verwendeten Widerstandswerten ab und ist eine eindeutige Signatur für die Konfiguration. Da die Ausgangsspannungen des Teilers von Durchlauf zu Durchlauf (und von Lesen zu Lesen) schwanken, bedeutet in diesem Zusammenhang eindeutig, dass zwei Sätze von Kennungen zwar nicht genau gleich sind, aber nahe genug liegen, dass die Differenzen der Komponentenkomparatoren innerhalb eines kleinen Vorlaufs liegen. angegebenen Intervall. Der Intervallgrößenparameter muss groß genug gewählt werden, um erwartete Schwankungen zu berücksichtigen, aber klein genug, damit sich verschiedene Schaltereinstellungen nicht überschneiden. Normalerweise funktioniert 7 gut für die Halbwertsbreite des Intervalls.
Eine Reihe von Komparatoren für eine bestimmte Konfiguration kann auf verschiedene Weise erhalten werden - führen Sie das Demoprogramm aus und zeichnen Sie die Werte für jede Einstellung auf; Verwenden Sie die Kalkulationstabelle im nächsten Abschnitt, um zu berechnen; kopieren Sie ein vorhandenes Set. Wie oben erwähnt, werden alle Sets höchstwahrscheinlich etwas anders sein, sollten aber funktionieren. Ich schlage vor, die Kennungen des Methodenautors für das Multischalter-Setup und die Tabelle aus dem nächsten Abschnitt zu verwenden, wenn einer der Widerstände erheblich geändert oder weitere Widerstände hinzugefügt werden.
Das folgende Demoprogramm veranschaulicht die Verwendung der Komparatoren, um die aktuelle DIP-Schaltereinstellung zu identifizieren. In jedem Programmzyklus wird ein analogRead durchgeführt, um eine Kennung für die aktuelle Konfiguration zu erhalten. Diese Kennung wird dann über die Vergleicherliste hinweg verglichen, bis eine Übereinstimmung gefunden wird oder die Liste erschöpft ist. Wenn eine Übereinstimmung gefunden wird, wird eine Ausgabenachricht zur Überprüfung ausgegeben; falls nicht gefunden, wird eine Warnung ausgegeben. In die Schleife wird eine Verzögerung von 3 Sekunden eingefügt, damit das serielle Ausgabefenster nicht mit Meldungen überhäuft wird und um etwas Zeit zum Zurücksetzen der DIP-Schalterkonfiguration zu haben.
//-------------------------------------------------------------------------------------
// Demoprogramm zum Lesen des Spannungsteilerausgangs und zum Identifizieren der // aktuellen Dip-Switch-Konfiguration, indem der Ausgangswert in einem Array von // Vergleichswerten für jede mögliche Einstellung nachgeschlagen wird. Die Werte im Lookup-Array können // entweder aus einem vorherigen Durchlauf der Konfiguration oder durch Berechnungen // basierend auf den zugrunde liegenden Gleichungen gewonnen werden. //------------------------------------------------ -------------------------------------------------- int-Komparator [16] = {0, 111, 203, 276, 339, 393, 434, 478, 510, 542, 567, 590, 614, 632, 651, 667}; // Verarbeitungsvariablen definieren int dipPin = A0; // Analoger Pin für Spannungsteilereingang Int dipIn = 0; // hält den Spannungsausgang des Teilers, übersetzt von analogRead int count = 0; // Schleifenzähler Int Epsilon = 7; // Vergleichsintervall halbe Breite bool dipFound = false; // wahr, wenn der aktuelle Spannungsteilerausgang in der Nachschlagetabelle gefunden wurde Void setup () { PinMode (dipPin, INPUT); // Spannungsteiler-Pin als INPUT Serial.begin (9600) konfigurieren; // serielle Kommunikation aktivieren aufrechtzuerhalten. Void Schleife () { Verzögerung (3000); // Ausgabe von zu schnellem Scrollen verhindern // Lookup-Parameter initialisieren count = 0; dipFound = false; // Aktuelle Ausgangsspannung lesen und dokumentieren dipIn = analogRead (dipPin); Serial.print ("Teilerausgabe"); Serial.print (dipIn); // Komparatorliste nach aktuellem Wert durchsuchen while((count < 16) && (!dipFound)) { if(abs(dipIn -komparator[count]) <= epsilon) { // gefunden dipFound = true; Serial.print ("am Eintrag gefunden"); Serial.print (Anzahl); Serial.println ("Wert" + String (Komparator [Anzahl])); brechen; } zählen++; } if(!dipFound) { // Wert nicht in Tabelle; sollte nicht passieren Serial.println ("OOPS! Nicht gefunden; besser Ghost Busters anrufen"); } }
Schritt 3: Vergleichstabelle
Die Berechnungen für die 16 Vergleichswerte sind in der oben gezeigten Tabelle angegeben. Die beiliegende Excel-Datei steht am Ende dieses Abschnitts zum Download bereit.
Die Tabellenspalten A-D zeichnen die DIP-Schalter-Widerstandswerte und die 16 möglichen Schaltereinstellungen auf. Bitte beachten Sie, dass der im Fritzing-Design-Diagramm gezeigte Hardware-DIP-Schalter tatsächlich von links nach rechts nummeriert ist und nicht von rechts nach links in der Tabelle. Ich fand das etwas verwirrend, aber die Alternative setzt die "1"-Konfiguration (0, 0, 0, 1) nicht an den Anfang der Liste. Spalte E verwendet Formel 2 des vorherigen Abschnitts, um den äquivalenten Widerstand R. des Spannungsteilers zu berechnen1 für die Einstellung. Spalte F verwendet dieses Ergebnis, um den zugehörigen Widerstand RATIO zu berechnen, und schließlich multipliziert Spalte G den RATIO mit dem analogRead max-Wert (1023), um den vorhergesagten Komparatorwert zu erhalten. Die letzten 2 Spalten enthalten die tatsächlichen Werte aus einem Lauf des Demoprogramms zusammen mit den Unterschieden zwischen den vorhergesagten und den tatsächlichen Werten.
Im vorherigen Abschnitt wurden drei Methoden erwähnt, um einen Satz von Komparatorwerten einschließlich der Erweiterung dieser Tabelle zu erhalten, wenn die Widerstandswerte erheblich geändert werden oder mehr Schalter hinzugefügt werden. Es scheint, dass kleine Unterschiede in den Widerstandswerten die Endergebnisse nicht wesentlich beeinflussen (was gut ist, da die Widerstandsspezifikationen eine Toleranz von beispielsweise 5 % aufweisen und der Widerstand selten seinem tatsächlich angegebenen Wert entspricht).
Schritt 4: Spielen Sie eine Melodie
Um zu veranschaulichen, wie die Multischaltertechnik in einer Anwendung verwendet werden könnte, wird das Vergleichsdemoprogramm aus dem Abschnitt "Methodenerklärung" modifiziert, um die Melodieauswahlverarbeitung für das Musikboxprogramm zu implementieren. Die aktualisierte Anwendungskonfiguration wird oben angezeigt. Die einzige Ergänzung zur Hardware ist ein passiver Piezo-Summer zum Abspielen der ausgewählten Melodie. Die grundlegende Änderung an der Software ist das Hinzufügen einer Routine zum Abspielen einer einmal identifizierten Melodie mithilfe des Summers und der Arduino-Tonroutine.
Die verfügbaren Tune-Snippets sind in einer Header-Datei, Tunes.h, zusammen mit der Definition der notwendigen Stützstrukturen enthalten. Jede Melodie ist als ein Array von notenbezogenen Strukturen definiert, die die Notenfrequenz und -dauer enthalten. Die Notenfrequenzen sind in einer separaten Header-Datei, Pitches.h, enthalten. Die Programm- und Header-Dateien stehen am Ende dieses Abschnitts zum Download bereit. Alle drei Dateien sollten im selben Verzeichnis abgelegt werden.
Auswahl und Identifizierung gehen wie folgt vor:
- Der "Benutzer" stellt die Dip-Schalter in der Konfiguration ein, die der gewünschten Melodie zugeordnet ist
- bei jedem Programmschleifenzyklus wird die Kennung für die aktuelle Dip-Schalter-Einstellung über analogRead ermittelt
- Die Konfigurationskennung von Schritt 2 wird mit jedem der Komparatoren in der Liste der verfügbaren Melodien verglichen
-
Wenn eine Übereinstimmung gefunden wird, wird die playTune-Routine mit den Informationen aufgerufen, die für den Zugriff auf die Liste der Melodienoten erforderlich sind
Mit der Arduino-Tonfunktion wird jede Note über den Summer gespielt
- Wenn keine Übereinstimmung gefunden wird, wird keine Aktion ausgeführt
- 1-5. wiederholen
Die DIP-Schaltereinstellungen für die verfügbaren Melodien sind in der folgenden Tabelle aufgeführt, wobei 1 bedeutet, dass der Schalter eingeschaltet ist, 0 bedeutet, dass er ausgeschaltet ist. Denken Sie daran, dass die Ausrichtung des Dip-Schalters den Schalter 1 in die ganz linke Position bringt (die mit dem 80K-Widerstand verbunden ist).
NAME | Schalter 1 | Schalter 2 | Schalter 3 | Schalter 4 |
Danny Boy | 1 | 0 | 0 | 0 |
Kleiner Bär | 0 | 1 | 0 | 0 |
Löwe schläft heute Nacht | 1 | 1 | 0 | 0 |
Niemand kennt das Problem | 0 | 0 | 1 | 0 |
Erstaunliche Anmut | 0 | 0 | 0 | 1 |
Leerstelle | 1 | 0 | 0 | 1 |
MockingBird Hill | 1 | 0 | 1 | 1 |
Die Klangqualität eines Piezo-Summers ist sicherlich nicht überragend, aber zumindest erkennbar. Tatsächlich sind die Töne, wenn sie gemessen werden, sehr nahe an der genauen Frequenz der Töne. Eine interessante Technik, die in dem Programm verwendet wird, besteht darin, die Melodiedaten im Flash-/Programmspeicherbereich anstelle des Standarddatenspeicherbereichs zu speichern, indem die PROGMEM-Direktive verwendet wird. Der Datenabschnitt enthält die Programmverarbeitungsvariablen und ist viel kleiner, etwa 512 Byte für einige der ATtiny-Mikrocontroller.
Empfohlen:
Heimwerken -- Einen Spinnenroboter herstellen, der mit einem Smartphone mit Arduino Uno gesteuert werden kann – wikiHow
Heimwerken || Wie man einen Spider-Roboter herstellt, der mit einem Smartphone mit Arduino Uno gesteuert werden kann: Während man einen Spider-Roboter baut, kann man so viele Dinge über Robotik lernen. Wie die Herstellung von Robotern ist sowohl unterhaltsam als auch herausfordernd. In diesem Video zeigen wir Ihnen, wie Sie einen Spider-Roboter bauen, den wir mit unserem Smartphone (Androi
Bewegungsaktivierte Cosplay Wings mit Circuit Playground Express - Teil 1: 7 Schritte (mit Bildern)
Bewegungsaktivierte Cosplay-Flügel mit Circuit Playground Express - Teil 1: Dies ist Teil 1 eines zweiteiligen Projekts, in dem ich Ihnen meinen Prozess zur Herstellung eines Paars automatisierter Feenflügel zeige. Der erste Teil des Projekts ist der Mechanik der Flügel, und der zweite Teil macht es tragbar und fügt die Flügel hinzu
Raspberry Pi mit Node.js mit der Cloud verbinden – wikiHow
So verbinden Sie Raspberry Pi mit Node.js mit der Cloud: Dieses Tutorial ist nützlich für alle, die einen Raspberry Pi mit Node.js mit der Cloud, insbesondere mit der AskSensors IoT-Plattform, verbinden möchten. Sie haben keinen Raspberry Pi? Wenn Sie derzeit keinen Raspberry Pi besitzen, empfehle ich Ihnen, sich einen Raspberry Pi zuzulegen
DIY Circuit Activity Board mit Büroklammern - HERSTELLER - STEM: 3 Schritte (mit Bildern)
DIY Circuit Activity Board mit Büroklammern | HERSTELLER | STEM: Mit diesem Projekt können Sie den Weg des elektrischen Stroms ändern, um durch verschiedene Sensoren zu laufen. Mit diesem Design können Sie zwischen dem Aufleuchten einer blauen LED oder dem Aktivieren eines Summers wechseln. Sie haben auch die Wahl, einen lichtabhängigen Widerstand mit
Beginnen Sie mit Light Painting (kein Photoshop): 5 Schritte (mit Bildern)
Beginnend mit Light Painting (kein Photoshop): Ich habe vor kurzem eine neue Kamera gekauft und einige ihrer Funktionen untersucht, als ich im Internet auf Light Painting oder Langzeitbelichtung gestoßen bin. Die meisten von uns werden die Grundform des Lightpaintings mit einem Foto in einer Stadt mit einer Straße gesehen haben