Hi.
Ich hab hier einen Verteiler, der verschiedene Getränke mischen soll.
Ich habe aber Probleme mit der Positionsermittlung.

Zuerst aber mal ein Bild (Draufsicht):
Bild hier  
Ein Grundkörper, in diesem ist eine Kreistasche herausgerfräst, in der eine Scheibe läuft. Die Scheibe ist mit einer Taktscheibe verbunden, in die Bohrungen mit einer Teilung von 15° gebohrt wurden.

Von vorne:
Bild hier  
Unten im Grundkörper sieht man hier ebenfalls die Bohrungen; gleiche Teilung wie in der Taktscheibe (15°).

Der Sensor (Isometrisch von unten):
Bild hier  
Die eine zusätzliche Bohrung ist zur Bestimmung des Referenzpunktes. In die Bohrungen der Abfrageeinheit kommt jeweils eine IR-Lichtschranke.


Nun zum Problem:
Der Verteiler, soll die verschiedenen Positionen anfahren können, dabei wird einfach der Referenzpunkt angefahren und ab diesem gezählt.
Manchmal funktioniert das und manchmal nicht und das Ding verzählt sich.
Ich glaube es liegt an dem zu langsamen Abfragen, allerdings benutze ich einen Java-Mikrocontroller, der das leider nicht schneller kann.

Was kann ich verbessern?
Meine Vorschläge:
- einen Winkelsensor, bzw. ein Poti (das aber keinen Endanschlag haben sollte), so hätte ich immer einen absoluten Wert, aber ist das genau genug?
- den Durchmesser der Taktscheibe vergrößern (ich kann sie ja fast bis auf das doppelte vergrößern, allerdings will ichs nicht machen, wenn es nachher doch nichts bringt - wieder die Frage ob es genau genug ist.)
- die Scheibe langsamer drehen lassen, nur wie? (Wird angetrieben mit einem VW-Scheibenwischermotor auf der langsamen Stufe)

Eigentlich kann ich mir nicht vorstellen, das der Mikrocontroller nicht mitkommt mit dem zählen, denn soo schnell ist das ja auch wieder nicht. vielleicht liegt es auch an der Programmierung.

Hier ein Code-Schnipsel zum aufwärtsbewegen, auch wenn hier wahrscheinlich keiner einen Mikrocontroller mit java programmiert...

Code:
static private void moveUp(int x) {
    while (GLOBAL.MIX_POS < x) {           //solange aktuelle Position kleiner als neue
      powerUp(true);                       //Motor-Linkslauf einschalten
      while (isPos()) {}                   //warten bis auf Position
      while (!isPos()) {}                  //warten bis nichtmehr auf Position
      powerUp(false);                      //Motor-Linkslauf ausschalten
      GLOBAL.MIX_POS++;                    //aktuelle Position um eins erhöhen
      TOOLS.pause(MOTOR_PAUSE_MOVE);       //kurze Pause, sonst klappts gar nicht mit dem zählen (10ms)
    }
  }

Wie würdet ihr das lösen?
Bin natürlich auch für jede andere Idee dankbar!