2 Input Problem (Serial, Taster ->Rückmeldung)

Liebe Arduinofreunde,

Ich arbeite zur Zeit an einem Projekt und bin mir noch nicht so ganz sicher, wie ich das umsetzten kann.

Zu meiner Problemstellung:

Ich habe einen (später 5 ) Linak Aktuator, sowie das MEGA ADK

http://www.linak.de/corporate/pdf/german/datenblatt/linearantrieb_la36_datenblatt_dt.pdf

Dieser ist leider nicht so schön anzusteuern wie ein Servo.

  • Der Akt. hat 2 Eingänge, legt man dort jeweils 5 Volt an, fährt der Aktuator ein, bzw. aus.
  • Die Rückmeldung wo er steht erfolgt über eine Leitung die die Spannung von 0,5 Volt (voll eingefahren) bis 4,5 Volt (voll ausgefahren) anzeigt.
  • An den Endpositionen schaltet der Akt intern aus. (gut! )

Was soll nun passieren:

Zum einen soll der Aktuator über einen 2 Wege Taster manuell aus, bzw eingefahren werden. Soll heißen, so lange der Taster nach oben oder unten gedrückt (Und gehalten) wird fährt der Akt. So weit so einfach.

Das zweite, was passieren soll, und jetzt wird’s tricky, zusätzlich soll der Akt. auch noch über ein Touchpanel/PC whatever, steuerbar sein. Also ein Serial.Read.

Hier soll aber ein diskreter Wert einstellbar sein. Also wenn ich Akt=50% (slider) einstelle dann soll er mit Hilfe der ausgelesen Spannung, wie Eingangs erwähnt, an diese Stelle fahren.

Regelroutine wäre ja dann auf deutsch: Fahre Akt bis Spannung = X (im bsp ca. 2,5 Volt)

Und jetzt kommt der Punkt, wo mir noch nicht klar ist, wie ich da ran gehe:

Wie bringe ich da meine Taster unter. (Wäre in etwa vergleichbar mit der Sound Geschichte beim PC. Ich kann ja mit der Mouse den Regler rauf und runter ziehen, habe aber aussen am PC auch einen +, - Taster.)

Also um es nochmal anderes zu formulieren:

Ich möchte über die PC/Touch Oberfläche den Akt über einen Regler (Wie sound) einstellen können, zusätzlich auch über die Taster. Der Regler auf dem Bildschirm muss dann natürlich auch hoch und runter fahren.

Gibt’s da Beispiele oder was ähnliches, wo ich anpassen kann?

Vielen Dank!

Beispiele eher nein, aber so schwer ist das nun doch auch nicht zu programmieren. Du solltest nur vorab festlegen, was vorrangig laufen soll. Gleichzeitig geht sowas schnell in die Hose. Denn wenn am TP nun einer sagt, fahre 100% auf, und der andere drückt auf den Taster nach unten für zurückfahren.

Einfachhalber würde ich sagen, TP vorrangig. Sprich wenn ein Befehl gesetzt wurde, fahre bis 50%, dann darf in der Software der Taster erst wieder aktiv werden. Kannst am besten etwas mit Zeiten (keine delays!) arbeiten. Sobald am TP ein Wert eingestellt wird, blockiere Taster solange bis Stellung erreicht wurde.

P.S.: Für die Lagestandsrückmeldung kannst du auch einfach den Potentiometer nehmen, falls dieser günstiger ist. Für die Positionierung wirst du vermutlich keine Schnittstelle wählen (Kostengründe). Läuft der Motor stark nach, oder reicht es, wenn du ihn abschaltest, wenn er bei 50% steht.

Vielen Dank für Deine Anwort,

Ich sag grad ein paar Sätze, vorab um was es geht, dann kann man es sich besser vorstellen. Es geht um ein Versuchsfahrzeug. Die Fahreigenschaften sollen über die Akt. verändert werden, während der fahrt um Messwerte zu bekommen. Also die ganzen Daten, wie Akt Stellung, Speed, usw werden gespeichert um später ne automatische Regelung zu entwicklen. (man braucht dann keine Taster mehr)

Das TP sowie die Taster befinden sich im Fahrzeug. Das Tp soll dazu da sein, die Akt an fixe Positionen zu verfahren. Also bsp alles 50%. Somit hab ich erstmal ne Einstellung wo sie sich befinden, und seh das auf dem Display. Die Taster sollen dann während der fahrt einfache und schnelle Änderungen ermöglichen. “Nach Gefühl” Somit würde nie das Tp und die Taster gleichzeitig bedient. Da nur ein Mann das ding fährt.

Aber aus Sicherheitsgründen würde ich die Taster blocken, wärend das TP die Akt verfährt.
Würde ja dann in etwa so aussehen, oder?
if(!digitalRead(TP)&&digitalRead(SW1))

Mir gehts jetzt ersmal nur um die beiden Eingänge, wie ich die Programiertechnisch unter einen Hut bekommen. Die Regelung des Akts selber ist dann auf nem anderen Blatt. Wie müßte so ein Bsp code aussehen?? 2 Taster und die Daten vom Touch?

PS:

Die Positionierung soll übers Poti laufen. Was anderes haben wir hier nicht (Mein Chaf hat gespart) Das Problem ist, wie Du sagts der Nachlauf. Denn kann man zwar reduzieren, aber das geht zu Lasten der Kohlen. Wenn das nicht gut programimert ist, dann kann es sein, dass sich der Aktuator hin und her regelt, bis in alle Ewigkeit. Da gehts dann um so fragen, wie klein das “Sollintervall” sein darf. Das ist wiederrum stark abhängig, wie gut man mathematisch den Nachlauf zu packen bekommt.

Beispiel: Du stellst ein Akt. = 50 % → Programm weiß: Akt 50 % bei 2,5 Volt → Also, fahre Akt bis v = 2,5 Volt → Und jetzt wird spannend. Ich muss ja früher abschalten, aber das ist von Last und Speed abhängig. Also werd ich v_soll = v_ist nicht exakt erreichen-> Also definiere ich ein Intervall in dem “gut” ist. Bsp 2,3 - 2,6 Volt. (Aber wenn er erst bei 2,7 Volt zum stehen kommen, dann fährt er zurück und landet bei 2,2 Volt. weil der Nachlauf einfach zu lang ist… Dann geht das Spiel bis in alle Ewigkeit… Das wird nochmal ne andere Baustelle

Beispielcode kann man nicht so einfach raushauen.

"if(!digitalRead(TP)&&digitalRead(SW1)) "
Was für ein TP ist verbaut? Normalerweise hat das TP keine DOs. Denke mal, du wirst das Seriell oder ähnlich erfassen.

Mit dem Nachregeln musst du im Test sehen, wie sich die Motoren verhalten. Man kann sagen, wenn

Ist = 0% Soll = 50%
Motor fährt solange bis Rückmeldung 50% erreicht ist. 1s warten, erneut abfragen. Wenn die Rückmeldung im Soll inkl. Toleranz liegt. Rückmeldung das erfolgreich gestellt wurde, alternativ minimal nachregeln.

Hi, das Disply ist ein 4D Systems µLCD-43PT

Das ist aber erst gestern gekommen und ich habe noch keine Erfahrungen damit machen können, vor allem, weil ich natürlich das Programierkabel vergessen hatte zu bestellen.

Ja, das habe ich mir auch so in etwas gedacht, mit dem Akt. Leider hab ich den auch grad nicht hier, der wird im Moment eingebaut ins Fahrzeug, somit habe ich mit nem 2. Arduino Board den Akt simuliert.
So lang es den Befehl "ein/ausfahren" bekommt, regelt es die Spannung rauf oder runter (0,5 bis 4,5Volt) inkl eines Zeitversatztes (nachlauf) der Einstellbar ist, sowie einem kleinen zufallsgenerieten Zeitintervalls, das in der Realität ja auftritt durch äußere Einflüße. Aber das ist erstmal nicht so wichtig. Erstmal die Eingangssteuerung.

Auf dem Display will ich dann noch die GPS Daten, Speed, Motordrehzahl, Sonar (ist ein Wasserfahrzeug) anzeigen lassen. Das läuft über NMEA 2000 (can bus). Also wie Du siehst, ne größere Geschichte und leider bin ich noch nicht so fit mit Arduino... Aber das wird schon...

Alles klar, das Display ist zum Arduino kompatibel :wink: Wenn andere bestellen, weiß man nie, ob es auch wirklich zusammen passt :wink: