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.
Torben S. schrieb: > woher kommen die 1023? Copy&Paste aus einem Arduino-Forum. Korrekt sind 2¹⁰ = 1024. Macht aber nicht viel Unterschied.
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.
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.
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Ω.
Einfacher, da ohne Widerstände: Nimm einen DS18B20. Wird über I2C angeschlossen. Anschluss-Anleitung sowie Software-Libraries gibt es wie Sand am Meer.
Stefan F. schrieb: > Schalte außerdem einen Widerstand mit 0x so viel > Ohm parallel zum NTC. Korrektur: Widerstand mit 10x so viel Ohm
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.
Für niedrige Betriebsspannung ist der TMP36 wohl besser geeignet.
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?
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 ;-)
Formel 6 und 7 enthalten nicht die Temperatur.
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
.
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
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
> 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?
Ist raw der Wert den ich bekomme, wenn ich folgenden Befehl in Arduino ausführe? int sensorPin = A0; sensorValue = analogRead(sensorPin);
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.
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);
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
..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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.