My grandparents had a stereo console when I was a kid, and I always loved playing with it. There's something beautiful about a functional piece of furniture like that. I knew when I bought my own place, I had to have one.
I found an old Penncrest on Craiglist for a few hundred bucks, ad said it worked, so I went and picked it up. When I got it home, I took it apart and began testing the functionality of all the parts. Everything inside was belt driven, and the belt on the reel-to-reel had completely disintegrated over time, so it would power on, but it didn't work. So I began to think about what I could put in its place.
I landed on a custom Raspberry Pi driven Volumio build using some of the console's original hardware. I loved the mechanical feel of the "blender buttons", and decided I'd use those as input.
Step 1: Step 1 - Buy a Console
This console came with everything you'd get if you bought it new, including the wiring schematic, the original tag, the spare parts order list, everything. The whole unit is made of a medium-brown walnut, it's absolutely gorgeous.
Step 2: Adding a New "on" LED.
First thing I did when I got it home was crack it open and take a look at the guts. The speaker wire was in pretty rough shape, so priority one was replacing that. After that a little cable tidying was in order, and then everything looked great. I had an audiophile friend swing by to help me test the speakers to make sure there were in good working condition, and they were working perfectly.
While inspecting the furniture, we noticed a small hole in the bottom front, and traced some wires there from the inside. Because we had the wiring diagram on hand, we found that this was an "on" indicator bulb, which had long ago burnt out. The part number listed for replacement was "GE 51". Turns out these are pretty common in things like pinball machines, and so LED replacements can be found all over the internet. I selected green.
Step 3: Mockups and Prep Work
1/16 inch thick plastic sheet: https://www.amazon.com/gp/product/B0049MWXM8/ref=o...
Sloped Project box enclosure: https://www.mouser.com/ProductDetail/Hammond/1599H...
Raspberry Pi Foundation Touchscreen: https://www.amazon.com/Raspberry-Pi-7-Touchscreen-...
I used a drill and tap to thread for some standoff screws I had sitting around so I could mount the Raspberry pi to the underside of the whole unit. I then used a dremel to create a slit for the screen cable and drilled a large hole with a stepper bit for the usb micro cable to power the screen, as well as drilling the holes for the mounting screws. Once everything had been mocked up correctly, I templated the touchscreen with some cardboard and then transferred the cut to the plastic enclosure, again using a dremel.
Then I used a few drops of Krazy Glue on the interior of the case to hold it to the plastic sheet, and secured it in place around the edges with some black caulk.
Step 4: Shutdown Script
While we had the cabinet open and were removing the reel-to-reel we discovered that each component was powered from the main board via standard outlets. So, we just unplugged the reel-to-reel, removed a few screws and took it out.
But that also meant that when powering off the device in that slot, power would just shut off immediately. Something I didn't want because I worry about corrupting the SD card on the pi with an immediate power down. (I know, I've read a million forum replies from users saying this isn't something you need to worry about, but I've had it happen, so, I worry). So I built and tested a battery backup shutdown, then scripted it in as part of the build.
Adafruit PowerBoost1000: https://www.adafruit.com/product/2465
3.7v battery: https://www.adafruit.com/product/2011
Then I built a 220k-330k voltage divider - the PB1000 outputs 5v, and the Pi's GPIO can only handle 3v input, so this is a necessary build.
The PB1000 has a set of pins that will read high or low depending on power state. I tapped in to the USB pin which outputs 5v when the unit is running on USB power. When USB power drops, the battery takes over, and the USB pin drops to 0v. This change is what my script detects. This script is added as a service to run at startup.
# Script for shutting down the raspberry Pi using the Adafruit PowerBoost 1000c.
import RPi.GPIO as GPIO
pwrpin = 4
low = not(GPIO.input(pwrpin))
os.system('shutdown -h now')
Step 5: Buttons and Wiring
Adafruit soft touch button: https://www.adafruit.com/product/3101
1/8th inch thick plastic sheet: https://www.amazon.com/gp/product/B0007WTF02/ref=o...
Some leftover scrap metal and some rivets
Volumio has a built in plugin for GPIO buttons, so I am using that rather than writing my own script. (Full disclosure, I did try to write my own script, but it didn't work as well as I had hoped, and the built-in plugin was good enough.)
I templated out the blender buttons, the distance of the actuation, and then built a little rig using a plastic base, standoffs, the soft touch buttons, some perf board and scrap sheet metal. There was also a stand-alone pause button I made sure was functional as well.
Step 6: Final Wiring and Installation
I'm only using pins 17, 22, 23, 24, and 4 for this build so wiring up to the GPIO was pretty simple. Once everything was plugged in I was able to set the whole thing in the cabinet.
I also have pin 18 in some reserve code for a later project (more on that in the final step of this build).
Step 7: Done!
With everything in place I powered it up and gave it a test run. It works beautifully. Buttons work beautifully. It sounds great. I'm very pleased.
So what's next?...
Step 8: Future Plans
The original reel-to-reel had a counter that would count the number of seconds of audio played. I want to make this functional again. So I bought a motor, some wheels and belts, and this is something I'll work on a bit later.
Low RPM 3v motor: https://www.amazon.com/gp/product/B00S50KQLA/ref=o...
Eventually I'll mount that to the bottom of the unit, and run a belt from it to the wheel that spins the numbers. Only hurdle is the math behind the gearing to make the numbers move at the correct speed - counting seconds. But I can figure that out. And the code is already done and added to the build, and I tested it using a 3v LED.
#!/usr/bin/env python import RPi.GPIO as GPIO import time import subprocess motorpin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(motorpin, GPIO.OUT) while True: process = subprocess.Popen("mpc status|grep -o playing", stdout=subprocess.PIPE, shell=True) output = process.communicate()
if "playing" in output : #if output contains the word 'playing'
GPIO.output(motorpin,GPIO.HIGH) #turn on the motor
else : #output is anything else