• The move to the new server is done. There are some software and database maintenance updates in process. This has us passing the hat around to help out. We appreciate any donations. Seriously, even a dollar helps. The payment page may be found here - https://www.audiokarma.org/support.html

DIY Automatic end-of-record tonearm lifter on Technics SL-1200 MK 2

Register to hide this ad
is this a GPIO board, infra red sensor and relay to trigger the motor?
I used Arduino to trigger the servo motor. Yes, infra red (IR) beam sensor is used. I positioned the sensor, so that at the dead wax, counterweight would break the IR beam, then lift the cue lever.
I used LEGO because my kids no longer use it, and it is very suitable for making prototype. (Plus I'm cheap.)
The system itself works well once sensor is positioned well.
Also, there is no need for resetting auto lifer for each play, it just lift tonearm up.
 
Really cool! Question though, could you program it to move less abruptly? I know the cue lever doesn't jerk up but the action of the trigger is a bit startling.
 
Very clever, and looks fine for a prototype.

But after rising, the cartridge swings hard to the outside. Maybe the antiskate is set a bit too dramatically?
 
The anti-skate was set correctly, but tracking force was about 2.75gram that time, so I think it's quite normal (at least on my SL-1200 MK2)

Also, it is possible to lift slowly, but the code below does not do that.

Here's the code. Once again, it's not elegant code.
I cannot believe I'm asked about this, years later I posted the video here.
(I might be the first one to post Arduino code here in Audio Karma... maybe not)

============== CODE ===============
/*
Automatic Tone lifter using a servo & IR break sensor
*/
#include <Servo.h> // Use Servo library
Servo myservo; // create servo object to control a servo

#define LEDPIN 13 // Pin 13: an LED on pin 13 (lit when the IR beam is broken)
#define SENSORPIN 4 // Pin 4: IR break beam sensor
#define SERVOPIN 9 // Pin 9: To Servo motor signal

int REST_POS = 5; // servo angle, lowered tonearm (rest/playing)
int LIFT_POS = 75; // servo angle, raised tonearm (reached dead wax)

// variables will change:
int sensorState = 0, lastState=0; // variable for reading the pushbutton status

void setup() {
myservo.attach(SERVOPIN); // attaches the servo on pin 9 to the servo object
myservo.write(REST_POS); // Set tonearm down (initial position)

pinMode(LEDPIN, OUTPUT); // initialize the LED pin as an output:
// initialize the sensor pin as an input with pullup:
pinMode(SENSORPIN, INPUT_PULLUP);
}

void loop() {
// read the state of the pushbutton value:
sensorState = digitalRead(SENSORPIN);

// check if the sensor beam is broken
// (sensorState is LOW, means IR beam is broken, tonearm reached dead wax)

digitalWrite(LEDPIN, !sensorState); // Turn ON or OFF the LED

if((sensorState == HIGH) && (lastState == LOW)) {
// Unbroken (tonearm down): sensorState == HIGH
delay(1000); // wait 1 second before moving tonearm
myservo.write(REST_POS); // tell servo to lower tonearm
delay(1000); // wait 100ms for the servo to reach the position
}
else if((sensorState == LOW) && (lastState == HIGH)) {
// Broken (lift up tonearm): sensorState == LOW
delay(1000); // waits 1000ms for the servo to reach the position
myservo.write(LIFT_POS); // tell servo to lift up tonearm
delay(1000); // waits 1000ms for the servo to reach the position
}
lastState = sensorState; // remember the current sensor state
}

============== / CODE ===============
 
Back
Top Bottom