Aansluiting: 4-draads weerstandsthermometersensor

In dit artikel bespreken we de verschillende soorten temperatuursensoren en hoe deze per geval kunnen worden gebruikt. Temperatuur is een fysieke parameter die wordt gemeten in graden. Het is een essentieel onderdeel van elk meetproces. Gebieden die nauwkeurige temperatuurmetingen vereisen, zijn onder meer geneeskunde, biologisch onderzoek, elektronica, materiaalonderzoek en thermische prestaties van elektrische producten. Een apparaat dat wordt gebruikt om de hoeveelheid warmte-energie te meten waarmee we fysieke temperatuurveranderingen kunnen detecteren, staat bekend als een temperatuursensor. Ze zijn digitaal en analoog.

Belangrijkste soorten sensoren

Over het algemeen zijn er twee methoden om gegevens te verkrijgen:

1. Contact opnemen​Contacttemperatuursensoren zijn in fysiek contact met een object of stof. Ze kunnen worden gebruikt om de temperatuur van vaste stoffen, vloeistoffen of gassen te meten.

2. Contactloos​Contactloze temperatuursensoren detecteren de temperatuur door een deel van de infraroodenergie te onderscheppen die door een object of substantie wordt uitgezonden en de intensiteit ervan te detecteren. Ze kunnen alleen worden gebruikt om de temperatuur in vaste stoffen en vloeistoffen te meten. Ze kunnen de temperatuur van gassen niet meten vanwege hun kleurloosheid (transparantie).

Sensor selectie regels

Bij de keuze van de temperatuursensor voor vloerverwarming wordt rekening gehouden met eigenschappen zoals vermogen, type toplaag, installatiemethode en apparatuur met extra functionaliteit.

Kracht

De waarde moet zeker voldoen aan de eisen en belasting van de warme vloer. Anders werkt de sensor niet correct. Wanneer het vermogen van het verwarmingselement groter is dan dat van de regelaar zelf, wordt het noodzakelijk om bovendien een magnetische starter ertussen te installeren - om schade aan het apparaat door verhoogde belasting te voorkomen.

Functieset

De warme vloer wordt aangestuurd door een elektrische eenheid, waarmee u de werking van de verwarmingselementen kunt aanpassen. Moderne controllers hebben functies zoals het starten en spanningsloos maken van het systeem, het aanpassen van de temperatuuromstandigheden en het instellen van de frequentie van het aansluiten en loskoppelen van het verwarmingselement.

Makkelijk te gebruiken

Als u denkt dat u programmeren niet begrijpt, moet u geen complex apparaat aanschaffen. Zelfs rekening houdend met al zijn functionaliteit. Ouderen vinden het bijvoorbeeld behoorlijk problematisch om met programmeerbare apparaten om te gaan. Ze kunnen beter de mechanische optie kiezen.

Makkelijk aan te sluiten

In de bijbehorende documentatie van de thermostaat staat altijd aangegeven hoe de vloerverwarmingssensor moet worden aangesloten. De klemmen bevinden zich aan de rand aan één kant van de besturingseenheid. Nadat de elektrische draden volgens het schema zijn aangesloten, is het nodig om de prestaties van het verwarmingssysteem te controleren. Om dit te doen, meet u de weerstand aan de klemmen van de temperatuursensor en de elektrische verwarmingskabel, of sluit u een warme vloer aan en verhoogt u de temperatuurwaarden van nul tot de door SNIP aanbevolen indicator, dat wil zeggen tot 30 ° C.

Uiterlijk

Een thermische sensor moet niet alleen functioneel begrijpelijk zijn, maar ook aantrekkelijk qua design. Moderne knoppen zijn er in verschillende kleuren en vormen. U kunt een optie kiezen die in harmonie is met het interieur van de kamer.

Soorten temperatuursensoren

Er zijn veel verschillende soorten temperatuursensoren.Van eenvoudige aan / uit-regeling van een thermostatisch apparaat tot complexe regelsystemen voor de watervoorziening, met de functie om deze te verwarmen, gebruikt in de processen van het kweken van planten. De twee belangrijkste soorten sensoren, contact en niet-contact, zijn verder onderverdeeld in resistieve, spannings- en elektromechanische sensoren. De drie meest gebruikte temperatuursensoren zijn:

  • Thermistoren
  • Weerstandsthermokoppels
  • Thermokoppel

Deze temperatuursensoren verschillen van elkaar in termen van operationele parameters.

Apparaat

Dit is een thermokoppel (plaat of staaf) dat bestaat uit draden die zijn verbonden met de aansluitingen van het sensorelement.

Afhankelijk van de temperatuurinformatie verandert de weerstand van het gevoelige deel, respectievelijk verandert het elektrische signaal dat aan de thermostaat wordt geleverd. Zo wordt de absolute waarde van de mediumtemperatuur bepaald.

Aansluitschema temperatuursensor

Extern (externe temperatuursensor voor vloerverwarming) bevindt zich in de regel onder de afwerkvloerbedekking en meet de temperatuurindicatoren. Intern (ingebouwd), bevindt zich in de regelaar en bepaalt het niveau van luchtverwarming.

Het ontwerp van temperatuursensoren wordt geselecteerd afhankelijk van de kenmerken van het systeem:

Thermistor

Een thermistor is een gevoelige weerstand die zijn fysieke weerstand verandert met de temperatuur. Typisch zijn thermistors gemaakt van een keramisch halfgeleidermateriaal zoals kobalt, mangaan of nikkeloxide en zijn bekleed met glas. Het zijn kleine platte gesealde schijven die relatief snel reageren op elke temperatuurverandering.

Vanwege de halfgeleidende eigenschappen van het materiaal hebben thermistors een negatieve temperatuurcoëfficiënt (NTC), d.w.z. weerstand neemt af met toenemende temperatuur. Er zijn echter ook PTC-thermistors waarvan de weerstand toeneemt met toenemende temperatuur.

Thermistor schema

Voordelen van thermistors

  • Hoge reactiesnelheid op temperatuurveranderingen, nauwkeurigheid.
  • Goedkoop.
  • Hogere weerstand in het bereik van 2.000 tot 10.000 ohm.
  • Veel hogere gevoeligheid (~ 200 ohm / ° C) binnen een beperkt temperatuurbereik tot 300 ° C.

Temperatuurafhankelijkheid van weerstand

De afhankelijkheid van weerstand van temperatuur wordt uitgedrukt door de volgende vergelijking:

Waar A, B, C - dit zijn constanten (bepaald door de berekeningsvoorwaarden), R. - weerstand in Ohm, T - temperatuur in Kelvin. U kunt de verandering in temperatuur eenvoudig berekenen uit een verandering in weerstand of omgekeerd.

Hoe gebruik je een thermistor?

Thermistors worden beoordeeld op hun weerstandswaarde bij kamertemperatuur (25 ° C). Een thermistor is een passief resistief apparaat, daarom moet de huidige uitgangsspanning worden bewaakt. Ze zijn in de regel in serie geschakeld met geschikte stabilisatoren die een netspanningsdeler vormen.

Voorbeeld: Beschouw een thermistor met een weerstandswaarde van 2,2K bij 25 ° C en 50 ohm bij 80 ° C. De thermistor is in serie geschakeld met een 1 kΩ weerstand via een 5 V voeding.

Daarom kan de uitgangsspanning als volgt worden berekend:

Bij 25 ° C, RNTC = 2200 ohm;

Bij 80 ° C, RNTC = 50 ohm;

Het is echter belangrijk op te merken dat bij kamertemperatuur de standaardweerstandswaarden verschillend zijn voor verschillende thermistors, aangezien ze niet-lineair zijn. Een thermistor heeft een exponentiële temperatuurverandering, en dus een bètaconstante, die wordt gebruikt om de weerstand voor een bepaalde temperatuur te berekenen. De uitgangsspanning van de weerstand en de temperatuur zijn lineair gerelateerd.

Kenmerken van de tweedraads stroominterface in LMT01 temperatuursensoren

Afb. 4. Organisatie van de huidige interface met LMT01

Zoals hierboven vermeld, genereert de LMT01 om het meetresultaat te verzenden een bitreeks in de vorm van huidige telpulsen. Hiervoor heeft de sensor slechts twee kabels nodig (afbeelding 4). Om stroompulsen om te zetten in de vorm die bekend is bij digitale microschakelingen, kunt u in sommige gevallen een enkele weerstand gebruiken (maar niet altijd - meer hierover hieronder).

Na het opstarten start de LMT01 een meetcyclus die tot 54 ms duurt (Figuur 5). Gedurende deze tijd wordt een lage stroom van 28 ... 39 μA gevormd aan de sensoruitgang. Daarna volgt een cyclus van overdracht van het meetresultaat in de vorm van stroompulsen met een amplitude van 112 ... 143 μA. De ontvangende microcontroller moet deze pulsen tellen, bijvoorbeeld met behulp van de ingebouwde teller / timer. Omdat de frequentie van de signalen ongeveer 82 ... 94 kHz is, kan de transmissieduur met het maximale aantal pulsen (4095) 50 ms bedragen.

Afb. 5. Timingdiagrammen van de LMT01-sensor

Door het aantal getelde pulsen (PC) kan de temperatuurwaarde bepaald worden volgens formule 1:

, (1)

Dus bij 0 ° C zal de sensor ongeveer 800 pulsen genereren.

Helaas is het gebruik van één externe weerstand niet altijd mogelijk vanwege de beperking van de minimale spanningsval over de LMT01-sensor. Tijdens de meetcyclus moet de val over de sensor minimaal 2,15 V bedragen. Tijdens de datatransmissiecyclus kan de spanningsval worden teruggebracht tot 2 V. Het is niet moeilijk om een ​​paar grove berekeningen te maken.

Beschouw een apparaat met een voedingsspanning Vdd = 3,3 V. Als we de minimaal toegestane daling over de sensor nemen gelijk aan 2,15 V tijdens de meetcyclus, dan zal een signaal van niet meer dan 1,15 V over de weerstand worden waargenomen. controllers, de logische eenheid is 0, 7 ∙ Vdd, wat in ons geval 2,31 V zal zijn. logische eenheid. De uitweg uit deze situatie kan het gebruik zijn van een microcontroller met een ingebouwde comparator of niveauconversiecircuits.

Resistieve temperatuursensoren

Temperatuurweerstandssensoren (RTD's) zijn gemaakt van zeldzame metalen, zoals platina, waarvan de elektrische weerstand varieert met de temperatuur.

Resistieve temperatuurdetectoren hebben een positieve temperatuurcoëfficiënt en bieden, in tegenstelling tot thermistors, meetnauwkeurigheid bij hoge temperaturen. Ze hebben echter een slechte gevoeligheid. Pt100 is de meest verkrijgbare sensor met een standaard weerstandswaarde van 100 ohm bij 0 ° C. Het grootste nadeel zijn de hoge kosten.

De voordelen van dergelijke sensoren

  • Breed temperatuurbereik van -200 tot 650 ° C
  • Zorg voor een hoge stroomuitgang
  • Meer lineair in vergelijking met thermokoppels en RTD's

Extra componenten en sensorcircuit

Naast de hoofddiode-apparaten bevat het temperatuursensorcircuit een aantal extra elementen. Allereerst is het een condensator die het apparaat beschermt tegen invloeden van buitenaf. Feit is dat de operationele versterker zeer gevoelig is voor de effecten van wisselende elektromagnetische velden. De condensator heft deze afhankelijkheid op door tegenkoppeling te injecteren.

Temperatuursensor circuit

Met de deelname van een transistor en een zenerdiode wordt een gestabiliseerde referentiespanning gevormd. Hier worden weerstanden met een hogere nauwkeurigheidsklasse gebruikt met een lage waarde van de temperatuurcoëfficiënt van weerstand. Daardoor krijgt het hele systeem extra stabiliteit. In het geval van mogelijke significante veranderingen in temperatuuromstandigheden, kunnen precisieweerstanden worden weggelaten. Ze worden alleen gebruikt om kleine oververhitting te beheersen.

Thermokoppel

Thermokoppel-temperatuursensoren worden het meest gebruikt omdat ze nauwkeurig zijn, werken over een breed temperatuurbereik van -200 ° C tot 2000 ° C en relatief goedkoop zijn. Een thermokoppel met een draad en een stekker op de onderstaande foto:

Thermokoppelwerking

Een thermokoppel is gemaakt van twee ongelijke metalen die aan elkaar zijn gelast om een ​​potentiaalverschil over temperatuur te produceren. Uit het temperatuurverschil tussen de twee knooppunten wordt een spanning gegenereerd die wordt gebruikt om de temperatuur te meten. Het spanningsverschil tussen de twee knooppunten wordt het Seebeck-effect genoemd.

Als beide verbindingen dezelfde temperatuur hebben, is het potentieel voor verschil in verschillende verbindingen nul, d.w.z. V1 = V2. Als de knooppunten echter verschillende temperaturen hebben, is de uitgangsspanning ten opzichte van het temperatuurverschil tussen de twee knooppunten gelijk aan hun V1 - V2-verschil.

Soorten temperatuursensoren

Elektronisch-mechanisch

Het eenvoudigste en meest goedkope type regelaar. Het belangrijkste werkende deel is een speciale metalen plaat die reageert op een stijging of daling van de temperatuur. Het systeem wordt in- en uitgeschakeld door de kromming van de plaat tijdens het verwarmen en koelen te veranderen. Het instellen van de exacte temperatuurwaarde op zo'n regelaar werkt niet.

Elektronisch

Het apparaat heeft een speciaal element dat een speciaal signaal genereert. Het vermogen is rechtstreeks afhankelijk van de waarden van de omgevingstemperatuur. Op dergelijke apparaten kunt u nauwkeurige metingen van de verwarmingstemperatuur instellen tot een fractie van een graad. Het systeem wordt bediend met knoppen en een klein scherm.

Programmeerbaar

De duurste thermo-elementen. Hierop kunt u bepaalde waarden instellen, bij het bereiken waarvan het hele systeem door de regelaar wordt in- of uitgeschakeld. Dankzij het apparaat wordt in de kamer een microklimaat gecreëerd dat bij een bepaalde persoon past. Het is mogelijk om de thermostaat zo te configureren dat het systeem op een bepaald tijdstip wordt ingeschakeld. Dat wil zeggen, de vloeren worden verwarmd voordat de eigenaar thuiskomt, en tegelijkertijd wordt er geen elektriciteit verbruikt als de eigenaar dat niet is.

Veel modellen hebben heldere en stijlvolle ontwerpen en lcd-schermen die informatie weergeven en fijnafstemming vergemakkelijken.

Werken met kant-en-klare bibliotheken

Om met DS18B20-temperatuursensoren op het netwerk te werken, kunt u dus een groot aantal bibliotheken vinden, maar in de regel worden twee van de meest populaire gebruikt. Het is een bibliotheek en een bibliotheek. Bovendien is de tweede bibliotheek een handiger add-on ten opzichte van de eerste en kan deze niet zonder deze worden gebruikt. Met andere woorden, voordat u de DallasTemperature.h-bibliotheek aansluit, moet u ook OneWire.h verbinden. Het is mogelijk om bepaalde bibliotheken in de Arduino IDE te installeren.

Bibliotheek OneWire.h

Laten we eerst eens overwegen om met de OneWire.h-bibliotheek te werken. Hieronder vindt u een lijst van de functies met een korte beschrijving.

  • OneWire temperatuursensor (uint8_t pinNumber)

Deze functie is een constructor van de OneWire-klasse en maakt een temperatureSensor-object aan, d.w.z. opent een communicatiekanaal met een sensor of een groep sensoren op de pinNumber-pin. In onze voorbeelden (figuren 3-5) is dit de "D2" -pin van de Arduino Nano. Daarop hebben we de DQ DS18B20-databus aangesloten.

Voorbeeld:

OneWire temperatuursensor
(
D2
);
// Een sensor of een groep sensoren is aangesloten op pin D2

  • uint8_t zoeken (addrArray)

De functie zoekt naar het volgende apparaat op de 1-Wire-bus en, wanneer het wordt gevonden, voert hij de adreswaarde in de addrArray-array in, waarbij true wordt geretourneerd. Aangezien het unieke adres van elke sensor 64-bits is, moet de addrArray 8 bytes groot zijn. Als het zoeken mislukt, retourneert de functie false. Opgemerkt moet worden dat wanneer meerdere temperatuursensoren op één bus zijn aangesloten, elke oproep naar de zoekfunctie wordt geadresseerd aan de volgende sensor, vervolgens de volgende, enz., Totdat alle apparaten op de bus zijn opgesomd. De eigenaardigheid van deze functie is om reeds verwerkte adressen te onthouden. Om de wachtrij te resetten, moet u de functie reset_search () aanroepen, die hieronder zal worden besproken.

Voorbeeld:

byte addrArray
[
8
];
// Array voor het opslaan van een 64-bits adres // Als het apparaat helemaal niet aanwezig is op de bus of alle apparaten worden opgesomd // geef de bijbehorende informatie weer in de poortmonitor
als(!
temperatuursensor
.
zoeken
(
addrArray
))
Serieel
.
println
(
"Geen adressen meer."
);
// Anders, als het volgende apparaat op het aanwezigheidsverzoek heeft gereageerd, // het 64-bits adres in de poortmonitor weergeven
anders{voor(
ik
=
0
;
ik
<
8
;
ik
++)
Serieel
.
afdrukken
(
addrArray
[
ik
],
HEX
);
}

  • leegtereset_search ()

Zoals hierboven vermeld, zet deze functie de polling-wachtrij voor apparaten op de 1-draads bus terug naar het allereerste begin. Het moet altijd worden gebruikt in combinatie met de zoekfunctie wanneer deze false retourneert. In ons geval bijvoorbeeld met 5 sensoren op de bus, kunnen we door de zoekfunctie 5 keer aan te roepen 5 adressen krijgen. Voor de zesde keer retourneert de zoekfunctie ons false en doet dit bij elke volgende peiling totdat de wachtrij is leeggemaakt. Hier moet u op letten om onbegrijpelijke situaties te vermijden.

Voorbeeld:

byte addrArray
[
8
];
// Array voor het opslaan van een 64-bits adres // Als het apparaat helemaal niet aanwezig is op de bus of alle apparaten zijn opgesomd // reset de polling-wachtrij om de zoekcyclus te herhalen
als(!
temperatuursensor
.
zoeken
(
addrArray
))
temperatuursensor
.
reset_search
();

  • uint8_tresetten ()

De 1-Wire reset-functie initieert het communicatieproces. Het wordt elke keer dat we met de temperatuursensor willen communiceren, gebeld. Retourwaarden kunnen waar of onwaar zijn. We krijgen de werkelijke waarde als tenminste één sensor op de bus reageert op reset met een aanwezigheidspuls. Anders worden we vals;

Voorbeeld:
als(!
temperatuursensor
.
resetten
())
Serieel
.
println
(
"Geen sensoren op bus"
);anders
Serieel
.
println
(
"Sensor is gedetecteerd"
);

  • leegteselecteer (addrArray)

Met de functie kun je een specifiek apparaat selecteren waarmee we op dit moment willen werken. De keuze wordt gemaakt door expliciet het 64-bits adres op te geven dat is ingevoerd in de addrArray-array. Het adres kan expliciet worden ingesteld door het in een array te schrijven of door het adres te gebruiken dat eerder door de zoekfunctie is gelezen. Opgemerkt moet worden dat de reset-functie moet worden aangeroepen voordat de select-functie wordt aangeroepen. Bij de volgende reset wordt de verbinding met de geselecteerde sensor verbroken tot de volgende oproep om te selecteren.
Voorbeeld:
byte addrArray
[
8
];
// Array voor het opslaan van een 64-bits adres // Als het apparaat helemaal niet aanwezig is op de bus of alle apparaten worden opgesomd // voer de bijbehorende informatie uit naar de poortmonitor
als(!
temperatuursensor
.
zoeken
(
addrArray
))
Serieel
.
println
(
"Geen adressen meer."
);
// Anders, als het volgende apparaat op het aanwezigheidsverzoek heeft gereageerd, // selecteer het voor verder werk
anders{
temperatuursensor
.
resetten ()
;
// Vergeet niet de opdracht voor het resetten van de temperatuursensor te geven
.
selecteer (addrArray)
;
// Specificeer een array met het leesadres
}

  • leegteoverslaan ()

De functie is alleen relevant bij het werken met één sensor op de bus en slaat eenvoudig de selectie van het apparaat over. Met andere woorden, je kunt de zoekfunctie niet gebruiken, en dus snel toegang met je enige sensor.

Voorbeeld:
temperatuursensor.
resetten
();
// Reset de temperatureSensor-band
.
overspringen
();
// Selecteer de enige sensor om er verder mee te werken

  • leegteschrijven (uint8_tbyte, uint8_t powerType = 0)

De functie stuurt een byte aan gegevens naar het geselecteerde apparaat op de bus. Het powerType-argument specificeert het type voeding voor de sensoren (0 - sensoren worden rechtstreeks gevoed door een externe bron; 1 - er wordt een parasitaire gevoede verbinding gebruikt). De tweede parameter kan worden weggelaten als externe voeding wordt gebruikt, aangezien deze standaard 0 is.

Voorbeeld:

temperatuursensor
.
resetten
();
// Reset de temperatureSensor-band
.
overspringen
();
// Selecteer een enkele sensor om er later mee te werken // Stuur een commando om de temperatuur te converteren, // gebruik een verbinding met parasitaire stroom van de temperatuursensor-databus
.
schrijven
(
0x44
,
1
);

  • uint8_tlezen ()

Deze functie leest één byte aan gegevens die door het slaveapparaat (sensor) naar de 1-draads bus worden gestuurd.

Voorbeeld:

// Lees 9 bytes aan gegevens van de 1-Wire-bus en plaats het resultaat in een array-byte-array
[
9
];voor(
uint8_t i
=
0
;
ik
<
9
;
ik
++){
array
[
ik
]=
temperatuursensor
.
lezen
();}

  • statisch uint8_t crc8 (const uint8_t * addr, uint8_t len);

De functie is ontworpen om de checksum te berekenen. Ontworpen om de juiste communicatie met de temperatuursensor te controleren. Hier is addr een pointer naar de gegevensarray, en len is het aantal bytes.

Voorbeeld:

byte addrArray
[
8
];
// Array voor het opslaan van een 64-bits adres // Als het apparaat helemaal niet aanwezig is op de bus of alle apparaten worden opgesomd // voer de bijbehorende informatie uit naar de poortmonitor
als(!
temperatuursensor
.
zoeken
(
addrArray
))
Serieel
.
println
(
"Geen adressen meer."
);
// Anders, als het volgende apparaat op het aanwezigheidsverzoek heeft gereageerd, // controleer dan de checksum van het adres
anders{
// Als de checksum niet overeenkomt, geeft u een foutmelding weer
als(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serieel
.
println
(
"CRC is niet geldig!"
);}}
We hebben elke functie van de OneWire.h-bibliotheek afzonderlijk onderzocht en om het materiaal te fixeren, zal ik hieronder een schets geven voor het aflezen van de temperatuur van een groep DS18B20-temperatuursensoren, die met behulp van een parasitair stroomcircuit op pin D2 worden aangesloten. De schets bevat gedetailleerde opmerkingen over alle noodzakelijke punten.

#include // We verbinden de bibliotheek om te werken met DS18B20OneWire ds thermische sensoren
(
2
);
// Een sensor of groep sensoren is verbonden met de D2-pin van de Arduino // PRESET FUNCTION ongeldige setup
(
leegte
){
Serieel
.
beginnen
(
9600
);
// Initialisatie van het werk met Serial-port} // MAIN CYCLE void loop
(
leegte
){
byte i
;
// Hulpvariabele voor byte present loops
=
0
;
// Variabele voor het bepalen van de gereedheid van de sensor voor communicatiebyte type_s
;
// Variabele voor het definiëren van het type thermische sensor op de bytedatabus
[
12
];
// Array voor het opslaan van informatie die is ontvangen van het sensorbyte-adres
[
8
];
// Array voor het opslaan van het 64-bits adres van de float celsius-sensor
,
fahrenheit
;
// Variabelen voor het berekenen van de temperatuur // Als apparaten op de bus niet worden gevonden of alle apparaten op de bus worden opgesomd // toon de bijbehorende informatie in de poortmonitor, reset de wachtrij // en voer opnieuw een zoekopdracht uit, wacht 250 ms
als(!
ds
.
zoeken
(
addr
)){
Serieel
.
println
(
"Geen adressen meer."
);
Serieel
.
println
();
ds
.
reset_search
();
vertraging
(
250
);terugkeer;}
// Als het volgende apparaat op de bus wordt gevonden, geeft u het unieke adres weer // in de poortmonitor in hexadecimale vorm Serieel
.
afdrukken
(
"ROM ="
);voor(
ik
=
0
;
ik
<
8
;
ik
++){
Serieel
.
schrijven
(
‘ ‘
);
Serieel
.
afdrukken
(
addr
[
ik
],
HEX
);}
// Controleer de checksum van het adres van het gevonden apparaat // en geef de bijbehorende informatie weer als het niet overeenkomt
als(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Serieel
.
println
(
"CRC is niet geldig!"
);terugkeer;}
Serieel
.
println
();
// Controleer de nulbyte van het adres, dat informatie bevat // over een specifiek type temperatuursensor. Afhankelijk van de waarde van de nul // byte geven we de reeks van de chip weer in de poortmonitor. Als de nulbyte een onbekende // -waarde bevat, geeft u een bericht weer over de onbekende familie van de temperatuursensor.
schakelaar(
addr
[
0
]){geval
0x10
:
Serieel
.
println
(
"Chip = DS18S20"
);
types
=
1
;breken;geval
0x28
:
Serieel
.
println
(
"Chip = DS18B20"
);
types
=
0
;breken;geval
0x22
:
Serieel
.
println
(
"Chip = DS1822"
);
types
=
0
;breken;standaard:
Serieel
.
println
(
"Apparaat is geen apparaat uit de DS18x20-familie."
);terugkeer;}
ds
.
resetten
();
// Reset de bus om de gegevensuitwisseling ds te initialiseren
.
selecteer
(
addr
);
// Selecteer de sensor met het huidige adres om ermee te werken // Stuur het commando om de temperatuur te converteren (volgens de documentatie 0x44) // Vergeet de tweede parameter "1" niet, aangezien we gegevens verzenden via de / / lijn met parasitaire voeding. ds
.
schrijven
(
0x44
,
1
);
// De sensor start de conversie, die volgens de documentatie max. 750ms // Voor de zekerheid organiseren we een pauze van ё seconde vertraging
(
1000
);
// Reset de bus opnieuw om informatie van de sensor te lezen // bewaar de reactie van de reset () -functie op de huidige variabele voor verder werk ermee aanwezig
=
ds
.
resetten
();
ds
.
selecteer
(
addr
);
// Selecteer de sensor opnieuw aan de hand van zijn adres, aangezien er een resetpuls was // Met het 0xBE-commando, volgens de technische documentatie, kan het interne geheugen worden gelezen // van de temperatuursensor (Scratchpad), die uit 9 bytes bestaat. ds
.
schrijven
(
0xBE
);
// Lees en toon 9 bytes uit het interne geheugen van de temperatuursensor Serieel naar de poortmonitor
.
afdrukken
(
"Data ="
);
Serieel
.
afdrukken
(
Cadeau
,
HEX
);
Serieel
.
afdrukken
(
» «
);voor(
ik
=
0
;
ik
<
9
;
ik
++){
gegevens
[
ik
]=
ds
.
lezen
();
Serieel
.
afdrukken
(
gegevens
[
ik
],
HEX
);
Serieel
.
afdrukken
(
» «
);}
// Controleer en uitvoer naar de poort om de checksum van de ontvangen gegevens Serieel te bewaken
.
afdrukken
(
"CRC ="
);
Serieel
.
afdrukken
(
OneWire
::
crc8
(
gegevens
,
8
),
HEX
);
Serieel
.
println
();
// Start het proces van het converteren van de ontvangen gegevens naar de werkelijke temperatuur, // die wordt opgeslagen in 0 en 1 bytes leesgeheugen. Om dit te doen, combineren we deze twee // bytes tot één 16-bits getal int16_t raw
=(
gegevens
[
1
]<<
8
)|
gegevens
[
0
];
// Voor verdere conversie, moet u de familie definiëren waartoe // deze sensor behoort (eerder hebben we het resultaat opgeslagen in de variabele type_s). // Afhankelijk van de familie wordt de temperatuur anders berekend, // aangezien de DS18B20 en DS1822 een 12-bits waarde retourneren, terwijl de DS18S20 een 9-bits waarde retourneert
als(
types
){
// Als de sensor tot de DS18S20 raw-familie behoort
=
rauw
<<
3
;
// standaardresolutie is 9 bits
als(
gegevens
[
7
]==
0x10
){
rauw
=(
rauw
&
0xFFF0
)+
12

gegevens
[
6
];}}anders{
// Bepaal tot welke meetnauwkeurigheid deze sensor is geconfigureerd byte cfg
=(
gegevens
[
4
]&
0x60
);
// Bij lagere resoluties kunt u de minst significante bits op nul zetten, // omdat ze niet vroeg zijn gedefinieerd
als(
cfg
==
0x00
)
rauw
=
rauw
&~
7
;
// 9 bits (conversie duurt 93,75 ms)
andersals(
cfg
==
0x20
)
rauw
=
rauw
&~
3
;
// 10 bits (conversie duurt 187,5 ms)
andersals(
cfg
==
0x40
)
rauw
=
rauw
&~
1
;
// 11 bits (conversie duurt 375 ms) // De standaardprecisie is 12 bits (conversie duurt 750 ms)
}
// Bereken en voer temperatuurwaarden uit naar de celsius-poortmonitor
=(
vlotter
)
rauw
/
16.0
;
fahrenheit
=
Celsius
*
1.8
+
32.0
;
Serieel
.
afdrukken
(
"Temperatuur ="
);
Serieel
.
afdrukken
(
Celsius
);
Serieel
.
afdrukken
(
"Celsius,"
);
Serieel
.
afdrukken
(
fahrenheit
);
Serieel
.
println
(
"Fahrenheit"
);}
Als alles correct is gedaan, zouden we in het poortmonitorvenster zoiets als het volgende moeten zien (Figuur 6):

Figuur 6 - het resultaat van het werken met de OneWire.h-bibliotheek

DallasTemperature.h Bibliotheek

Deze bibliotheek is gebaseerd op de vorige en vereenvoudigt het programmeerproces een beetje vanwege meer begrijpelijke functies. Na installatie heeft u toegang tot 14 voorbeelden van goed gedocumenteerde code voor alle gelegenheden. In het kader van dit artikel zal een voorbeeld van werking met één sensor worden beschouwd.

Het resultaat van het programma is weergegeven in Figuur 7

Figuur №7 - het resultaat van het lezen van de temperatuur met behulp van de DallasTemperature.h-bibliotheek

// We verbinden de nodige bibliotheken # include # include // We verbinden de databus met pin # 2 van Arduino # definieer ONE_WIRE_BUS 2 // Maak een instantie van de klasse voor onze bus en een link ernaar OneWire oneWire
(
ONE_WIRE_BUS
);
Dallas Temperatuursensoren
(&
oneWire
);
// PRESET FUNCTION ongeldige setup
(
leegte
){
Serieel
.
beginnen
(
9600
);
// Initialiseer de sensoren van de seriële poort
.
beginnen
();
// Initialiseer de bus
}
// HOOFD CYCLUS
(
leegte
){
Serieel
.
afdrukken
(
"Temperatuur aflezen ..."
);
// Stuur het commando om sensoren te lezen
.
requestTemperatures
();
Serieel
.
println
(
"Lezen"
);
Serieel
.
afdrukken
(
"Sensortemperatuur 1:"
);
// Geef de temperatuurwaarde Serieel weer
.
afdrukken
(
sensoren
.
getTempCByIndex
(
0
));}

Temperatuursensor KY-001 met 1-draads interface

Deze sensor wordt gebruikt voor nauwkeurige temperatuurmeting. De communicatie met de sensor verloopt via de 1-Wire-interface [1-2], waarmee u meerdere soortgelijke apparaten op het Arduino-bord kunt aansluiten met behulp van één microcontroller-pin [3-4]. De module is gebaseerd op de ds18b20 microcircuit [5].

Modulegrootte 24 x 15 x 10 mm, gewicht 1,3 g. Voor aansluiting wordt een driepolige connector gebruikt. Centraal contact - voeding + 5V, contact "-" - gemeenschappelijk, contact "S" - informatief.

Het bord heeft een rode LED die oplicht als er informatie wordt uitgewisseld.

Stroomverbruik 0,6 mA tijdens informatie-uitwisseling en 20 μA in stand-bymodus.

Het aansluiten van dit type sensoren op Arduino wordt in veel bronnen goed beschreven [6-8]. In dit geval komen de belangrijkste voordelen van de Arduino opnieuw tot uiting: veelzijdigheid en de aanwezigheid van een enorme hoeveelheid referentie-informatie. Om met de sensor te kunnen werken, heeft u de OneWire Library [9] nodig. Nadat het programma is geladen vanaf [8] (er is een fout in de eerste versie van het programma - er is geen # include library-verbinding in de codekop), kan de volgende informatie worden bekeken in de seriële poortmonitor.

De auteur heeft ook de code van [7] getest, alles werkte meteen, in de seriële poort monitor lees je informatie over het type aangesloten sensor en de actuele temperatuurgegevens.

Over het algemeen een zeer handige sensor die het mogelijk maakt om in de praktijk kennis te maken met de 1-Wire interface. De sensor geeft direct de juiste temperatuurgegevens, de gebruiker hoeft niet te kalibreren.

Beoordeling
( 1 schatting, gemiddeld 4 van 5 )

Kachels

Ovens