Love-o-meter, seltsame Werte

Habe mir vor paar Tagen das Arduino Starter-Kit geholt und bin an meinem zweiten Projekt Love-o-meter. Die ausgelesenen Werte des TMP36 schwanken enorm und ich weiss nicht weiter. Hier noch der Code:

const int sensorPin = A0;
const float baselineTemp = 20.0;


void setup() {
 Serial.begin(9600);
 for(int pinNumber = 2; pinNumber<5; pinNumber++){
  pinMode(pinNumber, OUTPUT);
  digitalWrite(pinNumber, LOW);
 }
}

void loop() {
int sensorVal = analogRead(sensorPin);

Serial.print("Sensor: ");
Serial.print(sensorVal);

float voltage = (sensorVal/1024.0) * 5.0;

Serial.print(" , Volt: ");
Serial.print(voltage);
Serial.print(", Grad C: ");

float temperature = (voltage - .5) * 100;

Serial.println(temperature);

if(temperature < baselineTemp+2){
  digitalWrite(2, LOW);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+2 &&
temperature < baselineTemp+4){
  digitalWrite(2, HIGH);
  digitalWrite(3, LOW);
  digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+4 &&
temperature < baselineTemp+6){
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, LOW);
}else if(temperature >= baselineTemp+6) {
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
}
delay(100);
}

Hier der Output dazu:
Sensor: 41 , Volt: 0.20, Grad C: -29.98
Sensor: 45 , Volt: 0.22, Grad C: -28.03
Sensor: 49 , Volt: 0.24, Grad C: -26.07
Sensor: 54 , Volt: 0.26, Grad C: -23.63
Sensor: 58 , Volt: 0.28, Grad C: -21.68
Sensor: 63 , Volt: 0.31, Grad C: -19.24
Sensor: 66 , Volt: 0.32, Grad C: -17.77
Sensor: 68 , Volt: 0.33, Grad C: -16.80
Sensor: 69 , Volt: 0.34, Grad C: -16.31
Sensor: 67 , Volt: 0.33, Grad C: -17.29
Sensor: 59 , Volt: 0.29, Grad C: -21.19
Sensor: 52 , Volt: 0.25, Grad C: -24.61
Sensor: 44 , Volt: 0.21, Grad C: -28.52
Sensor: 55 , Volt: 0.27, Grad C: -23.14
Sensor: 57 , Volt: 0.28, Grad C: -22.17
Sensor: 57 , Volt: 0.28, Grad C: -22.17
Sensor: 58 , Volt: 0.28, Grad C: -21.68
Sensor: 38 , Volt: 0.19, Grad C: -31.45

jemand eine Idee woran es liegen könnte?

Ich tippe auf eine schlechte, schwankende Spannungsversorgung deines Aufbaus.

  1. Hast Du den Sensor an den richigen Eingang angeschlossen?
  2. Hast Du den Sensor richtig mit Versorgungsspannung verbunden?
  3. Hast Du den sensor richig (nicht verdreht) angeschlossen?

Versuch statt der Versorgungsspannung als Referenzwert die interne Referenz zu verwenden:

Im setup() fügst Du hinzu (egal wo, außerhalb von for()) :

analogReference(INTERNAL);

Und bei der Umrechnung statt.

float voltage = (sensorVal/1024.0) * 5.0;

schreibst Du

float voltage = (sensorVal/1024.0) * 1.1;

Mach ein Foto von Deinem Aufbau ( Sensor und Verdratung sollte man gut erkennen können).

Grüße Uwe

Also einerseits geht es ja nur um das Prinzip verschiedene Sensoren auszuprobieren und Programmieren zu lernen.

Andererseits ist ein TMP36 vergleichsweise schwierig auszulesen weil da nur 10 millivolt pro °C am Ausgang sind.

Bei 25°C hat man laut Datenblatt am Ausgang 0,75V = 750 Millivolt

Wenn der AD-Wandler 10 bit = 2 hoch 10 minus 1 = 1023 als Maximalwert hat
dann entspricht bei 5V = 5000 mV
5000 / 1023 = 4.89 mV pro Digit

4.89 mV ergibt AD-Wandler-Wert 1
9.78 mV ergibt AD-Wandler-Wert 2
14.67 mV ergibt AD-Wandler-Wert 3
5000 mV ergibt AD-Wandler-Wert 1023

5000 mV / 4.89 mV/Digit = 1023 digits

Das bedeutet bei 25°C müsste da als Digitwert 750 mV / 4.89 mV/digit = 153 digits herauskommen.

Wenn sich die Ausgangsspannung mit 10 mV/°C ändert wären das bei 20 °C
750 mV - 10 mV/°C * 5°C = 700 mV
700 mV / 4.89 mv/digit = 143 digits.

Wenn man den Temperatursensor zwischen zwei Finger nimmt wird es sich innerhalb von etwa einer Minute auf 27 28 °C erwärmen
wären dann

750 mV + 3°C * 10 mV/C^= 780 mV
780 / 4.89 = 159 digits

Du hast aber Werte zwischen 38 und 69 digits

50 digits * 4.89 mV/digit = 245 mV.

Da stimmt also irgendetwas nicht.

Hast du ein Digitalmultimeter mit dem du die Ausgangsspannung messen kannst?

Mit so wenig Information müsste man dir jetzt ein 100-Seiten-Tutorial "wenn das dann das" Tutorial schreiben. Willst du das lesen? Nö!

Also poste ein hochauflösendes Bild auf dem man präzise erkennen kann welche Leitung ist mit was verbunden.
Das bedeutet ein Foto von genau senkrecht obendrüber machen.
Auf dem Foto müssen alle Leitungen von Anfang bis Ende zu sehen sein

Schonmal Danke für die schnellen Antworten.

Das Arduino habe ich mittels USB am PC verbunden.
Sensor sollte eigentlich korrekt angeschlossen sein. (siehe Bild)
Den Rest habe ich mal abgehängt, sind ja nur Spielereien.

analogReference(INTERNAL);

Diese Änderung hat nichts am Output geändert.

Ich hab mal probehalber den analogen Eingang abgehängt. Ich hätte erwartet das wenigstens dann konstante Werte zu sehen sind. Auch da habe ich aber kleine Schwankungen.

Sensor: 310 , Volt: 1.51, Grad C: 101.37
Sensor: 312 , Volt: 1.52, Grad C: 102.34
Sensor: 313 , Volt: 1.53, Grad C: 102.83
Sensor: 313 , Volt: 1.53, Grad C: 102.83
Sensor: 311 , Volt: 1.52, Grad C: 101.86
Sensor: 308 , Volt: 1.50, Grad C: 100.39
Sensor: 309 , Volt: 1.51, Grad C: 100.88
Sensor: 311 , Volt: 1.52, Grad C: 101.86
Sensor: 311 , Volt: 1.52, Grad C: 101.86
Sensor: 310 , Volt: 1.51, Grad C: 101.37
Sensor: 307 , Volt: 1.50, Grad C: 99.90
Sensor: 306 , Volt: 1.49, Grad C: 99.41
Sensor: 308 , Volt: 1.50, Grad C: 100.39
Sensor: 310 , Volt: 1.51, Grad C: 101.37
Sensor: 310 , Volt: 1.51, Grad C: 101.37
Sensor: 308 , Volt: 1.50, Grad C: 100.39
Sensor: 305 , Volt: 1.49, Grad C: 98.93

Leider habe ich auch kein Messgerät mit dem ich etwas ausmessen könnte.
Evt. sollte ich mir doch langsam eines zulegen :slight_smile:

Nachtrag:
Nach den Messwerten habe ich nun doch die Versorgung im Auge. Hab desshalb mal das selbe am Laptop probiert und siehe da, Schwankungen sind weg:
Sensor: 134 , Volt: 0.65, Grad C: 15.43
Sensor: 135 , Volt: 0.66, Grad C: 15.92
Sensor: 134 , Volt: 0.65, Grad C: 15.43
Sensor: 134 , Volt: 0.65, Grad C: 15.43
Sensor: 134 , Volt: 0.65, Grad C: 15.43
Sensor: 134 , Volt: 0.65, Grad C: 15.43

Scheint also ein Problem mit der Stromversorgung gewesen zu sein.
Nun wird der TMP36 aber extrem heiss? :hot_face: Also wenn ich ihn anfasse verbrennt man sich schon fasst die Finger :sweat_smile:

Dann hast Du ihn falsch eingesteckt (um 180° verdreht) .
Nochmal Dein Foto mit dem Datenblatt verglichen. Auf dem Foto ist er richtig angeschlossen.

Du hast vergessen 5,0 mit 1,1 zu ersetzen.

Durch die kleinere Referenzspannung, die eigentlich Versorgungsspannungsunabhängig ist, bekommst Du eine größere Auflösung Statt ca 0,5°C hast Du ca 0,11 °C.

Sind die Kabel schön streng drin oder wackeln sie? Haben die Kabel an den Steckern Kabelbrüche?

Ein Wechsel des PCs sollte eigentlich keine solchen Auswirkungen haben.

Grüße Uwe

also ist schon Defekt, das steht ja in allen Anleitungen dass man soll aufpassen wie man den verbindet mit der MCU = Arduino Uno usw.
Hast ein Spielzeug weniger, was auch eine Positive Seite hat, der TMP36 ist der ungenauster unter allen Temperatursensoren kann bis +- 2°C falsch anzeigen.
Hab das für dich gefunden :wink:

Hab im Starterkit ja ein paar davon dabei gehabt. Hab mal andere ausprobiert, verhalten sich aber alle gleich.

Seltsam finde ich auch, wenn den USB vom Arduino trenne und neu anschliesse krieg ich wieder die alten ungenauen Werte. Manchmal wenn ich dann das Programm neu uploade zeigt es wieder die neuen genaueren Werte im Output an.

Sensor: 67 , Volt: 0.33, Grad C: -17.29
Sensor: 70 , Volt: 0.34, Grad C: -15.82
Sensor: 69 , Volt: 0.34, Grad C: -16.31
Sensor: 67 , Volt: 0.33, Grad C: -17.29
Sensor: 60 , Volt: 0.29, Grad C: -20.70

nach Upload:
Sensor: 152 , Volt: 0.74, Grad C: 24.22
Sensor: 148 , Volt: 0.72, Grad C: 22.27
Sensor: 147 , Volt: 0.72, Grad C: 21.78
Sensor: 147 , Volt: 0.72, Grad C: 21.78
Sensor: 146 , Volt: 0.71, Grad C: 21.29
Sensor: 146 , Volt: 0.71, Grad C: 21.29
Sensor: 146 , Volt: 0.71, Grad C: 21.29
Sensor: 146 , Volt: 0.71, Grad C: 21.29
Sensor: 145 , Volt: 0.71, Grad C: 20.80
Sensor: 145 , Volt: 0.71, Grad C: 20.80
Sensor: 146 , Volt: 0.71, Grad C: 21.29

Ist wie ein Glücksspiel. Nicht reproduzierbar, mal so mal so.
Kabel habe ich auch mal ausgewechselt. Macht keinen Unterschied.

Hab ihn nie falsch angeschlossen, dann wohl schon defekt bei erhalt.

Wenn die alle heiß werden, dürften die alle jetzt kaputt sein.

Sicher, dass das TMP36 sind und nicht irgendwelche Transistoren?

Das stimmt, aber dann mißte er meist zu viel / zu wenig, schwankt aber nicht wie ein Fähnchen im Wind. Zusammenfassend: für kleine bis mittlere Zeiträume konstant falsch messen. Der absolute Fehlerwert ist temperaturabhängig, fertigungbedingt, leicht versorgungsspannungsabhängig, lastabhängig (Strom am Ausgang) , und alterungsbestimmt)

Grüße Uwe

Wie oben geschrieben der ist nicht das Gebe vom Ei hier ist das Datenblatt vom dem.
Noch was, nicht das Du verwechselst den TPM mit einem normalen Transistor.
Was steht da drauf ?
Den wenn man ein Transistor so anklemmt wie den TMP verbrennt man sich auch die Finger :wink:

Aus: TMP36 Temperatursensor – HSHL Mechatronik

Upsi, da hab ich dann wohl doch einen Transitor erwischt :rofl:
Lesen müsste man können :sweat_smile: peinlich peinlich

Funzt alles wie es soll :upside_down_face:
Danke euch :heart:

Tue das Ding kennzeichnen oder wegwerfen, nicht das in einer Woche hast andere Probleme :rofl:

Respeckt, auf dies bin ich nicht gekommen.
Gute Antwort.
Grüße Uwe

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.