Potentiometerausgang digitalisieren mit ESP8266

OP (Firma: privat) #7316557
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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.

#7316819
Lesenswert?

@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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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 #7317106
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren