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
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)
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.
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
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.
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?