Home > Technologie > Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Advertisement

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Dieses Projekt ist ein portabler, Arduino-powered, Grid-basierte MIDI-Controller, bootet bis in eine Vielzahl von Anwendungen, um viele Dinge mit Ton zu tun. Es verfügt über 16 beleuchtete Tasten, die als Eingänge und Ausgänge verwendet werden, um dem Controller eine visuelle Rückmeldung zu geben. 2 Potentiometer geben eine analoge Kontrolle, je nach Applikation sind die Töpfe dem Tempo, der MIDI-Geschwindigkeit, der Tonhöhe und dem Scrollen zuzuordnen (so dass der verfügbare Gitterraum größer als 4x4 ist). Ein x / y-Beschleunigungsmesser und ein x / y-Gyroskop fügen dem Gerät etwas spielerische, gestische Kontrolle hinzu. Die meisten der Anwendungen implementieren eine "Shake to Erase" -Steuerung und mehrere reagieren auf Kippen in verschiedener Weise. Es bootet bis in 7 verschiedene Anwendungen (unten beschrieben), obwohl es das Potenzial, booten bis zu insgesamt 16 hat. Dieses Gerät ist in erster Linie ein MIDI - Controller, aber ich habe auch eine App geschrieben , dass Sie die Taste und analogen Daten in zu ziehen erlaubt MaxMSP und Audio-Steuerung .

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Dieser Controller wurde sowohl inspiriert von der monome und tenori-on . Als ich im College war, baute ich ein großes Touchscreen - Display, auf der Grundlage der Arduinome monome-Arduino Klon Schaltplan und Code, die in MaxMSP geschrieben mit allen Open - Source - monome Anwendungen gearbeitet. Es gibt eine Tonne von Menschen , den Aufbau ihrer eigenen monome-Typ Geräte mit diesen Tasten Sparkfun und dem Arduinome Code sowie ein paar Variationen über das Thema . Mit diesem Projekt war ich daran interessiert, ein Gerät, das ein wenig mehr in sich geschlossen und relativ billig zu machen war (viele Tasten = viele $). Im Einklang mit dem Konzept der Tenori-on, macht dieser Controller alle seine App-Verarbeitung selbst, ist es nicht auf einen Computer verlassen, um Tastendrücke / analoge Steuerelemente in MIDI zu verarbeiten. Dies bedeutet, Sie können es direkt in einen Synthesizer oder ein Gerät, das MIDI versteht, und Sie sind gut zu gehen, kein Computer erforderlich. Es läuft eine bullige LiPo-Batterie, die es läuft für Tage auf eine Ladung hält, so ist es auch ziemlich tragbar. Im Einklang mit der Monome Seite der Dinge, es ist völlig Open Source und kann an Ihre besonderen Audio-Setup angepasst werden. All das Arduino - Code ist bis auf Github (klicken Sie auf die Cloud-förmige Taste zum Download), zusammen mit einem MaxMSP Patch, der Daten aus der Steuerung in etwas Brauchbares in Max decodiert.

Ein Überblick über die bisherigen Apps:

Pixel Tilt - Ein Pixel bewegt sich über eine 2D - Tastatur mit Neigung, die Auslösung MIDI wie es sich bewegt. Kontrollgeschwindigkeit und Basenote mit Töpfen.

Flin - Music Box App basiert auf monome . Geschwindigkeit und Geschwindigkeit der Noten, die durch Y-Tilt gesteuert werden. Paging über 16 "Lanes" mit Pot. Schütteln, um zu löschen.

Serielle Kommunikation mit MaxMSP - Ziehen von Daten aus Tasten und Analog - Kontrollen in MaxMSP und verwenden Max LED - Zustände zu senden. Unterstützt 5-Bit-Analog-Regler für x / y-Beschleunigungsmesser und 2 Töpfe. Dies ist ideal, wenn Sie Audiobearbeitungsanwendungen mit dem Controller ausführen möchten. Herunterladen SerialDemo app ( SerialDemo.maxpat , mit den Arduino - Dateien enthalten, klicken Sie auf die Cloud-förmige Taste hier ) , um Daten in Max analysieren. Beat slicer (siehe oben) App ist im Lieferumfang der Arduino-Dateien enthalten.

Arpeggiator - Spielt eine zwei, drei oder vier Note Arpeggio, ähnlich wie diese App ich für monome schrieb. Ein Pot steuert die Geschwindigkeit des Arpeggios, eine andere steuert die Geschwindigkeit. Notizen innerhalb des Arpeggios können durch Tastenkontrollen um einen Halbton nach oben oder unten verschoben werden. Das gesamte Arpeggio wird über x-Tilt transponiert. Drücken Sie die linke Note im Arpeggio, um die Noten in aufsteigender Reihenfolge abzuspielen, drücken Sie die rechte Note im Arpeggio, um die Noten in absteigender Reihenfolge abzuspielen, und drücken Sie eine mittlere Note im Arpeggio, um die Noten in einer zufälligen Reihenfolge abzuspielen. Schütteln, um zu löschen.

Boiing - Bouncing Pixel , die polyrhythms, basierend auf generieren dieser tenori-on App . Bounce Richtung basierend auf y Tilt. Geschwindigkeit und MIDI-Geschwindigkeit (Lautstärke) durch Töpfe gesteuert. Schütteln, um zu löschen.

Step Sequencer - Vier Note 16 Step - Sequenzer. Pots steuern Tempo und Paging über die Sequenz. Schütteln, um zu löschen.

MIDI - Keyboard - Einfache MIDI - Tastatur. Steuergeschwindigkeit und Basenote mit Töpfen, Pitchbend mit x Tilt.

Liste der Einzelteile:

SPARKFUN:
(1x) Taste Pad 4x4 - LED - unterstützte Sparkfun COM-07835
(1x) Taste Pad 4x4 - Breakout PCB Sparkfun COM-08033
(1x) Arduino Uno Sparkfun DEV-11021
(1x) Accelerometer / Gyro 5 Freiheitsgrade Sparkfun SEN-11072

Ich habe ein 3-Achsen-Beschleunigungsmesser und 2-Achsen-Gyroskop in diesem Controller, um es einige gesture Kontrolle, aber bisher habe ich nicht tatsächlich den Kreisel in allen Anwendungen verwendet, und ich habe nur die X-und Y-Achse des Beschleunigungsmessers verkabelt. Das heißt , Sie könnten Unter in einer einfacheren / billiger Teil wie dieses Update:. Dieser Teil ist nicht mehr verfügbar , und ich habe eine harte Zeit , einen analogen Kreisels zu finden , sie zu ersetzen. Dieses analoge Beschleunigungsmesser Board funktionieren wird, und wie ich schon sagte , Habe ich eigentlich noch keine Apps mit dem Gyro implementiert, also ist es nicht wirklich notwendig. Die Verkabelung ist ein wenig anders für die neue Beschleunigungssensor, aber wenn Sie x, y, z, gnd die Art und Weise habe ich in den Rest der Schaltpläne beschrieben und verbinden Sie die 5V aus dem Arduino mit dem Beschleunigungsmesser Vin, sollte es funktionieren das Gleiche.

DIGIKEY:
(16x) Weiße 5mm LED (3mm ist zu fein) Digikey C513A-WSN-CV0Y0151-ND
(2x) 74HC595 Schieberegister Digikey 296-1600-5-ND
(1x) 74HC165 Schieberegister Digikey 296-8251-5-ND
(3x) 16 - poligen IC - Sockel Digikey AE9992-ND

(16x) 1N4148 Diode Digikey 1N4148FS-ND
(4x) Strombegrenzungswiderstände (Wert abhängig von LEDs, Beispielrechnung in Schritt 5 enthalten)
(4x) 10 kOhm 1 / 4watt Widerstände Digikey CF14JT10K0CT-ND
(1x) 220Ohm 1 / 4watt Widerstand Digikey CF14JT220RCT-ND
(1x) 5-Pin MIDI Jack Digikey CP-7050-ND (optional - erklärt in Schritt 27)
(1x) USB Typ B Buchse ; Digikey 732-2734-ND (optional - erklärt in Schritt 27)
(2x) 10kOhm lineare Verjüngung Potentiometer Digikey 987-1308-ND

(1x) Größe N Schalttafeleinbau Koaxial-Netz Jack mit Schalter Radioshack 274-1573 aktualisieren Digikey CP-002AHPJCT-ND kann dieser Teil anders aussehen als der hier abgebildete, überprüfen Sie das Datenblatt / mit einem Multimeter sichere Verbindung zu sein korrekt sind.

(1x) SPST Kippschalter Digikey 360-3289-ND

(1x) Größe N Koaxial-Stecker Digikey CP3-1000-ND

JAMECO:
(1x) 16 Leiterbandkabel Jameco 28RC16-10VP
(1x) 16 - poligen Winkelkupplung Jameco 746285-3
(6x) männlich Sockelpins Jameco 103393

AMAZONAS:

(1x) Midi Kabel Amazon (optional - in Schritt 27 erklärt)

(1x) Li-Ion 7.4V Tenergy 2200mAh Akku - Modul mit PCB Amazon
(1x) Tenergy Universal Smart - Ladegerät für Li-Ion / Polymer - Akku (3,7V-14,8V 1-4 Zellen) Amazon
(1x) MIDI zum USB - Kabel Amazon (optional - erklärt in Schritt 27)

VIELE LIEFERANTEN:
(2x) Knöpfe - die Knöpfe Ich habe sind ausverkauft (von newark ), solange es passt ein 0,25 "/6.35mm Welle , es wird funktionieren, etwas , das Sie wählen möchten:

https://www.tubesandmore.com/products/knobs

http://amzn.to/1RXew6a

ZUSÄTZLICHE MATERIALIEN:
22 - Gauge - Kabel, verschiedene Farben Jameco # 9313-0-R
Elektro - Band Radio Shack 64-2373
Kabelschneider
Abisolierzangen
Lot
Holz / Acryl / Projekt Gehäuse (I verwendet , um dieses 6 "x6" x2 "Bambus - Box The Container Store )
Kleber / Epoxy
Doppelklebeband Amazon

Schritt 1: Schema und Übersicht

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Alle Schemata für dieses Projekt sind oben dargestellt. Detaillierte Übersichten der Anschlüsse 74HC595, 74HC165 und Stromanschlüsse finden Sie weiter unten in dieser Anleitung. Alle Arduino-Anschlüsse sind nachfolgend aufgelistet:

Analog

0 - Gyroskop Y (Y4.5)
1 - Potentiometer 1
2 - Gyroskop X (X4.5)
3 - Beschleunigungsmesser Y (YAcc)
4 - Beschleunigungsmesser X (XAcc)
5 - Potentiometer 2

digital

0 - seriell ein - das muss unverbunden bleiben
1 - serial out - das ist mit dem MIDI-Ausgang verbunden
2 - 74HC165 Datenpin (Q7)
3 - 74HC165 Taktgeber (CP)
4 - 74HC165 Verriegelungsstift (PL)
5 - 74HC595 Taktgeber (SH_CP)
6 - 74HC595 Verriegelungsstift (ST_CP)
7 - 74HC595 Datenpin (DS)

Keine Verbindungen zu digitalen Pins 8-13

Schritt 2: Löten Sie LEDs auf Sparkfun PCB

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Führen Sie die Leitungen von 16 LEDs (5mm oder 3mm sind fein, ich verwendete 5mm) durch LED-Löcher in der Sparkfun-Leiterplatte. Diese Platinen sind mit 4-poligen RGB-LEDs kompatibel, so dass auf jedem Tastenfeld vier Löcher vorhanden sind. Sie können die zwei Mittellöcher für einfarbige LEDs verwenden (siehe Abbildung 3). Achten Sie darauf, dass die flache Kante der LED (Kathode) mit der flachen Markierung auf der Platine übereinstimmt.

Löten Sie die LED-Leitungen und schneiden Sie den überschüssigen Draht.

Schritt 3: Lötdioden zu Sparkfun PCB

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Löten Sie 16 Dioden zu Sparkfun PCB. Achten Sie darauf, die schwarze Markierung auf der Diode (Kathode) mit dem Streifen auf der Platine auszurichten.

Schritt 4: Flachbandkabel

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Schneiden Sie etwa 1ft von 16-adrigen Flachbandkabel. Trennen Sie die Enden von allen 16 Drähten auf einer Seite und ziehen Sie sie an die Sparkfun-Platine an. Die folgende Liste gibt alle farbigen Leiter in der Reihenfolge mit dem Namen der PCB-Bohrung an, auf die sie gelötet werden sollten, wenn Sie dies richtig tun, sollte keines der Drähte kreuzen. Beachten Sie, dass, da ich nur mit einer einzigen Farbe LED, werde ich verdrahten nur die "blaue" Anode.

Anschlüsse:

(Eine Seite des Flachbandkabels)
Braun nach SWT-GND1
Rot auf LED-GND1
Orange nach SWT-GND2
Gelb bis LED-GND2
Grün zu SWT-GND3
Blau zu LED-GND3
Violett zu SWT-GND4
Grau zu LED-GND4
Weiß bis BLUE4
Schwarz zu SWITCH4
Braun zu BLUE3
Rot auf SWITCH3
Orange auf BLUE2
Gelb zu SWITCH2
Grün zu BLUE1
Blau zu SWITCH1
(Andere Seite des Flachbandkabels)

Schritt 5: Klemmschraube

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Verwenden Sie einen Schraubstock, um die 16-polige Buchse am Flachbandkabel zu klemmen. Wenn Sie nicht über eine Bank Schraubstock nicht mit einer Zange tun dies, werden Sie klemmen die Steckdose an der Seite und mess up die Verbindungen. Sie sind besser dran mit einem Hammer, um die Klemme zu klopfen, nur stellen Sie sicher, dass Sie immer Druck gleichmäßig über die Steckdose.

Achten Sie darauf, dass die Klemme auf dem Flachbandkabel in der gleichen Orientierung, wie in den obigen Bildern angegeben, befestigt ist.

Schritt 6: Multiplexing mit Arduino und 74HC595

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zwei 74HC595s (parallel verdrahtet) werden alle LEDs im Projekt treiben und alle Knöpfe mit Strom versorgen. Der 74HC595 ist ein 8 Bit serielles Parallelschieberegister. Ich habe ein ausführliches Tutorial über Multiplexing mit dem 74HC595 geschrieben, und Sie können weitere Informationen über diesen Chip auf seiner finden Datenblatt . Bitte beachten Sie, dass die 74HC595 im Schaltplan nicht ein Pin-Diagramm ist, habe ich die Reihenfolge der Pins neu angeordnet, um das Schaltbild klarer. Das Pin-Diagramm für den Chip ist in Abb. 4 dargestellt.

Der 74HC595 hat die folgenden Pins (der technische Name kann abhängig davon, welches Datenblatt Sie lesen, eines von mehreren Dingen sein):

Position Gemeinsamer Name Technischer Name

1 Parallelausgang 2 QB oder Q1
2 parallele Ausgabe 3 QC oder Q2
3 parallele Ausgabe 4 QD oder Q3
4 parallele Ausgabe 5 QE oder Q4
5 parallelen Ausgang 6 QF oder Q5
6 parallelen Ausgang 7 QG oder Q6
7 parallelen Ausgang 8 QH oder Q7
8 Masse GND
9 serieller Datenausgang QH 'oder Q7' oder Q7S
10 Master Reset (aktiv low) MR (mit einer Linie oben) oder SRCLR (mit einer Linie oben)
11 Uhr SH_CP oder SRCLK
12 Verriegelungsstift ST_CP oder RCLK
13 Ausgang freigeben (aktiv low) OE (mit einer Leitung oben)
14-Datenstift DS oder SER
15 parallelen Ausgang 1 QA oder Q0
16 5 Volt liefern VCC

Die Verbindungen zwischen dem 74HC595 und der sparkfun-Platine sind im Schema dargestellt und werden nachfolgend wiederholt:

74HC595 / Sparkfun Breakout-Board

Q0 bis BLAU 4 und SCHALTER 4
Q1 bis BLAU 3 und SCHALTER 3
Q2 bis BLAU 2 und SCHALTER 2
Q3 bis BLAU 1 und SCHALTER 1
Q4 bis LED GND 4 (über Strombegrenzungswiderstand)
Q5 bis LED GND 3 (über Strombegrenzungswiderstand)
Q6 bis LED GND 2 (über Strombegrenzungswiderstand)
Q7 bis LED GND 1 (über Strombegrenzungswiderstand)

Die restlichen Pins haben folgende Verbindungen zum Arduino (auch schematisch dargestellt):

74HC595 / Arduino

Vcc zu Arduino 5V
GND zu Arduino GND
DS auf Digital Pin 7
OE (Leitung oben) bis GND
ST_CP zum Digital Pin 6
SH_CP auf Digital Pin 5
MR (Zeile oben) zu Arduino 5V
Q7 '- keine Verbindung

Schritt 7: Kopfstifte

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Löten Sie zwei Reihen von acht Kopfstiften zum Protoboard. Hier wird die Flachbandkabelbuchse an der Platine befestigt.

Schritt 8: Strombegrenzungswiderstände

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Der 74HC595 treibt die LEDs in der sparkfun-Platine an. Dieser Chip gibt jedoch nur 0 oder 5V aus und kann bis zu 70mA ausgeben. Dies bedeutet, dass wir Strombegrenzungswiderstände verwenden müssen, um eine Beschädigung der LEDs zu vermeiden.

Aus den Spezifikationen der LEDs habe ich:
Max Vorwärtsstrom: 30mA
Vorwärtsspannung: 3.2V

Berechnen Sie den Widerstand, der benötigt wird, um diese Maximalwerte von V = IR zu erreichen:
Widerstand = (5 V - 3,2 V) / (0,03 A)
= 60 Ohm

Ich verwendete 68 Ohm-Widerstände, so dass ich nicht am absoluten Maximum lief, sondern auch dafür sorgt, dass ich nicht zu viel Helligkeit verlieren würde. (Ich habe einen Fehler gemacht ein 100KOhm-Widerstände, wenn ich dieses Projekt, ich reparierte es später, aber die Streifen von 100Ohm-Widerständen sollte blau, grau, schwarz, gold, ignorieren Sie die Farben in den Bildern).

Dies sind die Beispiel Berechnungen für die spezifischen LEDs, die ich verwendet habe, müssen Sie eigene Berechnungen basierend auf den Spezifikationen Ihrer LEDs zu tun. Wenn Sie sich nicht sicher sind, was zu tun ist, verwenden Sie 220ohm oder höhere Widerstände; Mit zu viel Widerstand machen die LEDs weniger hell, aber sie werden nicht beschädigt werden.

Löten Sie vier Widerstände an das Protoboard, wie in den Bildern gezeigt. Verbinden Sie die Litzen der Widerstände mit den Lötstiften (Abb. 2).

Schritt 9: Buchse 74HC595

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Löten Sie eine 8-polige Buchse an das Protoboard wie in den obigen Bildern gezeigt.

Schritt 10: Verbindungen zu LEDs

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Wie in Abbildung 6 gezeigt, sind die Ausgangs - Pins (Q0-Q7) auf Stiften befindet 1-7 und 15. Dieses Bild aus dem genommen wurde Datenblatt des 74HC595. Schließen Sie die Widerstände wie in den Abbildungen 1 und 2 gezeigt an die Stifte 4 bis 7 an. Die Stifte 1-3 und 15 mit den Stiften gemäß den Schemata verbinden (beachten Sie, dass die Verdrahtung im Bild nicht korrekt ist, aber der Schaltplan korrekt ist) . Die Anschlüsse an den 74HC595 sollten wie folgt sein:

Pin 15 - Blau 4
Pin 1 - Blau 3
Pin 2 - Blau 2
Pin 3 - Blau 1
Stift 4 - LED GND 4
Stift 5 - LED GND 3
Pin 6 - LED GND 2
Stift 7 - LED GND 1

Achten Sie darauf, diese Pin-Verbindungen richtig zu bekommen - diesen Teil langsam und beziehen sich auf den Schaltplan oft.

Stellen Sie sicher, dass alle diese Verbindungen mit Lötmittel auf der Unterseite der Platine elektrisch verbunden sind (Abb. 2 und 4)

Schritt 11: Zweite 74HC595 hinzufügen: Teil 1

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Jeder 74HC595 kann nur Quelle 70mA zu einer Zeit für alle seine Stifte. Bei den 100ohm Strombegrenzungswiderständen, wenn alle 4 LEDs gleichzeitig leuchten (bei Multiplexing ist dies die max. Anzahl der LEDs, die evtl. gleichzeitig eingeschaltet werden können), werden sie jeweils ca. 18mA ziehen Strombedarf geringfügig über der max. Ich werde zusätzliche Strom von Pins Q0-Q7 ziehen, um die Schaltflächen zu multiplexen (in späteren Schritten). Eine einfache Lösung für dieses Problem besteht darin, einen weiteren 74HC595 zum Schaltkreis hinzuzufügen, er wird parallel zu dem aktuellen 74HC595 verdrahtet (siehe Schema). Dies wird uns zusätzliche 70mA von allen 8 Pins zu ziehen.

Fügen Sie eine weitere 16-polige Buchse zum Protoboard hinzu, wie in den Bildern gezeigt.

Schritt 12: Zweite 74HC595: Teil 2 hinzufügen

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Die Stifte 1-7 und 15 der Steckdosen miteinander verbinden (siehe Hinweis auf Schaltplan). Diese Pins entsprechen allen acht Ausgängen des 74HC595s.

Schritt 13: Zweite 74HC595 hinzufügen: Teil 3

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Verbinden Sie Pin 8 (Masse) und Pin 16 (5V) der Steckdosen miteinander (siehe Bildhinweis auf Schaltplan).

Schritt 14: Zweite 74HC595 hinzufügen: Teil 4

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Die Stifte 11, 12 und 14 der Steckdosen miteinander verbinden. Diese entsprechen den Takt-, Latch- und Datenpins des 74HC595s.

Schritt 15: Zweite 74HC595 hinzufügen: Teil 4

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Adern 10 bis 5V (Pin 16) und Pin 13 auf Masse (Pin 8). Pin 10 (MR) sollte hoch sein und Pin 13 (OE) sollte niedrig sein, um Daten an die Ausgangspins (Q0-Q7) zu senden.

Schritt 16: Kopfstifte

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Löten Sie die Kopfstifte an das Perfboard, so dass ein Arduino Uno auf sie aufschnappen kann. Achten Sie auf die ungeraden Pin Abstand zwischen den digitalen Pins 7 und 8, habe ich dieses Projekt so konzipiert, dass die Verbindung zu Pin 8-13 nicht notwendig ist, ist es wahrscheinlich am besten zu vermeiden, Header Pins für Arduino Pins 0-13, so dass die Dinge zusammenschnappen Leichter (siehe Bildhinweis).

Schritt 17: Verbinden Sie 74HC595 mit Arduino

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Verbinden Sie drei 74HC595-Datenpins mit den Arduino-Digitalstiften 5, 6 und 7. Schließen Sie Masse und 5V an Arduino-entsprechende Stromanschlüsse an.

Anschlussbelegung:

74HC595 / Arduino

(Pin 14) zum digitalen Pin 7
(Pin 12) mit dem digitalen Pin 6 verbinden
(Pin 11) mit dem digitalen Pin 5 verbinden

Schritt 18: Test-LEDs

Zuckerwürfel MIDI Controller

Laden Sie den Code unten auf den Arduino und testen Sie, ob LEDs richtig verdrahtet sind. Setzen Sie zwei 74HC595 in die leeren Steckdosen ein, stecken Sie die Platine in die Steckdose und verbinden Sie das Arduino mit dem Protoboard (Abb. 1). Sie sollten sehen, jede LED leuchtet ein zu einer Zeit, wird diese Schleife fortsetzen wiederholen für immer (siehe Video unten). Wenn dies nicht funktioniert, überprüfen Sie die Verbindungen in den vorherigen Schritten und überprüfen Sie alle Anschlüsse auf Durchgang. Fahren Sie nicht mit den nächsten Schritten fort, bis die LEDs leuchten.

Für weitere Informationen über die 74HC595 und shiftOut, siehe Bild 2, das Datenblatt und die Arduino Referenzseite .

  // LED TEST w / 74HC595 // von Amanda Ghassaei 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 2 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // Diese Firmware leuchtet jeweils eine nach dem anderen // pin-Verbindungen int latchPin = 6;  Int clockPin = 5;  Int dataPin = 7;  // Schleifen von Variablen byte i;  Byte j;  // Speichervariablenbyte dataToSend;  Void setup () {pinMode (latchPin, OUTPUT);  PinMode (clockPin, OUTPUT);  PinMode (dataPin, OUTPUT);  (J = 0; j <4; j ++) {dataToSend = (1 << (i + 4)) |  (15 & ~ (1 << j)); // Preprare-Byte zum Senden an 74HC595 // Setlatch Pin low, so dass sich die LEDs beim Senden der Bits digitalWrite (latchPin, LOW) nicht ändern;  // Verschiebe die Bits bei dataToSend shiftOut (dataPin, clockPin, LSBFIRST, dataToSend);  // Set-Latch-Pin hoch, so dass die LEDs leuchten digitalWrite (LatchPin, HIGH);  Verzögerung (500); // warten}}}

Schritt 19: Multiplexing mit Arduino und 74HC165

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Der 74HC595 kann nur paralleles Ausgangssignal ausgeben, deshalb habe ich einen 74HC165 verwendet, um den Zustand der Tasten über 4 Strombegrenzungswiderstände zu messen und diese Informationen an den Arduino zu senden. Mehr Infos über den Chip auf seiner finden Datenblatt . Beachten Sie in 2, dass die 595 Chips der vorherigen Schritte die Stromversorgung der Tasten bereitstellen (wie sie für die LEDs tun).

Der 74HC165 hat die folgenden Pins (der technische Name kann je nach Datenblatt etwas unterschiedlich sein):

Position / Gemeinsamer Name / Technischer Name

1 / Verriegelungsstift (aktiv niedrig) / PL (mit einer Linie oben)
2 / Taktgeber / CP
3 / Paralleleingang 4 / D4
4 / Paralleleingang 5 / D5
5 / Paralleleingang 6 / D6
6 / Paralleleingang 7 / D7
7 / inverser serieller Ausgang / Q7 (mit einer Linie oben)
8 / Masse / GND
9 / serieller Ausgang (Datenanschluß) / Q7
10 / serieller Eingang / DS
11 / Paralleleingang 0 / D0
12 / Paralleleingang 1 / D1
13 / Paralleleingang 2 / D2
14 / Paralleleingang 3 / D3
15 / Taktfreigabeeingang (aktiv low) / CE (mit einer Leitung oben)
16/5 Volt Versorgung / VCC

Die Verbindungen zwischen dem 74HC165 und der Sparkfun-Platine sind im Schema dargestellt und werden nachstehend wiederholt:

74HC165 -> Sparkfun Breakout Board

D0 auf SCHALTUNG GND 4
D1 auf SCHALTUNG GND 3
D2 auf SCHALTUNG GND 2
D3 auf SCHALTUNG GND 1

(Beachten Sie, dass die 165 Pins auch einen Anschluss über einen Widerstand zur Erde haben sollten - siehe schematisch)

Die restlichen Pins haben folgende Verbindungen zum Arduino (auch schematisch dargestellt):

74HC165 -> Arduino

Vcc zu Arduino 5V
GND zu Arduino GND
CE (Zeile oben) zu Arduino GND
DS auf Arduino GND
Q7 zum Digital Pin 2
Q7 (Leitung oben) - keine Verbindung
PL (Leitung oben) auf Digital Pin 4
CP an Digital Pin 3 anschließen

Schritt 20: 74HC165: Teil 1

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Löten Sie eine dritte 16-polige Buchse an die Protoboard, dies wird für die 74HC165 sein. Verbinden Sie 5V mit Pin 16 und Masse mit Pin 8.

Schritt 21: 74HC165: Teil 2 Pull-down-Widerstände

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Ich habe Widerstände in Serie mit den Tasten, um D0-D3 des 165-Chip auf Masse zu ziehen, während die Tasten nicht gedrückt werden - dies wird als "Pull-Down-Widerstand". Lösen Sie vier 10kOhm-Widerstände zu den Stiften neben den Kopfstiften (siehe Abb. 1). Schließen Sie vier Drähte von den Eingängen 74HC165 D0-3 (Stifte 11-14) an den Raum zwischen den Stiftsteckstiften und den 10k-Widerständen wie in Abb. 3 und im Schaltplan (siehe auch die gelben Drähte in Abb. 2) an. Ziehen Sie Lötmittel zwischen die Kopfstifte, die Drähte zum 165-Chip und die Widerstände, um sie anzuschließen (siehe Abb. 3). Verbinden Sie die andere Seite aller vier Widerstände miteinander und mit der Arduino-Erde (siehe Abb. 3 und das Schaltbild).

Wir werden die Stromversorgung der Tasten mit der gleichen Versorgung, dass die Stromversorgung der LEDs - die 595 Chips. Ziehen Sie Lötmittel zwischen die Kopfstifte, die mit dem LED-BLUE (1-4) auf der sparkfun-Platine verbunden sind, mit den Kopfstiften, die mit SWITCH (1-4) auf der sparkfun-Platine verbunden sind (siehe Hinweis auf den Abbildungen 3 und 5).

Schritt 22: 74HC165: Teil 3

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Verbinden Sie die Datenstifte des 74HC165 mit dem Arduino (braune Adern)
Pinverbindungen (auch schematisch dargestellt):

74HC165 / Arduino

PL (Leitung oben) (Stift 1) an den digitalen Pin D4 anschließen
CP (Pin 2) auf den digitalen Pin D3
Q7 (Pin 9) mit dem digitalen Pin D2 verbinden

Schritt 23: 74HC165: Teil 4

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Verbinden Sie die Masse mit den Pins 15 (CE mit der Linie oben) und 10 (DS) des 74HC165.

Schritt 24: Test-Schaltflächen

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Laden Sie den folgenden Code auf den Arduino. Wenn alles richtig verdrahtet ist, leuchtet jede Taste, während sie gedrückt wird. Wenn Sie feststellen, dass einige Tasten nicht so reagieren versuchen Sie die Reinigung der leitfähigen Ringe und die Spuren auf der Leiterplatte mit Wasser und Trocknen gründlich, dies löste einige Antwort Probleme für mich.

  // BUTTON TEST w / 74HC595 und 74HC165 // von Amanda Ghassaei 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 2 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // Diese Firmware bewirkt, dass die Tasten kurz gedrückt werden, während sie gedrückt werden.  // pin-Verbindungen int ledLatchPin = 6;  Int ledClockPin = 5;  Int ledDataPin = 7;  Int buttonLatchPin = 4;  Int buttonClockPin = 3;  Int buttonDataPin = 2;  // Schleifen von Variablen byte i;  Byte j;  Byte k;  // Speicher für LED-Zustände, 4 Byte Byte ledData [] = {0, 0, 0, 0};  // Speicher für Buttons, 4 Byte Byte ButtonCurrent [] = {0,0,0,0};  Byte-TasteLast [] = {0,0,0,0};  Byte buttonEvent [] = {0,0,0,0};  Byte buttonState [] = {0,0,0,0};  // Taste Entprellzähler - 16 Byte Byte-TasteDebounceCounter [4] [4];  Void setup () {DDRD = 0xFA; // Setzen der Pins D7-D4 als Ausgabe, D2 als Eingabe} // buttonCheck - prüft den Status einer Schaltfläche.  // Diese buttoncheck Funktion weitgehend von der monome 40h Firmware von Brian Crabtree und joe See Leere buttonCheck (Byte Reihe, Byte-Index) {if (((buttonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index) kopiert wird ) && // Wenn sich der aktuelle Zustand der physikalischen Schaltfläche von der (buttonCurrent [Zeile] ^ buttonState [Zeile]) & (1 << Index) unterscheidet) {// letzter physikalischer Schaltflächenzustand UND der aktuelle entprellte Zustand wenn (buttonCurrent [Row] & (1 << index)) {// Wenn der aktuelle Zustand des physikalischen Knopfes gedrückt ist ButtonEvent [Zeile] = 1 << Index;  // Warteschlange eines neuen Schaltflächenereignisses sofort buttonState [row] | = (1 << index);  // und setzen Sie den entprellten Zustand nach unten.  } Else {buttonDebounceCounter [row] [index] = 12;  } // sonst wurde die Schaltfläche zuvor gedrückt und nun wurde // freigegeben, so dass wir unseren Entprellzähler setzen.  } If ((ButtonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index)) == 0 && // Wenn der aktuelle Status der physikalischen Schaltfläche gleich ist (buttonCurrent [Zeile] ^ buttonState [ )} {// der letzte physikalische Knopfzustand, aber der aktuelle physikalische Schaltknopfstatus unterscheidet sich von dem aktuellen debounce // Zustand ... if (buttonDebounceCounter [row] [index]> 0 && - -buttonDebounceCounter [Zeile] [index] == 0) {// wenn das der Entprellzähler hat // auf 0 verringert worden ist (was bedeutet, die // die Schaltfläche wurde bis zur // kButtonUpDefaultDebounceCount // Iterationen /// Button [row ] = 1 << index; // Warteschlange für ein Schaltflächen-Zustandsänderungsereignis, wenn (buttonCurrent [row] & (1 << index)) {// und die Schaltflächen debounce state ausschalten buttonState [row] | = (1 << }}}}}}}}}}} Void shift () {for (i = 0; i <4; i ++) {buttonLast [i] = SchaltflächeCurrent [i ]; Byte dataToSend = (1 << (i + 4)) | (15 & ~ ledData [i]); // gesetzt Raststift niedrig, so dass die LEDs nicht ändern, während digital (ledLatchPin, LOW) in Bits zu senden;  // verschiebe die Bits von dataToSend shiftOut (ledDataPin, ledClockPin, LSBFIRST, dataToSend);  // Set-Latch-Pin hoch, so dass die LEDs erhalten neue Daten digitalWrite (ledLatchPin, HIGH);  // Sobald eine Zeile hoch gesetzt wurde, empfangen Sie die Daten von den Tasten // setzen Sie den Zwischenspeicher hoch digitalWrite (buttonLatchPin, HIGH);  // Verschieben im Daten-ButtonCurrent [i] = shiftIn (buttonDataPin, buttonClockPin, LSBFIRST) >> 3;  // latchpin niedrig digitalWrite (buttonLatchPin, LOW);  Für (k = 0, k <4; k ++) {buttonCheck (i, k);  }}} Void updateLEDs () {// aktualisiere die LEDs, um den hte-Zustand der Schaltflächen für (j = 0; j <4; j ++) wiederzugeben. [LedData [j] = buttonState [j];  }} Void loop () {shift ();  UpdateLEDs ();  aufrechtzuerhalten.

Schritt 25: Serielle Kommunikation

Zuckerwürfel MIDI Controller

An diesem Punkt des Projekts bekam ich ein wenig ungeduldig und wollte anfangen, einige Töne zu machen, also fügte ich einige Sachen der Firmware hinzu, um das Arduino zu senden und Informationen seriell zu empfangen. Ich habe den Code unten geschrieben. Ich habe einen Timer-Interrupt verwendet, um das Arduino auf eingehende serielle Nachrichten zu halten, können Sie ein wenig mehr darüber lesen, wie das hier funktioniert. (Wenn Sie diesen Code testen möchten, verwenden Sie die App beigefügt, die neuere Version der Beat Slicer App auf Github ist ein wenig anders).

  // BUTTON TEST w / 74HC595 und 74HC165 und serielle Kommunikation // von Amanda Ghassaei // Juni 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 2 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // Diese Firmware sendet Daten mit dem maxmsp-Patch "Beat slicer" hin und her. // pin-Verbindungen int ledLatchPin = 6;  Int ledClockPin = 5;  Int ledDataPin = 7;  Int buttonLatchPin = 4;  Int buttonClockPin = 3;  Int buttonDataPin = 2;  // Schleifen von Variablen byte i;  Byte j;  Byte k;  Byte ledByte;  // Speicher für LED-Zustände, 4 Byte Byte ledData [] = {0, 0, 0, 0};  // Speicher für Buttons, 4 Byte Byte ButtonCurrent [] = {0,0,0,0};  Byte-TasteLast [] = {0,0,0,0};  Byte buttonEvent [] = {0,0,0,0};  Byte buttonState [] = {0,0,0,0};  // Taste Entprellzähler - 16 Byte Byte-TasteDebounceCounter [4] [4];  Void setup () {DDRD = 0xFA; // Setzen der Pins D7-D4 als Ausgang, D2 als Eingang Serial.begin (57600);  (Cli); // stoppen Interrupts // gesetzt timer2 jeden 128us TCCR2A unterbrechen = 0; // setzt gesamte TCCR2A Register auf 0 TCCR2B = 0; // gleiche für TCCR2B TCNT2 = 0; // initialisieren Zählerwert auf 0 // Set Übereinstimmungsregister für 7.8khz Schritten OCR2A = 255 vergleichen; // = (16 * 10 ^ 6) / (7.812,5 * 8) - 1 (muss <256) // auf CTC-Modus TCCR2A drehen | = (1 << WGM21) ;  // Set CS11 Bit für 8 Prescaler TCCR2B | = (1 << CS11);  // Timer-Vergleichsunterbrechung aktivieren TIMSK2 | = (1 << OCIE2A);  Sei (); // erlaube Interrupts} // buttonCheck - prüft den Status einer bestimmten Schaltfläche.  // Diese buttoncheck Funktion weitgehend von der monome 40h Firmware von Brian Crabtree und joe See Leere buttonCheck (Byte Reihe, Byte-Index) {if (((buttonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index) kopiert wird ) && // Wenn sich der aktuelle Zustand der physikalischen Schaltfläche von der (buttonCurrent [Zeile] ^ buttonState [Zeile]) & (1 << Index) unterscheidet) {// letzter physikalischer Schaltflächenzustand UND der aktuelle entprellte Zustand wenn (buttonCurrent [Row] & (1 << index)) {// Wenn der aktuelle Zustand des physikalischen Knopfes gedrückt ist ButtonEvent [Zeile] = 1 << Index;  // Warteschlange eines neuen Schaltflächenereignisses sofort buttonState [row] | = (1 << index);  // und setzen Sie den entprellten Zustand nach unten.  } Else {buttonDebounceCounter [row] [index] = 12;  } // sonst wurde die Schaltfläche zuvor gedrückt und nun wurde // freigegeben, so dass wir unseren Entprellzähler setzen.  } If ((ButtonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index)) == 0 && // Wenn der aktuelle Status der physikalischen Schaltfläche gleich ist (buttonCurrent [Zeile] ^ buttonState [ )} {// der letzte physikalische Knopfzustand, aber der aktuelle physikalische Schaltknopfstatus unterscheidet sich von dem aktuellen debounce // Zustand ... if (buttonDebounceCounter [row] [index]> 0 && - -buttonDebounceCounter [Zeile] [index] == 0) {// wenn das der Entprellzähler hat // auf 0 verringert worden ist (was bedeutet, die // die Schaltfläche wurde bis zur // kButtonUpDefaultDebounceCount // Iterationen /// Button [row ] = 1 << index; // Warteschlange für ein Schaltflächen-Zustandsänderungsereignis, wenn (buttonCurrent [row] & (1 << index)) {// und die Schaltflächen debounce state ausschalten buttonState [row] | = (1 << }}}}}}}}}}} Void shift () {for (i = 0; i <4; i ++) {buttonLast [i] = SchaltflächeCurrent [i ]; Byte dataToSend = (1 << (i + 4)) | (15 & ~ ledData [i]); // gesetzt Raststift niedrig, so dass die LEDs nicht ändern, während digital (ledLatchPin, LOW) in Bits zu senden;  // verschiebe die Bits von dataToSend shiftOut (ledDataPin, ledClockPin, LSBFIRST, dataToSend);  // Set-Latch-Pin hoch, so dass die LEDs erhalten neue Daten digitalWrite (ledLatchPin, HIGH);  // Sobald eine Zeile hoch gesetzt wurde, empfangen Sie die Daten von den Tasten // setzen Sie den Zwischenspeicher hoch digitalWrite (buttonLatchPin, HIGH);  // Verschieben im Daten-ButtonCurrent [i] = shiftIn (buttonDataPin, buttonClockPin, LSBFIRST) >> 3;  // latchpin niedrig digitalWrite (buttonLatchPin, LOW);  Für (k = 0, k <4; k ++) {buttonCheck (i, k);  If (buttonEvent [i] <> 1) & 3;  Byte ledx = (ledByte >> 3) & 3;  If (ledstate) {ledData [ledy] | = 8 >> ledx;  } Else {ledData [ledy] & = ~ (8 >> ledx);  }} // endet wenn serial verfügbar} // end do while (Serial.available ()> 8);  } Void Schleife () {shift (); // aktualisiert LEDs und empfängt Daten von Schaltflächen}

Ich habe diese seriellen Daten an eine Audio-Verarbeitung-Anwendung schrieb ich in MaxMSP. Sie können unter ( so genannte Beat Slicer) diese Anwendung herunterladen und öffnen Sie sie mit MaxMSP oder MaxRuntime (kostenlose Version) hier . Ich bin mit Max 5, ich nehme an, es wird auf Max 6 arbeiten. Sie werden aufgefordert, eine Audiodatei (wav, mp3, aiff) auszuwählen. Dann können Sie diese Audiodatei mit dem Button-Raster wie im folgenden Video gezeigt manipulieren:

Schritt 26: Batterie

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Eines meiner Hauptziele für dieses Projekt war, etwas tragbares zu machen, also ist der folgende Schritt, tragbare Energie hinzuzufügen. Ich benutzte eine aufladbare Li-Po Batterie, um Abfall zu minimieren und genug Energie für Stunden des Gebrauches zur Verfügung zu stellen. Darüber hinaus wollte ich eine Li-Po-Batterie, die nur zwei Leitungen herauskam, so dass ich es mit einem normalen Fass-Stecker aufladen konnte.

Hier sind die Teile für das Power Setup, entnommen aus der Stückliste auf der ersten Seite:

Li-Ion 7.4V Tenergy 2200mAh Akku - Modul mit PCB Amazon
Tenergy Universal Smart - Ladegerät für Li-Ion / Polymer - Akku (3,7V-14,8V 1-4 Zellen) Amazon
Größe N Schalttafeleinbau Koaxial-Netz Jack Radio Shack 274-1576
Größe N Koaxial-Netzstecker - Radio Shack 274-1573
SPST Kippschalter Radio Shack 275-634

Die beiden Kabel von der Batterie abschneiden und abisolieren (nicht kurzschließen). Stellen Sie die Verbindung zwischen der Batterie, dem Stecker, dem Schalter und dem Arduino gemäß dem Schema her. Ich mag immer Boden auf den äußeren Teil des Koaxial-Buchse, aber Sie können es aber wie Sie (nur sicherstellen, dass Ihre Verkabelung des Ladegeräts ist konsistent!).

Die beiden Kabel vom Ladegerät abschneiden und abisolieren. Lösen Sie den n-Buchsenstecker mit diesen Anschlussdrähten, wie im Bild oben gezeigt. Vergewissern Sie sich, dass die Polarität des Toners des Ladegeräts mit der Polarität der Buchse übereinstimmt. Auch hier habe ich gewählt, um Masse an den äußeren Teil der Koaxial-Buchse / Stecker in den Bildern oben.

Jetzt funktioniert der Schalter als Ein / Aus-Schalter zum Arduino und der Akku kann über den Fassstecker geladen werden. Aufladen Li-Po-Batterien ist eine etwas komplizierte Prozedur, die Ausgleich der Zellen der Batterie, bin ich nicht sicher, wenn das Arduino in der Arduino parallel mit der Batterie während des Ladevorgangs wird mit diesem Prozess stören. Nur um sicher zu sein, bin ich immer sicher, den Netzschalter auszuschalten während des Ladevorgangs, wodurch das Arduino aus dem Kreislauf.

Beachten Sie bei der Verwendung von Li-Po-Batterien Vorsicht, bei unsachgemäßer Verwendung besteht Brandgefahr. Achten Sie darauf, dass Sie den Akku nicht kurzschließen und verwenden Sie immer das richtige Ladegerät.

Schritt 27: Midi Out

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Dieses Instrument ist in erster Linie ein MIDI-Gerät, so dass wir ein MIDI-Out aufbauen müssen. Es gibt zwei Möglichkeiten, dies zu tun (und im Laufe dieses Projekts habe ich eins und dann auf die andere geschaltet):

Ausgang MIDI über einen 5-poligen DIN-Stecker (siehe Abb. 1)
Ausgang MIDI über USB (das ist, was ich schließlich auf)

Jede dieser Optionen ist in Ordnung, wählte ich USB, weil ich nicht zu haben, um ein spezielles MIDI zu USB-Kabel die ganze Zeit tragen. Wenn Sie eine Menge von Synthesizern, die eine 5-polige MIDI-Eingang erhalten haben, könnte es bequemer für Sie die 5-polige Buchse verwenden (es ist auch ein wenig einfacher). Ich gehe durch beide Prozesse unten:

5-poliger Anschluss:

Löten Sie einen 220ohm Widerstand an Pin 4 der MIDI-Buchse und verbinden Sie mit Arduino 5V. Löten Sie einen Draht zwischen MIDI Pin 2 und Masse. Löten Sie einen Draht zwischen MIDI Pin 5 und Digital Pin 1 (TX).

MIDI über USB:

MIDI über USB ist ein wenig kompliziert. Im Idealfall wäre es möglich, MIDI aus dem USB-Port zu schicken, der bereits mit dem Arduino verbunden ist, aber dies stellt sich heraus, mehr Mühe zu sein, als es meiner Meinung nach wert ist. Sie können ein wenig über verschiedene Lösungen lesen Sie hier . Stattdessen fand ich ein wirklich großes Tutorial , das erklärt , wie Sie eine auseinander nehmen billige MIDI zum USB - Kabel , löten neue Verbindungen zu ihr und stecken Sie ihn in Ihrem Projekt - Gehäuse mit Arduino, einen sekundären MIDI-USB - Ausgang zu schaffen. Der Prozeß ist auf dem Shiftmore-Blog wirklich gut erklärt, aber das MIDI-zu-USB-Kabel, das ich von amazon erhielt, war ein wenig anders, deshalb beschreibe ich den Prozess hier wieder.

Entfernen Sie das Kunststoffgehäuse vom MIDI zu USB-Kabel und lösen Sie die Anschlüsse an den Kabeln an beiden Enden (Abb. 8). Die USB - Anschlüsse sind gezeigt hier , um die folgenden Verbindungen herzustellen:

5V bis +
DP zu D +
DM bis D-
VSS zu -

Wie Sie in den Abbildungen 9 und 10 sehen können, verwendete ich ein Stück des Perfbretts, um die Anschlüsse zur USB-Buchse herzustellen. Nehmen Sie auf der anderen Seite des MIDI-to-USB-Boards folgende Verbindungen zum Ardunio:

IN- auf Digital Pin 1 (TX)
GND zu Arduino Boden

Ausprobieren:

Laden Sie die Firmware unten auf das Arduino (auch in der angehängten Datei), wird es die Tastatur in ein einfaches MIDI-Gerät: Durch Drücken jeder der Tasten wird die Taste zu leuchten und eine MIDI-Note auslösen. Trennen Sie die serielle Verbindung des Arduino und schließen Sie den MIDI-Ausgang an ein MIDI-Instrument oder Ihren Computer an, um die MIDI-Noten zu hören. Sie sollten auch sehen, die gelbe MIDI IN-Licht auf der MIDI to USB-Board einschalten mit jeder Note. Weitere Informationen zur Programmierung des Arduino zum Senden von MIDI finden Sie hier.

  // basic midi test // von Amanda Ghassaei 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 2 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // Diese Firmware bewirkt, dass die Tasten kurz gedrückt werden, während sie gedrückt werden.  // pin-Verbindungen int ledLatchPin = 6;  Int ledClockPin = 5;  Int ledDataPin = 7;  Int buttonLatchPin = 4;  Int buttonClockPin = 3;  Int buttonDataPin = 2;  // Schleifen von Variablen byte i;  Byte j;  Byte k;  // Speicher für LED-Zustände, 4 Byte Byte ledData [] = {0, 0, 0, 0};  // Speicher für Buttons, 4 Byte Byte ButtonCurrent [] = {0,0,0,0};  Byte-TasteLast [] = {0,0,0,0};  Byte buttonEvent [] = {0,0,0,0};  Byte buttonState [] = {0,0,0,0};  // Taste Entprellzähler - 16 Byte Byte-TasteDebounceCounter [4] [4];  // MIDI-Variablen int velocity = 100;  Int noteON = 144;  Int MIDIoffset = 60;  Void setup () {DDRD = 0xFA; // Setzen der Pins D7-D4 als Ausgang, D2 als Eingang Serial.begin (31250); // Midi-Baudrate einstellen} // buttonCheck - prüft den Zustand einer bestimmten Taste.  // Diese buttoncheck Funktion weitgehend von der monome 40h Firmware von Brian Crabtree und joe See Leere buttonCheck (Byte Reihe, Byte-Index) {if (((buttonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index) kopiert wird ) && // Wenn sich der aktuelle Zustand der physikalischen Schaltfläche von der (buttonCurrent [Zeile] ^ buttonState [Zeile]) & (1 << Index) unterscheidet) {// letzter physikalischer Schaltflächenzustand UND der aktuelle entprellte Zustand wenn (buttonCurrent [Row] & (1 << index)) {// Wenn der aktuelle Zustand des physikalischen Knopfes gedrückt ist ButtonEvent [Zeile] = 1 << Index;  // Warteschlange eines neuen Schaltflächenereignisses sofort buttonState [row] | = (1 << index);  // und setzen Sie den entprellten Zustand nach unten.  } Else {buttonDebounceCounter [row] [index] = 12;  } // sonst wurde die Schaltfläche zuvor gedrückt und nun wurde // freigegeben, so dass wir unseren Entprellzähler setzen.  } If ((ButtonCurrent [Zeile] ^ buttonLast [Zeile]) & (1 << Index)) == 0 && // Wenn der aktuelle Status der physikalischen Schaltfläche gleich ist (buttonCurrent [Zeile] ^ buttonState [ )} {// der letzte physikalische Knopfzustand, aber der aktuelle physikalische Schaltknopfstatus unterscheidet sich von dem aktuellen debounce // Zustand ... if (buttonDebounceCounter [row] [index]> 0 && - -buttonDebounceCounter [Zeile] [index] == 0) {// wenn das der Entprellzähler hat // auf 0 verringert worden ist (was bedeutet, die // die Schaltfläche wurde bis zur // kButtonUpDefaultDebounceCount // Iterationen /// Button [row ] = 1 << index; // Warteschlange für ein Schaltflächen-Zustandsänderungsereignis, wenn (buttonCurrent [row] & (1 << index)) {// und die Schaltflächen debounce state ausschalten buttonState [row] | = (1 << }}}}}}}}}}} Void shift () {for (i = 0; i <4; i ++) {buttonLast [i] = SchaltflächeCurrent [i ]; Byte dataToSend = (1 << (i + 4)) | (15 & ~ ledData [i]); // gesetzt Raststift niedrig, so dass die LEDs nicht ändern, während digital (ledLatchPin, LOW) in Bits zu senden;  // verschiebe die Bits von dataToSend shiftOut (ledDataPin, ledClockPin, LSBFIRST, dataToSend);  // Set-Latch-Pin hoch, so dass die LEDs erhalten neue Daten digitalWrite (ledLatchPin, HIGH);  // Sobald eine Zeile hoch gesetzt wurde, empfangen Sie die Daten von den Tasten // setzen Sie den Zwischenspeicher hoch digitalWrite (buttonLatchPin, HIGH);  // Verschieben im Daten-ButtonCurrent [i] = shiftIn (buttonDataPin, buttonClockPin, LSBFIRST) >> 3;  // latchpin niedrig digitalWrite (buttonLatchPin, LOW);  Für (k = 0, k <4; k ++) {buttonCheck (i, k);  }}} Void updateLEDs () {// aktualisiere die LEDs, um den hte-Zustand der Schaltflächen für (j = 0; j <4; j ++) wiederzugeben. [LedData [j] = buttonState [j];  }} Void MIDI-Meldung (int-Befehl, int MIDInote, int MIDIvelocity) {// Sende eine MIDI-Nachricht Serial.write (Befehl); .write (MIDIvelocity); // Geschwindigkeitsdaten senden} void sendMIDI () {für (Byte a = 0; a <4; a ++) {für (Byte b = 0; b <4; b ++) {if (buttonEvent [a (1 << b)) {MIDI-Nachricht (noteON, (MIDIoffset + A * 5 + b), 100);  } Else {MIDImessage (noteON, (MIDIoffset + a * 5 + b), 0);  }}}}} Void loop () {shift ();  UpdateLEDs ();  SendMIDI ();  aufrechtzuerhalten.

Schritt 28: Accerometer / Gyro

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Ich befestigte ein 2-Achsen-Gyroskop und 3-Achsen-Beschleunigungsmesser auf dieses Projekt, so dass ich einige interessante Kontrolle für das Gerät hinzufügen konnte. Das 5-Grad Freiheits-Board von Sparkfun gibt Daten aus dem Kreisel und dem Beschleunigungsmesser als analoge Spannungen aus. Ich schickte diese auf Analog-Pin 0-4. Sie können feststellen, dass der Gyro hat vier Ausgänge - ich entschied mich für die Verwendung der X / Y4.5 out statt der X / YRate aus, weil die 4.5 hat eine höhere Auflösung. Ich schrieb mehr über dieses Brett und erklärte einige des Codes, den ich verwendete, um es oben zu erhalten und hier zu laufen.

Lötstifte auf der Kreisel- / Beschleunigungsmesserkarte. Löten Sie auf dem Perfboard, achten Sie darauf, Platz für das Arduino zu lassen, um auf die Oberseite zu passen. Folgende Steckverbindungen sind vorzunehmen:

RAW - Arduino 5V
GND- Arduino-Masse
X4.5-A2
Y4,5-A0
XAcc-A4
YAcc-A3
ZAcc-A1 (ich landete trennen dies später, um einen analogen Eingang für ein zweites Potentiometer freizugeben)

Laden Sie den folgenden Code hoch und überprüfen Sie den seriellen Monitor, um sicherzustellen, dass der Accelerometer / Gyro richtig funktioniert. Wenn die Platine still und parallel zum Boden liegt, sollten die Werte von xGyro, yGyro, xAcc und yAcc alle um 0 liegen. ZAcc ​​sollte einen Wert um -66 ausgeben (siehe Abb. 8). Bewegen Sie die Karte um und sehen Sie, wie sich die Werte ändern. In Abbildung 9 sehen Sie, wie die Drehung um die x-Achse xGyro und y und zAcc, aber nicht yGyro oder xAcc ändert.

  // Analog Accerometer w Serial // von Amanda Ghassaei //instructables.com/amandaghassaei // August 2012 / * * Dieses Programm ist freie Software;  Können Sie sie unter den Bedingungen der GNU General Public License, wie sie von der Free Software Foundation veröffentlicht wird, weiterverteilen und / oder ändern.  Entweder Version 3 der Lizenz oder * (nach Ihrer Wahl) jede spätere Version.  * * / // setup beschleunigungsvariablen int xAcc;  Int yAcc;  Int zAcc;  // setup gyre-Variablen int xGyro;  Int yGyro;  Int zero = 282; // das war der Nullpunktwert für meinen Beschleunigungssensor, dein Board könnte etwas anders sein.  Void setup () {Serial.begin (9600); // setze serielle} void Schleife () {// Lesewerte xGyro = analogRead (A2);  YGyro = analogRead (A0);  XAcc = analogRead (A4);  YAcc = analogRead (A3);  ZAcc = analogRead (A1);  // Druckwerte Serial.print ( "xGyro");  Serial.println (317-xGyro);  Serial.print ( "yGyro");  Serial.println (183-yGyro);  Serial.print ( "xAcc");  Serial.println (zero-xAcc);  Serial.print ( "yAcc");  Serial.println (null-yAcc);  Serial.print ( "zAcc");  Serial.println (null-zAcc);  Serial.println ( "");  Verzögerung (500); // wait}

Sobald Sie die Potentiometer hinzugefügt haben, können Sie den Beschleunigungsmesser / Gyro für die Gestensteuerung verwenden, wie im folgenden Video gezeigt:

Schritt 29: Töpfe

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Schließen Sie einen schwarzen Draht an die linke Leitung eines 10K linearen Taper-Potentiometers an. Verbinden Sie einen grünen Draht mit der mittleren Leitung. Schließen Sie einen roten Draht an die verbleibende Leitung an. Wiederholen Sie dies für das andere Potentiometer. Schließen Sie das andere Ende der roten Adern an 5V, die schwarzen Adern an Erde und die grünen Adern an Analog in an

Verwenden Sie eine Zange, um den Stift auf der Seite der Töpfe zu entfernen, so dass Sie es einfacher in Ihrem Projektgehäuse montieren können.

Schritt 30: Gehäuse

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Ich habe mir eine Idee von dem ehemaligen Künstler in der Residenz Mads Hobye für mein Gehege geliehen. Mads gründet diese eleganten Boxen im Containerlager und verwendet sie Projekt - Gehäuse für die verschiedenen Musikinstrumente zu machen , die er während seines Aufenthalts gebaut. Diese Kästen sind besonders bequem, weil sie eine Fase um die Oberseite haben, die Ihnen erlaubt, eine 5mm Acrylfrontplatte leicht anzubringen.

Ich bestieg entweder alle Komponenten in der Box mit Epoxy ( Amazon ) oder weniger dauerhafte Bindung, benutzte ich einen Schaumstoffkern Klebeband ( Amazon ).

Ich habe einen Laser-Cutter zu schneiden zwei USB-Ports (eine für die Arduino und eine für MIDI-Out) in der Unterseite des Gehäuses. Dann habe ich einen Bohrer, um Löcher für zwei Töpfe, einen Netzschalter und eine Ladebuchse machen. Die Vektordateien sind beigefügt (scTopLaser, scBottomLaser).

I Laserschnitt 2,5cm Abstandshalter von 3mm Schicht und epoxied sie in das Gehäuse. I Laser eine Trägerplatte (SCsupport.pdf) für die Schaltflächen-Leiterplatte aus 0,25 "-Lage geschnitten und mit kleinen Holzschrauben an die Abstandshalter geschraubt.

Ursprünglich schneiden I Laser eine Frontplatte aus transluzent weiß 5mm Acryl, so dass es passen würde in die Holz-Box schnappen. Später, I Wasserstrahl ein Aluminium aus Platte aus 3mm Aluminiumblech. Ich befestigte die Aluminium-Frontplatte an der Platine Backing Platte mit kleinen, Senkschrauben Maschinenschrauben. Ich bohrte vier Löcher in den Laser schneiden pcb backer und epoxied einige kleine Muttern für die Schrauben, um zu klemmen. Die Vektordatei ist beigefügt (SCface.pdf).

Schritt 31: Letzte Firmware

Für die letzte Firmware habe ich den gesamten Code extrahiert, die die Tasten steuert und LEDs in eine Bibliothek es ordentlich zu machen, all dies in einer Klasse genannt Sugarcube . I was inspired by the work I've been doing on the Instructables iOS app, and wrote the event handling pieces of the code so that they work in a similar way that an iPhone deals with touch and other gestural events. Basically I created a set of methods that each app can subscribe to, things like "deviceWasShaken" or "buttonPressed". When the SugarCube class detects one of these events, it tells the current app to execute the corresponding method. If you're interested in seeing an example of this structure in action, check out SimpleMIDIKeyboard.cpp , it shows how few lines of code are needed to wire up all the button and analog controls to MIDI outputs. I hope to eventually write out a little more complete documentation for how to write your own apps based on this framework, please let me know if there is interest. This is by far my biggest piece of C++ code, and I am by no means an expert in C++, I'd love to hear an expert's thoughts on how I did!

Step for running the code:

Download the zip file from github

entpacken

rename the folder to "SugarCubeLibraryFiles"

open the file SugarCubeLibraryFiles.ino in Arduino

connect your Arduino and upload

The controller boots up into several different apps. In the main file , you'll see a section with case 0, case 1, case 2.... etc. The buttons on the controller are named 0-15 starting from the top left corner, going left to right. If you press button 0 (top left) after turning the controller on, you will boot into Step Sequencer mode, holding down button 1 (the one to the right of button 0) will boot into Flin , and so on.

Step 32: Future Work

This project has the potential to be expanded upon quite a bit. Unfortunately, I just don't have the time to invest in exploring all the possibilities, but here's some ideas I had for things to look into:

More apps: The current implementation of this device allows you to boot into 16 different applications, but I've only written seven so far. There's a ton of great ideas over on the monome website for grid based controllers, it'd be great to see some of that translated into Arduino.

Gyro Control: As I mentioned earlier, I threw an x/y gyroscope in the controller, but I've yet to write an app that actually uses it. I'd love to hear if someone has an idea for how this could work with MIDI.

Wireless : When I started this project, my major design objectives were portability and plug and play ease of use. I wanted to try to break away from the model of the electronic controller that necessitates a computer to run, in an effort to bring electronic music out of the traditional studio environment. In keeping with that idea, I'd like to eventually get this controller to wirelessly send MIDI to my phone to make it totally portable. I have one of these bluetooth boards from Red Bear Labs , and I think there might be some way to send the data to my phone, translate it into CoreMIDI and run it though a MIDI synth, but I just haven't explored the idea enough yet. If anyone has any insight, I'd love to hear your thoughts.

Step 33: Appendix: Cut PCB for Control Buttons

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Originally, I planned to have four extra "control" buttons on the side of the controller that I was going to use in various applications. I started wiring it up, but eventually scrapped it. I haven't written any code for these buttons, and they are in no way integrated into the apps I've written, but I figured I'd still include the images that I took during that process in this Instructable in case it's useful to anyone.

Cut the 2x2 sparkfun pcb as shown in the pictures above. Solder white LEDs and diodes on the pcb as in steps 2 and 3.

Step 34: Appendix: Control Buttons Wiring Part 1: PCB

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Cut a piece of ribbon cable and solder 8 wires to the sparkfun PCB holes labelled "switch gnd" and "led gnd". Solder four more wires to the holes labelled "switch" and "blue." See the images for more info.

On one half of the PCB (the one labelled "green" and "blue") you will have to rewire some of the traces that were broken when the PCB was cut. Both connections to the positive switch rail will need to be connected to each other and then connected to the "green" led trace as shown in fig 4. I did this by removing one strand of a piece of stranded wire and poking it through the vias on the PCB. Use a dab of solder to secure the electrical connection between the copper strand and the PCB (fig 7). You will also have to solder a wire between the two "blue" positive rails (also shown in fig 4). Once this is done, test for continuity and cover the exposed copper with electrical tape to prevent short circuits (fig 6).

On the other half of the PCB, use a jumper wire to connect the "red" and "blue" sockets of one of the LEDs together (see fig 7). This will connect the anode of your white LEDs to the ribbon cable.

Step 35: Appendix: Control Buttons Wiring Part 2: Socket

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Clamp a 16 pin socket onto the ribbon cable as shown in fig 1. Solder two rows of male header pins to the protoboard so that the control buttons fit onto the board as shown in fig 3. Trim any excess ribbon cable.

Step 36: Appendix: Control Buttons Wiring Part 3: Header Pins

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Solder 3 more male header pins to snap to digital pins 11-13. Since the spacing between Arduino digital pins 0-7 and pin 8-13, I had to drill holes in my perfboard and scrape off some of the copper traces. See the images above for more information.

Step 37: Appendix: Control Buttons Wiring Part 4: Connections to LEDs

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Solder four 68ohm resistors to the pins which connect to the LED cathodes. Connect the other end of these resistors to pins 4-7 of the 74HC595 with jumper wires (yellow).

We'll be using pin 11 of the Arduino to supply positive voltage to the LEDs, but one Arduino pin cannot source enough current to drive the LEDs by itself. I used a 222 NPN transistor in an emitter-follower configuration to boost the power of pin 11's signal. Connect pin 11 to the base (middle pin) of the transistor. Connect the collector to the Arduino's 5V supply and the emitter to the header pins which connect to the LED anodes (fig 5).

Step 38: Appendix: Control Buttons Wiring Part 5: Connections to Buttons

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Zuckerwürfel MIDI Controller

Solder a jumper wire between pin 13 of the Arduino and the header pins which attach to the button anodes.

On the reverse side of the perfboard I soldered four jumper wires from the button cathode pins to 10k resistors connected to ground (fig 4). I did this to save space on my PCB so that it would fit in an enclosure better. I also soldered four jumper wires from the non grounded side of the 10k resistors to 165 pins 3-6.

Related Reading