William Lamkin
Final Documentation 11-13-20
(1. Me and my sister using the B.P.M. Device)
(2. Another shot of the Arduino, Breadboard, and Ableton Live open on my laptop)
(3. Detail shot of the Arduino and breadboard)
(4. example of use in low-light meditation environment)
(5. Another detail shot, this time with sensors visible for scale)
(6. Short video demonstration)
(7. Long video demonstration)
Narrative Description:
B.P.M. consists of two pads, one held by one person between their fingers, and the other held by another between theirs. These pads read their heartbeat and turn it into dance music, making drums and hand clap sounds beat with their heart. How fast their hearts beat also affects other layers of the music as well. They can use this in any circumstance they want. They might want to calm down and meditate to the music in a dark room. They might just want to have fun and share an experience with each other.
Progress Images:
(1. A temperature sensor sending data into Arduino. Initially I was planning on using temperature as another metric for getting biometric data into the system, but ultimately, these ended up not being usable, as they are slow to change temperature and require a lot of skin contact to even start reading skin temperature accurately. Perhaps a different kind of temperature sensor designed more specifically for skin would have worked better.)
(2. Another picture of the temperature sensor, and you can see, even with a large amount of skin contact, the temperature reading of the sensor only got up to around 90 degrees Fahrenheit. So, not too accurate for my intentions.
(3. An initial use of the pulse sensors. This is with just one of them so I was able to plug it directly into the Arduino Uno. You can see the LED light very clearly on this one. As well as this I have it connected to a velcro strip on the back. This might have been useful, but I found holding it between two fingers to be more stable.)
(4. A demonstration of the pulse data going into the Serial Plotter in the Arduino IDE. It is very clean in this picture! Which is surprising in hindsight, as the data ended up being a lot noisier.)
(5. An initial test sketch I made in Arduino to send two different values into Max. You can see here I was just testing two random values. The interpretation of the data from serial was the most intimidating aspect of developing this project.)
Process Reflection:
In a way, this project fulfills a long-standing desire of mine to learn how to get interesting data from the outside world into Ableton. I’m always looking for new methods of control, and this project gave me insight into how to design new kinds of instruments, for example. Although the idea is simple in concept – take heartbeats and convert them into musical data – this turned out to be a lot more complicated than I initially realized.
In my initial idea of the piece, I was going to use the “Connection Kit” device on Ableton’s website, which is preconfigured to work with Arduino, no extra application of coding needed. This uses the Firmata protocol, and unfortunately, the nature of the pulse sensor is that to get any meaningful data out of it, a lot of signal processing needs to be done. By itself, mapping the pulse data to a musical parameter is an interesting modulation waveform, but I wanted the heartbeat itself, or the BPM. These are things that needed to be calculated and to do that I needed to do a lot of extra coding. Fortunately, I was able to figure out how to just pass the data into Max/MSP, which is designed to work well with MIDI in particular. But before that revelation, there was a lot of unclarity with how to do this. I actually bought an Arduino Leonardo, which I ended up not using, but I had an idea for a while to turn the Arduino into a USB MIDI device to just send notes directly to Ableton that way.
I am also glad I was pushed to make the project more complex, which gave me the idea to make this for two people instead of one. I think the idea of meditating with TWO people, and the intimacy that creates is a lot more interesting than what I would have done with just one person.
Code Submission:
Arduino
// B.P.M. (Beats Per Meditation) // William Lamkin // // This takes data from two pulse sensors and sends it // over serial to be processed in Max MSP. const int PulseIn1 = A0; const int PulseIn2 = A1; long Sig1 = 0; long Sig2 = 0; void setup() { Serial.begin(9600); pinMode(A0, INPUT); pinMode(A1, INPUT); } void loop() { Sig1 = analogRead(PulseIn1); Sig2 = analogRead(PulseIn2); Serial.print(min(Sig1, 800)); Serial.print(" "); Serial.print(min(Sig2,800)); Serial.println(); delay(50); }
Compressed Max patch (copy the whole thing to clipboard and in Max, select File>New From Clipboard)
<pre><code> ----------begin_max5_patcher---------- 2039.3ocybszaiibD9r8uhND4PBfGG1uHECBBPlrWVfX.CjC4PlAKnHaaycn XKvGNdxhM+1S+fbr8NTVEspl1CfkgnoT0e0iup5pZN+x4mEsU+fpKh7mI+ax Ym8Kme1YtKYuvYiu+rnc4OTTm24tsnB8tcpl9nK7+sd0C8tq+wKu9xqH+gOp x66HWqZIWoJq5y6qzM+QxU4OP9mU21jWSttUWn55pZtknugb8Pcmh7C484ep 4eUUWWkui7Ox28kplO0720M2qZMeaE5l9plA8PGYu69KM2OopoWS1osKl71u R15DbdSIIutSSJxqKFpy6UcjOd8USq15pFUgdnwsjEiWrYXWUSsp2gO53EqJ cnRu8m+.kE83cpG5mt03wqtOuu3NCd9oVUQuWUxxtL9BBkYekm3dSR7kwjOa +D+54mae4hSTgmOTVYT.Cc8FrS5GZaTkDcCoeD7Frag9uaVry.hcAewXeSbp EuYTmJPF6zAbjAee9WTidCdidmporiXVgj7NxU+3O7ijFcu5RRwc4M2pbuw9 WZTpRU4kjR8v1ZEontp3Kt+n8SZ8mLeujtgVEox3MY+RsNp820pGt8NiiXqE mj8519YUqI.Uq7zEqVS8ZRoH1qW41esIEY8pEwjhBxNSHZtQuYUKeXRI1Y7q TNss4NJU2WUbXc5A0kNE8cpuoKc1pSWg9J7S8pPtPdo7aNpnqP+Kev+OhTFS p5rtRpt6z0kj6yqGTjazsV9MKQmU6jOxv4H21Zz5ypU3.0JLwqf4xE2JDYOI 7UfsVQ27mz2bCwHVU08FkPqdG4u0VNT0nOI5J5xAr2KHcSHYq7gDeJZeqwt9 oHavwMUlvnQH6b+cdBcp1JSNRCTrquSRSPWrlfll3yZE+j.hWstvH1sp1HfK 2zjnusvZy2o5Us+jpI2vm7zE8ygxjpveo9utW4wQTzEjHWrC4yu.epIt2huT m82CVFac.qXsAqLggGX6pqJW.XYKGrzCB1WBjIYdbQcFVlOOo30V1Ui5+XV9 eeBRWNPCWtI9vTpCIdV8PxL5g3HDw5j26HMcL+zbemGqE801r0kjmQl7HJ4y fxkS6LBEQryfkDDj7LqFy7qXv1sjLLsaxD5SsazzULRLYyZEIJ8aAf4MoAJR 7QuyXndmIIKu7.uAax6TrhoIR3uU4DYLDRSLtEhuyt86olu44MYrYTBh.Pax jtvuw2fLWisbMvNjxnvYFYYBuq6Z5yxV+Ranu27YkgHkw6FeVYZT3LiH4yNO Ja8atlMKRimAoIXZGS137PEab6xRRCHBofQnDUO0MdWTeKDBJBAaCEavM+Q5 irLmJ.WDwpH6MpX.FKMfDqa2uiPY7KYva1wbDtgXuU1FfHm.NWhqa7+slXJd uPQnfSpPeEztfvYlmP5zRrrcnuW2.0aVhYSA.3Im9XO9XhoWQcCleso3+AF8 GnY07CgvN2nybFTyOU1fiOezIEPogOUJ3DMhTbKIhiGM7ALnuTdl43mW9VKY wtUdh2iTxCHLnfggb4yQAQTbnzD7LRxg501LbkBZ.JbSx88oJKLHLYYHLN.E tgCBOfm3zPVKftOC9xG6dB2aox7vYyJlQispYzFoNj9Xu.kRSUCu5DFegUm3 ms4Q7KoYijJo9llFjlb6lsMXyb5BScOkvFPd6IzFm32mXP3Y.yvvPciSLeVZ Q1FLl117Vx+pcF6fg2R6QCPqmH0uegr0j6IdM4d17Ni5gtIDTOou2XdnIgi4 I88DwCE0Ran72YDObj4cRQj14P1N24VAboonNwF534cik36x+Z1xs2pYYD9V tYmL6I0wMdR.Fww6rNtwQuiaS37Mnia7UsFgwFz7toiarjf1wsQ3hSG2NTbq jlANEJpcaiMVWPPYkjOaM+xnC0gVsI0x4H3rvUevPy97huPNT6clqXuktcZn E5k4OFf9CyRZH.q8r7180ca00PAKtSnyiPu4LMHsFtpWmC97vgc0dYAeJ4lD k21pG1aOjbvOlNnObJOPkNezMgoE+pZ6Cf.kufSPlbg4Ql1q4B1yIymEI8z5 jdu91aqAu4RAhEGbLWX+A0weJHBSoAF.zpIKnWPQX2d1wG+KeByjv375dRAJ IYIwvSq75xp7xNsNyIMwUpW57oTbed2FM9MOpgtuO2gO5YJfN8PawzhXLEgI 84zpnT00W03dzBex8XyYRNjNFpfrOGBGUR1C47oKIA.IkjfgjXqFlhgHITvD .AsAA4XO82GGQBLjzl0xevdnSOtjvHZJAjOtDCIwgXmhwPRPhllbaNMIAARH HGIDebIJRBRX6jB9zjDDkm.CNOIjnIAFdd1iMDgdL6zyof0s1GPDa0.qjnoe uniOMQCIdShAak8D1cTPJvHxVBIOoDEuSHAbHIG1JHGADtpDLxGKfjOVhAWk .BqHGCFDAj7wX31I.EzhQnzDG9Kq7PwLEuZRBffvPNbHII4X3OvAQshBlfXk XXPEAohSZRHxFCRxAIYLCB8q8jC8VI5zPnuYPHnYXTBhyw7XwI7f3TAWz3aZ g3PyvfcfAIuj.C1AFDdHAFa8ksR4zoPJHhgQYJTH4knXzdGJDOOdHB2nP1Q0 ugyaMEscbr3GoCReamua.DMjJR+NWJemqy2u+dUa23M6DQzt7eV6VVatv81p F+acscOpUce0z869OUhn71h6p5UE8CstkUzCiOZ6Q6zF.1LTMZYMfyHR2..Z x2o51m6wgaNAm+qm++MzFSQJ -----------end_max5_patcher----------- </code></pre>
——————————————————————————————–
Google Slides Presentation! 11-9-20
https://docs.google.com/presentation/d/1-cszJymatEnvi5NvLV3GBG5QRJxCWZodbNqJEoCUgXI/edit?usp=sharing
Additional Documentation Photos! 11-4-20
90% Complete Critique 11-2-20
video: https://youtu.be/9RfR5KQFVY8
Over the weekend I was able to successfully complete the project and record a “performance”/video documentation of a use case. This required a successful integration between the Arduino and Max/MSP, which all of the signal processing was done in. A Max/MSP patch I created generated midi notes and cc messages that were then sent into Ableton Live to control the instruments in that program. The result of which is a texture reminiscent of trance music.
Pulse 1 triggers a kick drum, and its calculated BPM controls a low-pass filter cutoff on the synth pad.
Pulse 2 triggers a handclap, and its calculated BPM controls the length of sustain on the sequenced/arpeggiated track.
The heartbeat sensors ended up being finicky in that they didn’t allow a user to move their hand at all, almost necessitating extreme stillness. Thankfully this benefitted the goal of the project to encourage meditation. However, because of this, the other sensor element of this project, the temperature sensors, proved unfeasible. The temp. sensors required a lot of skin contact to raise the reading higher. Because of this, the hand positions required for both sensors were incompatible and the temp. sensors ended up being dropped.
Draft statement: B.P.M. (Beats Per Meditation) is a device for use with Ableton Live and Max/MSP that uses two pulse sensors connected to an Arduino. These pulse sensors use the real heartbeat of two people to trigger percussion in Ableton Live, while also calculating their BPM to modify other sound parameters, like the brightness of a synth pad. The resulting music is a kind of a trance music, generated by the body. This device asks the users to focus and meditate on their body through the sound, and share that experience with another person. Hopefully, they will be able to calm down from whatever they are experiencing and have some new insight about themselves.
As an electronic musician, I have always been interested in incorporating new modes of interaction with music. Biometrics seemed like an obvious avenue for exploration, and something like dance music, which already has influence from the beat of a heart, fit the bill perfectly. As well as this, I thought it would be extremely useful to integrate the new technology I had been learning with Arduino, with software tools that I was already familiar with. This is the result of these experiments.
Process Blog Check-In 10-28-20
Received the sensors and have got them working!
This is the TMP36, a temperature sensor. I used a library I found in the library manager titled “TMP36” which does the conversion of the signal into fahrenheit/celsius data. It does have some behavioral quirks which I will have to work around, probably the main one being that the it takes a while to change temperature! So I will have to do more testing.
This is the Pulse Sensor, which had a library provided by the developer. The main goal of this was setup which I am glad to have gotten working. Here is a picture of my pulse being displayed on a serial plotter using one of the example patches in the library.
Next steps are to now integrate this into Ableton!
Proof of Concept Tech Demo 10-26-20
Here is a video link to a test of the connection between Arduino and Ableton Live using the Arduino Max for Live device from the suite called Connection Kit. https://www.youtube.com/watch?v=EDeQQuitjR8&feature=share
I am awaiting pulse sensors and temperature sensors, which are scheduled to arrive early this week. In their absence, I used a pushbutton and potentiometer as inputs, and demonstrated those inputs controlling parameters in Ableton. Hopefully this will be all I need, but once I start using the new sensors, this might necessitate getting some other parts as well, or adjustments to the code.
Bill of materials as of right now:
Laptop with speakers (have)
Ableton Live (have)
Arduino Uno (have)
2x heart sensors (on their way)
2x temp. sensors (on their way)
-
Arduino (already have)
-
Computer/speakers (already have)
-
Ableton Live (already have) + Connection Kit (free download)
-
-
Or Max/MSP (already have)
-
-
Two pulse sensors such as this heart rate sensor
-
Two temperature sensors such as this LilyPad Temperature Sensor
Comments are closed.