Benötige Rat bei Auswahl des richtigen Potentiometer am analogen Eingang

Hallo, liebe Gemeinde.
Ich habe meinen Leonardo erst seit einer Woche (und ein Centipede seit gestern) und obwohl ich etwa 3 Stunden am Tag hier in diesem Forum Beiträge lese, tue ich mich mit manchen Dingen noch etwas schwer.

Mein Stand: Es ist mir gestern abend gelungen, die 64 Inputs am Centipede fehlerfrei mit Tastern auszulesen (polling) und jeweils ein entsprechendes ASCII-Zeichen in eine TextDatei zu senden. Den CP hatte ich erst seit zwei Stunden :stolzsein

Falls irgendwo Interesse besteht, kann ich den Code hier an geeigneter Stelle posten (bisher aber nur ein Skelett). War, jetzt von “hinterher” gesehen, ganz einfach. Lässt aber bestimmt noch Raum für Optimierung des Codes :slight_smile:

Meine Aufgabe (unabhängig von der Centipede-Affaire): Ich möchte gern mit einem Potentiometer an einem analogen Eingang an drei definierten Stellen (DrehWinkeln) ein bestimmtes ASCII-Zeichen an den PC senden.

Wie ich ein Poti anschließe und abfrage weiß ich schon von hier http://arduino.cc/en/Tutorial/AnalogReadSerial. Scheint ja wirklich sehr einfach zu sein.

Mein Problem: Die meisten handelsüblichen Potis haben einen maximalen Drehwinkel (Anschlag bis Anschlag) von ca 270 Grad bis 300 Grad. Meine 3 “Meßstellen” liegen jedoch nur 90 Grad auseinander.

Also Punkt1 bei 0, Punkt2 bei 45 und Punkt3 bei 90 Grad. (Wer möchte, kann “Punkt” gerne durch “Winkel” ersetzen :slight_smile:
Jetzt habe ich Angst, daß wegen der Fluktuation des Widerstandes (Wärme- oder Luftfeuchtigkeitsdifferenzen oder Verschleiß) meine Meßpunkte zu dicht beieinander liegen und ich somit mit Fehlern bei der Auswertung zu rechnen habe.
Mir ist schon klar, daß ich bei der Auswertung der Winkel mit Bereichen arbeiten muß. Aber wie das genau geht, finde ich dann schon selber raus :wink:

Meine Frage (2 Teile):

  • Welchen Wert sollte mein Poti am besten haben? (Wahrscheinlich ein Mehrfaches von 10k, da ich nur einen kleinen Teil der 300 Grad benutze)
    oder
  • Wie erreiche ich es mit möglichst wenig Code, die Auflösung so anzupassen, daß sich die zurückgegeben INT-Werte in MEINEM Bereich, also über die 90 Grad, von 0 bis 1023 erstrecken. Je mehr sich davon in meinen 90 Grad befindet, um so genauer kann ich das Ganze dann tunen. Stimmts?

Sollte mein Problem hier im Forum schonmal behandelt worden sein, bin ich für einen Link dankbar. Meine Suche ergab immer nur “Beinahe”- oder “Nahe-Dran”-Treffer.

Herzlichen Dank schonmal für die Anteilnahme.
Salut. DRESI.

Ein Poti wird immer an GND und Vcc (5V) angeschlossen und den Schleifer am Analog-Eingang.
Damit wird der ganze Drehbereich auf 0 .. 1023 abgebildet.

Diese tausend Werte ist weit mehr als du sicher einstellen kannst.

Der Widerstandswert ist völlig egal, 100 Ohm ist zu wenig und 1M zu viel, alles andere (1k ... 100k) ist ok und liefert das gleiche Ergebnis bei analogRead.

Die Umrechnung eines Wertes 0 .. 1023 in einen von 5 Zuständen { ZU KLEIN, (1), (2), (3), ZU GROSS }
machst du am besten mit einer enum Variable und 5 if - Abfrage

Hey. Das ging schnell :slight_smile: ... wieso habe ich eigentlich keine Mail bekommen ...

Wie anschließen usw. war mir schon klar... das allein wäre keinen Eintrag im Forum wert gewesen :slight_smile:
Daß der GesamtWiderstand unkritisch ist, finde ich allerdings gut.

Was mich beschäftigt ist, daß ich bei 90 Grad nur ein Viertel oder bestenfalls ein Drittel der 1024 Werte erfassen kann. Die ganze schöne Auflösung also zum Teufel ist.

Wie erreiche ich, daß ich (beispielsweise!) bei 0 Grad '0' erhalte und bei 90 Grad (nicht erst bei 300) '1023'?

map?!

DRESI:
Wie erreiche ich, daß ich (beispielsweise!) bei 0 Grad ‘0’ erhalte und bei 90 Grad (nicht erst bei 300) ‘1023’?

du kannst ja dein Poti sowieso nicht so exakt einstellen.

Letztlich wirst du Bereiche haben:

z.B.:
“0°” entspricht: 0° - 20° entspricht AD-Wert <75
“45°” entspricht: 35° - 55° entspricht AD-Wert 130 - 210
“90°” entspricht: 80° - 100° entspricht AD-Wert >300

Diese Beriche kannst du dann leicht softwaretechnisch abfragen.

Hallo,

Das der Gesamtwiderstand unkritisch ist, finde ich allerdings gut.

Nein, der ist nicht unkritisch. Wenn das Poti zwischen (+) und (-) hängt und der Potiwert ist zu klein, dann belastest Du Deine Spannungsversorgung unnötig und das Poti, dann gilt es dessen Verlustleistung zu beachten. Mal angenommen Dein Poti hat 1 Ohm, dann haste sogar einen Kurzschluss und das Poti raucht gleich ab. Standardwert für sowas sind 10k bei 5V bis 12V.

Was mich beschäftigt ist, daß ich bei 90 Grad nur ein Viertel oder bestenfalls ein Drittel der 1024 Werte erfassen kann. Die ganze schöne Auflösung also zum Teufel ist. Wie erreiche ich, daß ich (beispielsweise!) bei 0 Grad '0' erhalte und bei 90 Grad (nicht erst bei 300) '1023'?

Daran kannst Du nichts ändern. Weil Deine mechanischen Winkel vorgegeben sind, kannste Dich drehen und winden wie Du möchtest. Da hilft auch kein Mapping im Code. Weil das passiert alles erst nach dem einlesen. Und alle anderen Versuche mit Vorteilerwiderstand verschiebt Dir nur den eingegrenzten Wertebereich, macht ihn aber nicht größer.

Du kannst nur, fällt mir gerade ein, selber basteln, Du nimmst ein größeres Poti, öffnest das und legst den Endanschluss auf der Schleifbahn weitervor in die Nähe Deines größten Winkels. Damit eleminierst Du den nicht nutzbaren Totbereich. Am besten gehen dafür größere Drahtpotentiometer, da mußte nur eine Zinnbrücke drauflöten bis zu dem gewünschten Punkt. Oder besser mit etwas Draht. Aber denke dran, damit veringert sich auch der Potiwert selbst. Wenn 300° = 10k Ohm entsprechen, entsprechen dann 90° nur noch ca. 1/3, also 3k Ohm. Geht auch noch mit 5V.

DRESI:
… wieso habe ich eigentlich keine Mail bekommen …

Die Benachrichtungen funktionieren “zur Zeit” nicht. Also wenn Du einen wichtigen Thread speichern möchtest, setze ein Bookmark im Browser.

ich habe die benachrichtigung gekriegt, doc.

Hallo,

Offtopic, kann später gelöscht werden

das ging doch bei niemanden seit dem Forenupdate. Verstehe ich jetzt nicht.
Was hast Du in Deinen Settings eingestellt?
Ich kann den Haken bei:
"When sending notification of a reply to a topic, send the post in the email (but please don't reply to these emails.)"
nicht setzen. Nimmt er einfach nicht an unter Generell Setting.
Und Notifcations bekomme ich auch überhaupt keine. Alles wie tot. Trotz gesetzter Haken.
Das heißt, wenn ich mich im Forum nicht selbst umschaue und die ersten Seiten durchschaue ob jemand geantwortet hat, bekomme ich rein gar nichts mit. Das geht nicht nur mir so, laut letzter Unterhaltung darüber.
Wie hast Du das hin gezaubert? :slight_smile:

it’s magic …
keine ahnung, es ging mal, dann wieder nicht so richtig, dann habe ich da geguckt, nochmal neu gesetzt und seitdem kommen immer wieder notifications …

Hallo,

Du kannst scheinbar zaubern. Hab jetzt alles so eingestellt wie Du. Mal sehen ob sich der Zauber überträgt. :wink:
Erstmal Danke.

na dann müsstest du jetzt was bekommen :slight_smile:
ich habe deine nachricht als notification erhalten.

OK, Leute. Entschuldigt bitte. War eine Weile wegen der Arbeit AFK.

Was ich Euren Posts entnehme, ist, daß ich mir wohl viel zu viele Gedanken mache. Habe eben noch(!) keine Erfahrungen, wie weit der Widerstand eines Potis gewöhnlich so wandert.

Das das Poti nicht zu klein sein darf, war mir schon klar. Zu viel Strom.

Habe vorhin in der Werkstatt noch ein 47k gefunden. Mit dem werde ich das dann in den nächsten Tagen mal ausprobieren. Anhand der Ergebnisse kann ich dann ja evtl. ein Passenderes besorgen.

Zwischendurch werde ich dann mal mein Profil hier aufpolieren, damit Ihr wisst, mit wem Ihr's hier zu tun bekommen habt.
Ich bin erst vor 2 Wochen auf das Thema Arduino gekommen. Und mit jeder Lösung fallen mir neue "Gismos" ein, die ich schon vor langer Zeit mal machen wollte.
Will sagen: Wir werden uns wohl noch öfter begegnen :smiley:

Herzlichen Dank für Eure "Mitarbeit"
Bis dann.

@doc: notification gekriegt?, ich ja.

@dresi: dann herzlich willkommen. obwohl ich immer noch nicht verstanden habe warum du nur 90° drehen willst.

Na gut. FlyingEagle.
Ich will mir einen Gamecontroller für DCS A10C bauen.
Auf dem Teil sind zwei Dreh-Wählschalter mit 3 Positionen.
Da mir handelsübliche Drehschalter (ginge auch, mit Festwiderständen eben) einfach zu teuer sind (ist ja nur ein Hobby), will ich Potis nehmen und (wie genau, weiß ich noch nicht - wahrscheinlich mit einer Federzunge) eine Rastung an den 0/45/90 Positionen anbringen.

Andererseits ist das Thema vielleicht auch für andere Forenbesucher interessant. Vorstellbar wäre zum Beispiel ein Poti als winkel- oder Weg-Sensor in der Robotik....

Die digitalen IO habe ich schon alle(!) anderweitig verbraten. Bleiben also nur die analogen übrig.

Edit: Das Maul oben zu weit aufgerissen: Wenn ich mein Profil öffnen will, krieg ich bloß ein weißes Fenster mit dem üblichen Header und Foot. Ist das mein Fehler (Chrome)?
Edit: Habe das mit dem Profil (und evtl. auch das mit den Notifications) in Firefox hin bekommen. An den Einstellungen meines Chrome scheint was nicht zu stimmen.

Hallo,

@ Dresi: in meinem Post #5 ganz unten hatte ich noch eine durchaus brauchbare Idee geschrieben, aber falls Du den ganzen Aufwand nur machst weil dir die digitalen I/Os ausgegangen sind, dafür gibts Abhilfe in Form von Port Expander. Mit I2C oder SPI Schnittstelle. I2C ist hier sinnvoller. Dann hast 8 oder 16 oder noch mehr zusätzliche I/Os.

@ Flying: außer einer PN von jemanden wegen was anderen, kam nichts, keine Message und keine E-Mail. Scheinst irgendwie Glück zu haben. Was damit bestätigt das mit dem Forenupdate einiges versaut wurde. Die hätten das so lassen sollen wie es war, wenn sie keine Zeit für Bugfix haben. Das alte funktionierte ja.

äh, du haste alle ports des centipede voll? wollte dir grad den 23017 vorschlagen, aber den hast du ja dann schon.
irgendne drehmechanik gebaut und 3 mikroschalter genommen. dann ist dein gedanke an temperaturprobleme obsolet.

Hallo,

nehm alles zurück. Mail Benachrichtigungen kam jetzt rein. Scheint jetzt zu funktionieren.
Nochmal Danke für den Support.

@Doc_Arduino: Dein Vorschlag, ein Poti zu frisieren, hat sich eigentlich erledigt. Denn es scheint wohl so (aus der Summe aller Posts entnehme ich das), daß die Auflösung auf 90 Grad immer noch fein genug ist, um 3 deutlich identifizierbare Bereiche zu schaffen.

@All: Ist doch so. Oder?

@FlyingEagle: Ich habe ATM überhaupt noch nichts gebaut.

Alles was ich habe, ist ein Leonardo mit dem Centipede Huckepack und ich kann mit einer Drahtbrücke die einzelnen (also 14 plus 64) Pins gegen Masse legen und mein "Sandwich" schickt jeweils ein anderes ASCII-Zeichen an den Editor (z.B.).

Alles andere liegt hier entweder als Halbzeug in der Schublade oder als Zeichnung (PCB und Front-Plate z.B.) im Rechner.
Ich will, daß alles auf dem Labortisch funktioniert, BEVOR ich das PCB ätzen lasse. Kostet schließlich einen Haufen Geld.

Allerdings stelle ich inzwischen fest, daß mir das Experimentieren mit dem Arduino fast mehr Spaß macht als das, was ich am Ende damit bezwecken will :slight_smile:

DRESI:
@Doc_Arduino: Dein Vorschlag, ein Poti zu frisieren, hat sich eigentlich erledigt. Denn es scheint wohl so (aus der Summe aller Posts entnehme ich das), daß die Auflösung auf 90 Grad immer noch fein genug ist, um 3 deutlich identifizierbare Bereiche zu schaffen.

@All: Ist doch so. Oder?

jepp, das ist so.

definiere die einfach 3 Bereiche für die jeweiligen Potistellungen und frage dann den AD-Eingang ab, ob der Wert in dem jeweiligen Bereich liegt.

Wie oben schon geschrieben:
z.B.:
“0°” entspricht: 0° - 20° entspricht AD-Wert <75
“45°” entspricht: 35° - 55° entspricht AD-Wert 130 - 210
“90°” entspricht: 80° - 100° entspricht AD-Wert >300

47K Poti sollte gehen, ich würden dann aber noch einen kleinen Kondensator (1nF - 500nF) vom AD-Eingang auf GND schalten, damit die Werte stabilier werden.
Die AD-Eingänge für eine Schaltung mit >10k ausgelegt.
Andererseits hat du ja keine großen Genauigkeitsanforderugen, könnte auch ohne funktionieren.