Enkel trådlös temperatursensor uppdatera webbplatsen med elektriska imp och termistor (9 / 21 steg)
Steg 9: skapa klassen sensor
Denna klass kan användas för något av de Vishay termistorer som har fyra konstanterna för användning med utökade Steinhart – Hart ekvationen.
Not om koden i detta instructable. Jag satte en tagg < koden börja > och en < code >. Du bör kopiera/klistra in bara delarna mellan dessa taggar och inte taggarna själva.
< koden börja >
klass ThermistorCelcius
{
analogPort = null; blir tilldelade hårdvara pin
ROhms = null; Motstånd motstånd i ohm
RRef = null; Termistorer motståndet vid 25C
variabler att hålla konstanterna specifika för termistor
för Steinhart – Hart ekvation
A = null;
B = null;
C = null;
D = null;
Värde att säga om den termistor sidan av den
termistor/motstånd Spänningsavdelare är ansluten till GND
ThermToGND = null;
konstruktören)
hamn, / / pin-nummer termistor ansluten till
ResistorOhms, / / motstånd värde i ohm
ThermistorOhms, / / termistor motstånd @ 25 ° C i ohm
constA, / / konstant som tillhandahålls från datablad
constB, / / konstant som tillhandahålls från datablad
constC, / / konstant som tillhandahålls från datablad
constD, / / konstant som tillhandahålls från datablad
thermistorToGND) / / 1 om termistor sida = GND
{
Konstruktören av en klass som kallas när klassen är
initierat. Dess variabler skickas till klassen på detta
tid.
ROhms = ResistorOhms;
RRef = ThermistorOhms;
A = constA;
B = constB;
C = constC;
D = constD;
ThermToGND = thermistorToGND;
Ska kunna använda samma klass
oavsett port.
Switch (port)
{
fall 1:
Hardware.PIN1.configure(ANALOG_IN);
analogPort = hardware.pin1;
bryta;
fall 2:
Hardware.PIN2.configure(ANALOG_IN);
analogPort = hardware.pin2;
bryta;
fall 5:
Hardware.pin5.configure(ANALOG_IN);
analogPort = hardware.pin5;
bryta;
fall 7:
Hardware.pin7.configure(ANALOG_IN);
analogPort = hardware.pin7;
bryta;
mål 8:
Hardware.pin8.configure(ANALOG_IN);
analogPort = hardware.pin8;
bryta;
mål 9:
Hardware.pin9.configure(ANALOG_IN);
analogPort = hardware.pin9;
bryta;
standard:
Server.log (ogiltig-port angavs.");
bryta;
}
}
funktion readTemp()
{
få den nuvarande spänningen imp använder som Vref för den
analog till digital konvertering
lokala hwvolts = hardware.voltage();
Utföra en analog till digital konvertering och lagra 16
bitarsvärde
lokala data = analogPort.read();
om (data == null) / / om vi inte fick något,
{
Server.log ("Read misslyckanden"); rapportera ett fel
returnera false; och returnera false
}
konvertera numret från ADC till en spänning
lokala spänning = data * (hwvolts / 65535);
beroende på hur du fast den 3.3V och GND på den
Motstånd/termistor spänningsavdelare, Välj den
lämplig formel för att beräkna motstånd
Termistor.
lokala ohm = null;
om (ThermToGND == 1)
används med resistor på 3,3 v och termistor på GND
ohm = ROhms/((hwvolts/voltage)-1);
annat
används med resistor på GND och termistor på 3,3 v
ohm = ((ROhms * hwvolts)/spänning)-ROhms;
Vi kommer att använda en utökad Steinhart – Hart ekvation att
beräkna temperaturen baserat på den beräknade
motståndet av termistor. Kommer vi att inkludera de
konverteringsfaktor från Kelvin till Celsius
lokala tempC = 1,0 / (A + B * math.log(ohms/Rref) +
C * math.pow(math.log(ohms/Rref), 2) +
D * math.pow(math.log(ohms/Rref), 3)) - 272.15;
återvända tempC; och tillbaka temperaturen
}
}
< code slut >