I denne artikel vil vi diskutere de forskellige typer temperatursensorer og hvordan de kan bruges fra sag til sag. Temperatur er en fysisk parameter, der måles i grader. Det er en væsentlig del af enhver måleproces. Områder, der kræver nøjagtige temperaturmålinger, omfatter medicin, biologisk forskning, elektronik, materialeforskning og elektriske produkters termiske ydeevne. En enhed, der bruges til at måle mængden af varmeenergi, der giver os mulighed for at detektere fysiske temperaturændringer, kaldes en temperatursensor. De er digitale og analoge.
Hovedtyper af sensorer
Generelt er der to metoder til indhentning af data:
1. Kontakt... Kontakttemperatursensorer er i fysisk kontakt med en genstand eller et stof. De kan bruges til at måle temperaturen på faste stoffer, væsker eller gasser.
2. Kontaktløs... Berøringsfri temperaturfølere registrerer temperatur ved at opfange noget af den infrarøde energi, der udsendes af en genstand eller et stof, og registrere dens intensitet. De kan kun bruges til at måle temperaturen i faste stoffer og væsker. De er ude af stand til at måle temperaturen på gasser på grund af deres farveløshed (gennemsigtighed).
Regler for valg af sensor
Temperaturføleren til gulvvarme vælges under hensyntagen til egenskaber som effekt, topdæktype, installationsmetode og udstyr med ekstra funktionalitet.
Strøm
Værdien skal helt sikkert opfylde kravene og belastningen på det varme gulv. Ellers fungerer sensoren ikke korrekt. Når varmeelementets effekt er større end selve regulatoren, bliver det nødvendigt yderligere at installere en magnetisk starter mellem dem - for at forhindre brud på enheden på grund af øget belastning.
Funktionssæt
Det varme gulv styres af en elektrisk enhed, der giver dig mulighed for at justere driften af varmeelementerne. Moderne controllere har sådan funktionalitet som at starte og afbryde systemet, justere temperaturforholdene samt indstille frekvensen for tilslutning og frakobling af varmeelementet.
Brugervenlighed
Hvis du tror, at du ikke forstår programmering, skal du ikke købe en kompleks enhed. Selv under hensyntagen til al dens funktionalitet. For eksempel finder ældre det ret problematisk at håndtere programmerbare enheder. De vælger hellere den mekaniske mulighed.
Let at tilslutte
Den medfølgende dokumentation for termostaten angiver altid, hvordan gulvvarmesensoren tilsluttes. Terminalerne er placeret ved kanten på den ene side af styreenheden. Efter at have tilsluttet de elektriske ledninger i henhold til ordningen, vil det være nødvendigt at kontrollere varmesystemets ydeevne. For at gøre dette skal du måle modstanden ved terminalens temperaturføler og varmekablet eller tilslutte et varmt gulv og øge temperaturværdierne fra nul til indikatoren anbefalet af SNIP, det vil sige op til 30 ° C.
Udseende
En termisk sensor skal ikke kun være funktionelt forståelig, men også attraktiv i design. Moderne drejeknapper kommer i forskellige farver og former. Du kan vælge en indstilling, der er i harmoni med det indre af rummet.
Typer af temperatursensorer
Der er mange forskellige typer temperatursensorer.Fra enkel on / off-kontrol af en termostatisk enhed til komplekse kontrolsystemer for vandforsyning med funktionen til opvarmning af den, der bruges i processerne for dyrkning af planter. De to hovedtyper af sensorer, kontakt og ikke-kontakt, er yderligere opdelt i resistive sensorer, spændings- og elektromekaniske sensorer. De tre mest anvendte temperatursensorer er:
- Termistorer
- Modstands termoelementer
- Termoelement
Disse temperatursensorer adskiller sig fra hinanden med hensyn til driftsparametre.
Enhed
Dette er et termoelement (plade eller stang), der består af ledninger, der er forbundet til klemmerne på følerelementet.
Afhængig af temperaturoplysningerne ændres modstanden af den følsomme del henholdsvis, det elektriske signal, der leveres til termostaten, ændres. Således bestemmes den absolutte værdi af medietemperaturen.
Ekstern (ekstern temperaturføler til gulvvarme) er som regel placeret under den afsluttende gulvbelægning og måler dens temperaturindikatorer. Internt (indbygget), placeret inde i regulatoren og bestemmer niveauet for luftopvarmning.
Designet af temperatursensorer vælges afhængigt af systemets funktioner:
Termistor
En termistor er en følsom modstand, der ændrer dens fysiske modstand med temperaturen. Typisk er termistorer fremstillet af et keramisk halvledermateriale, såsom cobalt, mangan eller nikkeloxid og er belagt med glas. De er små flade forseglede skiver, der reagerer relativt hurtigt på enhver temperaturændring.
På grund af materialets halvledende egenskaber har termistorer en negativ temperaturkoefficient (NTC), dvs. modstand falder med stigende temperatur. Der er dog også PTC-termistorer, hvis modstand øges med stigende temperatur.
Termistor tidsplan
Fordele ved termistorer
- Høj hastighed på reaktion på temperaturændringer, nøjagtighed.
- Lavpris.
- Højere modstand i området 2.000 til 10.000 ohm.
- Meget højere følsomhed (~ 200 ohm / ° C) inden for et begrænset temperaturområde på op til 300 ° C.
Temperaturafhængighed af modstand
Modstandens afhængighed af temperatur udtrykkes ved følgende ligning:
Hvor A, B, C - disse er konstanter (leveret af beregningsbetingelserne) R - modstand i ohm T - temperatur i Kelvin. Du kan nemt beregne temperaturændringen ud fra en modstandsændring eller omvendt.
Hvordan bruges en termistor?
Termistorer klassificeres for deres resistive værdi ved stuetemperatur (25 ° C). En termistor er en passiv resistiv enhed, så det kræver produktion af overvågning af den aktuelle udgangsspænding. Som regel er de forbundet i serie med passende stabilisatorer, der danner en netspændingsdeler.
Eksempel: Overvej en termistor med en modstandsværdi på 2,2 K ved 25 ° C og 50 ohm ved 80 ° C. Termistoren er forbundet i serie med en 1 kΩ modstand gennem en 5 V forsyning.
Derfor kan dens udgangsspænding beregnes som følger:
Ved 25 ° C var RNTC = 2200 ohm;
Ved 80 ° C er RNTC = 50 ohm;
Det er dog vigtigt at bemærke, at standardmodstandsværdierne ved stuetemperatur er forskellige for forskellige termistorer, da de er ikke-lineære. En termistor har en eksponentiel temperaturændring og derfor en beta-konstant, der bruges til at beregne dens modstand for en given temperatur. Modstandens udgangsspænding og temperatur er lineært relateret.
Funktioner i den to-leder strømgrænseflade i LMT01 temperaturfølere
Fig. 4. Organisering af den nuværende grænseflade med LMT01
Som nævnt ovenfor genererer LMT01 en bitsekvens i form af strømtællingsimpulser for at transmittere måleresultatet. Til dette kræver sensoren kun to ledninger (figur 4). For at konvertere strømimpulser til den form, der er kendt for digitale mikrokredsløb, kan du i nogle tilfælde bruge en enkelt modstand (men ikke altid - mere om det nedenfor).
Efter opstart starter LMT01 en målecyklus, der tager op til 54 ms (figur 5). I løbet af denne tid dannes en lav strøm på 28 ... 39 μA ved sensorudgangen. Dette efterfølges af en cyklus til overførsel af måleresultatet i form af strømimpulser med en amplitude på 112 ... 143 μA. Den modtagende mikrocontroller skal tælle disse impulser, for eksempel ved hjælp af den indbyggede tæller / timer. Da signalfrekvensen er ca. 82 ... 94 kHz, kan transmissionens varighed nå op på 50 ms med det maksimale antal impulser (4095).
Fig. 5. Timingsdiagrammer for LMT01-sensoren
Antallet af tællede impulser (PC) kan bruges til at bestemme temperaturværdien i henhold til formel 1:
, (1)
Således vil sensoren ved 0 ° C generere ca. 800 impulser.
Desværre er det ikke altid muligt at bruge en ekstern modstand på grund af begrænsningen af det minimale spændingsfald over LMT01-sensoren. Under målecyklussen skal faldet over sensoren være mindst 2,15 V. Under datatransmissionscyklussen kan spændingsfaldet reduceres til 2 V. Det er ikke svært at foretage nogle grove beregninger.
Overvej en enhed med en forsyningsspænding Vdd = 3,3 V. Hvis vi tager det mindste tilladte fald over sensoren lig med 2,15 V under målecyklussen, så observeres et signal på ikke mere end 1,15 V over modstanden. For de fleste digitale controllere, den logiske enhed er 0, 7 ∙ Vdd, hvilket for vores tilfælde vil være 2,31 V. Som et resultat viser det sig, at brugen af en simpel modstand er umulig, da mikrokontrolleren simpelthen ikke "vil" se signalet fra en logisk enhed. Vejen ud af denne situation kan være brugen af en mikrocontroller med en indbygget komparator eller niveaukonverteringskredsløb.
Resistive temperaturfølere
Temperaturmodstandssensorer (RTD'er) er lavet af sjældne metaller, såsom platin, hvis elektriske modstand varierer med temperaturen.
Resistive temperaturdetektorer har en positiv temperaturkoefficient og giver, i modsætning til termistorer, høj temperaturmålepræcision. De har dog dårlig følsomhed. Pt100 er den mest tilgængelige sensor med en standardmodstandsværdi på 100 ohm ved 0 ° C. Den største ulempe er de høje omkostninger.
Fordelene ved sådanne sensorer
- Bredt temperaturinterval fra -200 til 650 ° C
- Giv strøm med høj faldstrøm
- Mere lineær sammenlignet med termoelementer og RTD'er
Yderligere komponenter og sensorkredsløb
Ud over hoveddiodeindretningerne inkluderer temperatursensorkredsløbet et antal yderligere elementer. Først og fremmest er det en kondensator, der beskytter enheden mod fremmede påvirkninger. Faktum er, at den operationelle forstærker er meget følsom over for virkningerne af skiftende elektromagnetiske felter. Kondensatoren fjerner denne afhængighed ved at indsprøjte negativ feedback.
Med deltagelse af en transistor og en zenerdiode dannes en stabiliseret referencespænding. Her anvendes modstande med en højere nøjagtighedsklasse med en lav værdi af temperaturkoefficienten for modstand. Dermed opnår hele ordningen yderligere stabilitet. I tilfælde af mulige væsentlige temperaturændringer kan præcisionsmodstande udelades. De bruges kun til at kontrollere lille overophedning.
Termoelement
Termoelementtemperaturfølere bruges mest, fordi de er nøjagtige, fungerer i et bredt temperaturinterval fra -200 ° C til 2000 ° C og er relativt billige. Et termoelement med en ledning og et stik i billedet nedenfor:
Betjening af termoelement
Et termoelement er lavet af to forskellige metaller svejset sammen for at producere en potentiel forskel over temperaturen. Fra temperaturforskellen mellem de to kryds genereres en spænding, der bruges til at måle temperaturen. Spændingsforskellen mellem de to kryds kaldes Seebeck-effekten.
Hvis begge forbindelser har samme temperatur, er potentialet for forskel i forskellige forbindelser nul, dvs. V1 = V2. Men hvis krydsene har forskellige temperaturer, vil udgangsspændingen i forhold til temperaturforskellen mellem de to kryds være lig med deres V1 - V2 forskel.
Typer af temperatursensorer
Elektronisk-mekanisk
Den enkleste og billigste type regulator. Dets vigtigste arbejdsdel er en speciel metalplade, der reagerer på en stigning eller fald i temperaturen. Systemet tændes og slukkes ved at ændre pladens krumning under opvarmning og køling. Indstilling af den nøjagtige temperaturværdi på en sådan regulator fungerer ikke.
Elektronisk
Enheden har et specielt element, der genererer et specielt signal. Effekten afhænger direkte af værdierne for den omgivende temperatur. På sådanne enheder kan du indstille nøjagtige opvarmningstemperaturaflæsninger op til en brøkdel af en grad. Systemet styres af knapper og en lille skærm.
Programmerbar
Den dyreste af termoelementerne. På den kan du indstille bestemte værdier, når du når hele systemet til eller fra af regulatoren. Takket være enheden oprettes et mikroklima i det rum, der passer til en bestemt person. Det er muligt at konfigurere termostaten, så systemet tændes på et bestemt tidspunkt. Det vil sige, gulvene opvarmes, før ejeren kommer hjem, og på samme tid forbruges ikke elektricitet, når ejeren ikke er der.
Mange modeller har lyse og stilfulde designs og LCD-skærme, der viser information og letter finjustering.
Arbejde med færdige biblioteker
Så for at arbejde med DS18B20 temperatursensorer på netværket kan du finde et stort antal biblioteker, men som regel bruges to af de mest populære. Det er et bibliotek og et bibliotek. Desuden er det andet bibliotek en mere bekvem tilføjelse end det første og kan ikke bruges uden det. Med andre ord, før du tilslutter DallasTemperature.h-biblioteket, skal du også oprette forbindelse til OneWire.h. Sådan installeres visse biblioteker i Arduino IDE er mulig.
Bibliotek OneWire.h
Lad os først overveje at arbejde med OneWire.h-biblioteket. Nedenfor er en liste over dens funktioner med en kort beskrivelse.
- OneWire temperatursensor (uint8_t pinNumber)
Denne funktion er en konstruktør af OneWire-klassen og skaber et temperaturSensor-objekt, dvs. åbner en kommunikationskanal med en sensor eller en gruppe sensorer på pinNumber pin. I vores eksempler (figur 3-5) er dette “D2” -stiften på Arduino Nano. Det var til det, vi tilsluttede DQ DS18B20 databussen.
Eksempel:
OneWire temperaturføler
(
D2
);
// En sensor eller en gruppe sensorer er tilsluttet pin D2
- uint8_t søg (addrArray)
Funktionen søger efter den næste enhed på 1-Wire-bussen, og når den findes, indtaster den adresseværdien i addrArray-arrayet og returnerer sand. Da den unikke adresse på hver sensor er 64-bit, skal addrArray være 8 byte i størrelse. Hvis søgningen mislykkes, returnerer funktionen falsk. Det skal bemærkes, at når flere temperatursensorer er forbundet til en bus, vil hvert opkald til søgefunktionen blive adresseret til den næste sensor, derefter den næste osv., Indtil alle enheder på bussen er opregnet. Det særlige ved denne funktion er at huske allerede behandlede adresser. For at nulstille køen skal du ringe til funktionen reset_search (), som diskuteres nedenfor.
Eksempel:
byte addrArray
[
8
];
// Array til lagring af en 64-bit adresse // Hvis enheden overhovedet ikke er på bussen, eller hvis alle enheder er opregnet // vis de tilsvarende oplysninger i havnemonitoren
hvis(!
temperatur måler
.
Søg
(
addrArray
))
Seriel
.
println
(
"Ingen flere adresser."
);
// Ellers, hvis den næste enhed reagerede på tilstedeværelsesanmodningen, // viser dens 64-bit adresse i havnemonitoren
andet{til(
jeg
=
0
;
jeg
<
8
;
jeg
++)
Seriel
.
Print
(
addrArray
[
jeg
],
HEX
);
}
- ugyldigreset_search ()
Som nævnt ovenfor nulstiller denne funktion polling-køen af enheder på 1-Wire-bussen helt til starten. Det skal altid bruges i forbindelse med søgefunktionen, når sidstnævnte returnerer falsk. For eksempel, i vores tilfælde med 5 sensorer på bussen, ved at ringe til søgefunktionen 5 gange, kan vi få 5 adresser. For sjette gang returnerer søgefunktionen falsk til os og gør dette med hver næste afstemning, indtil køen skylles. Du skal være opmærksom på dette for at undgå uforståelige situationer.
Eksempel:
byte addrArray
[
8
];
// Array til lagring af en 64-bit adresse // Hvis enheden overhovedet ikke er på bussen, eller hvis alle enheder er opregnet // nulstil polling-køen for at gentage søgecyklussen
hvis(!
temperatur måler
.
Søg
(
addrArray
))
temperatur måler
.
nulstil_søgning
();
- uint8_tNulstil ()
1-lednings nulstillingsfunktionen starter kommunikationsprocessen. Det kaldes hver gang vi vil kommunikere med temperatursensoren. Returværdier kan være sande eller falske. Vi får den sande værdi, hvis mindst en sensor på bussen reagerer på nulstilling med en tilstedeværelsespuls. Ellers bliver vi falske;
Eksempel:
hvis(!
temperatur måler
.
Nulstil
())
Seriel
.
println
(
"Ingen sensorer på bussen"
);andet
Seriel
.
println
(
"Sensor registreres"
);
- ugyldigvælg (addrArray)
Funktionen giver dig mulighed for at vælge en bestemt enhed, som vi ønsker at arbejde med i øjeblikket. Valget foretages ved eksplicit at angive 64-bit-adressen, der er indtastet i addrArray-arrayet. Adressen kan indstilles eksplicit ved at skrive den i en matrix eller bruge den, der tidligere blev læst af søgefunktionen. Det skal bemærkes, at nulstillingsfunktionen skal kaldes op, inden du vælger valgfunktionen. Ved næste nulstilling afbrydes forbindelsen til den valgte sensor, indtil det næste opkald skal vælges.
Eksempel:
byte addrArray
[
8
];
// Array til lagring af en 64-bit adresse // Hvis enheden overhovedet ikke er på bussen, eller hvis alle enheder er opregnet // send de tilsvarende oplysninger til havnemonitoren
hvis(!
temperatur måler
.
Søg
(
addrArray
))
Seriel
.
println
(
"Ingen flere adresser."
);
// Ellers, hvis den næste enhed svarede på tilstedeværelsesanmodningen, // vælg den til efterfølgende arbejde
andet{
temperatur måler
.
Nulstil ()
;
// Glem ikke at udstede kommandoen resetSensor reset
.
vælg (addrArray)
;
// Angiv en matrix med læseadressen
}
- ugyldigspring ()
Funktionen er kun relevant, når du arbejder med en sensor på bussen og simpelthen springer over valg af enhed. Med andre ord kan du ikke bruge søgefunktionen og derfor hurtigt få adgang med din eneste sensor.
Eksempel:
temperatur måler.
Nulstil
();
// Nulstil temperaturSensor-dækket
.
springe
();
// Vælg den eneste sensor for yderligere arbejde med den
- ugyldigskriv (uint8_tbyte, uint8_t powerType = 0)
Funktionen sender en byte af data til den valgte enhed på bussen. PowerType-argumentet specificerer typen af strømforsyning til sensorerne (0 - sensorer får strøm direkte fra en ekstern kilde; 1 - der anvendes en parasitisk strømforbindelse). Den anden parameter kan udelades, hvis ekstern strøm bruges, da den som standard er 0.
Eksempel:
temperatur måler
.
Nulstil
();
// Nulstil temperaturSensor-dækket
.
springe
();
// Vælg en enkelt sensor til efterfølgende arbejde med den // Send en kommando for at konvertere temperaturen // ved hjælp af en forbindelse med parasitisk strømforsyning fra temperaturen Sensordatabus
.
skrive
(
0x44
,
1
);
- uint8_tLæs ()
Denne funktion læser en byte af data, der sendes af slaveenheden (sensoren) til 1-leder-bussen.
Eksempel:
// Læs 9 bytes data fra 1-Wire-bussen, og læg resultatet i array-byte-array
[
9
];til(
uint8_t i
=
0
;
jeg
<
9
;
jeg
++){
array
[
jeg
]=
temperatur måler
.
Læs
();}
- statisk uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funktionen er designet til at beregne kontrolsummen. Designet til at kontrollere den korrekte kommunikation med temperatursensoren. Her er addr en markør til dataarrayet, og len er antallet af byte.
Eksempel:
byte addrArray
[
8
];
// Array til lagring af en 64-bit adresse // Hvis enheden overhovedet ikke er på bussen, eller hvis alle enheder er opregnet // send de tilsvarende oplysninger til havnemonitoren
hvis(!
temperatur måler
.
Søg
(
addrArray
))
Seriel
.
println
(
"Ingen flere adresser."
);
// Ellers, hvis den næste enhed svarede på tilstedeværelsesanmodningen, // skal du kontrollere kontrolsummen for dens adresse
andet{
// Hvis kontrolsummen ikke stemmer overens, skal du få vist en fejlmeddelelse
hvis(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seriel
.
println
(
"CRC er ikke gyldigt!"
);}}
Vi undersøgte hver funktion i OneWire.h-biblioteket separat og for at rette materialet nedenfor vil jeg give en skitse til aflæsning af temperaturen fra en gruppe DS18B20-temperatursensorer, som vil blive forbundet til pin D2 ved hjælp af et parasitisk strømkredsløb. Skitsen indeholder detaljerede kommentarer til alle nødvendige punkter.
#include // Vi forbinder biblioteket til arbejde med DS18B20OneWire ds termiske sensorer
(
2
);
// En sensor eller gruppe af sensorer er tilsluttet D2-stiften på Arduino // PRESET FUNCTION void setup
(
ugyldig
){
Seriel
.
begynde
(
9600
);
// Initialisering af arbejde med Serial-port} // MAIN CYCLE ugyldig loop
(
ugyldig
){
byte i
;
// Hjælpevariabel til byte-nuværende sløjfer
=
0
;
// Variabel til bestemmelse af sensorens parathed til kommunikationsbyte type_s
;
// Variabel til at definere typen af temperaturføler på bytedatabussen
[
12
];
// Array til lagring af information modtaget fra sensorbyte-addr
[
8
];
// Array til lagring af 64-bit-adressen på float celsius-sensoren
,
fahrenheit
;
// Variabler til beregning af temperaturen // Hvis enheder på bussen ikke findes, eller alle enheder på bussen tælles // viser de tilsvarende oplysninger i havnemonitoren, nulstil køen // og udfør en søgning igen efter at have ventet 250 ms
hvis(!
ds
.
Søg
(
addr
)){
Seriel
.
println
(
"Ingen flere adresser."
);
Seriel
.
println
();
ds
.
nulstil_søgning
();
forsinke
(
250
);Vend tilbage;}
// Hvis den næste enhed på bussen findes, skal du vise dens unikke adresse // i havnemonitoren i hexadecimal form Seriel
.
Print
(
"ROM ="
);til(
jeg
=
0
;
jeg
<
8
;
jeg
++){
Seriel
.
skrive
(
‘ ‘
);
Seriel
.
Print
(
addr
[
jeg
],
HEX
);}
// Kontroller kontrolsum for adressen til den fundne enhed // og hvis den ikke stemmer overens, skal du vise de tilsvarende oplysninger
hvis(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Seriel
.
println
(
"CRC er ikke gyldigt!"
);Vend tilbage;}
Seriel
.
println
();
// Kontroller adresseens nulbyte, som indeholder oplysninger // om en bestemt type temperatursensor. Afhængigt af værdien af nul // byte udsender vi chipserien til havnemonitoren. Hvis nulbyte indeholder en ukendt // -værdi, skal du vise en meddelelse om den ukendte familie af temperatursensoren.
kontakt(
addr
[
0
]){sag
0x10
:
Seriel
.
println
(
"Chip = DS18S20"
);
type_s
=
1
;pause;sag
0x28
:
Seriel
.
println
(
"Chip = DS18B20"
);
type_s
=
0
;pause;sag
0x22
:
Seriel
.
println
(
"Chip = DS1822"
);
type_s
=
0
;pause;Standard:
Seriel
.
println
(
"Enheden er ikke en DS18x20-familieenhed."
);Vend tilbage;}
ds
.
Nulstil
();
// Nulstil bussen for at initialisere dataudveksling ds
.
Vælg
(
addr
);
// Vælg sensoren med den aktuelle adresse for at arbejde med den // Send en kommando for at konvertere temperaturen (ifølge dokumentationen 0x44) // Glem ikke den anden parameter "1", da vi transmitterer data via / / linje med parasitisk kraft. ds
.
skrive
(
0x44
,
1
);
// Sensoren starter konvertering, som ifølge dokumentationen tager maks. 750ms // For at være på den sikre side organiserer vi en pause på ё sekund forsinkelse
(
1000
);
// Nulstil bussen igen for at læse information fra sensoren // gemme svaret fra reset () -funktionen til den aktuelle variabel for yderligere arbejde med den nuværende
=
ds
.
Nulstil
();
ds
.
Vælg
(
addr
);
// Genvælg sensoren efter dens adresse, da der var en nulstillingspuls // Kommandoen 0xBE muliggør ifølge den tekniske dokumentation aflæsning af den interne hukommelse // af temperatursensoren (Scratchpad), som består af 9 byte. ds
.
skrive
(
0xBE
);
// Læs og output til portmonitoren 9 bytes fra den interne hukommelse på den serielle termiske sensor
.
Print
(
"Data ="
);
Seriel
.
Print
(
til stede
,
HEX
);
Seriel
.
Print
(
» «
);til(
jeg
=
0
;
jeg
<
9
;
jeg
++){
data
[
jeg
]=
ds
.
Læs
();
Seriel
.
Print
(
data
[
jeg
],
HEX
);
Seriel
.
Print
(
» «
);}
// Kontroller og output til porten overvåger kontrolsummen af de modtagne data Serial
.
Print
(
"CRC ="
);
Seriel
.
Print
(
OneWire
::
crc8
(
data
,
8
),
HEX
);
Seriel
.
println
();
// Start processen med at konvertere de modtagne data til den aktuelle temperatur, // som er gemt i 0 og 1 byte læsehukommelse. For at gøre dette kombinerer vi disse to // bytes i et 16-bit nummer int16_t raw
=(
data
[
1
]<<
8
)|
data
[
0
];
// Før yderligere konvertering skal du definere den familie, til hvilken // denne sensor hører (tidligere gemte vi resultatet i variablen type_s). // Afhængigt af familien beregnes temperaturen forskelligt, // da DS18B20 og DS1822 returnerer en 12-bit værdi, mens DS18S20 returnerer en 9-bit værdi
hvis(
type_s
){
// Hvis sensoren hører til DS18S20 råfamilien
=
rå
<<
3
;
// standardopløsningen er 9 bit
hvis(
data
[
7
]==
0x10
){
rå
=(
rå
&
0xFFF0
)+
12
—
data
[
6
];}}andet{
// Bestem, hvilken målenøjagtighed denne sensor er konfigureret byte cfg
=(
data
[
4
]&
0x60
);
// Ved lavere opløsninger kan du nulstille de mindst signifikante bits, // da de ikke defineres tidligt
hvis(
cfg
==
0x00
)
rå
=
rå
&~
7
;
// 9 bits (konvertering tager 93,75 ms)
andethvis(
cfg
==
0x20
)
rå
=
rå
&~
3
;
// 10 bits (konvertering tager 187,5 ms)
andethvis(
cfg
==
0x40
)
rå
=
rå
&~
1
;
// 11 bits (konvertering tager 375 ms) // Standardpræcisionen er 12 bits (konvertering tager 750 ms)
}
// Beregn og output temperaturværdier til celsius portmonitoren
=(
flyde
)
rå
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Seriel
.
Print
(
"Temperatur ="
);
Seriel
.
Print
(
celsius
);
Seriel
.
Print
(
"Celsius,"
);
Seriel
.
Print
(
fahrenheit
);
Seriel
.
println
(
"Fahrenheit"
);}
Hvis alt er gjort korrekt, skal vi se noget som følger i portmonitorvinduet (figur 6):
Figur 6 - resultatet af arbejdet med OneWire.h-biblioteket
DallasTemperature.h-bibliotek
Dette bibliotek er baseret på det forrige og forenkler programmeringsprocessen lidt på grund af mere forståelige funktioner. Efter installationen har du adgang til 14 eksempler på veldokumenteret kode til alle lejligheder. Inden for rammerne af denne artikel overvejes et eksempel på drift med en sensor.
Programmets resultat er vist i figur 7
Figur №7 - resultatet af aflæsning af temperaturen ved hjælp af DallasTemperature.h-biblioteket
// Vi forbinder de nødvendige biblioteker # inkluderer # inkluderer // Vi forbinder databussen til pin nr. 2 i Arduino # definer ONE_WIRE_BUS 2 // Opret en forekomst af klassen til vores bus og et link til den OneWire oneWire
(
ONE_WIRE_BUS
);
Dallas temperaturfølere
(&
oneWire
);
// PRESET FUNCTION ugyldig opsætning
(
ugyldig
){
Seriel
.
begynde
(
9600
);
// Initialiser de serielle portfølere
.
begynde
();
// Initialiser bussen
}
// HOVEDCYKLUS
(
ugyldig
){
Seriel
.
Print
(
"Læsetemperatur ..."
);
// Send kommandoen for at læse sensorer
.
anmodningstemperaturer
();
Seriel
.
println
(
"Læs"
);
Seriel
.
Print
(
"Sensortemperatur 1:"
);
// Vis temperaturværdien Seriel
.
Print
(
sensorer
.
getTempCByIndex
(
0
));}
Temperatursensor KY-001 med 1-leder interface
Denne sensor bruges til nøjagtig temperaturmåling. Kommunikation med sensoren udføres via 1-leder interface [1-2], som giver dig mulighed for at forbinde flere lignende enheder til Arduino-kortet ved hjælp af en mikrocontroller-pin [3-4]. Modulet er baseret på ds18b20 mikrokredsløb [5].
Modulstørrelse 24 x 15 x 10 mm, vægt 1,3 g. Til tilslutning anvendes et tre-polet stik. Central kontakt - strømforsyning + 5V, kontakt "-" - fælles, kontakt "S" - informativ.
Tavlen har en rød LED, der lyser, når information udveksles.
Strømforbrug 0,6 mA under informationsudveksling og 20 μA i standbytilstand.
Forbindelse af denne type sensorer til Arduino er godt beskrevet i mange kilder [6-8]. I dette tilfælde manifesteres de største fordele ved Arduino igen - alsidighed og tilstedeværelsen af en enorm mængde referenceinformation. For at arbejde med sensoren skal du bruge OneWire-biblioteket [9]. Efter at have indlæst programmet fra [8] (der er en fejl i den første version af programmet - der er ingen # inkluderer biblioteksforbindelse i kodeoverskriften), kan du observere følgende oplysninger i den serielle portmonitor.
Forfatteren testede også koden fra [7], alt fungerede med det samme. I den serielle portmonitor kan du læse information om typen af den tilsluttede sensor og de faktiske temperaturdata.
Generelt en meget nyttig sensor, der gør det muligt at stifte bekendtskab med 1-tråds interface i praksis. Sensoren giver de korrekte temperaturdata med det samme, brugeren behøver ikke kalibrere.