The Yeah! Woo! machine
The kernel of this project was a mic amp I had laying around (this one). Both the mic and the power adapter had gone MIA, so I didn't have any practical use for it anymore. However it had a pretty sweet case made of eloxated aluminum, so I decided to rip the guts out and use the case for a project.
The idea was to make a drum machine of sorts with two buttons, which would trigger the "Yeah!" and the "Woo!" samples. You know, the ones used in every techno beat from the 90's. If you're not familiar with the origin story of "Yeah! Woo!" (I wasn't), here's the Wikipedia article.
During the design process some feature creep occurred. In addition to "Yeah!" and the "Woo!" sound I felt that the machine should also be able play a short drum loop. And also that there should be some way to manipulate the loop in real-time. And also also that there should be a functioning VU meter. Since the mic amp case was already fitted for a LED VU meter, it would look weird if the "Yeah! Woo!" Machine didn't have one too.
Here's a demo video of the final result:
For managing all this stuff I initially thought about using a Raspberry Pi Zero, but since I wanted the machine to start working instantly when powered on I decided to go with the ATmega328 MCU instead. The ATmega328 has 32 KB of internal flash, which is enough space for a few seconds of 8-bit sample data. However, just one ATmega328 wouldn't do since I wanted both the "Yeah! Woo!" samples and the drum loop to be able to play simultaneously. So I went with a design of two ATmegas, MCU A and MCU B, running side-by-side. MCU A is used for the "Yeah! Woo!" samples, and also for managing the VU meter. MCU B is used for the drum loop. The mixed audio signal from both microcontrollers are fed into an amplifier board. The audio is also fed back into the ADC of MCU A as data for the VU meter readout.
The speaker hole on the front panel was cut out by hand, by first drilling lots of small holes around the perimeter, and then finishing the job with a dremel. Sadly this process resulted in the eloxated aluminum finish of the case getting scratched. In the end I decided to sand the entire case smooth and painting it.
The horizontal bar protecting the speaker was made from a stainless steel drawer pull, which I soldered onto the case. The problem is that oxide forms very quickly on aluminum, and prevents the solder from fusing with the metal. This can be counteracted by first covering the metal surface with mineral oil and then sanding it. The oil layer acts to prevent new oxidation. Soldering is done through the oil. I used a regular soldering iron with 40/60 lead solder at about 390 °C.
I hawked the sample playback code from Michael Smith (available here). I added some functions for manipulating the drum loop, such as pitch control and reverse playback, which can be controlled by a potentiometer and toggle switches on the front panel. Since there was some room left in the 32 KB flash I added two additional loops, which can be alternated with the drum loop by flipping one of the toggle switches.
|The internal components and a mess of wires and hot glue. It was a tight fit.|
I replaced two XLR connectors on the back panel with female pin headers, connecting to the programming interface of each MCU. The idea was to allow for flashing updated software or replace the audio loops. Of course I'll never get around to actually doing that so it's a bit of a wasted effort.
And here are a few more photos: