Hallo Forum,
ich bin mitten im Bau einer Waschmaschine für Schallplatten mit einer Punktabsaugung. Diese wird über den Tonarm eines alten Plattenspielers transportiert. Dazu möchte ich den Tonarm mittels eines Servos steuern, damit sich dieser zuerst auf die Schallplatte, dann langsam über die Schallplatte hinweg bewegt.
Ablauf:
– Zu Beginn auf die 0° Position kalibrieren
– Langsam (0.2sec/grad) auf 20° bewegen
– Pause von 5 sec
– Bewegen auf 45° in einer Geschwindigkeit von 5sec/grad, am besten in 0,5° Schritten
– Stop bei Erreichen der 45°
– Tonarm wird dann wieder manuell auf die 0° Position bewegt
Dazu ein Schaubild:
Mit folgendem Code (kopiert von turanis) habe ich bisher experimentiert:
#define SERVO_SIGNAL_PIN 9
void setup()
{
pinMode(SERVO_SIGNAL_PIN, OUTPUT);
for(int i=0; i<45; i+=1){
setServoAngle(i);
delay(2000);
}
}
void loop()
{
}
void setServoAngle(byte angle)
{
// calculate angle to delayTime
int delayTime = map(angle, 0, 180, 1000, 2000);
digitalWrite(SERVO_SIGNAL_PIN, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SERVO_SIGNAL_PIN, LOW);
delay(20); // short pause at the end of the regulating
}
Dieser bewegt immerhin den Tonarm von 0° auf 45°, allerdings kommt es manchmal dazu, das der Tonarm zu Beginn die vollen 180° des Servos dreht, was ich gerne ausschließen möchte (genauso wie andere ruckartige Bewegungen).
Wie ich nun den ersten Teil des Weges und die Pause einstelle oder plötzliche Bewegungen ausschließe, dazu bin ich noch nicht erfahren genug (keinerlei Programmierkenntnisse). Habe bisher einige Codes aus dem Web (Mit Servo Library und ohne) ausprobiert, bin bei oben geposteten Code gelandet.
Ist jemanden eine Lösung in Form eines Codes für einen ähnlichen Anwendnungsfall bekannt, kann mich in die richtige Richtung stoßen oder gar helfen, würde mich wirklich sehr freuen.
Die Hardware:
Arduino Uno
Servo: Analog, Blue Bird BMS-621MG (Angeschlossen an externer Stromversorgung 6V).
Vielen Dank!