Ich versuche, einen Thermostat mit Arduino zu bauen. Ich möchte es mit einem Handy-Akku/Ladegerät mit Strom versorgen, wodurch die Systemspannung sehr variabel wird. Im Moment verwende ich Arduino Uno, aber sobald es fertig ist, werde ich es auf Lilypad portieren.
Zuerst habe ich versucht, den Temperatursensor TMP36 zu verwenden. Bisher war es ein kompletter Fehlschlag. Während der Sensor selbst sehr stabil zu sein scheint, kann ich keine Möglichkeit finden, seine Spannung genau zu messen.
Die Verwendung der integrierten 5-V-Referenz für analoge Sensoren funktioniert überhaupt nicht - selbst wenn sie von +5 V des USB-Arduinos gespeist werden, sind es tatsächlich +4,8 V (was die gemessene Temperatur um einige Grad verschiebt). Wenn das Board von der Batterie gespeist wird, fällt die Spannung auf etwa 4 V ab und die gemessene Temperatur steigt sprunghaft an. Ich habe auch versucht, +3,3 V von der Platine als Referenz zu verwenden. Es scheint stabiler zu sein, wenn das Board über USB mit Strom versorgt wird, aber seine Spannung fällt ab, wenn die Batterie leer ist.
Gibt es eine andere Möglichkeit, die Sensorausgangsspannung zuverlässig zu messen?
Für die zweite Stufe plane ich, Thermistoren zu verwenden. Ich habe gerade ein paar dieser 20K-Thermistoren bestellt .
Soweit ich weiß, sollten diese einfacher genau zu messen sein, wenn ich einen Spannungsteiler baue und V_in als Referenzspannung für ADC verwende.
Ein paar Fragen dazu:
Es scheint, dass Sie sich des Problems mit der Änderung der Referenzspannung bewusst sind, und wenn Sie ein Gerät wie das TMP36 (feste 10 mV / ° C) verwenden, können Sie nichts anderes tun, als eine Spannungsreferenz von einem Chip zu verwenden, um die Dinge zu stabilisieren.
Wenn Sie jedoch ein RTD 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 RTD oder Thermistor (über einen geeigneten Widerstand) mit derselben Referenzspannung versorgen, wirkt sich dies nicht auf die Messwerte aus. Wenn die Referenz um 10% steigt, steigt auch die Spannung in den ADC.
Ich denke, Sie sollten die Verwendung eines digitalen Temperatursensors wie DS18B20 / DS18S20 in Betracht ziehen, da dies nicht von der Genauigkeit Ihres ATmega ADC abhängt, um ein analoges Signal zu messen, sondern ein digitales 1-Draht-Protokoll verwendet, um die Temperatur zu melden.
Siehe die folgenden Tutorials
http://playground.arduino.cc/Learning/OneWire
http://www.hobbytronics.co.uk/ds18b20-arduino
Ihre Messung ist so gut wie die Referenzspannung für ADC gut ist. Arduino verwendet standardmäßig die Versorgungsspannung als Referenzspannung, aber in Ihrem Fall wäre die Verwendung des Aref-Pins von Arduino der richtige Weg. Sie müssen sich einen speziellen Chip namens "Voltage Reference" besorgen und ihn mit dem Aref-Pin verbinden, dann ADC so einstellen, dass er die externe Referenz im Arduino-Code verwendet ( analogReference(EXTERNAL)
)
Die Spannung der Referenz muss so gewählt werden, dass der volle Ausschlag Ihres Temperatursensors in die Referenzspannung passt. TMP36 gibt ~1,5 V bei 100 °C aus, sodass Sie eine Referenz über 1,5 V verwenden müssten, um Temperaturen bis zu 100 °C zu messen. Sie möchten, dass Ihre Referenz so nah wie möglich an der maximal gemessenen Spannung liegt, um eine möglichst hohe Auflösung zu erhalten.
Atmega328p hat zwei interne Referenzen, die ohne externe Komponenten verwendet werden können. Einer ist 1,1 V, ein anderer 2,56 V. Sie sind normalerweise etwas schlechter als das, was Sie durch die Verwendung einer externen dedizierten Komponente erhalten würden. Überprüfen Sie die Arduino-Dokumentation für analogReference und das Atmega328p-Datenblatt für die interne Referenzgenauigkeit.
Wenn Sie wirklich Nüsse mit unterschiedlichen Reichweiten bekommen möchten, können Sie mehrere externe Referenzen verwenden und sie mit einem analogen Schalter wie 74hc4051 umschalten. Oder Sie können zwischen zwei internen Referenzen wechseln.
Mit Thermistoren erzielen Sie bessere Ergebnisse, wenn Sie anstelle eines dummen Widerstands eine Konstantstromquelle einrichten. Andererseits würde ein dummer Widerstand, der von einer stabilen Spannungsreferenz gespeist wird, in Ordnung funktionieren.
Stellen Sie bei der Auswahl einer externen Referenz sicher, dass Sie über genügend Spannung verfügen, um die Abfallspannung zu kompensieren, wenn Sie mit Batterien betrieben werden und die Batterien leer sind. Vref+Vdropout < Vbat-min.
Keine stabile ADC-Referenz zu haben, ist eigentlich ein Symptom für ein anderes Problem in Ihrer Schaltung: Sie liefern keine ausreichend hohe Spannung an die Platine. 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 dem Arduino-Board hat eine Dropout-Spannung 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-1,6 V und sind bei 1,1 V fast leer, sodass Sie das Board mit mindestens 6 AA-Batterien versorgen müssen, um eine stabile Ausgabe über die gesamte Batterielebensdauer zu erhalten.
Bei korrekter Stromversorgung können Sie entweder die interne ADC-Referenz oder entweder die 5-V- oder die 3,3-V-Leitung verwenden. Da der Temperatursensor um etwa 10 mV pro Grad Celsius variiert, könnten Sie einen Spannungsteiler verwenden, um die Referenzspannung gleich der maximal erwarteten Sensorausgangsspannung einzustellen (z. B. für 50 Grad C). Dadurch erhalten Sie 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 verlinkte Beispiel nimmt 1V - 4V und macht 5V. Der Ausgang würde direkt in den 5-V-Pin des Arduino eingespeist und sein Regler umgangen.
Damit das Board länger mit Batterien läuft, versetzen Sie die MCU zwischen den Sensorablesungen in den Ruhezustand. Die Rocketscream-Low-Power-Bibliothek 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 alleine 10 mA verbraucht!
Antwort auf die Frage Gibt es eine andere Möglichkeit, die Sensorausgangsspannung zuverlässig zu messen?
ADC verwendet die Referenzspannung für die Umwandlung von analog nach digital. Wenn sich also die Referenzspannung ändert, ändern sich die konvertierten Werte (dh der digitale Wert). Der digitale Wert wird für denselben analogen Eingang unterschiedlich sein, wenn sich die Referenzspannung ändert.
Eine einfache Möglichkeit besteht darin, die interne Referenzspannung im Arduino (dh Atmega-Controller) zu verwenden.
Siehe den folgenden Link, wo ein Beispielcode zur Verwendung des internen ADC (Arduino-Funktionsname - analogReference (DEFAULT)) bereitgestellt wird.
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.
geometrisch
Joe Hass
Usow
Usow
Usow
Cano64
Gabeltestlab