Temperatur Niveau

Fra Holstebro HTX Wiki
Skift til: navigering, søgning
Billede af temperatur sensor på rødt print

Med denne temperatur sensor er det muligt for et kredsløb at mærke temperaturen. Dette kan ske med både digital output(DO) og analogt output(AO). Med digitalt output forstås der, at der udsendes enten en høj eller lav spænding alt efter om temperaturen overstiger en defineret temperatur eller ej. Den definerede temperatur kan man justere på det påmonterede potentiometer ved at dreje på skruen. Hvis man vælger analog output, vil modulet give en spænding, der er afhængig af temperaturen.

Teorien bag modulets måling af temperatur

Temperatur sensoren er baseret på, at en type variabel modstand kaldet en termistor(den sorte knop i enden af modulet), har en elektrisk modstand som er afhængig af temperaturen omkring den(meget mere end almindelige modstande). Ved at kende til nogle bestemte specifikationer fra termistorens datablad, kan man opstille en funktion, der udtrykker temperaturen som funktion af modstanden over den. Denne funktion tager udgangspunkt i Steinhart-Hart ligningen:

Stainharhart.jpg

Hvor T er temperaturen i grader kelvin(K) og R er modstanden i antal ohm(Ω). A, B og C er de tre såkaldte Steinhart-Hart parametre som kan oplyses i databladet for den pågældende termistor.

Der findes desuden forskellige typer termistorer, bl.a. PTC(positiv temperatur koefficient) og NTC(negativ temperatur koefficient). Som navnet antyder er forskellen den, at en PTC termistor øger sin modstand når temperaturen øges, mens en NTC termistor sænker sin modstand når temperaturen øges. Grundet forskellen på de to typer, kan man bruge en simplere version af Steinhart-Hart ligningen når der er tale om en NTC termistor som det er tilfældet med dette temperatur-modul. Ligningen ser ud som følgende:

Stainharhartsimpeltal.jpg

Hvor T er temperaturen i grader kelvin(K) og R er modstanden i antal ohm(Ω), mens R0 er modstanden ved temperaturen T0(10KΩ ved 25C(298,15K)).Ligningen er i bund og grund den samme som før, men her ses der bort fra A og C parametrene, hvor C i stedet sættes til 0 og B sættes til sin reciprokke værdi, mens A parameteren sættes som følgende:

Stainharhartsimpel.jpg

Det ses, at vi altså nu kun behøver at kende termistorens B parameter for at kunne få et udtryk for temperaturen som funktion af modstanden. B parameteren for termistoren i dette modul er målt til 1315K (kelvin), hvilket giver følgende funktion:

Stainharhartsimpeltalogparameterere.jpg
Tempresfunktion.jpg

Hvor "Res" er modstanden over termistoren. Afbildet i et koordinatsystem med temperaturen i Kelvin op ad y-aksen og modstanden over termistoren hen ad x-aksen:

Stainharthartgrafkelvin.jpg

Og tilsvarende i grader celsius:

Tempresfunktion2.jpg
Stainharthartgrafcelsiuss.jpg

Det ses altså at forholdet mellem temperatur og modstand ikke er lineært som det er tilfældet med mange andre temperatursensorer. Dog er det muligt blot at betrakte forholdet som lineært, for at gøre beregningerne nemmere, hvis man kun opererer inde for et lille begrænset temperaturområde (dette er beskrevet i afsnittet om anvendelsen af modulet).

Termistor symbol

Temperatur modulets kredsløb

Temperatur modulet er mere kompliceret opbygget end blot en spændingsdeler med en termistor som variabel modstand. Dette skyldes at modulet har to forskellige funktioner som beskrevet tidligere. Disse funktioner inkluderer digitalt output(DO) og analog output(AO). Analogt output går ud på at sende en spænding ud som afhænger af temperaturen, mens den digitale output enten er højt eller lavt afhængig af om temperaturen overstiger en defineret temperatur eller ej. Denne funktion kræver en IC (den 8-benede IC) samt nogle få andre elektriske komponenter til at få den til at spille sammen med potentiometeret til bestemmelse af en defineret temperatur.

Kredsløbet er beskrevet under justerbare analoge og digitale moduler.

Anvendelse af temperatur modulet

De følgende to afsnit vil forklare, hvordan man bruger dette modul til bestemmelse af temperaturen. Det første afsnit omhandler brugen af digital out funktionen til f.eks. at få en LED lysdiode til at lyse, når temperaturen overstiger en bestemt temperaturværdi(vha. PIC16F684). Det andet afsnit omhandler brugen af analog out funktionen til nærmere at kunne bestemme den specifikke temperatur med en PIC16F684 mikrocontroller med ADC_holst modullet til AD-konvertering.

Bestemmelse af temperatur med digital out(DO)

Temperatur sensor kredsløb eksempel med DO

Det er en forholdsvis smal sag at bestemme temperaturen med modulets digital out funktion. Den bestemmer reelt set ikke temperaturen, men blot om den er over eller under den definerede temperatur. Hvis temperaturen er OVER vil digital udgangen være HØJ. Hvis temperaturen er UNDER vil udgangen være LAV. Med dette kan man derfor betrakte udgangen som en ON/OFF kontakt der med kredsløbet til højre, vil få en PIC(16F684) til at indikere med en LED lysdiode. Modulet er forsynet med 5V på plus-indgangen og stel er fordbundet til G-indgangen(GND). Af de to udgange, digital og analog, er det den digitale udgang vi bruger her. Denne udgang er forbundet med en input-pin på mikrocontrolleren(C2). Modstanden R2 på 100KΩ fungerer som en pull-down modstand der sikrer et stabilt signal i mikrocontrollerens indgang. Mikrcontrolleren er hermed programmeret til at udsende et højt signal på dens udgang C3 som gøt, at LED lysdioden lyser. Modstanden R1 på 100Ω fungere som formodstand til LED lysdioden.

Den definerede temperatur kan som sagt bestemmes ved at dreje op den lille skrue, der er placeret på potentiometeret(blå boks). For at få et brugbart system med denne metode, anbefales det at modulet befinder sig i den ønskede temperatur, hvorved skruen drejes indtil lige før modulet reagerer. Hermed er den definerede temperatur sat til temperaturen rundt om modulet.

Nedestående program til mikrocontrolleren PIC16F684 ville fungere som styringen til det omtalte kredsløb. Detaljeret gennemgang af koden er indlejret som kommentarer (markeret ved "--"):

  -- Definering af mikrocontroller
  include 16f684
 
  -- Opsætning
  pragma target clock 4_000_000
  pragma target WDT DISABLED
  pragma target OSC INTOSC_NOCLKOUT
  pragma target PWRTE ENABLED
  pragma target MCLR INTERNAL
  pragma target CP DISABLED
  pragma target CPD DISABLED
  pragma target BROWNOUT ENABLED
  pragma target IESO DISABLED
  pragma target FCMEN DISABLED

  -- Importer "delay"-modulet
  include delay

  -- Aktiver de digitale PIC-ind/udgange
  enable_digital_io()
  
  -- Gør de digitale ind/udgange til udgange
  portc_direction = all_output

  -- Definer en variabel "temp" til at være pin_C2
  alias   temp is pin_C2
  
  -- Gør pin_C2 til digital indgang
  pin_C2_direction = input
  
  -- Følgende program vil blive udført for evigt
  forever loop: -- Start forever loopet
    if temp then: -- Hvis variablen "temp" er HIGH sker følgende
      pin_C3 = HIGH -- Udgangen C3 sættes til HIGH
    else -- Hvis ovenstående if-sætning ikke opfyldes sker følgende
      pin_C3 = LOW -- Udgangen C3 sættes til LOW
    end if -- Afslut if-sætningerne
  end loop -- Afslutning på forever-loopet

Bestemmelse af temperatur med analog out(AO)

Temperatur sensor kredsløb eksempel med AO

Med analog output funktionen vil man i modsætning til digital output, reelt set kunne bestemme temperaturen i antal grader (celsius f.eks.). Dette bygger på termistor teorien som den beskrives i afsnittet "Teorien bag modulets måling af temperatur". Kreds-eksemplet til højre viser anvendelse af analog out (AO) til bestemmelse af temperaturen.

Programmet som styrer PIC'en benytter sig af 4 LED lysdioder til at indikere i hvilket interval temperaturen befinder sig. Dette sker ved at PIC'en sender et højt signal ud af en af udgangene C0, C1, C3 eller C4. Modstanden R3 på 100Ω fungere som fælles modstand for de 4 LED dioder. Indgangen C2 fungerer som analog indgang, hvor modulet ADC_holst konverterer det analoge signal til digital værdi i PIC'en (til AD-konvertering bruges ADC_holst til PIC16F684 eller PIC16F690, ellers bruges modulet ADC) Man kunne også lave et system der giver den nøjagtige måling som temperatur-modulet leverer med en LCD skærm eller lign.

Nedestående program til mikrocontrolleren PIC16F684 ville fungere som styringen til det omtalte kredsløb. Detaljeret gennemgang af koden er indlejret som kommentarer (markeret ved "--"):

-- Definering af mikrocontroller
include 16f684

-- Opsætning
pragma target clock 4_000_000
pragma target WDT DISABLED
pragma target OSC INTOSC_NOCLKOUT
pragma target PWRTE ENABLED
pragma target MCLR INTERNAL
pragma target CP DISABLED
pragma target CPD DISABLED
pragma target BROWNOUT ENABLED
pragma target IESO DISABLED
pragma target FCMEN DISABLED

-- Importer "delay"-modulet
include delay

-- Definerer VDD(5V) som referenceværdien
const byte ADC_NVREF = 0

-- Importer "ADC_Holst"-modulet
include ADC_Holst

-- Aktiver de digitale PIC-ind/udgange
enable_digital_io()

-- Gør de digitale ind/udgange til udgange
portc_direction = all_output

-- Variabler til programmet:

-- Kanal 6 svarer til pin_C2 på PIC'en 16f684
var byte kanal = 6

-- Definerer en variabel der tildeles en værdi senere
var word temp

-- Følgende 3 variabler skal definere intervalerne:
var word x1 -- Definerer en bestemt værdi fra 0 til 1023
var word x2 -- Definerer en bestemt værdi fra 0 til 1023
var word x3 -- Definerer en bestemt værdi fra 0 til 1023

-- Følgende program vil blive udført for evigt
forever loop
    -- Returnerer en værdi fra 0 til 1023
    temp = adc_read(kanal)
    if (temp > x1) & (temp < x2) then
        -- Hvis temperaturen er indenfor det valgte interval
        -- defineret af x1 og x2, sker følgende
        pin_C0 = HIGH -- Udgangen C0 sættes til HIGH
        pin_C1 = LOW -- Udgangen C1 sættes til LOW
        pin_C3 = LOW -- Udgangen C3 sættes til LOW
        pin_C4 = LOW -- Udgangen C4 sættes til LOW
    elsif (temp => x2) & (temp < x3) then
        -- Hvis temperaturen er indenfor det valgte interval
        -- defineret af x2 og x3, sker følgende
        pin_C0 = LOW -- Udgangen C0 sættes til LOW
        pin_C1 = HIGH -- Udgangen C1 sættes til HIGH
        pin_C3 = LOW -- Udgangen C3 sættes til LOW
        pin_C4 = LOW -- Udgangen C4 sættes til LOW
    elsif temp <= x1 then
        -- Hvis temperaturen er lavere end x1 sker følgende
        pin_C0 = LOW -- Udgangen C0 sættes til LOW
        pin_C1 = LOW -- Udgangen C1 sættes til LOW
        pin_C3 = HIGH -- Udgangen C3 sættes til HIGH
        pin_C4 = LOW -- Udgangen C4 sættes til LOW
    elsif temp >= x3 then
        -- Hvis temperaturen er højere end x3 sker følgende
        pin_C0 = LOW -- Udgangen C0 sættes til LOW
        pin_C1 = LOW -- Udgangen C1 sættes til LOW
        pin_C3 = LOW -- Udgangen C3 sættes til LOW
        pin_C4 = HIGH -- Udgangen C4 sættes til HIGH
    end if -- Afslutter if-sætningerne
    delay_100ms(1) -- Giver en forsinkelse på 100ms
end loop -- Afslutter forever-loopet


Moduler på Holstebro HTX
Tastaturer Displays AD-konvertering I/O-ekspander Serielt Interface Færdige Andre
RC-tast - AD-tast - M_tast ALCD - LCD ADC_holst - ADC
mcp3201 - mcp3208
input - output Seriel_holst - Serial hardware
Serial hw int cts - Serial software
Stepmotor - RFID
RGB - RF-link - Afstand
Humidity - Analog temp - Dig temp
Accelerometer
Rotary Encoder

Oversigt over Hardware Moduler på Holstebro HTX

Keyes-moduler på Holstebro HTX
Simple Digitale Digitalt kodede 5 benede
Switch modul - Reedrør - Hall sensor - Optisk Skift - Photo Gate
Vibration sensor - Vibration switch - Tilt sensor - Kviksølv kontakt - Linje følger
IR Modtager - Humidity
Digital Temperatur
Rotary Encoder
XY Joystick
digitale 4 benede Justerbare analoge/digitale Simple digitale Analoge input
Magic Cup Light
LED 3-farve - RGB
RF-link - Afstand
Reed Magnetsensor - Temperatur Niveau
Metal detektor - Flamme - Hall Kontakt
Almindelig Mikrofon - Følsom Mikrofon
LED 2-farve - Aktiv Buzzer
Blink LED - IR LED - Laser
Relæ modul - Passiv Buzzer
Analog Temperatur
LDR - Finger Pulsmåler
Lineær Magnetfelt