I den här artikeln kommer vi att diskutera de olika typerna av temperaturgivare och hur de kan användas i varje enskilt fall. Temperatur är en fysisk parameter som mäts i grader. Det är en viktig del av varje mätprocess. Områden som kräver exakta temperaturmätningar inkluderar medicin, biologisk forskning, elektronik, materialforskning och termiska prestanda hos elektriska produkter. En enhet som används för att mäta mängden värmeenergi som gör att vi kan upptäcka fysiska temperaturförändringar kallas en temperatursensor. De är digitala och analoga.
Huvudtyper av sensorer
Generellt finns det två metoder för att erhålla data:
1. Kontakt... Kontakttemperaturgivare är i fysisk kontakt med ett föremål eller ämne. De kan användas för att mäta temperaturen på fasta ämnen, vätskor eller gaser.
2. Kontaktlös... Beröringsfria temperatursensorer upptäcker temperatur genom att fånga upp en del av den infraröda energin som emitteras av ett föremål eller ett ämne och känna av dess intensitet. De kan endast användas för att mäta temperaturen i fasta ämnen och vätskor. De kan inte mäta gasernas temperatur på grund av deras färglöshet (transparens).
Regler för val av sensor
Temperaturgivaren för golvvärme väljs med hänsyn tagen till egenskaper som effekt, typ av övertäckning, installationsmetod och utrustning med ytterligare funktionalitet.
Kraft
Värdet måste verkligen uppfylla kraven och belastningen på det varma golvet. I annat fall fungerar inte sensorn korrekt. När värmeelementets effekt är större än själva regulatorn blir det nödvändigt att installera en magnetstarter mellan dem - för att förhindra skador på enheten på grund av ökad belastning.
Funktionssats
Det varma golvet styrs av en elektrisk enhet som låter dig justera värmeelementens funktion. Moderna styrenheter har sådan funktion som att starta och stänga av systemet, justera temperaturförhållandena, samt ställa in frekvensen för anslutning och frånkoppling av värmeelementet.
Enkel användning
Om du tror att du inte förstår programmering ska du inte köpa en komplex enhet. Även med hänsyn till all dess funktionalitet. Till exempel tycker äldre att det är ganska problematiskt att hantera programmerbara enheter. De skulle bättre välja det mekaniska alternativet.
Lätt att ansluta
Medföljande dokumentation för termostaten anger alltid hur golvvärmesensorn ska anslutas. Terminalerna är placerade vid kanten på ena sidan av styrenheten. Efter att ha anslutit de elektriska ledningarna enligt schemat kommer det att vara nödvändigt att kontrollera värmesystemets prestanda. För att göra detta, mät motståndet vid temperaturgivarens terminaler och värmekabeln, eller anslut ett varmt golv och öka temperaturvärdena från noll till indikatorn som rekommenderas av SNIP, det vill säga upp till 30 ° C.
Utseende
En termisk sensor bör inte bara vara funktionellt förståelig utan också attraktiv i design. Moderna knoppar finns i olika färger och former. Du kan välja ett alternativ som är i harmoni med det inre av rummet.
Typer av temperatursensorer
Det finns många olika typer av temperatursensorer.Från enkel på / av-styrning av en termostatanordning till komplexa styrsystem för vattenförsörjning, med funktionen att värma den, som används i processer för växande växter. De två huvudtyperna av sensorer, kontakt och icke-kontakt, är ytterligare indelade i resistiva, spännings- och elektromekaniska sensorer. De tre mest använda temperaturgivarna är:
- Termistorer
- Motstånds termoelement
- Termoelement
Dessa temperatursensorer skiljer sig från varandra när det gäller driftsparametrar.
Enhet
Det är ett termoelement (platta eller stång) som består av ledningar som ansluter till avkänningselementets anslutningar.
Beroende på temperaturinformationen ändras motståndet hos den känsliga delen, respektive, den elektriska signalen som tillförs termostaten ändras. Således bestäms det absoluta värdet för medietemperaturen.
Extern (extern temperaturgivare för golvvärme) är som regel placerad under golvbeläggningen och mäter dess temperaturindikatorer. Intern (inbyggd), placerad inuti regulatorn och bestämmer nivån på luftuppvärmning.
Utformningen av temperatursensorer väljs beroende på systemets funktioner:
Termistor
En termistor är ett känsligt motstånd som ändrar sitt fysiska motstånd med temperaturen. Normalt är termistorer gjorda av ett keramiskt halvledarmaterial såsom kobolt, mangan eller nickeloxid och är belagda med glas. De är små platta förseglade skivor som reagerar relativt snabbt på temperaturförändringar.
På grund av materialets halvledande egenskaper har termistorer en negativ temperaturkoefficient (NTC), dvs. motstånd minskar med ökande temperatur. Det finns dock också PTC-termistorer vars motstånd ökar med ökande temperatur.
Termistorschema
Fördelar med termistorer
- Hög reaktionshastighet vid temperaturförändringar, noggrannhet.
- Låg kostnad.
- Högre motstånd i området 2000 till 10.000 ohm.
- Mycket högre känslighet (~ 200 ohm / ° C) inom ett begränsat temperaturintervall på upp till 300 ° C.
Temperaturberoende av motstånd
Beroendets beroende av temperatur uttrycks genom följande ekvation:
Var A, B, C - dessa är konstanter (tillhandahålls genom beräkningsvillkoren), R - motstånd i Ohms, T - temperatur i Kelvin. Du kan enkelt beräkna temperaturförändringen från en motståndsförändring eller tvärtom.
Hur använder jag en termistor?
Termistorer klassas för sitt resistiva värde vid rumstemperatur (25 ° C). En termistor är en passiv resistiv anordning, så den kräver produktion av övervakning av den aktuella utspänningen. Som regel är de kopplade i serie med lämpliga stabilisatorer som bildar en nätspänningsdelare.
Exempel: Tänk på en termistor med ett motståndsvärde på 2,2 K vid 25 ° C och 50 ohm vid 80 ° C. Termistorn är ansluten i serie med ett 1 kΩ motstånd genom en 5 V-matning.
Därför kan dess utspänning beräknas enligt följande:
Vid 25 ° C, RNTC = 2200 ohm;
Vid 80 ° C, RNTC = 50 ohm;
Det är dock viktigt att notera att vid rumstemperatur är standardmotståndsvärdena olika för olika termistorer, eftersom de är icke-linjära. En termistor har en exponentiell temperaturförändring, och därför en beta-konstant, som används för att beräkna dess motstånd för en given temperatur. Motståndets utgångsspänning och temperatur är linjärt relaterade.
Funktioner i det tvåtrådiga strömgränssnittet i LMT01-temperatursensorer
Fikon. 4. Organisation av nuvarande gränssnitt med LMT01
Som nämnts ovan genererar LMT01 en bitsekvens i form av strömräknande pulser för att sända mätresultatet. För detta behöver sensorn endast två ledningar (Figur 4). För att konvertera strömpulser till den form som är bekant med digitala mikrokretsar kan du i vissa fall använda ett enda motstånd (men inte alltid - mer om det nedan).
Efter uppstart startar LMT01 en mätcykel som tar upp till 54 ms (figur 5). Under denna tid bildas en lågnivåström på 28 ... 39 μA vid sensorutgången. Detta följs av en cykel för överföring av mätresultatet i form av strömpulser med en amplitud på 112 ... 143 μA. Den mottagande mikrokontrollern måste räkna dessa pulser, till exempel med den inbyggda räknaren / timern. Eftersom signalfrekvensen är ungefär 82 ... 94 kHz, då med det maximala antalet pulser (4095), kan sändningstiden nå 50 ms.
Fikon. 5. Tidsdiagram för LMT01-sensordrift
Genom antalet räknade pulser (PC) kan temperaturvärdet bestämmas enligt formel 1:
, (1)
Således genererar sensorn vid 0 ° C cirka 800 pulser.
Tyvärr är det inte alltid möjligt att använda ett externt motstånd på grund av begränsningen av det minsta spänningsfallet över LMT01-sensorn. Under mätcykeln måste fallet över sensorn vara minst 2,15 V. Under dataöverföringscykeln kan spänningsfallet minskas till 2 V. Det är inte svårt att göra några grova beräkningar.
Tänk på en enhet med en matningsspänning Vdd = 3,3 V. Om vi tar det minsta tillåtna fallet över sensorn lika med 2,15 V under mätcykeln, kommer en signal på högst 1,15 V att observeras över motståndet. För de flesta digitala styrenheter, den logiska enheten är 0, 7 ∙ Vdd, vilket för vårt fall blir 2,31 V. Som ett resultat visar sig användningen av ett enkelt motstånd vara omöjligt, eftersom mikrokontrollen helt enkelt inte "ser" signalen från en logisk enhet. Vägen ut ur denna situation kan vara användningen av en mikrokontroller med en inbyggd komparator eller nivåomvandlingskretsar.
Motståndstemperaturgivare
Temperaturmotståndssensorer (RTD) är gjorda av sällsynta metaller, såsom platina, vars elektriska motstånd varierar med temperaturen.
Resistiva temperaturdetektorer har en positiv temperaturkoefficient och ger, till skillnad från termistorer, hög temperaturmätnoggrannhet. De har dock dålig känslighet. Pt100 är den mest tillgängliga sensorn med ett standardmotståndsvärde på 100 ohm vid 0 ° C. Den största nackdelen är den höga kostnaden.
Fördelarna med sådana sensorer
- Brett temperaturintervall från -200 till 650 ° C
- Ge ström med hög släppström
- Mer linjär jämfört med termoelement och RTD
Ytterligare komponenter och sensorkrets
Förutom huvuddiodanordningarna innehåller temperaturgivarkretsen ett antal ytterligare element. Först och främst är det en kondensator som skyddar enheten från främmande påverkan. Faktum är att operationsförstärkaren är mycket känslig för effekterna av alternerande elektromagnetiska fält. Kondensatorn tar bort detta beroende genom att injicera negativ feedback.
Med deltagande av en transistor och en zenerdiod bildas en stabiliserad referensspänning. Här används motstånd med en högre noggrannhetsklass med ett lågt värde på temperaturkoefficienten för motstånd. Därmed får hela systemet ytterligare stabilitet. Vid eventuella betydande förändringar i temperaturförhållandena kan precisionsresistorer utelämnas. De används bara för att kontrollera liten överhettning.
Termoelement
Termoelementtemperaturgivare används oftast eftersom de är exakta, arbetar inom ett brett temperaturintervall från -200 ° C till 2000 ° C och är relativt billiga. Ett termoelement med en tråd och en kontakt på bilden nedan:
Drift av termoelement
Ett termoelement är tillverkat av två olika metaller svetsade ihop för att producera en potentiell skillnad över temperatur. Från temperaturskillnaden mellan de två korsningarna genereras en spänning som används för att mäta temperaturen. Spänningsskillnaden mellan de två korsningarna kallas Seebeck-effekten.
Om båda föreningarna har samma temperatur är potentialen för skillnad i olika föreningar noll, dvs. V1 = V2. Men om korsningarna har olika temperaturer kommer utspänningen i förhållande till temperaturskillnaden mellan de två korsningarna att vara lika med deras V1 - V2-skillnad.
Typer av temperatursensorer
Elektronisk-mekanisk
Den enklaste och billigaste typen av regulator. Dess huvudsakliga arbetsdel är en speciell metallplåt som svarar på en ökning eller minskning av temperaturen. Systemet slås på och av genom att ändra krökningen på plattan under uppvärmning och kylning. Att ställa in det exakta temperaturvärdet på en sådan regulator fungerar inte.
Elektronisk
Enheten har ett speciellt element som genererar en speciell signal. Effekten beror direkt på värdena på omgivningstemperaturen. På sådana enheter kan du ställa in exakta värmetemperaturavläsningar upp till en bråkdel av en grad. Systemet styrs av knappar och en liten skärm.
Programmerbar
Den dyraste termoelementen. På den kan du ställa in vissa värden när du når hela systemet på eller av av regulatorn. Tack vare enheten skapas ett mikroklimat i rummet som passar en viss person. Det är möjligt att konfigurera termostaten så att systemet slås på vid en viss tidpunkt. Det vill säga golven värms upp innan ägaren kommer hem, och samtidigt förbrukas inte el när ägaren inte är det.
Många modeller har ljusa och snygga mönster och LCD-skärmar som ger information och underlättar finjustering.
Arbeta med färdiga bibliotek
Så för att arbeta med DS18B20 temperatursensorer i nätverket kan du hitta ett stort antal bibliotek, men som regel används två av de mest populära. Det är ett bibliotek och ett bibliotek. Dessutom är det andra biblioteket ett mer bekvämt tillägg än det första och kan inte användas utan det. Med andra ord, innan du ansluter biblioteket DallasTemperature.h måste du också ansluta OneWire.h. Hur man installerar vissa bibliotek i Arduino IDE är möjligt.
Bibliotek OneWire.h
Låt oss först överväga att arbeta med OneWire.h-biblioteket. Nedan följer en lista över dess funktioner med en kort beskrivning.
- OneWire temperatureSensor (uint8_t pinNumber)
Denna funktion är en konstruktör av OneWire-klassen och skapar ett temperaturSensor-objekt, dvs. öppnar en kommunikationskanal med en sensor eller en grupp sensorer på pinNumber-stiftet. I våra exempel (figurerna 3-5) är detta ”D2” -stiften på Arduino Nano. Det var till det vi kopplade in DQ DS18B20-databussen.
Exempel:
OneWire-temperatursensor
(
D2
);
// En sensor eller en grupp sensorer är ansluten till stift D2
- uint8_t sök (addrArray)
Funktionen söker efter nästa enhet på 1-Wire-bussen och, när den hittas, matar in adressvärdet i addrArray-arrayen och returnerar true. Eftersom den unika adressen för varje sensor är 64-bitars måste addrArray vara 8 byte. Om sökningen misslyckas returnerar funktionen falsk. Det bör noteras att när flera temperatursensorer är anslutna till en buss kommer varje samtal till sökfunktionen att adresseras till nästa sensor, sedan nästa etc. tills alla enheter på bussen räknas upp. Särdraget med denna funktion är att komma ihåg redan bearbetade adresser. För att återställa kön måste du ringa funktionen reset_search (), som kommer att diskuteras nedan.
Exempel:
byte addrArray
[
8
];
// Matris för lagring av en 64-bitars adress // Om enheten alls saknas på bussen eller om alla enheter räknas upp // visa motsvarande information i portmonitorn
om(!
temperatursensor
.
Sök
(
addrArray
))
Serie
.
tryckln
(
"Inga fler adresser."
);
// Annars, om nästa enhet svarade på närvaroförfrågan, // visa dess 64-bitarsadress i portmonitorn
annan{för(
i
=
0
;
i
<
8
;
i
++)
Serie
.
skriva ut
(
addrArray
[
i
],
HEX
);
}
- tomhetreset_search ()
Som nämnts ovan återställer denna funktion pollingkön för enheter på 1-trådbussen till början. Den ska alltid användas tillsammans med sökfunktionen när den senare returnerar falskt. Till exempel, i vårt fall med 5 sensorer på bussen, genom att ringa sökfunktionen fem gånger, kan vi få 5 adresser. För sjätte gången kommer sökfunktionen att returnera falsk för oss och kommer att göra detta med varje nästa omröstning tills kön spolas. Du bör vara uppmärksam på detta för att undvika obegripliga situationer.
Exempel:
byte addrArray
[
8
];
// Matris för lagring av en 64-bitars adress // Om enheten alls inte finns på bussen eller om alla enheter räknas upp // återställ avfrågningskön för att upprepa sökcykeln
om(!
temperatursensor
.
Sök
(
addrArray
))
temperatursensor
.
reset_search
();
- uint8_tÅterställ ()
1-ledningsåterställningsfunktionen initierar kommunikationsprocessen. Det kallas varje gång vi vill kommunicera med temperatursensorn. Returvärden kan vara sanna eller falska. Vi får det verkliga värdet om minst en sensor på bussen svarar för att återställa med en närvaropuls. Annars blir vi falska;
Exempel:
om(!
temperatursensor
.
återställa
())
Serie
.
tryckln
(
"Inga sensorer på buss"
);annan
Serie
.
tryckln
(
"Sensor detekteras"
);
- tomhetvälj (addrArray)
Med funktionen kan du välja en specifik enhet som vi vill arbeta med just nu. Valet görs genom att specifikt ange 64-bitarsadressen som matats in i addrArray-matrisen. Adressen kan ställas in uttryckligen genom att skriva den i matrisen eller använda den tidigare lästa av sökfunktionen. Observera att återställningsfunktionen måste anropas innan du väljer samtal. Vid nästa återställning bryts anslutningen till den valda sensorn tills nästa samtal som ska väljas.
Exempel:
byte addrArray
[
8
];
// Array för lagring av en 64-bitars adress // Om enheten alls saknas på bussen eller alla enheter räknas upp // mata ut motsvarande information till portmonitorn
om(!
temperatursensor
.
Sök
(
addrArray
))
Serie
.
tryckln
(
"Inga fler adresser."
);
// Annars, om nästa enhet svarade på närvaroförfrågan, // väljer du den för efterföljande arbete
annan{
temperatursensor
.
Återställ ()
;
// Glöm inte att utfärda kommandot resetSensor
.
välj (addrArray)
;
// Ange en matris med läsadressen
}
- tomhethoppa över ()
Funktionen är endast relevant när du arbetar med en sensor på bussen och helt enkelt hoppar över valet av enheten. Med andra ord kan du inte använda sökfunktionen och därför snabbt komma åt med din enda sensor.
Exempel:
temperatursensor.
återställa
();
// Återställ temperaturSensor-däcket
.
hoppa
();
// Välj den enda sensorn för vidare arbete med den
- tomhetskriv (uint8_tbyte, uint8_t powerType = 0)
Funktionen skickar en databyte till den valda enheten på bussen. Argumentet powerType indikerar typen av strömförsörjning för sensorerna (0 - sensorerna drivs direkt från en extern källa; 1 - en parasitdriven anslutning används). Den andra parametern kan utelämnas om extern ström används, eftersom den är 0 som standard.
Exempel:
temperatursensor
.
återställa
();
// Återställ temperaturSensor-däcket
.
hoppa
();
// Välj den enda sensorn för vidare arbete med den // Skicka ett kommando för att konvertera temperaturen, // med en anslutning med parasitisk effekt från temperaturen Sensordatabuss
.
skriva
(
0x44
,
1
);
- uint8_tläs ()
Denna funktion läser en byte av data som skickas av slavenheten (sensorn) till 1-trådsbussen.
Exempel:
// Läs 9 byte data från 1-Wire-bussen och placera resultatet i array-byte-array
[
9
];för(
uint8_t i
=
0
;
i
<
9
;
i
++){
array
[
i
]=
temperatursensor
.
läsa
();}
- statisk uint8_t crc8 (const uint8_t * addr, uint8_t len);
Funktionen är utformad för att beräkna kontrollsumman. Utformad för att kontrollera korrekt kommunikation med temperaturgivaren. Här är addr en pekare till dataarrayen, och len är antalet byte.
Exempel:
byte addrArray
[
8
];
// Array för lagring av en 64-bitars adress // Om enheten alls saknas på bussen eller om alla enheter räknas upp // mata ut motsvarande information till portmonitorn
om(!
temperatursensor
.
Sök
(
addrArray
))
Serie
.
tryckln
(
"Inga fler adresser."
);
// Annars, om nästa enhet svarade på begäran om närvaro, // kontrollera kontrollsumman för dess adress
annan{
// Om kontrollsumman inte matchar, visa ett felmeddelande
om(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Serie
.
tryckln
(
"CRC är inte giltigt!"
);}}
Vi undersökte varje funktion i OneWire.h-biblioteket separat och för att fixa materialet nedan kommer jag att ge en skiss för att läsa temperaturen från en grupp av DS18B20 temperatursensorer, som kommer att anslutas till stift D2 med hjälp av en parasitisk strömkrets. Skissen innehåller detaljerade kommentarer om alla nödvändiga punkter.
#include // Vi ansluter biblioteket för att arbeta med DS18B20OneWire ds termiska sensorer
(
2
);
// En sensor eller grupp av sensorer är ansluten till D2-stiftet på Arduino // PRESET FUNCTION void setup
(
tomhet
){
Serie
.
Börja
(
9600
);
// Initialisering av arbete med Serial-port} // HUVUDCYKLUS tomrumsslinga
(
tomhet
){
byte i
;
// Hjälpvariabel för byte-närvarande slingor
=
0
;
// Variabel för att bestämma beredskapen för sensorn för kommunikationsbyte typ_s
;
// Variabel för att definiera typen av termisk sensor på byte-databussen
[
12
];
// Array för lagring av information mottagen från sensorbyte-tillägg
[
8
];
// Array för lagring av 64-bitarsadressen för float celsius-sensorn
,
fahrenheit
;
// Variabler för beräkning av temperaturen // Om enheter på bussen inte hittas eller alla enheter på bussen räknas upp // visa motsvarande information i portmonitorn, återställ kön // och gör en sökning igen, väntar 250 ms
om(!
ds
.
Sök
(
addr
)){
Serie
.
tryckln
(
"Inga fler adresser."
);
Serie
.
tryckln
();
ds
.
reset_search
();
dröjsmål
(
250
);lämna tillbaka;}
// Om nästa enhet på bussen hittas, visa dess unika adress // i portmonitorn i hex seriell
.
skriva ut
(
"ROM ="
);för(
i
=
0
;
i
<
8
;
i
++){
Serie
.
skriva
(
‘ ‘
);
Serie
.
skriva ut
(
addr
[
i
],
HEX
);}
// Kontrollera kontrollsumman för adressen till den hittade enheten // och om den inte matchar, visa motsvarande information
om(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Serie
.
tryckln
(
"CRC är inte giltigt!"
);lämna tillbaka;}
Serie
.
tryckln
();
// Kontrollera adressens nollbyte, som innehåller information // om en viss typ av temperaturgivare. Beroende på värdet på noll // byte visar vi serierna av chipet i portmonitorn. Om nollbyte innehåller ett okänt // -värde, visar vi ett meddelande om den okända familjen för temperatursensorn.
växla(
addr
[
0
]){fall
0x10
:
Serie
.
tryckln
(
"Chip = DS18S20"
);
typ_s
=
1
;ha sönder;fall
0x28
:
Serie
.
tryckln
(
"Chip = DS18B20"
);
typ_s
=
0
;ha sönder;fall
0x22
:
Serie
.
tryckln
(
"Chip = DS1822"
);
typ_s
=
0
;ha sönder;standard:
Serie
.
tryckln
(
"Enheten är inte en DS18x20-familjenhet."
);lämna tillbaka;}
ds
.
återställa
();
// Återställ bussen för att initiera datautbyte ds
.
Välj
(
addr
);
// Välj sensorn med aktuell adress för att arbeta med den // Skicka kommandot för att konvertera temperaturen (enligt dokumentationen 0x44) // Glöm inte den andra parametern "1", eftersom vi överför data via / / linje med parasitisk strömförsörjning. ds
.
skriva
(
0x44
,
1
);
// Sensorn startar konvertering, vilket enligt dokumentationen tar max. 750ms // För att vara på den säkra sidan kommer vi att ordna en paus med ё sekunders fördröjning
(
1000
);
// Återställ bussen igen för att läsa information från sensorn // spara svaret på återställningsfunktionen () till den aktuella variabeln för vidare arbete med den nuvarande
=
ds
.
återställa
();
ds
.
Välj
(
addr
);
// Välj om sensorn efter dess adress, eftersom det fanns en återställningspuls // Kommandot 0xBE, enligt den tekniska dokumentationen, gör det möjligt att läsa det interna minnet // i temperatursensorn (Scratchpad), som består av 9 byte. ds
.
skriva
(
0xBE
);
// Läs och visa 9 byte från temperaturgivarens interna minne Serial till portmonitorn
.
skriva ut
(
"Data ="
);
Serie
.
skriva ut
(
närvarande
,
HEX
);
Serie
.
skriva ut
(
» «
);för(
i
=
0
;
i
<
9
;
i
++){
data
[
i
]=
ds
.
läsa
();
Serie
.
skriva ut
(
data
[
i
],
HEX
);
Serie
.
skriva ut
(
» «
);}
// Kontrollera och mata ut till porten övervaka kontrollsumman för den mottagna datan Serial
.
skriva ut
(
"CRC ="
);
Serie
.
skriva ut
(
OneWire
::
crc8
(
data
,
8
),
HEX
);
Serie
.
tryckln
();
// Starta processen för att konvertera mottagen data till den faktiska temperaturen // som lagras i 0 och 1 byte läsminne. För att göra detta kombinerar vi dessa två // byte i ett 16-bitars nummer int16_t raw
=(
data
[
1
]<<
8
)|
data
[
0
];
// Innan ytterligare konvertering måste du definiera familjen till vilken // den här sensorn tillhör (tidigare sparade vi resultatet i typ_s-variabeln). // Beroende på familjen kommer temperaturen att beräknas annorlunda, // eftersom DS18B20 och DS1822 returnerar ett 12-bitarsvärde, medan DS18S20 returnerar ett 9-bitarsvärde
om(
typ_s
){
// Om sensorn tillhör DS18S20 råfamiljen
=
rå
<<
3
;
// standardupplösning är 9 bitar
om(
data
[
7
]==
0x10
){
rå
=(
rå
&
0xFFF0
)+
12
—
data
[
6
];}}annan{
// Bestäm vilken mätnoggrannhet denna sensor är konfigurerad byte cfg
=(
data
[
4
]&
0x60
);
// Vid lägre upplösningar kan du nollställa de minst betydande bitarna, // eftersom de inte definieras tidigt
om(
cfg
==
0x00
)
rå
=
rå
&~
7
;
// 9 bitar (konvertering tar 93,75 ms)
annanom(
cfg
==
0x20
)
rå
=
rå
&~
3
;
// 10 bitar (konvertering tar 187,5 ms)
annanom(
cfg
==
0x40
)
rå
=
rå
&~
1
;
// 11 bitar (konvertering tar 375 ms) // Standardprecisionen är 12 bitar (konvertering tar 750 ms)
}
// Beräkna och mata ut temperaturvärden till celsius-portmonitorn
=(
flyta
)
rå
/
16.0
;
fahrenheit
=
celsius
*
1.8
+
32.0
;
Serie
.
skriva ut
(
"Temperatur ="
);
Serie
.
skriva ut
(
celsius
);
Serie
.
skriva ut
(
"Celsius,"
);
Serie
.
skriva ut
(
fahrenheit
);
Serie
.
tryckln
(
"Fahrenheit"
);}
Om allt görs korrekt ska vi se något av följande i bildskärmsfönstret (Figur 6):
Figur 6 - resultatet av arbetet med OneWire.h-biblioteket
DallasTemperature.h-biblioteket
Detta bibliotek är baserat på det tidigare och förenklar programmeringsprocessen lite på grund av mer förståeliga funktioner. Efter installationen har du tillgång till 14 exempel på väldokumenterad kod för alla tillfällen. Inom ramen för denna artikel kommer ett exempel på användning med en sensor att övervägas.
Resultatet av programmet visas i figur 7
Figur №7 - resultatet av avläsning av temperaturen med hjälp av biblioteket DallasTemperature.h
// Vi ansluter de nödvändiga biblioteken # inkluderar # inkludera // Vi ansluter databussen till stift nr 2 i Arduino # definiera ONE_WIRE_BUS 2 // Skapa en instans av klassen för vår buss och en länk till den OneWire oneWire
(
ONE_WIRE_BUS
);
Dallas-temperatursensorer
(&
oneWire
);
// PRESET FUNCTION void setup
(
tomhet
){
Serie
.
Börja
(
9600
);
// Initiera sensorer för seriell port
.
Börja
();
// Initiera bussen
}
// Huvudcykel
(
tomhet
){
Serie
.
skriva ut
(
"Läsningstemperatur ..."
);
// Skicka kommandot för att läsa sensorer
.
requestTemperatures
();
Serie
.
tryckln
(
"Läsa"
);
Serie
.
skriva ut
(
"Sensortemperatur 1:"
);
// Visa temperaturvärdet Serial
.
skriva ut
(
sensorer
.
getTempCByIndex
(
0
));}
Temperaturgivare KY-001 med 1-tråds gränssnitt
Denna sensor används för noggrann temperaturmätning. Kommunikation med sensorn sker via 1-trådsgränssnittet [1-2], vilket gör att du kan ansluta flera liknande enheter till Arduino-kortet med en mikrocontrollerstift [3-4]. Modulen baseras på mikrokretsen ds18b20 [5].
Modulstorlek 24 x 15 x 10 mm, vikt 1,3 g. En anslutning med tre stift används. Central kontakt - strömförsörjning + 5V, kontakt "-" - gemensam, kontakt "S" - informativ.
Tavlan har en röd lysdiod som tänds när information utbyts.
Strömförbrukning 0,6 mA under informationsutbyte och 20 μA i standby-läge.
Anslutning av denna typ av sensorer till Arduino beskrivs väl i många källor [6-8]. I det här fallet manifesteras de viktigaste fördelarna med Arduino igen - mångsidighet och närvaron av en enorm mängd referensinformation. För att arbeta med sensorn behöver du OneWire-biblioteket [9]. Efter att ha laddat programmet från [8] (det finns ett fel i den första versionen av programmet - det finns ingen #include-biblioteksanslutning i kodhuvudet) kan följande information observeras i seriell portmonitor.
Författaren testade också koden från [7], allt fungerade direkt, i seriell portmonitor kan du läsa information om typen av den anslutna sensorn och de faktiska temperaturdata.
I allmänhet en mycket användbar sensor som gör det möjligt att bekanta sig med 1-tråds gränssnittet i praktiken. Sensorn ger direkt temperaturdata direkt, användaren behöver inte kalibrera.