I don't know if I have discussed vintage audio gear here...but I never threw out my old stuff, and still use it...so I was still using vinyl when it came back into vogue (yea for me).
I will not get into the debate of analog vs digital, but the reality is they do sound different (for a variety of reasons, not just due to the media)...
...but for me the important difference is when you play a vinyl record you are making a conscious and physical effort to listen to a piece of music...you take that delicate plastic out of its protective sleeve, you carefully place it on the platter, you meticulously clean it, gently lower the hard diamond stylus on to that soft plastic, and sit back to listen to 20 minutes of music.
It is that deliberate, hands on, mechanical action that is a great part of the event for me...at that moment you think about the amount of time and effort spent practicing, playing, mixing, mastering, then pressing that record.
Of course the GIANT drawback is trying to keep that vinyl clean so you don't hear pops etc. Tons of money have been spent in that fight. Hundreds of gizmos are available to solve this problem...and some get close, but you have to spend big bucks to really get some good cleaning.
For the audiophile who throws money at oxygen-impregnated speaker cables etc. there are a few upper end options out there...one is a vacuum that is literally like taking your upholstery attachment and running it against the wet record to vacuum up all the cleaning solution. (~$1000) a drawback is the edges or lips of the vacuum that touch the record get dirty themselves and have to be cleaned...but apparently it works well (I don't know).
Those devices are out of reach for me...i.e. not financially worth it...
...some time passes...
So eventually I see this video and it changes everything for me.
This vacuum style cleaner is called the Keith Monk, or Loricraft record cleaner. This one looks like a record player complete with tonearm...but in this case the tonearm contains a small vacuum nozzle that sucks up the solution as the record turns and the tonearm moves across. These also sell for around ~$1000, but some crafty individuals have figured out how to relatively simply copy the design DIY.
I looked at their projects and borrowed a lot of their ideas to make mine.
I used an Arduino to control everything...I will paste the code at the end.
Parts list after the Arduino code...
Also links covering all my research sources at end...(btw, this is my working prototype...I don't like the platter, definitely don't like the box, I need to 3D print some parts to hold the servos, the arduino and relay, and the 'head'...maybe even replace the whole tonearm assembly...
To start, I needed a basic setup to build from...so I figured I could hack apart an unwanted turntable and start there. I knew I needed a removable platter with a spindle, so a belt drive turntable made sense...I lucked out in that the spindle was removable from the turntable and almost exactly the same as the geared motor I had...close enough that I could use the 10mm coupler to join the gear drive to the spindle...and the platter mounted on the spindle with no interference.
I just needed to tap the gear housing for bolts (already had 3 pre drilled bosses, a metric tap was closest in size, so I used metric. I was then able to use different length bolts with some nuts to get the proper platter height.
So platter issue is solved...now the hard part...
Luckily the existing tonearm was open enough for me to use it with minimal modification.
The Monk/Loricraft design has the vacuum attached to the tip (where the stylus would be). Using the desoldering tip (made of Teflon) I removed the center part (tip is force fit into outer housing). That center tip portion I mounted into the tonearm head (where the stylus would have gone) with some hot glue so that it protrudes out of the top of the head about 1/4".
Some brass tubing connected to hose snakes that down behind the tonearm through a slot in the deck...more tubing connects that to the collector jar, and then to the vacuum.
Another aspect of the design is to have a bit of thread under the vacuum tip, to keep the tip off the record...this I fished through using the 1/16" heatshrink tubing through the middle of the tonearm. (I used the vacuum to suck it through...only mistake was cutting tubing BEFORE sucking thread through...)
So no mod to the tonearm itself other than the addition of some parts and adding a bigger spring on the back (vs counterweight in nicer tonearms) to counteract the weight of the added hardware (still tweaking that).
Underneath the deck was a bit more work. I was able to reuse the control arm for the tonearm, but I needed the pushrod linkages to connect the servo to it...I drilled a couple of holes before I got the geometry correct (180 swing of servo might not be enough throw depending on where it attached to tonearm control arm.)
There is a control/smoothness tradeoff...the shorter the throw of the servo, the more granular the movement, so I put it as far out on that mounting arm as I could and still get the full tonearm movement I needed.
Second underdeck challenge is raising the tonearm...there is an existing assembly that even has a cushion to slowly lower the arm...I fiddled around until I got it to work right.
The red is the back of some thick double sided sticky tape to make it closer to the servo arm, and allow some 'give' (that same tape is used throughout this prototype..the servos are currently mounted using it...)
(action video)
I think that is about enough hardware info...now the Arduino code...
Here comes the code...I think it is documented adequately...
...BTW, the circuitry in the picture above are simply a resistor for the button circuit, one for the led circuit, and a bunch of connectors so I can unplug things as needed for testing/fixing...
(Due to a Blogger limitation I had to edit in the brackets symbol around the Servo.h after #include...cut and paste FROM this page seems to work...but when you compile you will get an error there...you will have to manually edit in the correct brackets, everything else should work as a large cut and paste)
//recordcleaning code apparently the relay module uses LOW to activate relay and HIGH to deactivate
#include <Servo.h>
Servo myservolift; // create servo object to control a servo
Servo myservomove; // create servo object to control a servo
// twelve servo objects can be created on most boards
int poslift = 0; // variable to store the servo position
int posmove = 0; // variable to store the servo position
int ledPin = 13; // choose the pin for the LED
int inPin = 7; // choose the input pin (for a pushbutton)
int val = 0; // variable for reading the pin status
int relm = 6; // relay motor control
int relv = 5; // relay vacuum control
void setup() {
myservolift.attach(9); // attaches the lift servo on pin 9 to the servo object
myservomove.attach(10); // attaches the move servo on pin 10 to the servo object
myservolift.write(poslift); // lifts tonearm
myservomove.write(posmove); // moves tonearm
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inPin, INPUT); // declare pushbutton as input
pinMode(relm, OUTPUT); // set 6 as relay output for motor
pinMode(relv, OUTPUT); // set 5 as relay output for vacuum
digitalWrite(relm, HIGH); // stop turntable motor
digitalWrite(relv, HIGH); // stop vacuum motor
}
//subroutine to run cleaning cycle
void CleanRoutine() {
digitalWrite(ledPin, HIGH); // turn LED ON
val = 0; // clears the inital pushbutton entry just in case
for (poslift = 0; poslift <= 90; poslift += 1) { // goes from 0 degrees to 90 degrees
// in steps of 1 degree to lift tonearm
myservolift.write(poslift); // tell liftservo to go to position in variable 'poslift'
delay(50); // waits 15ms for the servo to reach the position
}
digitalWrite(relm, LOW);
for (posmove = 0; posmove <= 110; posmove += 1) { // goes from 0 degrees to ~180 degrees
// in steps of 1 degree
myservomove.write(posmove); // tell moveservo to go to position in variable 'posmove'
val = digitalRead(inPin); // read input value to see if it should abort
if (val == HIGH ) { // check if the input is LOW (button pressed)
goto exit; // sends to end of routine to abort
}
delay(15); // waits 15ms for the servo to reach the position
}
// start turntable motor
delay(2000);
val = digitalRead(inPin); // read input value
if (val == HIGH ) { // check if the input is LOW (button pressed)
goto exit; // sends to end of routine to abort
}
digitalWrite(relv, LOW); // LOW turns on relay to start vacuum
delay(2000); // delay to allow vacuum to reach full power
for (poslift = 90; poslift >= 0; poslift -= 1) { // goes from 90 degrees to 0 degrees
myservolift.write(poslift); // tell liftservo 'poslift' to lower tonearm
delay(15); // waits 15ms for the servo to reach the position
val = digitalRead(inPin); // read input value - abort?
if (val == HIGH ) { // check if the input is LOW (button pressed)
goto exit; // sends to end of routine to abort
}
}
for (posmove; posmove >= 40; posmove -= 1) { // goes from 180 degrees to 60 degrees
myservomove.write(posmove); // tell moveservo variable 'posmove' to move tonearm to edge
val = digitalRead(inPin); // read input value - abort?
if (val == HIGH ) { // check if the input is LOW (button pressed)
goto exit; // sends to end of routine to abort
}
delay(1000); // 2000 so that entire record gets vacuumed - maybe longer
}
exit: // just a marker so the abort button has somwhere to go
AbortClean(); // same routine whether done with the cycle or aborting the cycle
}
//subroutine to end cleaning cycle - lifts and parks tonarm
void AbortClean() {
for (poslift = 0; poslift <= 90; poslift += 1) { // goes from 0 degrees to 90 degrees
// in steps of 1 degree
myservolift.write(poslift); // lift tonearm
delay(15); // waits 15ms for the servo to reach the position
}
delay(500);
digitalWrite(relv, HIGH);
delay(3000);
for (posmove; posmove >= 0; posmove -= 1) { // goes from 'posmove' to 0 degrees
myservomove.write(posmove); // move tonarm to park position
delay(30); // waits 15ms for the servo to reach the position
}
for (poslift = 90; poslift >= 0; poslift -= 1) { // goes from 180 degrees to 0 degrees
myservolift.write(poslift); // lower tonearm to park
delay(15); // waits 15ms for the servo to reach the position
}
digitalWrite(relm, HIGH); // HIGH turns off turntable motor relay
digitalWrite(ledPin, LOW); // turn LED OFF
status = 0;
}
void loop() {
val = digitalRead(inPin); // read input value
if (val == HIGH ) { // check if the input is LOW (button pressed)
delay(15);
CleanRoutine();
}
}
...enough code...
Parts:
- Arduino Uno (Redboard)
- power supply for Arduino
- 2 servos (I used very small metal gear ones)
- Hobbypark 25pcs Adjustable Pushrod Connector Linkage Stoppers D1.3mm (Amazon)
- Excelity® 2 Channel DC 5V Relay Module for Arduino (Amazon)
- 80 RPM 120 VAC Brevel Gearmotor 5-1572 (ebay)
- uxcell 10mm to 10mm Bore Brass Robot Motor Wheel Coupling Coupler w Tight Screws
- Thomas 2450AE44 Oil Free Compressor- Vacuum Pump 115 V 2-3 CFM (eBay)
- 70-031 Replacement Tip For Desoldering Pump (from Parts Express)
- Gudebrod Fishing Rod Winding thread Nylon Size D, Dark Blue 246. (ebay)
- Winters PFQ Series Stainless Steel 304 Dual Scale Liquid Filled Pressure Gauge,
30"Hg Vacuum/kpa, 2" Dial Display, 1/8" NPT Back Mount (Amazon...didn't need to be liquid)
- 2 of Fitting Pipe Bulkhead NPT 1/2" Male to 1/4" Female Adapter Brass (Amazon)
- ADAM TECHNOLOGIES IEC-GS-1-100 Power Entry Module Unfiltered Male 3 Position,
Switch/Fuse Straight, 1.5" (bulkhead power with switch and fuse) (Amazon)
- 2' length of 1/16" heatshrink tubing (Amazon)
- various odds and ends plumbing, wiring, screws etc...
- some wood for box
- donor Sony PS-LX250H Turntable (eBay)
Links
http://secret-sound-labs.net/wash.htm
Different source of same page
Same links translated
http://www.pisshead.net/ls/
Same link translated
https://www.lencoheaven.net/forum/index.php?topic=9217.0
https://www.lencoheaven.net/forum/index.php?topic=843.0
https://www.canuckaudiomart.com/forum/viewtopic.php?f=32&t=15910
https://www.htforum.nl/yabbse/index.php?topic=108431.0
http://audiokarma.org/forums/index.php?threads/thread-buffer-rcm-i-the-works.204450/
https://www.youtube.com/watch?v=Wqll7_J63G0
https://www.youtube.com/watch?v=gr7bXNiiEnM
https://www.youtube.com/watch?v=KbUDuHhT10w