Ich versuche mit Arduino einen Thermostat zu bauen. Ich möchte es mit einem Handy-Akku / Ladegerät betreiben, wodurch die Systemspannung sehr variabel wird. Im Moment benutze ich Arduino Uno, aber sobald es fertig ist, werde ich es auf Lilypad portieren.
Zuerst habe ich versucht, einen TMP36- Temperatursensor zu verwenden. Bisher war es ein völliger Misserfolg. Obwohl der Sensor selbst sehr stabil zu sein scheint, kann ich keine Möglichkeit finden, seine Spannung genau zu messen.
Die Verwendung der eingebauten 5-V-Referenz für analoge Sensoren funktioniert überhaupt nicht - selbst die Stromversorgung über USB + 5 V beträgt + 4,8 V (wodurch die gemessene Temperatur um einige Grad verschoben wird). Wenn die Platine von der Batterie gespeist wird, fällt die Spannung auf ca. 4 V ab und die Temperatur wird in die Höhe geschossen. Ich habe auch versucht, +3,3 V von der Platine als Referenz zu verwenden. Es scheint stabiler zu sein, wenn die Karte über USB mit Strom versorgt wird, aber die Spannung fällt ab, wenn der Akku entladen wird.
Gibt es eine andere Möglichkeit, die Ausgangsspannung des Sensors zuverlässig zu messen?
Für die zweite Stufe plane ich die Verwendung von Thermistoren. Ich habe gerade ein paar dieser 20K-Thermistoren bestellt .
Soweit ich weiß, sollten diese leichter genau zu messen sein, wenn ich einen Spannungsteiler baue und V_in als Referenzspannung für ADC verwende.
Ein paar Fragen dazu:
- Ist es sinnvoll, wenige Spannungsteiler mit unterschiedlichen Festwiderständen zu verwenden, um die Genauigkeit zu erhöhen?
- Ich kann den programmierbaren Pin als V_in verwenden und die Temperatur mit wenigen verschiedenen Spannungspegeln messen. Obwohl mir nicht klar ist, ob dies tatsächlich die Genauigkeit erhöht.
quelle
Antworten:
Anscheinend sind Sie sich des Problems mit der Änderung der Referenzspannung bewusst, und wenn Sie ein Gerät wie das TMP36 (fest 10 mV / ° C) verwenden, können Sie nichts anderes tun, als eine Spannungsreferenz von einem Chip zur Stabilisierung zu verwenden.
Wenn Sie jedoch einen Widerstandsthermometer oder einen Thermistor verwenden, tritt das Problem nicht auf. Ihr ADC führt eine ratiometrische Messung durch - er vergleicht den ADC-Eingang mit seiner Referenzspannung, ABER wenn Sie den Widerstandsthermometer oder Thermistor (über einen geeigneten Widerstand) mit derselben Referenzspannung versorgen, hat dies keinen Einfluss auf die Messwerte. Wenn der Referenzwert um 10% steigt, steigt auch die Spannung im ADC.
quelle
Ich denke, Sie sollten in Betracht ziehen, einen digitalen Temperatursensor wie DS18B20 / DS18S20 zu verwenden, da dies nicht von der Genauigkeit Ihres ATmega ADC abhängt, um ein Anaolg-Signal zu messen. Er verwendet ein digitales 1-Draht-Protokoll, um die Temperatur zu melden.
Weitere Informationen finden Sie in den folgenden Tutorials:
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
quelle
Ihre Messung ist so gut wie die Referenzspannung für ADC gut ist. Arduino verwendet standardmäßig die Versorgungsspannung als Referenzspannung. In Ihrem Fall ist es jedoch richtig, den Aref-Pin von Arduino zu verwenden. Sie müssen einen speziellen Chip namens "Spannungsreferenz" erwerben und ihn an den Aref-Pin anschließen. Stellen Sie dann den ADC so ein, dass die externe Referenz im Arduino-Code (
analogReference(EXTERNAL)
) verwendet wird.Die Spannung der Referenz muss so gewählt werden, dass der volle Schwung Ihres Temperatursensors in die Referenzspannung passt. TMP36 gibt ~ 1,5 V bei 100 ° C aus, daher müssten Sie eine Referenz über 1,5 V verwenden, um eine Temperatur von bis zu 100 ° C zu messen. Sie möchten, dass Ihre Referenz so nahe wie möglich an der maximal gemessenen Spannung liegt, um eine möglichst hohe Auflösung zu erzielen.
Atmega328p verfügt über zwei interne Referenzen, die ohne externe Komponenten verwendet werden können. Eine ist 1,1 V, eine andere 2,56 V. Sie sind normalerweise etwas schlechter als bei Verwendung einer externen dedizierten Komponente. Überprüfen Sie die Arduino-Dokumentation auf analogReference und Atmega328p-Datenblatt auf interne Referenzgenauigkeit.
Wenn Sie wirklich Muttern mit unterschiedlichen Bereichen erhalten möchten, können Sie mehrere externe Referenzen verwenden und diese mithilfe eines analogen Schalters wie 74hc4051 schalten. Oder Sie können zwischen zwei internen Referenzen wechseln.
Mit Thermistoren erzielen Sie bessere Ergebnisse, wenn Sie stattdessen eine Konstantstromquelle mit einem stummen Widerstand einrichten. Andererseits würde ein stummer Widerstand, der von einer stabilen Spannungsreferenz gespeist wird, in Ordnung funktionieren.
Stellen Sie bei der Auswahl einer externen Referenz sicher, dass genügend Spannung vorhanden ist, um die Ausfallspannung aufzunehmen, wenn die Batterien mit Strom versorgt werden und die Batterien leer sind. Vref + Vdropout <Vbat-min.
quelle
Das Fehlen einer stabilen ADC-Referenz ist tatsächlich ein Symptom für ein anderes Problem in Ihrer Schaltung: Sie versorgen die Platine nicht mit einer ausreichend hohen Spannung. Dies wird dadurch angezeigt, dass die 5-V-Versorgung auf 4 V abfällt und die 3,3 V ebenfalls abfallen.
Der Spannungsregler (MC33269D-5.0 IIRC) auf der Arduino-Platine hat eine Ausfallspannung von ~ 1,0 V, daher müssen Sie ihn mit mindestens 6 V versorgen, um einen stabilen 5 V-Ausgang zu erhalten. AA-Batterien beginnen bei 1,5 bis 1,6 V und sind bei 1,1 V fast leer. Sie müssen die Platine daher mit mindestens 6 AA-Batterien mit Strom versorgen, um eine stabile Leistung über die gesamte Batterielebensdauer zu erzielen.
Bei korrekter Stromversorgung können Sie entweder die interne ADC-Referenz oder die 5-V- oder 3,3-V-Leitungen verwenden. Da der Temperatursensor um etwa 10 mV pro Grad Celsius variiert, können Sie einen Spannungsteiler verwenden, um die Referenzspannung so einzustellen, dass sie der maximal erwarteten Sensorausgangsspannung entspricht (z. B. für 50 ° C). Dies ergibt eine genauere Messung.
Wenn Sie weniger als 6 AA-Batterien verwenden möchten, versuchen Sie es mit einem DC-DC-Aufwärtswandler, z . B. https://www.sparkfun.com/products/10968 . Das verknüpfte Beispiel nimmt 1V - 4V und macht 5V. Der Ausgang würde unter Umgehung seines Reglers direkt in den 5-V-Pin des Arduino eingespeist.
Schalten Sie die MCU zwischen den Sensorablesungen in den Ruhezustand, damit die Karte mit Batterien länger läuft. Die Rocketscream Low Power Library eignet sich hervorragend für diesen Zweck. Aber es ist nur dann wirklich nützlich, wenn ein effizienter Regler / DC-DC-Wandler verwendet wird, da der Standard-Arduino-Regler allein 10 mA verbraucht!
quelle
Antwort auf die Frage Gibt es eine andere Möglichkeit, die Sensorausgangsspannung zuverlässig zu messen?
Der ADC verwendet die Referenzspannung für die Umwandlung von analog zu digital. Wenn sich also die Referenzspannung ändert, ändern sich die konvertierten Werte (dh der digitale Wert). Der digitale Wert ist für denselben Analogeingang unterschiedlich, wenn sich die Referenzspannung ändert.
Eine einfache Option ist die Verwendung der internen Referenzspannung im Arduino (dh Atmega-Controller).
Unter dem folgenden Link finden Sie einen Beispielcode für die Verwendung des internen ADC (Arduino-Funktionsname - analogReference (DEFAULT)).
http://tronixstuff.com/2013/12/12/arduino-tutorials-chapter-22-aref-pin/
Ich denke, dies wird Ihr Problem lösen und es besteht keine Notwendigkeit, auf Thermistoren umzusteigen.
quelle