In diesem Artikel werden die verschiedenen Arten von Temperatursensoren erläutert und wie sie von Fall zu Fall verwendet werden können. Die Temperatur ist ein physikalischer Parameter, der in Grad gemessen wird. Es ist ein wesentlicher Bestandteil jedes Messprozesses. Bereiche, die genaue Temperaturmessungen erfordern, umfassen Medizin, biologische Forschung, Elektronik, Materialforschung und Wärmeleistung elektrischer Produkte. Ein Gerät zur Messung der Wärmeenergiemenge, mit dem physikalische Temperaturänderungen erfasst werden können, wird als Temperatursensor bezeichnet. Sie sind digital und analog.
Haupttypen von Sensoren
Im Allgemeinen gibt es zwei Methoden zum Abrufen von Daten:
1. Kontakt... Kontakttemperatursensoren stehen in physischem Kontakt mit einem Objekt oder einer Substanz. Mit ihnen kann die Temperatur von Feststoffen, Flüssigkeiten oder Gasen gemessen werden.
2. Kontaktlos... Berührungslose Temperatursensoren erfassen die Temperatur, indem sie einen Teil der von einem Objekt oder einer Substanz emittierten Infrarotenergie abfangen und deren Intensität erfassen. Sie können nur zur Messung der Temperatur in Feststoffen und Flüssigkeiten verwendet werden. Sie können die Temperatur von Gasen aufgrund ihrer Farblosigkeit (Transparenz) nicht messen.
Sensorauswahlregeln
Der Temperatursensor für die Fußbodenheizung wird unter Berücksichtigung von Merkmalen wie Leistung, Art der oberen Abdeckung, Installationsmethode und Ausstattung mit zusätzlicher Funktionalität ausgewählt.
Leistung
Der Wert muss auf jeden Fall den Anforderungen und der Belastung des warmen Bodens entsprechen. Andernfalls funktioniert der Sensor nicht richtig. Wenn die Leistung des Heizelements größer ist als die des Reglers selbst, muss zusätzlich ein Magnetstarter zwischen ihnen installiert werden, um eine Beschädigung des Geräts durch erhöhte Last zu vermeiden.
Funktionsumfang
Der warme Boden wird von einer elektrischen Einheit gesteuert, mit der Sie den Betrieb der Heizelemente einstellen können. Moderne Steuerungen verfügen über Funktionen wie das Starten und Abschalten des Systems, das Einstellen der Temperaturbedingungen sowie das Einstellen der Frequenz zum Anschließen und Trennen des Heizelements.
Benutzerfreundlichkeit
Wenn Sie der Meinung sind, dass Sie die Programmierung nicht verstehen, sollten Sie kein komplexes Gerät kaufen. Auch unter Berücksichtigung aller seiner Funktionen. Zum Beispiel finden es ältere Menschen ziemlich problematisch, mit programmierbaren Geräten umzugehen. Sie sollten besser die mechanische Option wählen.
Einfach anzuschließen
In der Begleitdokumentation zum Thermostat ist immer angegeben, wie der Fußbodenheizungssensor angeschlossen wird. Die Klemmen befinden sich am Rand einer Seite der Steuereinheit. Nachdem die elektrischen Leitungen gemäß dem Schema angeschlossen wurden, muss die Leistung des Heizungssystems überprüft werden. Messen Sie dazu den Widerstand an den Klemmen des Temperatursensors und des Heizungskabels oder schließen Sie einen warmen Boden an und erhöhen Sie die Temperaturwerte von Null auf den von SNIP empfohlenen Indikator, dh bis zu 30 ° C.
Aussehen
Ein Wärmesensor sollte nicht nur funktional verständlich, sondern auch attraktiv im Design sein. Moderne Knöpfe gibt es in verschiedenen Farben und Formen. Sie können eine Option auswählen, die mit dem Innenraum des Raums harmoniert.
Arten von Temperatursensoren
Es gibt viele verschiedene Arten von Temperatursensoren.Von der einfachen Ein- / Ausschaltsteuerung eines Thermostats bis hin zu komplexen Steuerungssystemen für die Wasserversorgung mit der Funktion der Erwärmung, die bei der Züchtung von Pflanzen eingesetzt werden. Die beiden Haupttypen von Sensoren, Kontakt und berührungslos, sind weiter unterteilt in Widerstands-, Spannungs- und elektromechanische Sensoren. Die drei am häufigsten verwendeten Temperatursensoren sind:
- Thermistoren
- Widerstandsthermoelemente
- Thermoelement
Diese Temperatursensoren unterscheiden sich hinsichtlich der Betriebsparameter.
Gerät
Es ist ein Thermoelement (Platte oder Stab), das aus Drähten besteht, die mit den Anschlüssen des Sensorelements verbunden sind.
Abhängig von der Temperaturinformation ändert sich der Widerstand des empfindlichen Teils bzw. das dem Thermostat zugeführte elektrische Signal ändert sich. Somit wird der Absolutwert der Mitteltemperatur bestimmt.
Extern (externer Temperatursensor für Fußbodenheizung) befindet sich in der Regel unter dem Bodenbelag und misst dessen Temperaturanzeigen. Intern (eingebaut), befindet sich im Regler und bestimmt den Grad der Luftheizung.
Das Design der Temperatursensoren wird in Abhängigkeit von den Merkmalen des Systems ausgewählt:
Thermistor
Ein Thermistor ist ein empfindlicher Widerstand, der seinen physikalischen Widerstand mit der Temperatur ändert. Typischerweise bestehen Thermistoren aus einem keramischen Halbleitermaterial wie Kobalt, Mangan oder Nickeloxid und sind mit Glas beschichtet. Es handelt sich um kleine flach versiegelte Scheiben, die relativ schnell auf Temperaturänderungen reagieren.
Aufgrund der Halbleitereigenschaften des Materials haben Thermistoren einen negativen Temperaturkoeffizienten (NTC), d.h. Der Widerstand nimmt mit zunehmender Temperatur ab. Es gibt jedoch auch PTC-Thermistoren, deren Widerstand mit zunehmender Temperatur zunimmt.
Thermistor-Zeitplan
Vorteile von Thermistoren
- Hohe Reaktionsgeschwindigkeit auf Temperaturänderungen, Genauigkeit.
- Kostengünstig.
- Höherer Widerstand im Bereich von 2.000 bis 10.000 Ohm.
- Viel höhere Empfindlichkeit (~ 200 Ohm / ° C) in einem begrenzten Temperaturbereich von bis zu 300 ° C.
Temperaturabhängigkeiten des Widerstands
Die Abhängigkeit des Widerstands von der Temperatur wird durch die folgende Gleichung ausgedrückt:
Wo A, B, C. - Dies sind Konstanten (bereitgestellt durch die Berechnungsbedingungen), R. - Widerstand in Ohm, T. - Temperatur in Kelvin. Sie können die Temperaturänderung leicht aus einer Widerstandsänderung berechnen oder umgekehrt.
Wie benutzt man einen Thermistor?
Thermistoren sind für ihren Widerstandswert bei Raumtemperatur (25 ° C) ausgelegt. Ein Thermistor ist ein passives Widerstandsgerät, daher muss die aktuelle Ausgangsspannung überwacht werden. In der Regel sind sie mit geeigneten Stabilisatoren in Reihe geschaltet, die einen Netzspannungsteiler bilden.
Beispiel: Betrachten Sie einen Thermistor mit einem Widerstandswert von 2,2 K bei 25 ° C und 50 Ohm bei 80 ° C. Der Thermistor ist über eine 5-V-Versorgung mit einem 1-kΩ-Widerstand in Reihe geschaltet.
Daher kann seine Ausgangsspannung wie folgt berechnet werden:
Bei 25 ° C ist RNTC = 2200 Ohm;
Bei 80 ° C ist RNTC = 50 Ohm;
Es ist jedoch wichtig zu beachten, dass bei Raumtemperatur die Standardwiderstandswerte für verschiedene Thermistoren unterschiedlich sind, da sie nicht linear sind. Ein Thermistor hat eine exponentielle Temperaturänderung und daher eine Beta-Konstante, die zur Berechnung seines Widerstands für eine bestimmte Temperatur verwendet wird. Die Widerstandsausgangsspannung und -temperatur sind linear miteinander verbunden.
Merkmale der Zweidraht-Stromschnittstelle in LMT01-Temperatursensoren
Feige. 4. Organisation der aktuellen Schnittstelle mit LMT01
Wie oben erwähnt, erzeugt der LMT01 zur Übertragung des Messergebnisses eine Bitsequenz in Form von Stromzählimpulsen. Dafür benötigt der Sensor nur zwei Leitungen (Abbildung 4). In einigen Fällen können Sie einen einzelnen Widerstand verwenden, um Stromimpulse in die für digitale Mikroschaltungen bekannte Form umzuwandeln (jedoch nicht immer - mehr dazu weiter unten).
Nach dem Einschalten startet der LMT01 einen Messzyklus, der bis zu 54 ms dauert (Abbildung 5). Während dieser Zeit wird am Sensorausgang ein niedriger Pegelstrom von 28 ... 39 μA gebildet. Darauf folgt ein Zyklus der Übertragung des Messergebnisses in Form von Stromimpulsen mit einer Amplitude von 112 ... 143 μA. Der empfangende Mikrocontroller muss diese Impulse zählen, beispielsweise unter Verwendung des eingebauten Zählers / Timers. Da die Frequenz der Signale etwa 82 ... 94 kHz beträgt, kann die Übertragungsdauer bei maximaler Anzahl von Impulsen (4095) 50 ms erreichen.
Feige. 5. Zeitdiagramme des Betriebs des LMT01-Sensors
Durch die Anzahl der gezählten Impulse (PC) kann der Temperaturwert nach Formel 1 bestimmt werden:
, (1)
Somit erzeugt der Sensor bei 0 ° C ungefähr 800 Impulse.
Leider ist die Verwendung eines externen Widerstands aufgrund der Begrenzung des minimalen Spannungsabfalls am LMT01-Sensor nicht immer möglich. Während des Messzyklus muss der Abfall über dem Sensor mindestens 2,15 V betragen. Während des Datenübertragungszyklus kann der Spannungsabfall auf 2 V reduziert werden. Es ist nicht schwierig, einige grobe Berechnungen durchzuführen.
Stellen Sie sich ein Gerät mit einer Versorgungsspannung Vdd = 3,3 V vor. Wenn wir während des Messzyklus den minimal zulässigen Abfall über den Sensor von 2,15 V nehmen, wird über dem Widerstand ein Signal von nicht mehr als 1,15 V beobachtet. Für die meisten digitalen Controller ist die logische Einheit 0, 7 ∙ Vdd, was in unserem Fall 2,31 V beträgt. Infolgedessen erweist sich die Verwendung eines einfachen Widerstands als unmöglich, da der Mikrocontroller das Signal von a einfach nicht "sieht" logische Einheit. Der Ausweg aus dieser Situation kann die Verwendung eines Mikrocontrollers mit eingebautem Komparator oder Pegelumwandlungsschaltungen sein.
Widerstandstemperatursensoren
Temperaturwiderstandssensoren (RTDs) bestehen aus seltenen Metallen wie Platin, deren elektrischer Widerstand mit der Temperatur variiert.
Widerstandstemperaturdetektoren haben einen positiven Temperaturkoeffizienten und bieten im Gegensatz zu Thermistoren eine hohe Genauigkeit bei der Temperaturmessung. Sie haben jedoch eine geringe Empfindlichkeit. Pt100 ist der am weitesten verbreitete Sensor mit einem Standardwiderstandswert von 100 Ohm bei 0 ° C. Der Hauptnachteil sind die hohen Kosten.
Die Vorteile solcher Sensoren
- Breiter Temperaturbereich von -200 bis 650 ° C.
- Stellen Sie einen hohen Abfallstromausgang bereit
- Linearer im Vergleich zu Thermoelementen und Widerstandsthermometern
Zusätzliche Komponenten und Sensorschaltung
Zusätzlich zu den Hauptdiodenvorrichtungen enthält die Temperatursensorschaltung eine Anzahl zusätzlicher Elemente. Erstens ist es ein Kondensator, der das Gerät vor äußeren Einflüssen schützt. Tatsache ist, dass der Operationsverstärker sehr empfindlich gegenüber den Auswirkungen elektromagnetischer Wechselfelder ist. Der Kondensator beseitigt diese Abhängigkeit durch Einspeisen einer negativen Rückkopplung.
Unter Beteiligung eines Transistors und einer Zenerdiode wird eine stabilisierte Referenzspannung gebildet. Hier werden Widerstände mit einer höheren Genauigkeitsklasse mit einem niedrigen Wert des Temperaturkoeffizienten des Widerstands verwendet. Dadurch gewinnt das gesamte System zusätzliche Stabilität. Im Falle möglicher signifikanter Änderungen der Temperaturbedingungen können Präzisionswiderstände weggelassen werden. Sie dienen nur zur Kontrolle einer geringen Überhitzung.
Thermoelement
Thermoelement-Temperatursensoren werden am häufigsten verwendet, weil sie genau sind, über einen weiten Temperaturbereich von -200 ° C bis 2000 ° C arbeiten und relativ kostengünstig sind. Ein Thermoelement mit einem Draht und einem Stecker auf dem Foto unten:
Thermoelementbetrieb
Ein Thermoelement besteht aus zwei unterschiedlichen Metallen, die miteinander verschweißt sind, um eine Potentialdifferenz über der Temperatur zu erzeugen. Aus der Temperaturdifferenz zwischen den beiden Übergängen wird eine Spannung erzeugt, mit der die Temperatur gemessen wird. Die Spannungsdifferenz zwischen den beiden Übergängen wird als Seebeck-Effekt bezeichnet.
Wenn beide Verbindungen die gleiche Temperatur haben, ist das Potential für die Differenz zwischen verschiedenen Verbindungen Null, d.h. V1 = V2. Wenn sich die Übergänge jedoch auf unterschiedlichen Temperaturen befinden, entspricht die Ausgangsspannung in Bezug auf die Temperaturdifferenz zwischen den beiden Übergängen ihrer Differenz V1 - V2.
Arten von Temperatursensoren
Elektronisch-mechanisch
Der einfachste und kostengünstigste Reglertyp. Sein Hauptarbeitsteil ist eine spezielle Metallplatte, die auf einen Temperaturanstieg oder -abfall reagiert. Das System wird durch Ändern der Krümmung der Platte während des Erhitzens und Abkühlens ein- und ausgeschaltet. Das Einstellen des genauen Temperaturwerts an einem solchen Regler funktioniert nicht.
Elektronisch
Das Gerät verfügt über ein spezielles Element, das ein spezielles Signal erzeugt. Die Leistung hängt direkt von den Werten der Umgebungstemperatur ab. Auf solchen Geräten können Sie genaue Heiztemperaturwerte bis zu einem Bruchteil eines Grades einstellen. Das System wird über Tasten und einen kleinen Bildschirm gesteuert.
Programmierbar
Das teuerste der Thermoelemente. Darauf können Sie bestimmte Werte einstellen, bei deren Erreichen das gesamte System vom Regler ein- oder ausgeschaltet wird. Dank des Geräts wird in dem Raum ein Mikroklima geschaffen, das zu einer bestimmten Person passt. Es ist möglich, den Thermostat so zu konfigurieren, dass das System zu einem bestimmten Zeitpunkt eingeschaltet wird. Das heißt, die Böden werden beheizt, bevor der Eigentümer nach Hause kommt, und gleichzeitig wird kein Strom verbraucht, wenn der Eigentümer dies nicht tut.
Viele Modelle verfügen über ein helles und elegantes Design und LCD-Bildschirme, auf denen Informationen angezeigt und die Feinabstimmung erleichtert werden.
Arbeiten mit vorgefertigten Bibliotheken
Um mit DS18B20-Temperatursensoren im Netzwerk zu arbeiten, finden Sie eine große Anzahl von Bibliotheken, in der Regel werden jedoch zwei der beliebtesten verwendet. Es ist eine Bibliothek und eine Bibliothek. Darüber hinaus ist die zweite Bibliothek ein bequemeres Add-On gegenüber der ersten und kann ohne sie nicht verwendet werden. Mit anderen Worten, bevor Sie die DallasTemperature.h-Bibliothek verbinden, müssen Sie auch OneWire.h verbinden. Das Installieren bestimmter Bibliotheken in der Arduino IDE ist möglich.
Bibliothek OneWire.h
Betrachten wir zunächst die Arbeit mit der OneWire.h-Bibliothek. Unten finden Sie eine Liste der Funktionen mit einer kurzen Beschreibung.
- OneWire Temperatursensor (uint8_t PinNumber)
Diese Funktion ist ein Konstruktor der OneWire-Klasse und erstellt ein Temperatursensorobjekt, d. H. Öffnet einen Kommunikationskanal mit einem Sensor oder einer Gruppe von Sensoren am PinNumber-Pin. In unseren Beispielen (Abbildungen 3-5) ist dies der „D2“ -Pin des Arduino Nano. Daran haben wir den Datenbus DQ DS18B20 angeschlossen.
Beispiel:
OneWire Temperatursensor
(
D2
);
// Ein Sensor oder eine Gruppe von Sensoren ist an Pin D2 angeschlossen
- uint8_t Suche (addrArray)
Die Funktion sucht auf dem 1-Wire-Bus nach dem nächsten Gerät und gibt, wenn es gefunden wird, den Adresswert in das Array addrArray ein und gibt true zurück. Da die eindeutige Adresse jedes Sensors 64-Bit ist, muss das addrArray 8 Byte groß sein. Wenn die Suche fehlschlägt, gibt die Funktion false zurück. Es ist zu beachten, dass, wenn mehrere Temperatursensoren an einen Bus angeschlossen sind, jeder Aufruf der Suchfunktion an den nächsten Sensor, dann an den nächsten usw. gerichtet wird, bis alle Geräte am Bus aufgelistet sind. Die Besonderheit dieser Funktion besteht darin, sich bereits verarbeitete Adressen zu merken. Um die Warteschlange zurückzusetzen, müssen Sie die Funktion reset_search () aufrufen, die weiter unten erläutert wird.
Beispiel:
Byte addrArray
[
8
];
// Array zum Speichern einer 64-Bit-Adresse // Wenn das Gerät überhaupt nicht auf dem Bus vorhanden ist oder alle Geräte aufgelistet sind // die entsprechenden Informationen im Port-Monitor anzeigen
wenn(!
Temperatursensor
.
Suche
(
addrArray
))
Seriennummer
.
println
(
"Keine Adressen mehr."
);
// Wenn das nächste Gerät auf die Anwesenheitsanforderung reagiert hat, // zeigt es seine 64-Bit-Adresse im Port-Monitor an
sonst{zum(
ich
=
0
;
ich
<
8
;
ich
++)
Seriennummer
.
drucken
(
addrArray
[
ich
],
VERHEXEN
);
}
- Leerereset_search ()
Wie oben erwähnt, setzt diese Funktion die Abrufwarteschlange von Geräten auf dem 1-Draht-Bus auf den Anfang zurück. Es muss immer in Verbindung mit der Suchfunktion verwendet werden, wenn diese false zurückgibt. In unserem Fall mit 5 Sensoren am Bus können wir beispielsweise durch fünfmaliges Aufrufen der Suchfunktion 5 Adressen erhalten. Zum sechsten Mal gibt die Suchfunktion false an uns zurück und führt dies bei jeder nächsten Abfrage durch, bis die Warteschlange geleert ist. Sie sollten darauf achten, um unverständliche Situationen zu vermeiden.
Beispiel:
Byte addrArray
[
8
];
// Array zum Speichern einer 64-Bit-Adresse // Wenn das Gerät überhaupt nicht auf dem Bus vorhanden ist oder alle Geräte aufgelistet sind // Setzen Sie die Abrufwarteschlange zurück, um den Suchzyklus zu wiederholen
wenn(!
Temperatursensor
.
Suche
(
addrArray
))
Temperatursensor
.
reset_search
();
- uint8_treset ()
Die 1-Draht-Rücksetzfunktion leitet den Kommunikationsprozess ein. Es wird jedes Mal aufgerufen, wenn wir mit dem Temperatursensor kommunizieren möchten. Rückgabewerte können wahr oder falsch sein. Wir erhalten den wahren Wert, wenn mindestens ein Sensor am Bus auf das Zurücksetzen mit einem Anwesenheitsimpuls reagiert. Andernfalls werden wir falsch;
Beispiel:
wenn(!
Temperatursensor
.
zurücksetzen
())
Seriennummer
.
println
(
"Keine Sensoren am Bus"
);sonst
Seriennummer
.
println
(
"Sensor wird erkannt"
);
- Leereselect (addrArray)
Mit dieser Funktion können Sie ein bestimmtes Gerät auswählen, mit dem wir gerade arbeiten möchten. Die Auswahl erfolgt durch explizite Angabe der im addrArray-Array eingegebenen 64-Bit-Adresse. Die Adresse kann explizit festgelegt werden, indem sie in ein Array geschrieben oder die zuvor von der Suchfunktion gelesene Adresse verwendet wird. Es ist zu beachten, dass die Rücksetzfunktion aufgerufen werden muss, bevor die Auswahlfunktion aufgerufen wird. Beim nächsten Zurücksetzen wird die Verbindung mit dem ausgewählten Sensor bis zum nächsten Aufruf unterbrochen.
Beispiel:
Byte addrArray
[
8
];
// Array zum Speichern einer 64-Bit-Adresse // Wenn das Gerät überhaupt nicht auf dem Bus vorhanden ist oder alle Geräte aufgelistet sind // die entsprechenden Informationen an den Portmonitor ausgeben
wenn(!
Temperatursensor
.
Suche
(
addrArray
))
Seriennummer
.
println
(
"Keine Adressen mehr."
);
// Wenn das nächste Gerät auf die Anwesenheitsanforderung geantwortet hat, // wählen Sie es für die nachfolgende Arbeit aus
sonst{
Temperatursensor
.
reset ()
;
// Vergessen Sie nicht, den Befehl zum Zurücksetzen des Temperatursensors auszugeben
.
select (addrArray)
;
// Geben Sie ein Array mit der Leseadresse an
}
- Leereüberspringen ()
Die Funktion ist nur relevant, wenn Sie mit einem Sensor am Bus arbeiten und einfach die Auswahl des Geräts überspringen. Mit anderen Worten, Sie können die Suchfunktion nicht verwenden und greifen daher schnell mit Ihrem einzigen Sensor zu.
Beispiel:
Temperatursensor.
zurücksetzen
();
// Setzen Sie den Temperatursensor-Reifen zurück
.
überspringen
();
// Wähle den einzigen Sensor für die weitere Arbeit damit
- Leereschreiben (uint8_tByte, uint8_t powerType = 0)
Die Funktion sendet ein Datenbyte an das ausgewählte Gerät auf dem Bus. Das Argument powerType gibt die Art der Stromversorgung für die Sensoren an (0 - Sensoren werden direkt von einer externen Quelle gespeist; 1 - eine parasitär betriebene Verbindung wird verwendet). Der zweite Parameter kann weggelassen werden, wenn externe Stromversorgung verwendet wird, da er standardmäßig 0 ist.
Beispiel:
Temperatursensor
.
zurücksetzen
();
// Setzen Sie den Temperatursensor-Reifen zurück
.
überspringen
();
// Wählen Sie einen einzelnen Sensor für die anschließende Arbeit damit aus. // Senden Sie einen Befehl zum Konvertieren der Temperatur, // über eine Verbindung mit parasitärer Leistung vom Temperatursensor-Datenbus
.
schreiben
(
0x44
,
1
);
- uint8_tlesen ()
Diese Funktion liest ein Datenbyte, das vom Slave-Gerät (Sensor) an den 1-Draht-Bus gesendet wird.
Beispiel:
// 9 Datenbytes vom 1-Draht-Bus lesen und das Ergebnis in ein Array-Byte-Array einfügen
[
9
];zum(
uint8_t i
=
0
;
ich
<
9
;
ich
++){
Array
[
ich
]=
Temperatursensor
.
lesen
();}
- statisch uint8_t crc8 (const uint8_t * addr, uint8_t len);
Die Funktion dient zur Berechnung der Prüfsumme. Entwickelt, um die korrekte Kommunikation mit dem Temperatursensor zu überprüfen. Hier ist addr ein Zeiger auf das Datenarray und len die Anzahl der Bytes.
Beispiel:
Byte addrArray
[
8
];
// Array zum Speichern einer 64-Bit-Adresse // Wenn das Gerät überhaupt nicht auf dem Bus vorhanden ist oder alle Geräte aufgelistet sind // die entsprechenden Informationen an den Portmonitor ausgeben
wenn(!
Temperatursensor
.
Suche
(
addrArray
))
Seriennummer
.
println
(
"Keine Adressen mehr."
);
// Andernfalls, wenn das nächste Gerät auf die Anwesenheitsanforderung geantwortet hat, // überprüfen Sie die Prüfsumme seiner Adresse
sonst{
// Wenn die Prüfsumme nicht übereinstimmt, wird eine Fehlermeldung angezeigt
wenn(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seriennummer
.
println
(
"CRC ist ungültig!"
);}}
Wir haben jede Funktion der OneWire.h-Bibliothek separat untersucht. Um das Material zu reparieren, werde ich im Folgenden eine Skizze zum Ablesen der Temperatur einer Gruppe von DS18B20-Temperatursensoren geben, die über einen parasitären Stromkreis mit Pin D2 verbunden werden. Die Skizze enthält detaillierte Kommentare zu allen erforderlichen Punkten.
#include // Wir verbinden die Bibliothek für die Arbeit mit DS18B20OneWire ds-Wärmesensoren
(
2
);
// Ein Sensor oder eine Gruppe von Sensoren ist mit dem D2-Pin des Arduino verbunden. // PRESET FUNCTION void setup
(
Leere
){
Seriennummer
.
Start
(
9600
);
// Initialisierung der Arbeit mit Serial-Port} // MAIN CYCLE void loop
(
Leere
){
Byte i
;
// Hilfsvariable für Byte-Present-Schleifen
=
0
;
// Variable zur Bestimmung der Bereitschaft des Sensors für Kommunikationsbyte type_s
;
// Variable zum Definieren des Typs des Wärmesensors auf dem Byte-Datenbus
[
12
];
// Array zum Speichern von Informationen, die von der Sensorbyte-Adresse empfangen wurden
[
8
];
// Array zum Speichern der 64-Bit-Adresse des Float-Celsius-Sensors
,
Fahrenheit
;
// Variablen zur Berechnung der Temperatur // Wenn Geräte am Bus nicht gefunden werden oder alle Geräte am Bus aufgelistet sind // die entsprechenden Informationen im Portmonitor anzeigen, // die Warteschlange zurücksetzen und erneut suchen und 250 ms warten
wenn(!
ds
.
Suche
(
addr
)){
Seriennummer
.
println
(
"Keine Adressen mehr."
);
Seriennummer
.
println
();
ds
.
reset_search
();
verzögern
(
250
);Rückkehr;}
// Wenn das nächste Gerät am Bus gefunden wird, // zeigen Sie seine eindeutige Adresse // im Port-Monitor in hexadezimaler Seriennummer an
.
drucken
(
"ROM ="
);zum(
ich
=
0
;
ich
<
8
;
ich
++){
Seriennummer
.
schreiben
(
‘ ‘
);
Seriennummer
.
drucken
(
addr
[
ich
],
VERHEXEN
);}
// Überprüfen Sie die Prüfsumme der Adresse des gefundenen Geräts // und zeigen Sie die entsprechenden Informationen an, wenn diese nicht übereinstimmt
wenn(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Seriennummer
.
println
(
"CRC ist ungültig!"
);Rückkehr;}
Seriennummer
.
println
();
// Überprüfen Sie das Null-Byte der Adresse, die // Informationen zu einem bestimmten Typ eines Temperatursensors enthält. Abhängig vom Wert des // Null-Bytes zeigen wir die Serie des Chips im Port-Monitor an. Wenn das Nullbyte einen unbekannten // Wert enthält, wird eine Meldung über die unbekannte Familie des Temperatursensors angezeigt.
Schalter(
addr
[
0
]){Fall
0x10
:
Seriennummer
.
println
(
Chip = DS18S20
);
type_s
=
1
;Unterbrechung;Fall
0x28
:
Seriennummer
.
println
(
Chip = DS18B20
);
type_s
=
0
;Unterbrechung;Fall
0x22
:
Seriennummer
.
println
(
Chip = DS1822
);
type_s
=
0
;Unterbrechung;Standard:
Seriennummer
.
println
(
"Gerät ist kein Gerät der DS18x20-Familie."
);Rückkehr;}
ds
.
zurücksetzen
();
// Den Bus zurücksetzen, um den Datenaustausch ds zu initialisieren
.
wählen
(
addr
);
// Wählen Sie den Sensor mit der aktuellen Adresse aus, um damit zu arbeiten. // Senden Sie den Befehl zum Umrechnen der Temperatur (gemäß Dokumentation 0x44). // Vergessen Sie nicht den zweiten Parameter "1", da wir Daten über das / übertragen / Leitung mit parasitärer Stromversorgung. ds
.
schreiben
(
0x44
,
1
);
// Der Sensor startet die Konvertierung, die laut Dokumentation max. 750ms // Um auf der sicheren Seite zu sein, organisieren wir eine Pause von ё Sekunde Verzögerung
(
1000
);
// Setzen Sie den Bus erneut zurück, um Informationen vom Sensor zu lesen. // Speichern Sie die Antwort der Funktion reset () auf die aktuelle Variable, damit Sie weiter damit arbeiten können
=
ds
.
zurücksetzen
();
ds
.
wählen
(
addr
);
// Wählen Sie den Sensor anhand seiner Adresse erneut aus, da ein Rücksetzimpuls aufgetreten ist. // Der Befehl 0xBE ermöglicht laut technischer Dokumentation das Lesen des internen Speichers // des Temperatursensors (Scratchpad), der aus 9 Bytes besteht. ds
.
schreiben
(
0xBE
);
// 9 Bytes aus dem internen Speicher des Temperatursensors lesen und anzeigen Seriell zum Port-Monitor
.
drucken
(
"Daten ="
);
Seriennummer
.
drucken
(
vorhanden
,
VERHEXEN
);
Seriennummer
.
drucken
(
» «
);zum(
ich
=
0
;
ich
<
9
;
ich
++){
Daten
[
ich
]=
ds
.
lesen
();
Seriennummer
.
drucken
(
Daten
[
ich
],
VERHEXEN
);
Seriennummer
.
drucken
(
» «
);}
// Überprüfen Sie die Prüfsumme der empfangenen seriellen Daten und geben Sie sie an den Port aus
.
drucken
(
"CRC ="
);
Seriennummer
.
drucken
(
OneWire
::
crc8
(
Daten
,
8
),
VERHEXEN
);
Seriennummer
.
println
();
// Starten Sie den Prozess der Konvertierung der empfangenen Daten in die tatsächliche Temperatur, // die in 0 und 1 Byte Lesespeicher gespeichert ist. Dazu kombinieren wir diese beiden // Bytes zu einer 16-Bit-Zahl int16_t raw
=(
Daten
[
1
]<<
8
)|
Daten
[
0
];
// Vor der weiteren Konvertierung müssen Sie die Familie definieren, // zu der dieser Sensor gehört (zuvor haben wir das Ergebnis in der Variablen type_s gespeichert). // Abhängig von der Familie wird die Temperatur unterschiedlich berechnet, // da der DS18B20 und der DS1822 einen 12-Bit-Wert zurückgeben, während der DS18S20 einen 9-Bit-Wert zurückgibt
wenn(
type_s
){
// Wenn der Sensor zur DS18S20-Rohfamilie gehört
=
roh
<<
3
;
// Standardauflösung ist 9 Bit
wenn(
Daten
[
7
]==
0x10
){
roh
=(
roh
&
0xFFF0
)+
12
—
Daten
[
6
];}}sonst{
// Bestimmen Sie, mit welcher Messgenauigkeit dieser Sensor konfiguriert ist. Byte cfg
=(
Daten
[
4
]&
0x60
);
// Bei niedrigeren Auflösungen können Sie die niedrigstwertigen Bits auf Null setzen, // da sie nicht früh definiert werden
wenn(
cfg
==
0x00
)
roh
=
roh
&~
7
;
// 9 Bit (Konvertierung dauert 93,75 ms)
sonstwenn(
cfg
==
0x20
)
roh
=
roh
&~
3
;
// 10 Bit (Konvertierung dauert 187,5 ms)
sonstwenn(
cfg
==
0x40
)
roh
=
roh
&~
1
;
// 11 Bit (Konvertierung dauert 375 ms) // Die Standardgenauigkeit beträgt 12 Bit (Konvertierung dauert 750 ms)
}
// Temperaturwerte berechnen und an den Celsius-Port-Monitor ausgeben
=(
schweben
)
roh
/
16.0
;
Fahrenheit
=
Celsius
*
1.8
+
32.0
;
Seriennummer
.
drucken
(
"Temperatur ="
);
Seriennummer
.
drucken
(
Celsius
);
Seriennummer
.
drucken
(
"Celsius,"
);
Seriennummer
.
drucken
(
Fahrenheit
);
Seriennummer
.
println
(
"Fahrenheit"
);}
Wenn alles richtig gemacht wurde, sollte im Fenster des Portmonitors Folgendes angezeigt werden (Abbildung 6):
Abbildung 6 - Das Ergebnis der Arbeit mit der OneWire.h-Bibliothek
DallasTemperature.h Bibliothek
Diese Bibliothek basiert auf der vorherigen und vereinfacht den Programmiervorgang aufgrund verständlicherer Funktionen ein wenig. Nach der Installation haben Sie für alle Gelegenheiten Zugriff auf 14 Beispiele für gut dokumentierten Code. Im Rahmen dieses Artikels wird ein Beispiel für den Betrieb mit einem Sensor betrachtet.
Das Ergebnis des Programms ist in Abbildung 7 dargestellt
Abbildung №7 - das Ergebnis des Ablesens der Temperatur mithilfe der Bibliothek DallasTemperature.h
// Wir verbinden die erforderlichen Bibliotheken # include #include // Wir verbinden den Datenbus mit Pin # 2 von Arduino # define ONE_WIRE_BUS 2 // Erstellen Sie eine Instanz der Klasse für unseren Bus und eine Verknüpfung zu OneWire oneWire
(
ONE_WIRE_BUS
);
DallasTemperatursensoren
(&
oneWire
);
// PRESET FUNCTION void setup
(
Leere
){
Seriennummer
.
Start
(
9600
);
// Initialisieren Sie die seriellen Schnittstellensensoren
.
Start
();
// Initialisiere den Bus
}
// HAUPTZYKLUS
(
Leere
){
Seriennummer
.
drucken
(
"Lesetemperatur ..."
);
// Sende den Befehl zum Lesen von Sensoren
.
requestTemperatures
();
Seriennummer
.
println
(
"Lesen"
);
Seriennummer
.
drucken
(
Sensortemperatur 1:
);
// Den Temperaturwert Seriell anzeigen
.
drucken
(
Sensoren
.
getTempCByIndex
(
0
));}
Temperatursensor KY-001 mit 1-Draht-Schnittstelle
Dieser Sensor dient zur genauen Temperaturmessung. Die Kommunikation mit dem Sensor erfolgt über die 1-Draht-Schnittstelle [1-2], über die Sie mehrere ähnliche Geräte mit einem Mikrocontroller-Pin [3-4] an die Arduino-Karte anschließen können. Das Modul basiert auf der Mikroschaltung ds18b20 [5].
Modulgröße 24 x 15 x 10 mm, Gewicht 1,3 g. Zum Anschluss wird ein dreipoliger Stecker verwendet. Zentralkontakt - Stromversorgung + 5V, Kontakt "-" - gemeinsam, Kontakt "S" - informativ.
Die Karte verfügt über eine rote LED, die beim Informationsaustausch aufleuchtet.
Stromaufnahme 0,6 mA während des Informationsaustauschs und 20 μA im Standby-Modus.
Der Anschluss dieser Art von Sensoren an Arduino ist in vielen Quellen gut beschrieben [6-8]. In diesem Fall zeigen sich erneut die Hauptvorteile des Arduino - Vielseitigkeit und das Vorhandensein einer großen Menge an Referenzinformationen. Um mit dem Sensor arbeiten zu können, benötigen Sie die OneWire Library [9]. Nach dem Laden des Programms aus [8] (in der ersten Version des Programms ist ein Fehler aufgetreten - im Code-Header befindet sich keine # include-Bibliotheksverbindung) können die folgenden Informationen im Monitor für die serielle Schnittstelle angezeigt werden.
Der Autor testete auch den Code von [7], alles funktionierte sofort, im Monitor der seriellen Schnittstelle können Sie Informationen über den Typ des angeschlossenen Sensors und die tatsächlichen Temperaturdaten lesen.
Im Allgemeinen ein sehr nützlicher Sensor, der es ermöglicht, sich in der Praxis mit der 1-Draht-Schnittstelle vertraut zu machen. Der Sensor gibt sofort die richtigen Temperaturdaten aus, der Benutzer muss nicht kalibrieren.