Ich versuche, ein temperaturgesteuertes Relaismodul mit einem ATtiny45 (Arduino UNO R3 als ISP) und einem NXP KTY81-222 Temperatursensor zu bauen.
Der Temperaturbereich, den ich überwachen möchte, liegt zwischen 20 °C und 30 °C.
( Datenblatt -> http://www.produktinfo.conrad.com/datenblaetter/150000-174999/153653-da-01-en-TEMPERATUR_SENSOR_KTY10_7_KTY81_222.pdf )
Mein Schaltungslayout sieht so aus = (Ich verwende den Arduino UNO R3 zum Debuggen)
** Beachten Sie, dass ich auch versucht habe, den 1K-Widerstand und die Sensorposition zu "tauschen", um den Ausgang zu invertieren.
* und das Arduino-Board ->
A0 ist der analoge Eingang 0 des Arduino. 5V werden direkt in den 5V-Ausgangsstift des Arduino gesteckt.
(später wäre es das gleiche auf dem ATtiny45 mit einigen Batterien)
(VCC kann 2,7 V bis 5,5 V betragen)
Ich habe ein Haushalts-Digitalthermometer verwendet, um die Werte vom analogen Eingang mit den gemessenen °C-Werten zu vergleichen.
Dies ist eine Schnellmaßtabelle =
Analog -> °C
687 bis 690 -> 24,4 °C bis 25,1 °C
707 bis 708 -> 36,2 °C bis 36,5 °C
Wie Sie sehen können, habe ich einen Bereich von etwa 20 analogen Einheiten, der einen Bereich von etwa 10 ° C-Einheiten darstellt.
Was ich also eigentlich möchte, ist, den Bereich der analogen Einheiten auf etwa 200 analoge Einheiten für den Bereich von 10 ° C-Einheiten zu "erweitern". Die Lösung sollte einen gut zu handhabenden Wertebereich haben, damit ich dem µC sagen kann, dass er das Relais einschalten soll, wenn die Temperatur unter 24 ° C liegt, und das Relais schließen, wenn die Temperatur über 28 ° C liegt.
Ich möchte, dass 20 ° C ein analoger Wert von etwa 500 und 30 ° C etwa 700 ist. (Dieser Bereich von 500 bis 700 wäre gut genug für mich.
Ich hoffe, ich konnte meine Frage für mein schlechtes Englisch gut erklären.
Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan
Sie werden auf einige Genauigkeitsprobleme stoßen, wie zum Beispiel:
Ich würde einfach ein Eindrahtthermometer wie das DS18B20/DS18S20 verwenden. Mit einem digitalen Sensor, weniger immun gegen Rauschen. Sie können es sogar auf eine viel längere Distanz laufen lassen. Es gibt bereits eine Bibliothek für den Arduino. Das ist jedenfalls mein Weg.
Gehen Sie mit Ihrer Route:
Wenn Sie nur den Temperaturbereich von 20 ° C bis 30 ° C wünschen, müssen Sie mit Ihrem Widerstand herumspielen, um diesen Bereich zu erhalten. Beispielsweise beträgt der Nennwiderstand bei 20 °C 1922 Ohm und bei 30 °C 2080 Ohm.
Spannungsteilerzustände ergeben also:
Der Unterschied beträgt 0,08778 V oder 87,78 mV. Da Arduinos Analog 10b (1023) verwendet: . Dies hätte 17,9 Schritte ergeben sollen ( , also sagen wir einfach 17. Wenn Sie dies auf eine größere Auflösung reduzieren möchten, können Sie die 3,3 V vom FTDI-Port des Arduino an den analogen Referenzstift anschließen. Versorgen Sie Ihren Spannungsteiler jedoch mit denselben 5 V. Verwenden Sie in Ihrem void setup() analogReference(EXTERNAL). Dadurch wird Ihr Analog so eingerichtet, dass es die 3,3-V-Referenz anstelle der internen 5-V-Referenz verwendet.
Jetzt rechnen wir noch etwas weiter:
Da wir jetzt eine 3,3-V-Referenz verwenden, ändert sich die Auflösung zu . Dies ergibt nun 27,2 Schritte ( ) (sagen wir einfach 27 Schritte).
Wie Sie sehen können, haben wir uns gerade von 17 Schritten auf 27 Schritte verbessert. In einem Bereich von 10 °C (30 °C bis 20 °C) können wir theoretisch eine Auflösung von 10 °C/27 = 0,37 °C erreichen. Ich würde einen Kondensator parallel zum Sensor empfehlen, um einen Tiefpassfilter erster Ordnung zu erstellen (lässt niedrige Frequenzen durch und unterdrückt hohe Frequenzen nach dem Abschalten mit einer Rate von 20 dB oder der 10-fachen Unterdrückung pro Dekade). Verdrahten Sie diesen Kondensator direkt zwischen A0 und gnd (so nah wie möglich an A0). Der Grenzfilter wird berechnet mit:
Angenommen, Sie verwenden einen 1k-Widerstand und einen 1uF-Kondensator:
Alles, was Sie jetzt tun müssen, ist, mit dem Widerstandswert herumzuspielen (er sollte jetzt größer als 1k sein). Stellen Sie sicher, dass im schlimmsten Fall keine Spannung größer als die Referenzspannung bereitgestellt wird.
Ich würde wahrscheinlich einen 2k-Widerstand wählen:
analogRead ergibt also 759
analogRead ergibt also 790
Worst-Case-Szenario: @ 150 ° C -> 4280 Ohm
(OK)
Differenz 98,73 mV -> 98,73 mV/3,23 mV -> 30 Schritte
Tiefpassfilter: (AC-Signal bei 796 Hz wird auf 10-mal kleiner reduziert, bei 7960 Hz ist es 100-mal kleiner usw.).
Es scheint keine sehr breite Palette digitaler Zahlen zu sein, aber haben Sie darüber nachgedacht, (sagen wir) zehn Messwerte zu mitteln? Rauschen (wenn es im Allgemeinen über der Bandbreite liegt, die Sie messen müssen) kann durch einen Prozess namens Dithering zu Ihrem Vorteil genutzt werden. Durch die Zufälligkeit des Rauschens erhalten Sie eine Streuung der Messwerte für eine feste Temperatur, und die Mittelung mehrerer Zahlen ergibt eine größere Auflösung. Die Mittelung der Zahlen ist ein Tiefpassfilter, der (a) das Rauschen entfernt und (b) Ihnen eine höhere Auflösung bietet.
Sie erwähnen "analoge Einheiten", beziehen sich aber auf digitale Werte, die von einem ADC gesammelt wurden, also schlage ich vor, dass Sie genau dies tun - versuchen Sie es zumindest und sehen Sie, wie die Variationen sind. Wenn Sie wirklich gute stabile Signale in Ihrem ADC haben, kann eine Form der Verstärkung mit einem Operationsverstärker versucht werden. Wenn Sie den Eingang des ADC mit einem Kondensator entkoppeln, können Sie versuchen, ihn zu entfernen.
sternenblau
As
Scott Seidmann
As