I denne artikkelen vil vi diskutere de forskjellige typene temperatursensorer og hvordan de kan brukes fra sak til sak. Temperatur er en fysisk parameter som måles i grader. Det er en viktig del av enhver måleprosess. Områder som krever nøyaktige temperaturmålinger inkluderer medisin, biologisk forskning, elektronikk, materialforskning og termisk ytelse til elektriske produkter. En enhet som brukes til å måle mengden varmeenergi som lar oss oppdage fysiske temperaturendringer, er kjent som en temperatursensor. De er digitale og analoge.
Hovedtyper av sensorer
Generelt er det to metoder for å skaffe data:
1. Kontakt... Kontaktemperaturfølere er i fysisk kontakt med en gjenstand eller et stoff. De kan brukes til å måle temperaturen på faste stoffer, væsker eller gasser.
2. Kontaktløs... Berøringsfri temperatursensorer oppdager temperatur ved å snappe opp noe av den infrarøde energien som sendes ut av en gjenstand eller et stoff og registrere dens intensitet. De kan bare brukes til å måle temperaturen i faste stoffer og væsker. De klarer ikke å måle temperaturen på gasser på grunn av fargeløshet (gjennomsiktighet).
Regler for valg av sensor
Temperatursensoren for gulvvarme velges med tanke på egenskaper som effekt, type toppdekning, installasjonsmetode og utstyr med ekstra funksjonalitet.
Makt
Verdien må absolutt oppfylle kravene og belastningen til det varme gulvet. Ellers fungerer ikke sensoren riktig. Når kraften til varmeelementet er større enn selve regulatoren, blir det nødvendig å installere en magnetstarter mellom dem - for å forhindre brudd på enheten på grunn av økt belastning.
Funksjonssett
Det varme gulvet styres av en elektrisk enhet, som lar deg justere driften av varmeelementene. Moderne kontrollere har funksjonalitet som å starte og deaktivere systemet, justere temperaturforholdene, samt stille frekvensen for tilkobling og frakobling av varmeelementet.
Brukervennlighet
Hvis du tror at du ikke vil forstå programmering, bør du ikke kjøpe en kompleks enhet. Selv med tanke på all funksjonaliteten. For eksempel synes eldre mennesker det er ganske problematisk å håndtere programmerbare enheter. De bør heller velge det mekaniske alternativet.
Enkel å koble til
Den medfølgende dokumentasjonen for termostaten viser alltid hvordan du kobler til gulvvarmesensoren. Terminalene er plassert ved kanten på den ene siden av kontrollenheten. Etter å ha koblet til de elektriske ledningene i henhold til ordningen, vil det være nødvendig å kontrollere ytelsen til varmesystemet. For å gjøre dette måler du motstanden på terminalene til temperaturføleren og den elektriske varmekabelen, eller kobler et varmt gulv og øker temperaturverdiene fra null til indikatoren anbefalt av SNIP, det vil si opptil 30 ° C.
Utseende
En termisk sensor skal ikke bare være funksjonelt forståelig, men også attraktiv i design. Moderne knotter kommer i en rekke farger og former. Du kan velge et alternativ som er i harmoni med det indre av rommet.
Typer temperatursensorer
Det er mange forskjellige typer temperatursensorer.Fra enkel på / av-kontroll av en termostatisk enhet til komplekse kontrollsystemer for vannforsyning, med funksjonen for å varme den opp, brukt i prosessene for voksende planter. De to hovedtypene sensorer, kontakt og ikke-kontakt, er videre delt inn i resistive, spennings- og elektromekaniske sensorer. De tre mest brukte temperatursensorene er:
- Termistorer
- Motstands termoelementer
- Termoelement
Disse temperatursensorene skiller seg fra hverandre når det gjelder driftsparametere.
Enhet
Dette er et termoelement (plate eller stang) som består av ledninger som er koblet til terminalene på sensorelementet.
Avhengig av temperaturinformasjonen, endres motstanden til den følsomme delen henholdsvis, det elektriske signalet som leveres til termostaten endres. Dermed bestemmes den absolutte verdien av medietemperaturen.
Ekstern (ekstern temperaturføler for gulvvarme) er som regel plassert under etterbehandling av gulvbelegg og måler temperaturindikatorene. Internt (innebygd), plassert inne i regulatoren og bestemmer nivået på luftoppvarming.
Utformingen av temperatursensorer velges avhengig av funksjonene i systemet:
Termistor
En termistor er en følsom motstand som endrer dens fysiske motstand med temperaturen. Vanligvis er termistorer laget av et keramisk halvledermateriale som kobolt, mangan eller nikkeloksyd og er belagt med glass. De er små flate forseglede skiver som reagerer relativt raskt på temperaturendringer.
På grunn av materialets halvledende egenskaper har termistorer en negativ temperaturkoeffisient (NTC), dvs. motstand synker med økende temperatur. Imidlertid er det også PTC-termistorer hvis motstand øker med økende temperatur.
Termistor tidsplan
Fordeler med termistorer
- Høy respons på temperaturendringer, nøyaktighet.
- Lav pris.
- Høyere motstand i området 2000 til 10.000 ohm.
- Mye høyere følsomhet (~ 200 ohm / ° C) innenfor et begrenset temperaturområde på opptil 300 ° C.
Temperaturavhengighet av motstand
Avhengigheten av motstand mot temperatur uttrykkes ved følgende ligning:
Hvor A, B, C - dette er konstanter (gitt av beregningsvilkårene), R - motstand i Ohms, T - temperatur i Kelvin. Du kan enkelt beregne temperaturendringen fra en endring i motstand eller omvendt.
Hvordan bruke en termistor?
Termistorer er vurdert for deres motstandsverdi ved romtemperatur (25 ° C). En termistor er en passiv resistiv enhet, så den krever produksjon av overvåking av gjeldende utgangsspenning. Som regel er de koblet i serie med passende stabilisatorer som danner en hovedspenningsdeler.
Eksempel: Vurder en termistor med en motstandsverdi på 2,2 K ved 25 ° C og 50 ohm ved 80 ° C. Termistoren er koblet i serie med en 1 kΩ motstand gjennom en 5 V forsyning.
Derfor kan utgangsspenningen beregnes som følger:
Ved 25 ° C, RNTC = 2200 ohm;
Ved 80 ° C, RNTC = 50 ohm;
Det er imidlertid viktig å merke seg at standard motstandsverdier ved romtemperatur er forskjellige for forskjellige termistorer, da de er ikke-lineære. En termistor har en eksponentiell temperaturendring, og derfor en beta-konstant, som brukes til å beregne motstanden for en gitt temperatur. Motstandens utgangsspenning og temperatur er lineært relatert.
Funksjoner med to-leder strømgrensesnitt i LMT01 temperaturfølere
Fig. 4. Organisering av det nåværende grensesnittet med LMT01
Som nevnt ovenfor, for å overføre måleresultatet, genererer LMT01 en bitsekvens i form av strømtellingspulser. For dette krever sensoren bare to ledninger (figur 4). For å konvertere strømpulser til form som er kjent for digitale mikrokretser, kan du i noen tilfeller bruke en enkelt motstand (men ikke alltid - mer om det nedenfor).
Etter oppstart starter LMT01 en målesyklus som tar opptil 54 ms (figur 5). I løpet av denne tiden dannes en lav strøm på 28 ... 39 μA ved sensorutgangen. Dette følges av en syklus for overføring av måleresultatet i form av strømimpulser med en amplitude på 112 ... 143 μA. Den mottakende mikrokontrolleren må telle disse pulser, for eksempel ved hjelp av den innebygde telleren / tidtakeren. Siden frekvensen til signalene er omtrent 82 ... 94 kHz, kan overføringsvarigheten nå maksimalt 50 ms med maksimalt antall pulser (4095).
Fig. 5. Timingsdiagrammer for LMT01-sensoren
Antall pulser (PC) kan brukes til å bestemme temperaturverdien i henhold til formel 1:
, (1)
Dermed vil sensoren ved 0 ° C generere rundt 800 pulser.
Dessverre er det ikke alltid mulig å bruke en ekstern motstand på grunn av begrensningen på minimum spenningsfall over LMT01-sensoren. Under målesyklusen må fallet over sensoren være minst 2,15 V. Under dataoverføringssyklusen kan spenningsfallet reduseres til 2 V. Det er ikke vanskelig å gjøre noen grove beregninger.
Tenk på en enhet med en forsyningsspenning Vdd = 3,3 V. Hvis vi tar det minste tillatte fallet over sensoren lik 2,15 V under målesyklusen, vil et signal på ikke mer enn 1,15 V bli observert over motstanden. For de fleste digitale kontrollere, er den logiske enheten 0, 7 ∙ Vdd, som for vårt tilfelle vil være 2,31 V. Som et resultat viser det seg at bruk av en enkel motstand er umulig, siden mikrokontrolleren rett og slett ikke vil "se" signalet til en logisk enhet. Veien ut av denne situasjonen kan være bruk av en mikrokontroller med en innebygd komparator eller nivåkonverteringskretser.
Motstandstemperaturfølere
Temperaturmotstandssensorer (RTD) er laget av sjeldne metaller, for eksempel platina, hvis elektriske motstand varierer med temperaturen.
Motstandstemperaturdetektorer har en positiv temperaturkoeffisient og gir, i motsetning til termistorer, høy måle nøyaktighet. Imidlertid har de dårlig følsomhet. Pt100 er den mest tilgjengelige sensoren med en standard motstandsverdi på 100 ohm ved 0 ° C. Den største ulempen er høye kostnader.
Fordelene med slike sensorer
- Bredt temperaturområde fra -200 til 650 ° C
- Gi strøm med høyt fall
- Mer lineær sammenlignet med termoelementer og RTD
Ekstra komponenter og sensorkrets
I tillegg til hoveddiodenhetene inkluderer temperaturfølerkretsen en rekke tilleggselementer. Først og fremst er det en kondensator som beskytter enheten mot fremmede påvirkninger. Faktum er at operasjonsforsterkeren er svært følsom for effekten av vekslende elektromagnetiske felt. Kondensatoren fjerner denne avhengigheten ved å injisere negativ tilbakemelding.
Med deltagelse av en transistor og en zenerdiode dannes en stabilisert referansespenning. Her brukes motstander med høyere nøyaktighetsklasse med en lav verdi av motstandskoeffisienten. Dermed får hele ordningen ekstra stabilitet. I tilfelle mulige betydelige temperaturendringer kan presisjonsmotstander utelates. De brukes bare til å kontrollere liten overoppheting.
Termoelement
Termoelementtemperaturfølere brukes oftest fordi de er nøyaktige, fungerer over et bredt temperaturområde fra -200 ° C til 2000 ° C, og er relativt billige. Et termoelement med ledning og en plugg på bildet nedenfor:
Termoelementdrift
Et termoelement er laget av to forskjellige metaller sveiset sammen for å produsere en potensiell forskjell over temperaturen. Fra temperaturforskjellen mellom de to kryssene genereres en spenning som brukes til å måle temperaturen. Spenningsforskjellen mellom de to kryssene kalles Seebeck-effekten.
Hvis begge forbindelsene har samme temperatur, er potensialet for forskjell i forskjellige forbindelser null, dvs. V1 = V2. Imidlertid, hvis kryssene har forskjellige temperaturer, vil utgangsspenningen i forhold til temperaturforskjellen mellom de to kryssene være lik deres V1 - V2 forskjell.
Typer temperatursensorer
Elektronisk-mekanisk
Den enkleste og rimeligste typen regulator. Dens viktigste arbeidsdel er en spesiell metallplate som reagerer på en økning eller reduksjon i temperaturen. Systemet slås på og av ved å endre platens krumning under oppvarming og kjøling. Å sette den nøyaktige temperaturverdien på en slik regulator vil ikke fungere.
Elektronisk
Enheten har et spesielt element som genererer et spesielt signal. Effekten avhenger direkte av verdiene til omgivelsestemperaturen. På slike enheter kan du stille nøyaktige oppvarmingstemperaturavlesninger opp til en brøkdel av en grad. Systemet styres av knapper og en liten skjerm.
Programmerbar
Den dyreste av termoelementene. På den kan du sette visse verdier når du når hele systemet slås på eller av av regulatoren. Takket være enheten opprettes et mikroklima i rommet som passer en bestemt person. Det er mulig å konfigurere termostaten slik at systemet slås på på et bestemt tidspunkt. Det vil si gulvene varmes opp før eieren kommer hjem, og samtidig forbrukes ikke strøm når eieren ikke er det.
Mange modeller har lyse og stilige design og LCD-skjermer som viser informasjon og letter finjustering.
Arbeide med ferdige biblioteker
Så for å jobbe med DS18B20 temperatursensorer på nettverket, kan du finne et stort antall biblioteker, men som regel brukes to av de mest populære. Det er et bibliotek og et bibliotek. Videre er det andre biblioteket et mer praktisk tillegg enn det første og kan ikke brukes uten det. Med andre ord, før du kobler til DallasTemperature.h-biblioteket, må du også koble OneWire.h. Hvordan installere visse biblioteker i Arduino IDE er mulig.
Bibliotek OneWire.h
La oss først vurdere å jobbe med OneWire.h-biblioteket. Nedenfor er en liste over funksjonene med en kort beskrivelse.
- OneWire temperatursensor (uint8_t pinNumber)
Denne funksjonen er en konstruktør av OneWire-klassen og skaper et temperaturSensor-objekt, dvs. åpner en kommunikasjonskanal med en sensor eller en gruppe sensorer på pinNumber pin. I eksemplene våre (figur 3-5) er dette “D2” -stiften til Arduino Nano. Det var til det vi koblet DQ DS18B20 databussen.
Eksempel:
OneWire temperaturføler
(
D2
);
// En sensor eller en gruppe sensorer er koblet til pin D2
- uint8_t søk (addrArray)
Funksjonen søker etter neste enhet på 1-Wire-bussen, og når den blir funnet, legger den inn adresseverdien i addrArray-arrayet, og returnerer sant. Siden den unike adressen til hver sensor er 64-bit, må addrArray være 8 byte. Hvis søket mislykkes, returnerer funksjonen falsk. Det skal bemerkes at når flere temperatursensorer er koblet til en buss, vil hvert anrop til søkefunksjonen bli adressert til neste sensor, deretter den neste osv., Til alle enheter på bussen er oppført. Det spesielle med denne funksjonen er å huske allerede behandlede adresser. For å tilbakestille køen, må du ringe til reset_search () -funksjonen, som vil bli diskutert nedenfor.
Eksempel:
byte addrArray
[
8
];
// Array for lagring av en 64-biters adresse // Hvis enheten overhodet ikke er på bussen, eller hvis alle enhetene er oppregnet // vis den tilsvarende informasjonen i havnemonitoren
hvis(!
temperatur sensor
.
Søk
(
addrArray
))
Seriell
.
utskrift
(
"Ingen flere adresser."
);
// Hvis ikke den neste enheten svarte på tilstedeværelsesforespørselen, // viser den 64-biters adressen i portmonitoren
ellers{til(
Jeg
=
0
;
Jeg
<
8
;
Jeg
++)
Seriell
.
skrive ut
(
addrArray
[
Jeg
],
HEKS
);
}
- tomromreset_search ()
Som nevnt ovenfor tilbakestiller denne funksjonen valgkøen til enheter på 1-ledningsbussen helt til begynnelsen. Den skal alltid brukes i forbindelse med søkefunksjonen når sistnevnte returnerer falsk. For eksempel, i vårt tilfelle med 5 sensorer på bussen, ved å ringe søkefunksjonen 5 ganger, kan vi få 5 adresser. For sjette gang vil søkefunksjonen returnere falsk til oss og vil gjøre dette med hver neste avstemning til køen blir spylt. Du bør være oppmerksom på dette for å unngå uforståelige situasjoner.
Eksempel:
byte addrArray
[
8
];
// Array for lagring av en 64-biters adresse // Hvis enheten ikke er i det hele tatt på bussen eller alle enhetene er oppregnet // tilbakestill valgkøen for å gjenta søkesyklusen
hvis(!
temperatur sensor
.
Søk
(
addrArray
))
temperatur sensor
.
reset_search
();
- uint8_tnullstille ()
1-lednings tilbakestillingsfunksjonen starter kommunikasjonsprosessen. Det kalles hver gang vi vil kommunisere med temperatursensoren. Returverdier kan være sanne eller falske. Vi får den sanne verdien hvis minst en sensor på bussen reagerer på tilbakestilling med en tilstedeværelsespuls. Ellers blir vi falske;
Eksempel:
hvis(!
temperatur sensor
.
nullstille
())
Seriell
.
utskrift
(
"Ingen sensorer på bussen"
);ellers
Seriell
.
utskrift
(
"Sensor oppdages"
);
- tomromvelg (addrArray)
Funksjonen lar deg velge en bestemt enhet som vi ønsker å jobbe med for øyeblikket. Valget gjøres ved eksplisitt å spesifisere 64-biters adresse som er angitt i addrArray-matrisen. Adressen kan angis eksplisitt ved å skrive den i en matrise eller bruke den som tidligere ble lest av søkefunksjonen. Det skal bemerkes at tilbakestillingsfunksjonen må kalles før du ringer på valgfunksjonen. Ved neste tilbakestilling brytes forbindelsen til den valgte sensoren til neste samtale å velge.
Eksempel:
byte addrArray
[
8
];
// Array for lagring av en 64-biters adresse // Hvis enheten overhodet ikke er på bussen, eller hvis alle enhetene er oppregnet // send den tilsvarende informasjonen til havnemonitoren
hvis(!
temperatur sensor
.
Søk
(
addrArray
))
Seriell
.
utskrift
(
"Ingen flere adresser."
);
// Ellers, hvis neste enhet svarte på forespørsel om tilstedeværelse, // velg den for påfølgende arbeid
ellers{
temperatur sensor
.
nullstille ()
;
// Ikke glem å gi kommandoen for tilbakestilling av temperatur
.
velg (addrArray)
;
// Spesifiser en matrise med lese-adressen
}
- tomromhopp over ()
Funksjonen er bare relevant når du arbeider med en sensor på bussen og bare hopper over valget av enheten. Med andre ord, du kan ikke bruke søkefunksjonen, og derfor raskt få tilgang med den eneste sensoren din.
Eksempel:
temperatur sensor.
nullstille
();
// Tilbakestill temperatursensordekk
.
hopp over
();
// Velg den eneste sensoren for videre arbeid med den
- tomromskrive (uint8_tbyte, uint8_t powerType = 0)
Funksjonen sender en byte med data til den valgte enheten på bussen. PowerType-argumentet spesifiserer typen strømforsyning for sensorene (0 - sensorer får strøm direkte fra en ekstern kilde; 1 - det brukes en parasittdrevet tilkobling). Den andre parameteren kan utelates hvis ekstern strøm brukes, siden den er 0 som standard.
Eksempel:
temperatur sensor
.
nullstille
();
// Tilbakestill temperatursensordekk
.
hopp over
();
// Velg en enkelt sensor for senere arbeid med den // Send en kommando for å konvertere temperaturen, // ved hjelp av en forbindelse med parasittstrømforsyning fra temperaturen Sensordatabuss
.
skrive
(
0x44
,
1
);
- uint8_tles ()
Denne funksjonen leser en byte data sendt av slaveenheten (sensoren) til 1-ledningsbussen.
Eksempel:
// Les 9 byte data fra 1-Wire-bussen og legg resultatet i array-byte-array
[
9
];til(
uint8_t i
=
0
;
Jeg
<
9
;
Jeg
++){
array
[
Jeg
]=
temperatur sensor
.
lese
();}
- statisk uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funksjonen er designet for å beregne kontrollsummen. Designet for å kontrollere riktig kommunikasjon med temperatursensoren. Her er addr en peker til datautvalget, og len er antall byte.
Eksempel:
byte addrArray
[
8
];
// Array for lagring av en 64-biters adresse // Hvis enheten overhodet ikke er på bussen, eller hvis alle enhetene er oppregnet // send den tilsvarende informasjonen til havnemonitoren
hvis(!
temperatur sensor
.
Søk
(
addrArray
))
Seriell
.
utskrift
(
"Ingen flere adresser."
);
// Hvis ikke neste enhet svarte på tilstedeværelsesforespørselen, // sjekk sjekksummen for adressen
ellers{
// Hvis kontrollsummen ikke stemmer overens, viser du en feilmelding
hvis(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seriell
.
utskrift
(
"CRC er ikke gyldig!"
);}}
Vi undersøkte hver funksjon av OneWire.h-biblioteket separat, og for å fikse materialet, nedenfor, vil jeg gi en skisse for å lese temperaturen fra en gruppe DS18B20 temperatursensorer, som vil bli koblet til pin D2 ved hjelp av en parasittisk strømkrets. Skissen vil inneholde detaljerte kommentarer til alle nødvendige punkter.
#include // Vi kobler til biblioteket for å jobbe med DS18B20OneWire ds termiske sensorer
(
2
);
// En sensor eller gruppe sensorer er koblet til D2-pinnen på Arduino // PRESET FUNCTION void setup
(
tomrom
){
Seriell
.
begynne
(
9600
);
// Initialisering av arbeid med Serial-port} // HOVEDSYKLUS ugyldig sløyfe
(
tomrom
){
byte i
;
// Hjelpevariabel for byte-nåværende sløyfer
=
0
;
// Variabel for å bestemme beredskapen til sensoren for kommunikasjonsbyte type_s
;
// Variabel for å definere typen temperatursensor på byte databussen
[
12
];
// Array for lagring av informasjon mottatt fra sensorbyte-addr
[
8
];
// Array for lagring av 64-biters adresse til float celsius-sensoren
,
fahrenheit
;
// Variabler for beregning av temperaturen // Hvis ikke enheter på bussen blir funnet eller alle enhetene på bussen er oppregnet // viser tilsvarende informasjon i havnemonitoren, nullstill køen // og utfør et søk igjen etter å ha ventet 250 ms
hvis(!
ds
.
Søk
(
addr
)){
Seriell
.
utskrift
(
"Ingen flere adresser."
);
Seriell
.
utskrift
();
ds
.
reset_search
();
forsinkelse
(
250
);komme tilbake;}
// Hvis neste enhet på bussen blir funnet, kan du vise den unike adressen // i portmonitoren i heksadesimal form Serial
.
skrive ut
(
"ROM ="
);til(
Jeg
=
0
;
Jeg
<
8
;
Jeg
++){
Seriell
.
skrive
(
‘ ‘
);
Seriell
.
skrive ut
(
addr
[
Jeg
],
HEKS
);}
// Sjekk sjekksummen til adressen til enheten som er funnet // og hvis den ikke samsvarer, vis den tilsvarende informasjonen
hvis(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Seriell
.
utskrift
(
"CRC er ikke gyldig!"
);komme tilbake;}
Seriell
.
utskrift
();
// Sjekk nullbyten til adressen, som inneholder informasjon // om en bestemt type temperatursensor. Avhengig av verdien på null // byte, sender vi brikkeserien ut til havnemonitoren. Hvis nullbyte inneholder en ukjent // -verdi, kan du vise en melding om den ukjente familien til temperatursensoren.
bytte om(
addr
[
0
]){sak
0x10
:
Seriell
.
utskrift
(
"Chip = DS18S20"
);
type_s
=
1
;gå i stykker;sak
0x28
:
Seriell
.
utskrift
(
"Chip = DS18B20"
);
type_s
=
0
;gå i stykker;sak
0x22
:
Seriell
.
utskrift
(
"Chip = DS1822"
);
type_s
=
0
;gå i stykker;misligholde:
Seriell
.
utskrift
(
"Enheten er ikke en DS18x20-familieenhet."
);komme tilbake;}
ds
.
nullstille
();
// Tilbakestill bussen for å initialisere datautveksling ds
.
plukke ut
(
addr
);
// Velg sensoren med gjeldende adresse for å jobbe med den // Send en kommando for å konvertere temperaturen (i henhold til dokumentasjonen 0x44) // Ikke glem den andre parameteren "1", siden vi overfører data via / / linje med parasittkraft. ds
.
skrive
(
0x44
,
1
);
// Sensoren starter konvertering, som ifølge dokumentasjonen tar maks. 750ms // For å være på den sikre siden, vil vi organisere en pause på ё sekund forsinkelse
(
1000
);
// Tilbakestill bussen igjen for å lese informasjon fra sensoren // lagre responsen til reset () -funksjonen til den nåværende variabelen for videre arbeid med den nåværende
=
ds
.
nullstille
();
ds
.
plukke ut
(
addr
);
// Velg sensoren på nytt etter adressen, siden det var en tilbakestillingspuls // Kommandoen 0xBE, ifølge den tekniske dokumentasjonen, lar deg lese det interne minnet // til temperatursensoren (Scratchpad), som består av 9 byte. ds
.
skrive
(
0xBE
);
// Les og send ut til portmonitoren 9 byte fra det interne minnet til den serielle termiske sensoren
.
skrive ut
(
"Data ="
);
Seriell
.
skrive ut
(
tilstede
,
HEKS
);
Seriell
.
skrive ut
(
» «
);til(
Jeg
=
0
;
Jeg
<
9
;
Jeg
++){
data
[
Jeg
]=
ds
.
lese
();
Seriell
.
skrive ut
(
data
[
Jeg
],
HEKS
);
Seriell
.
skrive ut
(
» «
);}
// Sjekk og send ut til porten overvåke sjekksummen til mottatte data Serial
.
skrive ut
(
"CRC ="
);
Seriell
.
skrive ut
(
OneWire
::
crc8
(
data
,
8
),
HEKS
);
Seriell
.
utskrift
();
// Start prosessen med å konvertere mottatte data til den faktiske temperaturen // som er lagret i 0 og 1 byte leseminne. For å gjøre dette kombinerer vi disse to // byte i ett 16-bits nummer int16_t raw
=(
data
[
1
]<<
8
)|
data
[
0
];
// Før videre konvertering, må du definere familien // denne sensoren tilhører (tidligere lagret vi resultatet i type_s-variabelen). // Avhengig av familien vil temperaturen bli beregnet annerledes, // siden DS18B20 og DS1822 returnerer en 12-biters verdi, mens DS18S20 returnerer en 9-biters verdi
hvis(
type_s
){
// Hvis sensoren tilhører DS18S20 råfamilien
=
rå
<<
3
;
// standard oppløsning er 9 bits
hvis(
data
[
7
]==
0x10
){
rå
=(
rå
&
0xFFF0
)+
12
—
data
[
6
];}}ellers{
// Bestem hvilken målenøyaktighet denne sensoren er konfigurert byte cfg
=(
data
[
4
]&
0x60
);
// Ved lavere oppløsninger kan du nullstille de minst viktige bitene, // siden de ikke er definert tidlig
hvis(
cfg
==
0x00
)
rå
=
rå
&~
7
;
// 9 bits (konvertering tar 93,75 ms)
ellershvis(
cfg
==
0x20
)
rå
=
rå
&~
3
;
// 10 bits (konvertering tar 187,5 ms)
ellershvis(
cfg
==
0x40
)
rå
=
rå
&~
1
;
// 11 bits (konvertering tar 375 ms) // Standard presisjonen er 12 bits (konvertering tar 750 ms)
}
// Beregn og send ut temperaturverdiene til celsius-portmonitoren
=(
flyte
)
rå
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Seriell
.
skrive ut
(
"Temperatur ="
);
Seriell
.
skrive ut
(
celsius
);
Seriell
.
skrive ut
(
"Celsius,"
);
Seriell
.
skrive ut
(
fahrenheit
);
Seriell
.
utskrift
(
"Fahrenheit"
);}
Hvis alt er gjort riktig, bør vi se noe som følger i portmonitorvinduet (figur 6):
Figur 6 - resultatet av arbeidet med OneWire.h-biblioteket
DallasTemperature.h-biblioteket
Dette biblioteket er basert på det forrige og forenkler programmeringsprosessen litt på grunn av mer forståelige funksjoner. Etter installasjon vil du ha tilgang til 14 eksempler på veldokumentert kode for alle anledninger. Innenfor rammen av denne artikkelen vil et eksempel på drift med en sensor vurderes.
Resultatet av programmet er vist i figur 7
Figur №7 - resultatet av å lese temperaturen ved hjelp av DallasTemperature.h-biblioteket
// Vi kobler de nødvendige bibliotekene # inkluderer # inkluderer // Vi kobler databussen til pin 2 av Arduino # definer ONE_WIRE_BUS 2 // Opprett en forekomst av klassen for bussen vår og en lenke til den OneWire oneWire
(
ONE_WIRE_BUS
);
Dallas temperaturfølere
(&
oneWire
);
// PRESET FUNCTION ugyldig oppsett
(
tomrom
){
Seriell
.
begynne
(
9600
);
// Initialiser sensorportsensorene
.
begynne
();
// Initialiser bussen
}
// HOVEDSYKLUS
(
tomrom
){
Seriell
.
skrive ut
(
"Lesetemperatur ..."
);
// Send kommandoen for å lese sensorer
.
forespørselTemperaturer
();
Seriell
.
utskrift
(
"Lese"
);
Seriell
.
skrive ut
(
"Sensortemperatur 1:"
);
// Vis temperaturverdien Serial
.
skrive ut
(
sensorer
.
getTempCByIndex
(
0
));}
Temperatursensor KY-001 med 1-leder grensesnitt
Denne sensoren brukes til nøyaktig temperaturmåling. Kommunikasjon med sensoren utføres via 1-ledningsgrensesnittet [1-2], som lar deg koble flere lignende enheter til Arduino-kortet ved hjelp av en mikrocontrollerstift [3-4]. Modulen er basert på ds18b20 mikrokrets [5].
Modulstørrelse 24 x 15 x 10 mm, vekt 1,3 g. En tilkobling med tre pinner brukes. Sentral kontakt - strømforsyning + 5V, kontakt "-" - felles, kontakt "S" - informativ.
Tavlen har en rød LED som lyser når informasjon utveksles.
Strømforbruk 0,6 mA under informasjonsutveksling og 20 μA i standby-modus.
Å koble denne typen sensorer til Arduino er godt beskrevet i mange kilder [6-8]. I dette tilfellet manifesteres de viktigste fordelene med Arduino igjen - allsidighet og tilstedeværelsen av en enorm mengde referanseinformasjon. For å jobbe med sensoren trenger du OneWire-biblioteket [9]. Etter å ha lastet programmet fra [8] (det er en feil i den første versjonen av programmet - det er ingen # inkluderer bibliotektilkobling i kodehodet), kan du observere følgende informasjon i seriell portmonitor.
Forfatteren testet også koden fra [7], alt fungerte med en gang, i seriell portmonitor kan du lese informasjon om typen tilkoblet sensor og de faktiske temperaturdataene.
Generelt sett en veldig nyttig sensor som gjør det mulig å bli kjent med 1-Wire-grensesnittet i praksis. Sensoren gir de riktige temperaturdataene umiddelbart, brukeren trenger ikke å kalibrere.