Stap 9: de sensor-klasse maken
Deze klasse kan worden gebruikt voor elke waarde uit de reeks Vishay van thermistors moeten de vier constanten voor gebruik met de uitgebreide Steinhart – Hart-vergelijking.
Let op code in dit instructable. Ik zette een tag < code beginnen > en een < code >. U moet kopieer/plak alleen de onderdelen tussen deze tags en niet de codes zelf.
< code beginnen >
klasse ThermistorCelcius
{
analogPort = null; wordt de hardware-pin toegewezen
ROhms = null; Weerstanden weerstand in ohm
Rref = null; Thermistors weerstand bij 25C
variabelen te houden van de constanten die specifiek zijn voor de thermistor
voor de vergelijking Steinhart-Hart
A = null;
B = null;
C = null;
D = null;
Waarde te zeggen als de thermistor kant van de
thermistor/weerstand voltage divider is verbonden met GND
ThermToGND = null;
constructor)
poort, / / pin nummer thermistor aangesloten op
ResistorOhms, / / de waarde van de weerstand in ohm
ThermistorOhms, / / thermistor weerstand @ 25C in ohm
Openen, / / constante voorzien van gegevensblad
constB, / / constante voorzien van gegevensblad
constC, / / constante voorzien van gegevensblad
constD, / / constante voorzien van gegevensblad
thermistorToGND) / / 1 indien thermistor kant = GND
{
De constructor van een klasse wordt aangeroepen wanneer de klasse is
ingeleid. De variabelen worden doorgegeven aan de klasse op dit
tijd.
ROhms = ResistorOhms;
Rref = ThermistorOhms;
A = openen;
B = constB;
C = constC;
D = constD;
ThermToGND = thermistorToGND;
Een methode om het gebruik van dezelfde klasse te kunnen bieden
ongeacht de poort.
schakelaar (poort)
{
Case 1:
hardware.PIN1.configure(ANALOG_IN);
analogPort = hardware.pin1;
breken;
Case 2:
hardware.PIN2.configure(ANALOG_IN);
analogPort = hardware.pin2;
breken;
Case 5:
hardware.pin5.configure(ANALOG_IN);
analogPort = hardware.pin5;
breken;
Case 7:
hardware.pin7.configure(ANALOG_IN);
analogPort = hardware.pin7;
breken;
zaak 8:
hardware.pin8.configure(ANALOG_IN);
analogPort = hardware.pin8;
breken;
Case 9:
hardware.pin9.configure(ANALOG_IN);
analogPort = hardware.pin9;
breken;
standaard:
server.log ('ongeldig poort opgegeven.');
breken;
}
}
functie readTemp()
{
krijgen van de huidige spanning het GMB gebruikt als Vref voor de
analoog naar digitaal conversie
lokale hwvolts = hardware.voltage();
Een analoog naar digitaal conversie uit te voeren en op te slaan van de 16
bitwaarde
lokale gegevens = analogPort.read();
Als (gegevens == null) / / if we iets Get didn't,
{
server.log ("Read failure"); een mislukking rapporteren
return false; en het resultaat false
}
het nummer van de ADC omzetten in een spanning
lokale spanning = data * (hwvolts / 65535);
afhankelijk van hoe u de 3,3 v en GND bedraad op de
Weerstand/Thermistor voltage divider, selecteer de
geschikte formule voor het berekenen van de weerstand van
de Thermistor.
lokale Ohm = null;
Als (ThermToGND == 1)
gebruikt in combinatie met de weerstand op 3,3 v en thermistor op GND
Ohm = ROhms/((hwvolts/voltage)-1);
anders
gebruikt in combinatie met de weerstand op de GND en thermistor op 3,3 v
Ohm = ((ROhms * hwvolts)/voltage)-ROhms;
We gonna een uitgebreide vergelijking van de Steinhart – Hart te gebruiken
berekenen van de temperatuur op basis van de berekende
weerstand van de thermistor. We zullen ook de
conversiefactor van Kelvin naar Celsius
lokale 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;
Return tempC; en de temperatuur terug te keren
}
}
< code einde >