Kravox! Draadloos, bewegings- en aanraakgevoelig instrument
Componenten en benodigdheden
| × | 2 | ||||
| × | 2 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 5 | ||||
| × | 2 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 5 | ||||
| × | 3 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Benodigde gereedschappen en machines
| ||||
| ||||
| ||||
| ||||
| ||||
| ||||
| ||||
| ||||
|
Apps en online services
| ||||
|
Over dit project
Een nieuwe Soort instrument
Kravox is gemaakt als onderdeel van een onderzoeksproject aan de Universiteit van Lund (Zweden) met als doel digitale muziekinstrumentcontrollers het gevoel te geven van conventionele, mechanische instrumenten.
Nu zal Kravox voor iedereen toegankelijk worden gemaakt en dienen als een muzikaal experimenteerplatform, dus deze gedetailleerde tutorial is gemaakt om zoveel mogelijk mensen in staat te stellen dit opwindende nieuwe instrument te gebruiken!
Hoe speel je Kravox
Kravox spelen is net zo eenvoudig. Stel je voor dat je aan het spelen bent met een gewoon object zoals een bezem en de manier waarop je het aanraakt en door de ruimte beweegt, bepaalt hoe geluid wordt gegenereerd. Zie en hoor hoe je Kravox speelt in deze video.
Wat is Kravox?
Kravox is een platformonafhankelijk, open source digitaal muziekinstrument dat uit drie componenten bestaat:controller/s, ontvanger en software.
Controller(s)
Er kunnen maximaal drie draadloze controller-apparaten worden aangesloten. Elke controller verwerkt oriëntatie- en versnellingsgegevens van een digitale MPU-6050-gyroscoop en aanraakgegevens van twee MPR121-aanraaksensorkaarten die zijn aangesloten op een Arduino Nano. De controller(s) verzenden de gegevens naar een ontvangerapparaat via nRF24L01 radiotransceiver(s).
Als er meer dan één controller wordt gebruikt, moeten aan de tweede en derde controller individuele adressen worden toegewezen. Voor meer informatie over het toewijzen van het adres, zie de informatie in het gedeelte VERKLARINGEN / NRF24L01 van de controllercode.
Ontvanger
De ontvanger geeft de gegevens die van de controller(s) zijn ontvangen via USB door aan een aangesloten computer, samen met gegevens die zijn verzameld van verschillende potentiometers. De meegeleverde apparaatcode van de ontvanger maakt communicatie met maximaal drie controllers mogelijk, maar werkt ook met slechts één of twee zonder aanpassingen.
Software
De gegevens van de ontvanger worden verwerkt in een programma geschreven in Pure Data Vanilla dat geluid uitvoert.
Wat we gaan bouwen in deze handleiding – Stapsgewijze handleiding
Het mooie van Kravox is dat de vorm, hoe het klinkt en hoe het wordt gespeeld kan worden aangepast. Dit gaf me de mogelijkheid om een gemakkelijk te repliceren Kravox-versie voor deze tutorial te ontwerpen.
(Voor het geval je nieuwsgierig bent:op mijn youtube-kanaal kun je ook een timelapse vinden van hoe ik de grotere versie van Kravox heb gemaakt)
Zowel de video hierboven als deze tutorial laten je alle noodzakelijke stappen zien voor het bouwen van volledig functionele controllers en een ontvanger van gemakkelijk verkrijgbare elektrische componenten en karton.
Deel 1 – Componenten en gereedschappen verzamelen
Je hebt de volgende componenten nodig om een Kravox controller + ontvangerstation te bouwen:
{1x} 50*24-gaats (minimale grootte) Perfboard, {5x} 40-pins vrouwelijke headers, {5x} 40-pins mannelijke headers, {5x} 10 kilo-Ohm potentiometers en knoppen daarvoor, {3x} Blauwe standaard 5 mm LED's, {3x} 150 Ohm weerstanden, {2x} 10 micro-farad condensatoren, {2x} 100 nano-farad condensatoren, {2x} NRF24L01 radiotransceivers, {2x} Arduino nano's, {3x} 220 Ohm weerstanden, {2x} MPR121 aanraaksensorkaarten, {1x} GY-521 MPU 6050 digitale gyroscoop, {2x} USB-A naar USB-C kabels, {1x} 4 meter (minimaal) 1 cm brede kopertape, {1x} powerbank, {2x } 7 meter (minimaal) draad in vele kleuren en optioneel {1x} 0,2 meter ø=3mm krimpkous.
Bovendien heb je gereedschap nodig om de componenten in elkaar te zetten:
en later ook wat lege kartonnen dozen of iets dergelijks:
En lijm, een lijmpistool, plakband, een of meer klemmen en elastiekjes om de behuizingen te maken:
Deel 2 – Het controllerbord maken
Vervolgens zal ik uitleggen hoe je de controller-elektronica stap voor stap kunt maken uit de hierboven genoemde onderdelen
Als je twijfelt waar je een kabel moet solderen, kun je altijd teruggaan naar het onderstaande schakelschema en controleren of de componenten goed worden aangesloten, zodra je de arduino- en sensorboards op de printplaat hebt bevestigd die we aan het maken zijn.
2.1
De eerste stap is om de perfboard en vrouwelijke pin-headers op maat te knippen en ze samen te voegen met een kleine en een grote condensator die de betrouwbaarheid van de radio-transceiver helpen vergroten:
Snijd de perfboard met een mes:
Snijd de vrouwelijke pin-headers met een ijzerzaag (ik leg ze op een boek om ze waterpas te stellen vanaf het tafelblad):
Soldeer in de onderdelen. U kunt elk pin-paar van de twee lange vrouwelijke headers die naast elkaar zitten al aansluiten. Voor de overige headers is het voldoende om ze eenvoudig met een beetje soldeer te bevestigen – bij voorkeur de pinnen die volgens het schakelschema later toch geen verbinding hebben. Let bij het insolderen van de condensatoren op de polariteit van de elektrolytische 10 micro-farad condensator (de grotere van de twee). De ene kant heeft een streep en meestal ook een korter been. Die kant moet met aarde worden verbonden. De kleinere 100nano-farad-condensator is niet gepolariseerd en kan op beide manieren worden gesoldeerd.
Het resultaat zou er ongeveer zo uit moeten zien:
2.2
De tweede stap is het solderen van de twee LED's met hun stroombegrenzende weerstanden.
Let op de polariteit van de LED:Een kant ervan is afgeplat en zal meestal ook een kortere poot hebben. Die kant moet in stap 2.3 met aarde worden verbonden. De andere kant zullen we nu met een cyaankleurige kabel verbinden met de aansluiting waar Arduino-pin D3 later zal zitten wanneer deze is aangesloten:
2.3
Vervolgens voegen we alle rode en blauwe voedingskabels toe. Rood is voor 3,3 volt en blauw voor aarde (GND)
Het resultaat zou er ongeveer zo uit moeten zien:
2.4
In de vierde stap wordt het al een beetje druk op het bord. De drie sensorboards communiceren via het I2C-protocol (inter-integrated circuit). Dat betekent dat ze allemaal op dezelfde twee Arduino-pinnen kunnen worden aangesloten, dus we solderen gele en groene kabels tussen hen en Arduino-pinnen A4 en A5. We voegen ook een witte kabel toe voor de interrupt-pinverbinding van de gyroscoop.
Als dit is gebeurd, ziet het bord er als volgt uit:
2,5
De radiotransceiver communiceert in plaats daarvan via het SPI-protocol (seriële perifere interface) waarvoor meer verbindingen nodig zijn dan I2C, dus we voegen zwarte, grijze, bruine, paarse en oranje kabels toe:
Dit is wat je krijgt:
2.6
Nu is het tijd om de componenten voor te bereiden.
Afgezien van het solderen op de mannelijke pin-headers als ze niet voorgesoldeerd zijn, let vooral op de aanraaksensorborden! De goedkope modellen uit China hebben hun adrespin hardwired naar aarde zonder een pulldown-weerstand ertussen, dus je moet deze verbinding aan de onderkant van het bord fysiek doorsnijden met een mes. Knip tussen de twee soldeerpads naast waar ADD is geschreven. Ik raad aan om een multimeter te gebruiken om achteraf te controleren of er geen verbinding meer is tussen de pads:
Wanneer alle componenten hun pin-headers hebben gesoldeerd en de aanraaksensorkaarten zijn voorbereid, kunt u de Arduino Nano, de gyroscoop, de twee aanraaksensorkaarten en de radiozendontvanger in de controllerkaart steken:
De (misschien) voltooide controllerkaart:
2,7
Na dubbel te hebben gecontroleerd of alles correct is aangesloten, is de volgende stap het uploaden van de verstrekte Kravox-Controller-code (zie bijlagen) naar de Arduino nano, maar voordat u dit kunt doen, moet u bibliotheken installeren voor de gyroscoop, de aanraaksensorborden en de radiozendontvanger. Als Arduino-bibliotheken nieuw voor je zijn, lees dan hier hoe je ze kunt installeren.
- De MPU-6050-gyroscoop vereist de bibliotheken "I2Cdev.h" en "MPU6050_6Axis_MotionApps20.h" van Jeff Rowberg die hier kunnen worden gedownload.
- De MPR121-aanraaksensorkaarten hebben de "MPR121.h"-bibliotheek van Bare Conductive nodig die hier te vinden is. Er bestaan ten minste twee versies van de bibliotheek. Zorg ervoor dat u de versie installeert die is ontwikkeld door Bare Conductive en niet de versie die is ontwikkeld door Adafruit.
- De NRF24L01 radiozendontvangerkaart vereist de bibliotheken "nRF24L01.h" en "RF24.h" van TMRh20 die hier kunnen worden gedownload. Let op:er bestaan ook minstens twee versies van die bibliotheken met identieke namen. Zorg ervoor dat u die van TMRh20 installeert en niet die van maniacbug.
Zodra de bibliotheken zijn geïnstalleerd, kunt u de Kravox-Controller-code uploaden. Als u al wilt controleren of de controller werkt, kunt u deze via de seriële monitor gegevens van de aanraaksensoren en de gyroscoop laten uitvoeren. Daarvoor moet je commentaar opheffen het laatste deel van de ontvangercode voor het uploaden:
door de commentaartekens aan het begin ( /* ) en aan het einde ( */ ) ervan te verwijderen, zodat de code er als volgt uitziet:
Nadat u de code met die variatie hebt geüpload, opent u de seriële monitor en stelt u deze in op een baudrate (gegevensoverdrachtsnelheid) van 115200. Nu zou u gegevens van de sensoren moeten kunnen zien die veranderen wanneer u de controllerkaart verplaatst en de pinnen aanraakt van de MPR121-borden die zijn gelabeld van 0 tot 11.
Als niets werkt of u krijgt alleen nullen, controleer dan uw bedrading zorgvuldig en vergelijk deze met het bovenstaande schakelschema. Als je een grappige uitvoer van de seriële monitor krijgt, controleer dan of je deze op de juiste baudrate hebt ingesteld.
2.8
Sluit je controllerkaart aan op de powerbank die je ermee wilt gebruiken.
Als het bord (of beter gezegd de powerbank) na enige tijd niet automatisch uitschakelt, is je controllerbord klaar en kun je doorgaan naar deel 3! Voer anders stap 2.9 uit
2.9
In principe is het controller-board klaar, maar sommige powerbanks worden automatisch uitgeschakeld na een paar seconden wanneer ze worden aangesloten op het controller-board zoals het nu is omdat het zo weinig energie verbruikt
Als vuile oplossing kunnen we gewoon drie 220 Ohm-weerstanden parallel tussen de 5V- en GND-pinnen van de Arduino toevoegen. Die weerstanden zullen extra energie afvoeren en omzetten in warmte, zodat de controller genoeg verbruikt om de powerbank aan te laten blijven. Maak je geen zorgen:zelfs met een kleine powerbank werkt hij nog dagenlang non-stop zonder op te laden
Verwijder de Arduino Nano en soldeer de weerstanden als volgt in:
Het bord ziet er dus zo uit:
en na het opnieuw bevestigen van de componenten ziet de (zeker) voltooide controllerkaart er zo uit:
Deel 3 – De ontvangerkaart maken
In dit deel van de tutorial laat ik je zien hoe je het ontvangerbord maakt. Het proces is vergelijkbaar met het maken van de controllerkaart
Als u wilt controleren waar een bepaalde kabel moet worden aangesloten, kunt u dit schakelschema raadplegen:
3.1
De eerste stap is opnieuw om de perfboard en vrouwelijke pin-headers op maat te knippen en ze samen te assembleren met een kleine en een grote condensator die de betrouwbaarheid van de radio-transceiver helpen vergroten. De onderste vrouwelijke pin-header is opzettelijk langer gelaten dan nodig, dus je kunt hem later mogelijk voor andere projecten gebruiken, zoals een Arduino granulaire Synth. U kunt deze stap vergelijken met stap 2.1 voor meer info
Een foto van het bord aan het einde van stap 3.1:
3.2
Vervolgens voegen we alle rode en blauwe voedingskabels toe. Rood is voor 3,3 volt en blauw voor aarde (GND)
Zo zou het eruit moeten zien:
3,3
Solderen in de kabels voor SPI-communicatie:
3,4
De componenten bevestigen:
Het ontvangerbord is nu klaar, maar voordat we de Kravox-Receiver-code van de bijlagen naar de Arduino Nano kunnen uploaden, moeten we eerst een interface voor de ontvanger maken
Deel 4 – De ontvangerinterface maken
In dit deel van de tutorial laat ik je zien hoe je een interface maakt met 4 potmeters en een LED voor de ontvanger. De interface is als volgt bedraad:
En wordt zo op het ontvangerbord aangesloten:
Ga als volgt te werk:Neem eerst een kabelstreng van 8 kabels en soldeer er 5 op de middelste pinnen van de potmeters. Gebruik bij voorkeur dezelfde kleuren om niet in de war te raken:
Snijd vervolgens een 2 * 17-gaats brede perfboard en een 17-pins mannelijke pin-header op maat
Bevestig de kabels en de pin-header aan het bord. Let op het bovenstaande schakelschema om ervoor te zorgen dat u de kabels op de juiste plaatsen aansluit
Sluit nu een kant van alle potmeters aan met blauwe massa-aansluitkabels (en gebruik misschien iets langere kabels dan ik deed). Voeg ook de blauwe LED toe met zijn stroombegrenzende weerstand van 150 Ohm. Let nogmaals op de polariteit van de LED (vergelijk met stap 2.2)
Next connect the other side of all potentiometers with green 5V-connection-cables (and maybe use slightly longer cables than I did).
The finished interface should look similar to this...
...and can be plugged into the receiver board like that:
Now you can also upload the Kravox Receiver code to the receiver's Arduino Nano.
If you want to see if it is working and receiving data from the controller, you again need to make a slight adjustment to the code before uploading. By default the Receiver will output it's data in a format that can be interpreted by pure data, but will not show useful information on the Serial Monitor. However you can change this behaviour in the code by commenting (adding // in front of) the line that says:
#define WRITE_AS_BYTES
and uncommenting (removing // in front of) the line that says:
// #define PRINT_VIA_SERIAL_MONITOR
So you turn this:
into that:
After uploading the altered code you will be able to see data from the controller and 4 of the potentiometers on the Serial Monitor as I demonstrate in this video:
Part 5 – Making the Controller Interface + Enclosure
Like the receiver the controller also gets an interface – a touch interface that we will make from copper tape:
It will be connected to the controller board like this:
As we directly want to attach the touch interface to the controller's enclosure, you should already have the (non-conductive) material at hand that you want to make the enclosure from. I used empty boxes that cling film and plastic bags came in:
Start making the controller interface by marking where you want to attach the touch electrodes. Please note that they must not touch or overlap each other:
Next, cut the 24 copper electrodes to size...
...and attach them to the enclosure:
Now we can make the plug. For that cut a 2 * 24 hole wide perfboard and a 24 pin male header to size and solder 24 cables to it. The cables in the middle should be at least 10 cm long. To the outside add the width of your electrodes plus the spacing in between for each cable. If for example you use 1 cm wide copper tape and leave 3 mm between the electrodes, your cable length should increase by 1.3 cm like this 10 / 11.3 / 12.6 / 13.9 / 15.2...
and solder the other ends of the cables to the electrodes like this:
Finish the interface by covering the copper surface with non-conductive adhesive tape:
Next fold the interface into a box and glue it:
Glue a smaller box to the box we made in the previous step. It later will contain the powerbank:
Cover the back of the controller board with some leftover cardboard orother slightly thicker non-conductive material:
Cut out holes for the LEDs and glue them and the powerbank (yellow object in the picture) in place. Make sure to place the powerbank in a way that you can still plug in and remove the USB-cable because that is how you turn your controller on and off. Also connect the touch-interface to the controller board and put it in the box. Most likely it will not move much, so you do not need to glue it in.
Make a cut out for the USB-A to USB-C cable at the junction of the two boxes, pull it through and connect it to the Arduino Nano:
Now the Controller is done!
You can close it with some rubber bands. If you later have problems with the sensors recognizing touch when there is none, try to put some non-conductive material like clingfilm or the like between the touch sensitive enclosure and the board and meandering cables. Also make sure to connect the powerbank when the touch sensitive part of the enclosure does not touch your hands or anything else. See Part 7 for more info.
Part 6 – Making the Receiver Enclosure
In part six we will make an enclosure for the receiver as well. You will need another cardboard box (I chose one that contained a bluetooth transceiver before – fitting huh?) and some knobs for the potentiometers
First cut out some circular holes for the potentiometers the LED. Also mak a cut out where you want to connect the USB-Cable to the Arduino Nano
Glue the Receiver board in. Make shure that the USB-C Jack of the Arduino Nano is aligned with the hole that you cut out for the cable connection in the step before.
Next glue in the LED and screw in all the potentiometers. The order how to put them in is the same as in the circuit diagram above:
Now you only need to attach the knobs....
...and the receiver is finished!
Part 7 – Connecting the Receiver to Pure Data
Now that all the hardware is finished, it's time to play some music with it! For that you need software that you can connect the hardware to. For Kravox that software is Pure Data Vanilla that you can download here for free
After installing Pure Data to your computer, start it and open the Kravox.pd file from the attachments. Please note that it needs to be saved on your computer in the same place as the drumsamples folder it comes with - otherwise Pure Data cannot find the samples
As soon as the Kravox.pd software interface has opened, look for a blue-info box and install the four so-called externals that are listed in the box. Installing them is straightforward:Just click on "help" in the Pure Data Menu, choose "Find additional objects on the internet" (might be phrased slightly different), search for "comport", "zexy", "freeverb" and "arraysize" one by one and install the most recent version. Now the four objects labeled, comport, repack, freeverb and arraysize should have a solid outline like in the picture below. You might need to restart Pure Data for that though
After installing the necessary externals you can connect the Receiver Box via USB. If you altered the code in Part 4 to use the Receiver with the Arduino Serial Monitor you need to undo this change first and upload the original code to the receiver's Arduino Nano before connecting and close the Arduino Serial Monitor, so the receiver is not busy trying to talk to it.
Now have a look at Pure Data's log / info window. If you see a rapidly updating data stream that's great because it means that pure data has already found the receiver, but most likely it will instead show you a red message like the one below that refreshes every other moment:
The red message might be a little different, but the result is the same:Pure Data did not yet succeed to connect to your receiver. That is because the program needs to be told, which USB port to listen to. USB-ports are sometimes a bit of a funny thing though:On a 2014 macbook Pro, Pure Data recognizes both USB ports as Serial Port 3, no matter to which you connect the receiver. In Milan I used Kravox with a Lenovo Yoga Pad with only one working USB-Port, that needed to be contacted as Serial Port 6, and recently installed it to another Windows Notebook with two USB-Ports, that wished to be addressed as Serial Ports 8 and 9... So my advice is just to try which number works with your USB-Port. For that I created a simple dialog as part of the Kravox.pd interface, where you can just click through the numbers until one works. You can also try the "Show available ports" and "Show connected USB-devices" buttons – Sometimes, but not very often that also provides useful information. However it takes a while until you get a response in the info window.
You will notice that you have found the right port number and that a connection has been established when the info window shows a data stream like this that updates rapidly:
Very good so far! Click save, so Pure Data will attempt to connect to this port the next time it opens automatically.
However we still need to turn the controller on. If you uncommented the last section of the Kravox Controller code in step 2.7 to connect the controller to the Serial Monitor you should upload the original Version again now.
Connect the controller board to the powerbank. When you do this, the touch-interface-enclosure around the the board should be closed and the touch sensitive part of the enclosure should not touch your hands or anything else, as the touch sensors sense their environment when powered up and assume it to be the untouched state
Congratulations – You are done!
Have much fun playing Kravox!
Code
Kravox Code for Arduino and Pure Data
Under this link you can download a Zip-File that contains the Arduino Code for the Kravox controller and the Kravox receiver, the Kravox.pd-file for Pure Data and the necessary drumsamples for the instrument. Please refer to the tutorial for instructions how to use the files.https://github.com/timkrahmer/KravoxSchema's
Productieproces
- Kanaal en sluis
- Saxofoon
- Pijl en boog
- Tuba
- Dulcimer
- Rutronik:multiprotocol draadloze SoC's en modules van Redpine Signals
- Bewegingssensor met Raspberry Pi
- 5G draadloze netwerken kunnen IoT en belastingen transformeren
- Veiligheidsgeïntegreerde bewegingsbediening zorgt ervoor dat veiligheid en productiviteit naast elkaar kunnen bestaan
- Aansluitingen voor besturing:communicatie-interfaces voor positie- en bewegingssensoren
- Hoe te kiezen tussen lintzaag en cirkelzaag op basis van mijn werkstuk?