Forum: Mikrocontroller und Digitale Elektronik Temperatur über analogen Eingang messen mit ESP8266


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


Angehängte Dateien:

Lesenswert?

Hallo,

ich möchte über den analogen Eingang des ESP8266 die Temperatur erfassen 
und verwende zur Temperaturmessung einen NTC. Den Schaltungsaufbau habe 
ich in der abgebildeten PDF modelliert.

Ich weiß leider nicht, wie ich den gemessenen Spannungswert in eine 
Temperatur umwandeln kann. Ein Freund hat mir seine Mitschrift 
zugesendet (siehe PDF). Ich habe Probleme, diese zu verstehen.

Wie kommt Formel 6 zustande?

Was genau ist in dieser Formel 7. mit raw gemeint und woher kommen die 
1023?

Vielen Dank.

von Εrnst B. (ernst)


Lesenswert?

Torben S. schrieb:
> woher kommen die 1023?

Copy&Paste aus einem Arduino-Forum. Korrekt sind 2¹⁰ = 1024.
Macht aber nicht viel Unterschied.

von Stefan F. (Gast)


Lesenswert?

Mit einer anderen Schaltung wird es viel einfacher:

Ändere den Widerstand auf den selben Wert, den der NTC bei mittlerer 
Normaltemperatur hat. Schalte außerdem einen Widerstand mit 0x so viel 
Ohm parallel zum NTC. Dann bekommst du in einem relativ weiten Bereich 
eine Spannung heraus, die fast linear der Temperatur entspricht.

Berechnungshilfe: 
https://www.electronicdeveloper.de/MesstechnikNTCLinearR.aspx

Allerdings ist der ADC des ESP ziemlich ungenau. Mit einem externen ADC 
oder einem digitalen Temperatursensor wirst du bestimmt glücklicher.

von Johannes F. (emitterfolger)


Lesenswert?

Torben S. schrieb:
> Was genau ist in dieser Formel 7. mit raw gemeint

Vermutlich der „rohe“ ADC-Messwert, also das, was nach der Wandlung im 
entsprechenden Ergebnisregister der MCU steht.

von Stefan F. (Gast)


Lesenswert?

100kΩ ist zu hochohmig für den ADC. Die Belastung durch den ADC wird zu 
unerwarteten Messwerten führen.

Nimm besser einen NTC mit 10kΩ.

von Epoxyd H. (fr4)


Lesenswert?

Einfacher, da ohne Widerstände: Nimm einen DS18B20. Wird über I2C 
angeschlossen. Anschluss-Anleitung sowie Software-Libraries gibt es wie 
Sand am Meer.

von Johannes F. (emitterfolger)


Lesenswert?

Torben S. schrieb:
> Wie kommt Formel 6 zustande?

Siehe Artikel Spannungsteiler

von Stefan F. (Gast)


Lesenswert?

Stefan F. schrieb:
> Schalte außerdem einen Widerstand mit 0x so viel
> Ohm parallel zum NTC.

Korrektur: Widerstand mit 10x so viel Ohm

von Jobst Q. (joquis)


Lesenswert?

Torben S. schrieb:
> ich möchte über den analogen Eingang des ESP8266 die Temperatur erfassen
> und verwende zur Temperaturmessung einen NTC

Warum muss es ein NTC sein? Für genaue Werte ist da die Berechnung 
ziemlich kompliziert. Es gibt Temperaturfühler wie den LM335, die eine 
lineare Spannung ausgeben und trotzdem bezahlbar sind.

von Jobst Q. (joquis)


Lesenswert?

Für niedrige Betriebsspannung ist der TMP36 wohl besser geeignet.

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


Lesenswert?

Vielen Dank für die Rückmeldungen.

Ich weiß noch nicht genau, wie ich die Temperatur T (in Kelvin) 
ermitteln soll. T steckt ja in der Formel zur Berechnung des 
Widerstandes R_NTC drin.

Die Lösung liegt in Fomrmel 7. Ist diese Verhältnisgleichung 
allgemeingültig?

von Wolfgang (Gast)


Lesenswert?

Epoxyd H. schrieb:
> Nimm einen DS18B20. Wird über I2C angeschlossen.

Damit der auf I2C hört, wirst du einen kleinen µC mit passender Software 
zwischenschalten müssen ;-)

von Stefan F. (Gast)


Lesenswert?

Formel 6 und 7 enthalten nicht die Temperatur.

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


Lesenswert?

@ Stefan: Wenn ich 5 in 6 einsetz?

von Johannes F. (emitterfolger)


Lesenswert?

Torben S. schrieb:
> Ich weiß noch nicht genau, wie ich die Temperatur T (in Kelvin)
> ermitteln soll. T steckt ja in der Formel zur Berechnung des
> Widerstandes R_NTC drin.

So, ich mache mal deine Hausaufgaben:
Rückwärts einsetzen ergibt
.

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


Lesenswert?

Danke.

Ich habe als Ergänzung noch diesen Link: 
https://learn.sparkfun.com/tutorials/analog-to-digital-conversion/relating-adc-value-to-voltage

Was ist aber raw?

Du kannst Latex-Formeln einbauen?

: Bearbeitet durch User
von Johannes F. (emitterfolger)


Lesenswert?

Torben S. schrieb:
> Was ist aber raw?

Johannes F. schrieb:
> Vermutlich der „rohe“ ADC-Messwert, also das, was nach der Wandlung im
> entsprechenden Ergebnisregister der MCU steht.

Torben S. schrieb:
> Du kannst Latex-Formeln einbauen?

Siehe Formatierung im Forum

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


Lesenswert?

> Johannes F. schrieb:
>> Vermutlich der „rohe“ ADC-Messwert, also das, was nach der Wandlung im
>> entsprechenden Ergebnisregister der MCU steht.
Kann man raw über eine c++-Funktion bekommen?

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


Lesenswert?

Ist raw der Wert den ich bekomme, wenn ich folgenden Befehl in Arduino 
ausführe?

int sensorPin = A0;
sensorValue = analogRead(sensorPin);

von HildeK (Gast)


Lesenswert?

Bevor ich die Formel von Johannes F. in einem µC unterbringen wollte, 
würde ich mir diese Seite anschauen: 
https://www.sebulli.com/ntc/index.php

Außerdem: Die Formel ist nur richtig für einen NTC mit B=4600 
(vielleicht nicht mal das?). Wenn du einen anderen NTC hast, muss man 
neu rechnen und andere Werte einsetzen.
Für den Code auf sebulli.com braucht man auch den B-Wert aus dem 
Datenblatt des NTC...

Torben S. schrieb:
> Ist raw der Wert den ich bekomme, wenn ich folgenden Befehl in Arduino
> ausführe?

Ein 10-Bit ADC liefert Werte zwischen 0 und 1023, das ist der RAW-Wert, 
wenn der Einganf zwischen 0V und Vref verändert wird.
Ob der Arduino-Befehl analog_read() da noch zusätzlich was macht, weiß 
ich nicht.

von Stefan F. (Gast)


Lesenswert?

Torben S. schrieb:
> Ist raw der Wert den ich bekomme, wenn ich folgenden Befehl in Arduino
> ausführe?
>
> int sensorPin = A0;
> sensorValue = analogRead(sensorPin);

Ja. Schreibe doch direkt

sensorValue = analogRead(A0);

von Jester (Gast)


Lesenswert?

HildeK schrieb:
> Ein 10-Bit ADC liefert Werte zwischen 0 und 1023, das ist der RAW-Wert,
> wenn der Einganf zwischen 0V und Vref verändert wird.
> Ob der Arduino-Befehl analog_read() da noch zusätzlich was macht, weiß
> ich nicht.

Der Faktor 4600 ist ja nun geklärt.

Aber jetzt fragt sich die ganze Meute (den neu-deutschen Ausdruck 'pack' 
wollte ich vermeiden), wo im Formelwerk wohl die Vref unterzubringen ist 
...

face plants

von Manfred K. (4for)


Lesenswert?

..und wenn man Pech (je nach Board) hat funktioniert das alles nicht 
weil der ADC des ESP8266 einen 1V Range hat oder der Spannungsteiler am 
Board den Spannungsteiler mit dem Sensor vermurkst.

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Kann man alles machen, wenn man sein Wissen im Bereich (analoge) 
Elektrotechnik akademisch vertiefen möchte. So what ...

Wenn man einfach nur die Temperatur (und evtl. etwas mehr) erfahren 
will, nimmt man fertige digitale Sensoren mit One-Wire oder 
I2C-Anschluss. 3 Zeilen Code und die Chose läuft. So what?

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Stefan F. schrieb:
> Ja. Schreibe doch direkt
>
> sensorValue = analogRead(A0);

"Guter" Vorschlag :-(
Spätestens, wenn das Programm ein bisschen gewachsen und eine Zeit 
geruht hat, taucht die Frage auf "was bedeutet dieses komische A0" an 
der Stelle.
"Magic Numbers" im Programmcode sind großer Käse.

Pin-Nummer an zentraler Stelle festzulegen, so dass man einen 
aussagekräftigen Namen dazu hat und sie später leicht ändern kann, ist 
schon der richtige Weg.
Ein #define wäre hier vielleicht noch sinnvoller.

von Dietrich L. (dietrichl)


Lesenswert?

Wolfgang schrieb:
> Pin-Nummer an zentraler Stelle festzulegen, so dass man einen
> aussagekräftigen Namen dazu hat und sie später leicht ändern kann, ist
> schon der richtige Weg.

full ACK!

> Ein #define wäre hier vielleicht noch sinnvoller.

Ich würde das "vielleicht" streichen. Das über eine Variable zu machen 
ist Unsinn.

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.