The machine works by using servos the raise and lower arms over the various holes on the recorder to achieve different notes. Seeing as recorders, much like harmonicas, are only capable of playing in the key that they’re designed for, I designed the housing around a C major recorder. This is useful because every chord/note has a harmonic equivalent in this scale-it’s the best decision in terms of versatility.
Seeing as Arduinos are extremely limited in terms of processing power, I’ll be using 3 in order to react quickly enough. One will be identifying notes/chords, one will be sensing when notes begin and end to control air flow, and one will be receiving these messages to control each function.
The arms that were mentioned earlier feature a silicone base that creates a seal around the various holes. When lowered, they’ll cut off air flow which is being pushed through the mouth piece when a note is played. The exact method of air movement still needs to be determined. I’m currently in the process of deciding between an air compressor, an electric air pump and using a self-inflating balloon. The self-inflating balloon is the type that sits on the end of a turkey baster. When the bag is pressed, air would be forced through the recorder and when released it would pull air back in to prepare for the next note. This method would be the most successful in terms of replicating human breath as it would easily facilitate vibrato, but would have the problem of more math being needed to account for inflation between notes. The compressor, on the other hand, would need to be acoustically insulated because of its volume when pulling in air. In order to control air flow in the same way for functions such as vibrato, a motor would need to be mounted to the release valve to control the rate of flow. At the moment, this is the direction that I’m leaning because I have all of the components needed other than a solenoid shutoff valve.
I plan to have a second mode in which a user can play a midi keyboard in order to control the recorder. I think that this would be an extremely fun way to interact with it, using one instrument as an input device that plays another as an output device. I plan on making this an option seeing as once the mechanism has been figured out it’s a relatively simple Arduino sketch which will be fun to play.
While I’ve put a lot of thought into the mechanical workings of the device, I haven’t begun to code other than conceptually thinking about how it will work. By next week, my goal is to have all motors running and capable of playing notes you give it according to a basic input such as a button press. Servos require a lot of current and so I need to source the right power supply (or a step-down board to use a PC power supply that I have available to me).
In terms of CAD, I've made pretty significant progress. I now have a housing that holds the recorder and servos in an accurate way and arms that will allow the servos to play specific notes. This modeling was quite intricate as the flute has extremely small tapers and differences in hole positions which meant all the servo arms have to be modeled independently and a lot of care had to be put into ensuring its curves were accounted for. I'm not waiting on a few more parts that will allow me to begin programming and testing out different functions. All of these parts are photographed with descriptions on the Gallery page.
2022-02-23
PROCESS JOURNAL
2022-03-20
A lot has changed since last time! While I was originally using servos to actuate note changes, I've since switched over to running the entire machine on a compressed air loop. In place of the servos, I'm using tiny single-acting pneumatic cylinders run by 3-way 2-position solenoid valves. When actuated, they will push down on a small silicone-coated pad much like the servo arms. In this version, these pads will feature a spring return in order to allow them to retract. It was necessary to not attach the pads directly to the cylinders because these cylinders have a 1/2 inch stroke with a piston that rotates in its housing. Since I need a perfect air seal, any rotation on the pad would cause air to leak out. As a result of these changes, I've redesigned the recorder housing. To something that, in my opinion, looks much cleaner.
In the interest of keeping things looking clean, I've also designed a custom PCB. I decided to go this route because I was inspired by other mechanical music machines which have their inner workings exposed as an aesthetic component to their work. The PCB holds the micro-controller (Arduino Mega 2560 Pro), 8 relays, and a 40-pin IDC connector which is responsible for moving signals between the solenoid valves, the keyboard (a new input method that I've put together), and the PCB. 40 pins is absolutely overkill as I'm only using about half that, but I wanted to have the option in case the traveling current was high enough that I'd have to use two pins per valve. the PCB has a white solder mask with black silk screening which shows my project's logo as well as a QR code which brings you to the project's github. After quite a while of trial and error, I have all of the parts in my posession and (mostly) working. Seeing as I'm not an engineer, there were a few issues with my PCB. Luckily, all of these problems were fixable with a few alterations which could all be made on the underside of the board making them invisible. I currently (no pun intended) have a slight issue with power draw-while the entire loop works on some example code that triggers each relay one by one, when all are triggered together the 12V connection seems to be triggering a reset on the arduino. I expect this to be an easy fix, and other than this all of the connections are functioning after some very difficult SMD soldering.
At the moment, I have a few main tasks. The first one is to diagnose and fix the reset issue. The second is to test and verify that my spring assembly works and to find the right PSI tuning for the cylinders. The pads make contact with the recorder before the cylinders have completed their stroke, which means I have to find the right balance between speed and strength. I need enough pressure to actuate them fast enough, but not so much that they won't stop extending once they meet resistance. Finally, I need to finish up my plans for how all of the components will sit in their display and get everything lasercut to allow for mounting points as well as spaces for wires and tubes to be routed. I have some videos to share that were too short and so YouTube uploaded them as shorts which unfortunately can't be embedded on Wix but you can find them at the links below. You can see the rest of these visuals on the Gallery page.
Well here we are. After months of long hours, my magnum opus is finished. I feel kind of like Mozart finishing his greatest work, if Mozart was bald and liked to make robots that weren't really good for anything.
Jokes aside, I'm incredibly excited to have a working machine. This project was a huge commitment and took unbelievable amounts of planning in order to have things come together and work on the first try, to the point where I didn't actually get to test everything together until a few days before I presented it.
I discovered and solved a ton of problems since the last update. Here area few of the biggest problems and the solutions I came up with.
Breath Flow
I came to the realization that I couldn't use a single air source for both the cylinder control and breath flow. I'm using a compressor with an undersized tank, and so releasing pressure faster than the pump can make up for meant that the cylinders slowly retract over time as the air "leaks" to make noise through the mouthpiece. In order to use maintain pressure, I decided to use a vacuum pump. The issue is that without a tank, the pump doesn't output a consistent flow of air. It outputs a wave of high and low pressure, causing a mechanical sound. A wind instrument's pitch is also affected by air flow, meaning that the pump resulted in an extremely flat sound. In the end, the fix ended up being adding an in-line needle valve. I closed the valve until it was almost completely closed, so that the maximum amount of air that was getting through was only the amount that was being pumped during the low pressure phase. This acted as a resistor, and improved the sound quality significantly. You can still tell that the flow of air isn't completely smooth, but the pitch has improved so much that I have no complaints. If you want to hear a hilarious performance of Mary had a little lamb before this fix was implemented, you can check it out here (be warned, you're about to see my workspace mid-build. It's not pretty). Note that the song was played only half as fast as it was in the final video, but remember this sound when you listen to the final video-it's night and day.
Spring Tension
The platforms that press into the keys were going to be spring loaded to return back to the high position as the cylinder retracts. The reason for this is that unlike most double-acting cylinders, these tiny single-acting ones don't have threaded tips, making mounting anything impossible. The springs ended up being a bit of a nightmare to deal with. They were a touch too strong, leading to some inconsistent presses. and there was too much tension in all directions. I ended up designing a pressure fit version which fit snugly on the rods. once they're on the rods, instead of putting them in the curing machine which can get hot (and cause undesirable expansion on a high-accuracy part) I use a UV flashlight to finish curing the resin while it's mounted to the cylinder. This bonds the part ever so slightly onto the rod, which is strong enough to keep it in place but still allows me to remove it with some force if necessary. Now no springs are necessary, and the spring return of the cylinder does all of the work.
Power Consumption
Solenoid valves require a lot of current-around 300mA when powered. When they're initially activated, however, getting the coil started can require up to 1.5 amps. This current is only required for a fraction of a second, but causes problems when all of the valves are activated at once. I decided to explore some solutions in code rather than buy any more parts, and landed on a pretty good solution. After a ton of testing, I found that I could delay the opening of each solenoid by around 25 milliseconds. This gives time for each solenoid to finish its extension and have its power consumption drop back down to operating levels before the next one is extended. While you can feel a bit of a delay, it's not enough to ruin the experience. I stuck with this solution and have continued to use my 3A power supply. I added fly-back diodes on all of the solenoids as an extra safety measure and they've been working smoothly ever since.
Electromagnetic Fields
My last big issue, and one that I'm addressing before GradEx, is EMF. The cables bringing 5V to the keyboard and data signals back are a few feet long. This distance is causing interference leading to jumping numbers. As a result, the Arduino was interpreting random signals as button presses making the keyboard go haywire. This is an easy fix, and just requires a shielded cable which I'm taking care of now. This is why I have it playing a written song as opposed to playing it live in the videos.
Finally, I had to make a box and plug it all in. I built it out of MDF and painted it a slate grey, sanding everything down with a belt sander. I then used primer filler on almost all of the printed parts, sanded them, repeated the process, and finished them with a few layers of a cream spray paint. I was super happy with the finish I achieved. I have a tendency to apply thick layers too quickly, but I took my time and got a fantastic finish that you can see in the gallery. There are a ton of parts purely there for aesthetics, mainly small parts that sit against the MDF to clean up the appearance of the clean holes where tubing and wires enter the interior. I've lost count at this point, but I'm sitting somewhere around 30 unique printed parts-most of which are printed multiple times.
With everything mounted, I finally got to plug it in for the first time. I was so stressed that none of it would end up working that I forced my girlfriend to turn it on. I heard noise, albeit awful noise, but I could finally breathe a sigh of relief.
I don't think I could ever have enough time to talk about the details of this project. The countless number of hours I spent sourcing parts, teaching myself how to create more complex PCBs, and learning the scientific principals behind pneumatics to name a few were truly a full time job that just didn't stop. I loved every second of it, but a project will never be finished until you force yourself to stop. I have no doubt that I could keep going for another year and still feel like I have more to do, and I think that that's the most important lesson that this project has brought me. Taking a step back, I've accomplished every single thing that was on my checklist when I set out to make this. I'm taking time to appreciate that accomplishment and not dwell on what else could be done-something that, historically, hasn't been my biggest strength. I'm so thankful for this course and what it's taught me. So thanks so much Nick and Christine, I couldn't have asked for a more memorable and satisfying way to end my degree. It's been a blast:').
2022-04-27