ich verwende folgenden Sketch für einen NTC Temperatursensor:
#include <math.h>
int SensorPin = 0; // Für den Senoreingang wird Analog 0 gewählt
float sensorWert = 0; // Variable, die den Sensor Wert annimmt
float u1 =0; // Spannung u1 am Spannungsteiler
float u2 = 0; // Spannung u2 am Spannungsteiler
float i = 0; // Strom in A
float Rntc = 0; // Widerstand des Thermistors zum Zeitpunkt der Messung
float T = 0; // Variable für gemessene Temperatur
float B = 3740; // Wert aus Datenblatt des Thermistors
float Tn = 298.16; // Nenntemperatur in K
float R25 = 22000; // Nennwiderstand in Ohm bei Nenntemperatur (aus Datenblatt)
void setup() {
Serial.begin (9600); // Temperatur kann im "Serial Monitor" abgelesen werden
}
void loop() {
sensorWert = analogRead(SensorPin); // Wert am Sensor wird gelesen
u2 = (sensorWert * 5)/1024; // Spannung am Sensor wird berechnet
u1 = 5-u2; // Spannung am Vorwiderstand wird berechnet
i = u1/1000; // Strom wird berechnet
Rntc = u2/i; // Widerstand des Thermistors zum Zeitpunkt der Messung
T = (B*Tn)/(B+(log(Rntc/R25)*Tn)); // Berechnung der Temperatur
T = T-273.15; // Umrechnung von K in °C
Serial.print ("Temperatur = ");
Serial.print (T);
Serial.println (" C");
delay (2000); // Temperatur wird alle 2 sec. gemessen
}
Damit gibt es jetzt nur zwei Probleme, denn 1. ist die gemessene Temperatur viel zu hoch.
In meiner Wohnung liegt der Wert bei so 162.71°C...
Und das extrem skuriele ist, dass die Werte weiter ausgegeben werden obwohl der Sensor entfernt wurde!!!
Wäre nett wenn ihr mir helfen könntet, danke im Voraus
sensorwert ist ein float, die Rechnung fängt also nicht soo schlecht an.
Das ist das schöne an globalen Variablen. Man hat eventuell Erfolgserlebnisse beim Suchen.
Großes Lob an Thilo, dass er es nicht als unwichtig weggelassen hat.
michael_x:
sensorwert ist ein float, die Rechnung fängt also nicht soo schlecht an.
Das ist das schöne an globalen Variablen. Man hat eventuell Erfolgserlebnisse beim Suchen.
Großes Lob an Thilo, dass er es nicht als unwichtig weggelassen hat.
Stimmt, da hast Du recht und mein Beitrag in Reply #3 ist nicht weiter zu beachten.
Allerdings würde ich auch hier:
int SensorPin = 0; // Für den Senoreingang wird Analog 0 gewählt
eher A0 einsetzen:
int SensorPin = A0; // Für den Senoreingang wird Analog 0 gewählt
Wenn ich micht nicht täusche, funktioniert "0" zusammen mit analogRead zwar auf manchen Boards und mit manchen Arduino-Softwareversionen, aber nicht mit allen Boards und allen Arduino-Softwareversionen.
Hallo,
das liegt daran, das sich der Anschluss in einem nicht definierten Zustand befindet.
Ziehe den einmal über einen Widerstand gegen Masse, dann ist Ruhe.
Dann wäre es nicht schlecht, wenn Du ERST einmal Lib´s & Sketch´s benutzen würdest- die auch funktionieren.
Eine Lib für den Sensor scheinst Du nicht zu nutzen, aber eine "math.h"! Was hast Du denn vor? Eine SinusKurve
über den TemperaturBereich im HamsterKäfig aufzeichnen?
Gruß und Spaß
Andreas
Diese Standard AVR libc libraries wie math.h, string.h und stdlib.h muss man aber auf dem Arduino nicht extra inkludieren. Das macht die IDE automatisch im Hintergrund. Das braucht man lediglich für die ein "/avr" davor haben wie avr/sleep.h oder avr/pgmspace.h
Wie gesagt, wenn ich den Serial Monitor anmache ohne, dass der Sensor angeschlossen ist,
kommen trotzdem Werte, wie kann das bitte sein ?
Wenn der Sensor nicht angeschlossen ist, müsstest Du eigentlich einen simplen Pull-up oder Pull-down haben und somit einen konstanten Wert am Arduino geliefert bekommen. Da das bei Dir nicht der Fall ist, gehe ich von einem Schaltungsfehler aus. Kannst Du ein Foto der gesamten Schaltung machen, so, dass jede Verbindung sichtbar ist, und das hier posten? Alternativ ginge auch ein Schema Deiner Schaltung, aber das Foto ist meistens einfacher und schneller erstellt.
Damit war nicht nur seine Frage gemeint, die Du im Übrigen auch nicht beantwortet hast. Er wollte, dass Du misst, welchen Widerstand der Sensor bei 20°C hat. Das Datenblatt ist auch hilfreich, wenn Du uns noch verrätst, welchen Typ Du genau hast..
So sieht das ganze aus
Was sieht so auch? Ist das wirklich ein Foto Deines Aufbaus? Der erste April war vor einer Woche. Wir wollen sehen, welcher Draht vom Sensor an welchen Pin des Arduinos führt, welche zusätzlichen Komponenten im Spiel sind (Vorwiderstand), wie die Stromversorgung ist, etc.
thilo007007:
Entschuldigung Uwe... Ich habe deine Frage übersehen, hier ist das Datasheet dazu
Welchen hast Du nun? den 4,7k, den 10k, den 47k oder den 100k Ohm NTC????
Der Widerstand der in Reihe als Spannungsteiler geschaltet ist ist ein 1kOhm Widerstand???
grüße Uwe
So wie ich das sehe, solltest du ohne NTC (also AD-Messwert 1023) eine TEmperatur von ca. -9,9°C sehen.
Das geben deine Formeln so aus.
Manchmal ist es hilfreich, die Formeln die man verwendet, mal von Hand durchzurechnen.
Dann kannst du dir auch mal Zwischenergebnisse ausgeben lassen, um dein Programm zu überprüfen.