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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.