Gegebenheiten:
Ich habe einen Nema 17 Schrittmotor mit einen TB6600 Motortreiber der funktioniert und eine Rolle antreibt. Weiterhin eine Potentiometer welches wiederum mit einer anderen Rolle mechanisch verbunden ist.
Rolle 1 und Rolle 2 sind über ein durchlaufendes Etikett verbunden, so dass wenn sich der Motor dreht, automatisch die Rolle dreht an der das Potentiometer angeschlossen ist.
Idee:
Motor treibt Rolle 1 für eine bestimmt kurze Zeit an und das Potentiometer misst, wieviele Umdrehungen die Rolle 2 macht, mit der es verbunden ist.
Problemstellung:
Ich poste im Anschluss nur Ausszüge aus den Programm, nicht den kompletten Code, damit ersichtlich wird, wie es (an)gesteuert wird.
Wie kann ich mit den gemessenen Poteniometerwert Einfluß auf die Laufzeit des Motors nehmen?
Von der Theoreie speichere ich den Wert in den EEPRom, was auch funktioniert, um ihn auch noch einen Neustart des Programms verfügbar zu haben. Beim nächsten Mal soll der Motor beim Drücken eines Knopfes/ Buttons genau solange laufen, bis ich den Wert aus dem EEPROM erreicht habe.
Sprich beim Code des Motors muss ich Einfluss auf den Punkt Index<300 haben, weil die ja die Lauflänge des Motors bestimmt oder ganz anders??
Ich überlege mir zu eine Art Tabelle zu machen. 300 wird mit der Variable "laufdauer" eretzt. Potentimeter 1=laufdauer 50, Potentiometer 2= laufdauer 100,
Potentiometer 3= laufdauer 150 usw., um so die Laufdauer des Motors zu bestimmen, jedoch glaube ich, dass dies auch einfacher geht.
Drehgeber: egal wo ich für den Drehgeber die Variable deklariere, ob in einer Methode oder global am Anfang, merkt sich das Programm den Wert der Variable "newPos". Liegt das an der Bibliothek Encoder?
Code Drehgeber:
Encoder myEnc(2, 3);
void setup() {
Serial.begin(9600);
Serial.println("Basic NoInterrupts Test:");
}
long position = -999;
void loop() {
long newPos = myEnc.read();
if (newPos != position ) {
position = newPos;
Serial.println(position);
}
Die Rolle 1 vom Motor wird durch das aufgewickelte Etikett immer dicker. Somit ist die Laufdauer mit zunehmender Dauer und Dicke der Rolle anders. --> Daher ist es die Idee, über den Drehgeber der an Rolle 2 ist, die Dauer zu messen.
Beim Tonbandgerät sorgt die Rutschkupplung des rechten Bandtellers lediglich für das leichte Aufwickeln des Bandes, während der eigentliche Bandantrieb über Tonwelle und Andruckrolle erfolgt. Dadurch bleibt die Bandgeschwindigkeit trotz des veränderlichen Wickeldurchmessers immer gleich.
Während dem "Programmieren" dreht sich Rolle 2 ja nicht wirklich und du müsstest den User anweisen, das erste Mess-Ettiket auch irgenwie anzukleben/festzuhalten - alles ein Drama.
Was sich aber immer konstant mitdreht ist die Rolle mit den blauen Bändern.
Daher würde ich den Encoder an der blauen Rolle anbringen,
Während der "Programmierung" von dort lesen und auch während dem Wickeln.
Bessere Lösungen gibts sicher, aber das ist was mir ad hoc gratis für ein kommerzielles Projekt einfällt.