Forum: Mikrocontroller und Digitale Elektronik Plattenspieler Steuerung


von Michi (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich bedanke mich schon mal für die Antworten :D.

Ich habe folgendes vor, Ich will mit einen Arduino meinen selbstgebauten 
Plattenspieler steuern.
Ich habe schon jetzt das Programm geschrieben das ich den Motor über den 
Controller mit einen Beleuchteten Taster starten kann und wieder 
ausschalten kann. Ich will aber wenn der Motor läuft mit einen Relais 
zwei Potis schalten wo ich zwischen den 45 und 33 umschalten kann über 
einen zweiten Beleuchten Taster. Das Relais darf aber erst anziehen und 
der Taster leuchten wenn der Motor läuft.
Was muss ich den noch zu den Programm hinzufügen um über den Analog 
Eingang meine Potis zu steuern, um die Geschwindigkeit zu ändern?
Ich habe den Motorcontroller L298N Driver (eine fertige Platine aus 
China).
Wie gesagt ich habe es schon soweit das ich mit einen Taster den Motor 
ein und ausschalten kann aber will noch die Funktion Drehzahl hinzufügen 
wo ich die Potis über ein Relais umschalten zu um 33rpm und 45rpm zu 
ändern.

Ich hoffe das ihr versteht was ich will und das ich es genau erklärt 
habe:D



Hier habe ich das Programm was ich geschrieben habe:
Die anderen Eingänge und Ausgänge habe ich schon drinnen aber noch nicht 
fertig ins Programm eingefügt, deswegen wende ich mich an euch :)

const int pwm = 10;
const int dreh = 9;
const int LEDstart = 2;
const int Start = 5;
const int LED45 = 3;
const int pm45 = 4;
const int Relais = 12;

int state;
int lastState;
int ledState;

void setup() {
  pinMode(dreh, OUTPUT);
  pinMode(pwm, OUTPUT);
  pinMode(LEDstart, OUTPUT);
  pinMode(Start, INPUT);
  pinMode(pm45, INPUT);
  pinMode(LED45, OUTPUT);
  pinMode(Relais, OUTPUT);

  Serial.begin(9600);
}

void loop() {
  state = digitalRead(Start);

  if (state != lastState)
  {
    if (state == HIGH)
    {
      if (ledState == HIGH)
      {
        ledState = LOW;
        Serial.println("LED AUS");
      }
      else
      {
        ledState = HIGH;
        Serial.println("LED EIN");
      }
    }
    lastState = state;
  }

  digitalWrite(LEDstart, ledState);
  digitalWrite(dreh, ledState);
  digitalWrite(pwm, ledState);
  delay(20);
}

Im Anhang von den Controller und meinen Plattenspieler

Vielen dank in voraus

LG

Michi

von Joachim B. (jar)


Lesenswert?

Taster prellen, ich nutze ja gerne die bullet proof Entprellroutine von 
PeDa
alle 10ms einen Interrupt und dort die Tasten einlesen, in der loop wird 
der Status der Tasten eingelesen und reagiert.

https://www.mikrocontroller.net/articles/Entprellung
runterscrollen
Komfortroutine (C für AVR)

von MaWin (Gast)


Lesenswert?

Erst mal müsstest du überhaupt über den PWM Ausgang nicht durch 100%iges 
Einschalten sondern eben echtes PWM den Motor in der Drehzahl rrgeln, 
und dazu müsstest du die aktuelle Drehzahl messen können, vielleicht 
über einen Hallsensor.

Der Programmcode des PID Reglers der die Trägheit des Plattentellers 
einrechnet ist 10 x aufwändiger als dein bisheriger code. Danach 
erscheint dir eine Sollwertänderung durch einen Taster wie Pippifax, und 
das Relais mit Potis wird überflüssig.

Sprich: Der Weg ist noch weit. Und kann nichg mit einer kleinen Antwort 
gemeistert werden.

von Michi (Gast)


Angehängte Dateien:

Lesenswert?

Danke für die schnellen Antworten:)

Achso ja ich hatte es über diese Schaltung gemacht das hat dann 
funktioniert zumindest die Geschwindigkeit mit den Poti einstellen.

Würde die Schaltung halt gerne dann mit den Relais umschalten.

Hier das Programm von der Seite:

#define enA 9
#define in1 6
#define in2 7
#define button 4
int rotDirection = 0;
int pressed = false;
void setup() {
  pinMode(enA, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(button, INPUT);
  // Set initial rotation direction
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
}
void loop() {
  int potValue = analogRead(A0); // Read potentiometer value
  int pwmOutput = map(potValue, 0, 1023, 0 , 255); // Map the 
potentiometer value from 0 to 255
  analogWrite(enA, pwmOutput); // Send PWM signal to L298N Enable pin
  // Read button - Debounce
  if (digitalRead(button) == true) {
    pressed = !pressed;
  }
  while (digitalRead(button) == true);
  delay(20);
  // If button is pressed - change rotation direction
  if (pressed == true  & rotDirection == 0) {
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    rotDirection = 1;
    delay(20);
  }
  // If button is pressed - change rotation direction
  if (pressed == false & rotDirection == 1) {
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
    rotDirection = 0;
    delay(20);
  }
}

Hier der link:

https://howtomechatronics.com/tutorials/arduino/arduino-dc-motor-control-tutorial-l298n-pwm-h-bridge/

Könnte ich das nicht zu meinen Programm hinzufügen, und das ich mit den 
zweiten Taster halt das Relais schalte.

Gruß

Michi

von MaWin (Gast)


Lesenswert?

Michi schrieb:
> Könnte ich das nicht zu meinen Programm hinzufügen, und das ich mit den
> zweiten Taster halt das Relais schalte.

So ungefähr, Richtungsänderung braucht man bei einem Plattenspieler 
nicht, nutze es um zwischen 33 und 45 umzuschalten.
33 und 45 sind fest, man braucht kein Poti. Will man ein bischen 
einstellen, von 30 bis 37 und 38 bis 52, dann kann man 2 Potis an 2 
Analogeingänge anschliessen, und schaltet nur die Auswertung im Programm 
um.
Eine DrehzahlREGELUNG ist das aber noch lange nicht.

von H.Joachim S. (crazyhorse)


Lesenswert?

Echt alles aus Holz? Nagut, für ne Demo geht das sicherlich, und so 
genau kommts dann auf die exakte Drehzahl gar nicht an.

Das grössere Problem wird eh der Tonarm. Willst du den auch selbst 
bauen?

von Michi (Gast)


Angehängte Dateien:

Lesenswert?

Den habe ich schon gebaut. Funktionieren tut das auch alles.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.