Forum: Mikrocontroller und Digitale Elektronik Potentiometerausgang digitalisieren mit ESP8266


von Torben S. (Firma: privat) (torben_25)



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
}

von Joachim B. (jar)


Lesenswert?

Torben S. schrieb:
> Wie kann ich den Eingangswert an A0 in Ohm umwandeln?

welche Ohm?
Weisst du denn was du angeschlossen hast?

von c-hater (Gast)


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...

von C-Versteher (Gast)


Lesenswert?

Das ist kein konzeptioneller Schwachsinn.
Du verstehst seine Frage nicht.

Wie gesagt,das ohmsche Gesetz bringt Dich zum Ziel.

von C-Versteher (Gast)


Lesenswert?

Er bellt nur rum…

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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. .

: Bearbeitet durch Moderator
von Torben S. (Firma: privat) (torben_25)


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?

von Forist (Gast)


Lesenswert?

Torben S. schrieb:
> Dazu habe die abgebildete Schaltung aufgebaut

Hat es einen besonderen Grund, keinen vernünftigen Schaltplan zu zeigen?

von Forist (Gast)


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.

von Reihaus (Gast)


Lesenswert?

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.

von Helge S. (topflappen)


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

von Harald W. (wilhelms)


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.

von Wolfgang (Gast)


Lesenswert?

Helge S. schrieb:
> Ist Dir bewußt, dass der ESP8266 maximal 1V am ADC Eingang auflöst?

Da bringst du wohl etwas durcheinander.

Der ADC des ESP8266 besitzt eine Auflösung von 10 Bit.
Du meinst wahrscheinlich den FS-Wert, i.e. die Referenzspannung

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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.

: Bearbeitet durch Moderator
von Stefan F. (Gast)


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.

von STK500-Besitzer (Gast)


Lesenswert?

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?

von Jester (Gast)


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.
von Jester (Gast)


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.

von Jobst M. (jobstens-de)


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

von Stefan F. (Gast)


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.

von Torben S. (Firma: privat) (torben_25)


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?

von Stefan F. (Gast)


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.

von Torben S. (Firma: privat) (torben_25)


Lesenswert?

Ich danke sehr für die Hilfe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.