Potentiometerausgang digitalisieren mit ESP8266

OP (Firma: privat) #7316557

Hallo,

ich möchte gern den Widerstandswert eines Potentiometers mit dem ESP8266 digitalisieren und auf einem LCD ausgeben. Dazu habe die abgebildete Schaltung aufgebaut und in Arduino Studio ein Programm geschrieben, dass den Ausgang des Potentiometers am Pin A0 einliest und auf einem LCD ausgibt.

Wie kann ich den Eingangswert an A0 in Ohm umwandeln?

1
 #include <Wire.h>
2
 #include <LiquidCrystal_I2C.h>
3
 
4
 int lcdSpalte = 16;
5
 int lcdZeile = 2;
6
 LiquidCrystal_I2C lcd(0x27,lcdSpalte,lcdZeile);
7

8
int pin = A0;
9

10
void setup() {
11
  lcd.init();
12
}
13

14
void loop() {
15
  float sensval = analogRead(pin);
16
  lcd.setCursor(3,0);
17
  lcd.print(sensval);
18
  delay(3000);
19
}
Gast #7316570

Torben S. schrieb:

ich möchte gern den Widerstandswert eines Potentiometers mit dem ESP8266 digitalisieren und auf einem LCD ausgeben.

Das ist konzeptioneller Schwachsinn. Kein Schwein interessiert sich für den Widerstandswert einer Potentiometer-Schaltung. Eine Potentiometer-Schaltung dient schon rein vom Konzept her dazu, einen Spannungswert zu erzeugen. Und genau nur den kann man auch messen.

Um davon ausgehend dann irgendwelche Widerstände anzuzeigen, muß wenigstens einer bekannt sein, sinnvollerweise der Gesamtwiderstand des Potentiometers.

Mit den überaus trivialen Gesetzen eines Spannungsteilers kann man dann auch die beiden Widerstandswerte oberhalb und unterhalb des Potentiometer-Abgriffs anzeigen...

Moderator (Firma: Titel) Persönliche Seite #7316744

C-Versteher schrieb:

Das ist kein konzeptioneller Schwachsinn.

Doch, eigentlich schon. Denn ein 10k Poti hat immer 10k. Und wenn man den Schleifer anschaut, dann gibt es 2 Widerstände, nämlich zu jedem der beiden anderen Potianschlüsse hin.

Wie gesagt,das ohmsche Gesetz bringt Dich zum Ziel.

Ich sehe da (neben grundlegenden Wissenslücken) lediglich einen simplen Dreisatz:

aktADC/maxADC = R_SchleiferNachGND/R_Poti

Das umgestellt nach dem R_SchleiferNachGND und fertig.

c-hater schrieb:

die beiden Widerstandswerte oberhalb und unterhalb des Potentiometer-Abgriffs anzeigen...

Du hast in deinem Kopf ein völlig anderes Bild der Schaltung als der TO. Denn weil hier kein üblicher Schaltplan sondern diese unsägliche Steckbrettkritzelei verwendet wird, gibt es keinen Spannungsteiler und deshalb auch keinen "oberen" und "unteren" Widerstand. .

OP (Firma: privat) #7316790

Ich verstehe leider gar nicht, warum es konzeptioneller Schwachsinn ist, wenn man den Widerstand ausgeben möchte, den man über das Potentiometer eingestellt hat.

Ich will das Potentiometer in einem nächsten Schritt in einer Spannungsteiler-Schaltung mit einem NTC kombinieren und das analoge Temperatursignal digitalisieren. Dazu benötige ich doch den Widerstandswert, den man über das Potentiometer eingestellt hat, um die entsprechenden Werte aus dem Datenblatt des NTC zu ermitteln.

Ich habe den Ausgang des Potentiometers mit dem analogen Eingang des ESP8266 verbuden. Ich weiß leider nicht, wie ich das Ergebnis, das ich in Zeile 15 messen, interpretieren soll. Ist das schon die Spannung in mV oder muss diese erst noch qunatisiert werden?

Gast #7316806

Torben S. schrieb:

Dazu benötige ich doch den Widerstandswert, den man über das Potentiometer eingestellt hat, um die entsprechenden Werte aus dem Datenblatt des NTC zu ermitteln.

Den Widerstandswert kannst du aber nur bestimmen, indem du z.B. einen bekannten Vergleichswiderstand oder Referenzkondensator benutzt. Eine Messung ist immer der Vergleich mit einem Normal, das als Bezugsgröße dient.

Gast #7316813

Also Sie schalten in die Leitung vom Poti nach GND einen bekanten (Wert) Widerstand.Die Spannungen (oder die eingelesenen Werte) verhalten sich wie die Widerstände.

#7316819

@Torben: Ist Dir bewußt, dass der ESP8266 maximal 1V am ADC Eingang auflöst? Welche Spannung legst Du am Poti an? Ist das ein lineares oder logarithmisches Poti? Welchen Widerstand hat das Poti? Wenn Du also 1V am Poti anlegst, dann misst Du den Ohm Widerstand anteilig am Gesamtwiderstand entsprechend den Volt. Bei einer 10bit Auflösung des ADC bekommst Du Werte zwischen 0..1023. Je höher der Wert, desto näher bist Du an den 1V. Also Wert: 512 -> Mitte -> 0.5V -> (meinetwegen Gesamtwiderstand 10k) 5k. Der Rest ist Dreisatz. Wie Lothar geschrieben hat. LG

#7316832

Torben S. schrieb:

Ich will das Potentiometer in einer Spannungsteiler-Schaltung mit einem NTC kombinieren und das analoge Temperatursignal digitalisieren.

Das macht man aber anders: Man nimmt einen Festwiderstand, der etwa so gross ist wie der Widerstand bei mittlerer Temperatur und misst dann die Spannung am Verbindungsopunkt. Dann kann man den Ausgangs- wert des AD-Wandlers in Beziehung zu der Temperatur messen.

Moderator (Firma: Titel) Persönliche Seite #7316862

Torben S. schrieb:

Ich verstehe leider gar nicht, warum es konzeptioneller Schwachsinn ist, wenn man den Widerstand ausgeben möchte, den man über das Potentiometer eingestellt hat.

Weil es eben "den Widerstand" nicht gibt. Sondern es gibt 3 Widerstände: den Gesamtwiderstand, der aufgedruckt ist und die beiden Teilerwiderstände, die mit dem Schleifer eingestellt werden.

Torben S. schrieb:

Ich will das Potentiometer in einem nächsten Schritt in einer Spannungsteiler-Schaltung mit einem NTC kombinieren und das analoge Temperatursignal digitalisieren.

Du willst also die Temperatur messen und anzeigen. Für die Ermittlung der Temperatur ist aber die Spannung und der Widerstandwert nur ein unnötiger Umweg. Du kannst die Temperatur mit ein wenig Nachdenken und Mathematik direkt aus dem ADC-Wert 0..1023 bestimmen.

Mein Schaltung daüfr würde so aussehen:

1
                                ESP
2
    3V3 -----o----------------- 3V3
3
             |
4
            Rv 
5
             |      Ut
6
             o----------------- ADC (0..1V)
7
             |
8
            NTC
9
             |
10
    GND -----o----------------- GND

Bei geschickter Auswahl des RV ist die Ut für den zu messenden Tempersturbereich im erlaubten Eingangsbereich des ADC.

Weil das nur ein 10-Bit ADC ist, könnte man im Speicher ein Tabelle mit 1024 Temperaturwerten ablegen und mit dem ADC-Wert als Index darauf zugreifen.

Ich würde da allerdings über eine kleinere Tabelle mit 9 oder 17 Stützpunkten gehen und zwischen diesen Stützpunkten linear interpolieren. Der NTC hat nämlich selber schon eine nette Toleranz und der (ziemlich schlechte) ADC des ESP auch.

Gast #7317056

Die im Eröffnungsbeitrag gezeigte Schaltung eignet sich dazu, die Stellung des Potentiometers auszulesen. Es gibt eine Spannung zwischen 0 und 3,3 Volt ab, welche direkt von der Stellung abhängt.

Der ADC des Mikrocontrollers kann diese Spannung messen. Weil auf dem Board noch ein Spannungsteiler zwischen dem Anschluss-Pin und dem ADC liegt, deckt der A0 Eingang den vollen Bereich zwischen 0 und 3,3 Volt ab.

Im Arduino Framework benutzt man analogRead(A0), um den Eingang abzufragen. https://www.arduino.cc/reference/de/language/functions/analog-io/analogread/

Wie kann ich den Eingangswert an A0 in Ohm umwandeln?

Darin erkenne ich keinen Sinn. Das Potentiometer hat immer 10 kΩ. Du kannst so (mit dieser Schaltung) nur die Stellung des Potentiometers messen. Das Ergebnis von analogRead(A0) ist eine Zahl um Bereich 0 bis 1023. Du kannst die Zahl z.B. durch 10,23 teilen, um sie für die Anzeige auf 0 bis 100 (Prozent) zu skalieren.

Gast #7317065

Stefan F. schrieb:

Weil auf dem Board noch ein Spannungsteiler zwischen dem Anschluss-Pin und dem ADC liegt, deckt der A0 Eingang den vollen Bereich zwischen 0 und 3,3 Volt ab

Und die beiden Spannungsteiler beeinflussen sich nicht gegenseitig?

Gast #7317106

Lothar M. schrieb:

ESP 3V3 -----o----------------- 3V3 | Rv | Ut o----------------- ADC (0..1V) | NTC | GND -----o----------------- GND Bei geschickter Auswahl des RV ist die Ut für den zu messenden Tempersturbereich im erlaubten Eingangsbereich des ADC.

Genau so - sofern die ADC (0..1V) in Stein gemeißelt sind.

An den TO:
Besser wäre jedoch, da stände ADC (0..3V3). Oder auch ADC (0..Vref) und Rn würde ebenso an Vref hängen. Dann nämlich kürzt sich die 3V3 bzw. Vref aus dem ganzen Formelwerk, d.h. die Messung wird dann unabhängig von dem genauen Wert der Spannung. (Stichwort ratiometrische Messung).

Beitrag #7317110 wurde von einem Moderator gelöscht.
Gast #7317113

Lothar M. schrieb:

Ich würde da allerdings über eine kleinere Tabelle mit 9 oder 17 Stützpunkten gehen und zwischen diesen Stützpunkten linear interpolieren.

Wiederum an den TO:
Die 9 bzw. 17 Stützpunkte ergeben sich aus der Notwendigkeit, dass die Tabellen-Interpolation nach einer Division durch (Anzahl der Stützpunkte)-1 verlangt. Die Division reduziert sich in dem Fall auf eine Schiebeoperation, am Beispiel um 3 bzw. 4 Stellen.

#7317140

Messungen gehen nie ohne Referenzen!

Wenn Du wirklich den Widerstandswert messen möchtest, dann muss Dir sowohl Spannung als auch Strom an diesem Widerstand bekannt sein.

Wenn Du den Strom messen möchtest, benötigst Du einen bekannten Widerstand, über dem Du die Spannung misst (den Widerstand nennt man dann Shunt). Dann kannst Du den Strom errechnen.

In der Reihenschaltung aus Sensor und Shunt fließt der Strom durch beide Widerstände. Über beiden musst Du die Spannung messen.

Mit einer bekannten Versorgungsspannung kannst Du mit einer Messung zwischen beiden Widerständen beide Spannungen gleichzeitig messen. (Spannung über einen Widerstand gegen GND und über den anderen Widerstand gegen Versorgungsspannung.) Denn die Summe beider Spannungen ist immer die Versorgungsspannung.

Nun sollte es langsam aber klick machen!

Gruß Jobst

Gast #7317152

STK500-Besitzer schrieb:

Und die beiden Spannungsteiler beeinflussen sich nicht gegenseitig?

Doch tun sie. Deswegen nimmt man ein Poti mit erheblich weiger Innenwiderstand, als der Spannungsteiler auf dem Board hat. Dann hält sich die Beeinflussung in einem erträglichen Rahmen. Der ADC ist eh nur ein grobes Schätzeisen. Laut Datenblatt kann der Messwert bis zu 20% vom idealen Wert abweichen - wenn WLAN deaktiviert ist. Ganz so schlimm hatte noch es noch nicht, aber 10% Abweichung sind durchaus normal.

OP (Firma: privat) #7317429

Hallo,

ich habe vermutlich ein paar Dinge durcheinander geworfen. Sorry, ich mache gerade meine ersten Geh-Versuche auf diesem Gebiet und bin noch sehr unerfahren.

Wenn ich stefanus richtig verstanden habe, dient meine Schaltung mit Potentiometer höchstens dazu, die Spannung zwischen 0 und 3,3V zu digitalisieren.

Ich hatte irgendwo aufgeschnappt, dass man bei der Temperaturmessung mit NTC im Spannungsteiler ebenfalls gern auf ein Potentiometer zurückgreift. Möglicherweise habe ich hier zwei Dinge durcheinander gebracht.

Ich denke für de Einstieg ist es ausreichend, wenn ich versuche, die Spannung, die ich mit dem Potentiometer einstellen kann, zu digitalisieren.

Der ADC hat eine Auflösung von 10 Bit. Seine Referenzspannung beträgt 3,3V

Wie läuft die Digitalisierung ab? Aus der Theorie weiß ich, dass man den gemessenen Spannungswert durch die Quantisierungsstufe teilt. Quantisierungsstufe = 3V3/1023=0,003 Digitalisiertes Messergebnis = raw*0,003

Ist das korrekt?

Gast #7317440

Torben S. schrieb:

Ich hatte irgendwo aufgeschnappt, dass man bei der Temperaturmessung mit NTC im Spannungsteiler ebenfalls gern auf ein Potentiometer zurückgreift. Möglicherweise habe ich hier zwei Dinge durcheinander gebracht.

Scheint so. Ein Potentiometer in Kombination mit einem Temperatursensor könnte dazu dienen, die gewünschte Raumtemperatur einzustellen. Das isnd dann aber zwei getrennte analoge Eingaben:

a) Der Soll-Wert vom Poti b) Der Ist-Wert vom Sensor (Spannungsteiler aus NTC + Widerstand)

In beiden Fällen misst der ADC keinen Widerstandswert, sondern eine Spannung. Erst durch Mathematik wird daraus eine Temperatur-Anzeige auf dem Display.

Ich denke für de Einstieg ist es ausreichend, wenn ich versuche, die Spannung, die ich mit dem Potentiometer einstellen kann, zu digitalisieren.

Ja, man soll immer klein anfangen, damit man die Sache auch verstehen kann. Und sich dann schrittweise bis zum Ziel weiter durch arbeiten.

Torben S. schrieb:

... Ist das korrekt?

Ja. Ich glaube du musst aber durch 1024 teilen. Wobei der Unterschied praktisch wohl im Rauschen untergeht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.