De set bevat twee van dergelijke modules. Beide modules maken gebruik van dezelfde hete geleider. Een van hen, echter, heeft ook een comparator die, afhankelijk van de potentiometer instelling op een bepaalde temperatuur, zet de digitale output op nul. Amm Analoge uitgang is vrijwel hetzelfde signaal als de eenvoudige sensor.
Eenvoudige sensor
Sensor met vergelijkingsmeter
Karakteristiek
De NTC is een weerstand die de weerstandswaarde verlaagt bij verhitting. Om de temperatuur met de NTC te meten en niet alleen bij een bepaalde temperatuur te schakelen, heb je de karakteristieke curve nodig. Het diagram toont de weerstandswaarde in kOhm (blauw) en (1024 - initiële waarde) gelezen met analogRead (rood);
Men kan door de gebruikte voltageverdeler zien, is de outputspanning stuk voor stuk lineair.
Bepaling van een correctiecurve:
Met een eenvoudig circuit kunnen we proberen een correctiecurve te bepalen. Hiervoor gebruiken we de eenvoudige hot conductor sensor en de DS18B20 als referentie. We verbinden de middelste pinnen van beide modules met +5V op de Arduino en de pinnen van beide modules met GND. We verbinden de S-pin van de NTC module op A0 en de S-pin van de DS18B20 module op D2. Zodat we dezelfde temperatuur krijgen voor beide sensoren, verbinden we ze als de volgende afbeelding laat zien.
Laten we nu het volgende programma uploaden naar de Arduino. En sluit de pin 8 op de Arduino aan met Ground om de output te stoppen.
* Hete geleider en vervolgens test ze
* Een DS18B20 sensor wordt gebruikt voor referentie
*/
#include <OneWire.h>
#include <DallasTemperature.h>
Verbindingen
const byte ds18b20 = 2; referentiesensor
const byte sensor = 0; sensor te eiken
const byte output = 8; invoer om de uitvoer te onderdrukken.
const byte led = 13; messled
exemplaren voor referentiesensor DS18B20
OneWire oneWire(ds18b20);
DallasTemperature sensoren(&oneWire);
DeviceAddress adr;
om de correctiegegevens op te slaan, creëren we onze eigen klasse
klasse Korr
Openbare:
int minval; Initiële waarde van de geldigheid
int maxval; Eindwaarde van de geldigheid
floatfactor; Correctiefactor
floatdelta; relatieve verschuiving
floattemperatuur(int val)
float temp = float(val) * factor + delta;
terugkeer temp;
}
};
globale variabelen
Corrcurve [20]; Array met correctiewaarden
bytenummer = 0; Aantal bestaande correctiewaarden
bytemeting = 1;
vlotter moet = 0; Huidig setpoint
int sens = 0; huidige sensorwaarde
zweven soll_alt = 0; laatste setpoint
zweven sens_alt = 0; laatste sensorwaarde
nietig instellen()
opstarten van een seielle interface
Serial.begin(115200);
Een referentiesensor voorbereiden
sensoren.begin();
sensors.getAddress(adr, 0);
Oplossen tot 10 bits;
sensoren.setResolution(adr, 10);
output voor led
pinMode(led, OUTPUT);
pinMode (uitvoer, INPUT_PULLUP);
meting = 1; we zijn in mess mode
meting voor de beginwaarden eenmaal
Serial.println("Start Analyse";
gemeten waarden();
soll_alt = moeten;
sens_alt = sens;
}
functie voor het lezen van de gemeten waarden
leegte meetbare waarden()"
Referentiewaarde aanvragen
sensors.requestTemperaturen();
en lees uit het proefvak
als de spanning afneemt met stijgende temperatuur
laten we de waarde omkeren door deze af te trekken van de maximale waarde
sens = 1024-analogRead(sensor);
De referentiewaarde lezen
= sensors.getTempC(adr);
}
loop()
Status weergeven
digitalWrite(led,meting);
waarden bepalen
gemeten waarden();
als (meting)
we controleren of we een bepaald verschil hebben bereikt
Sectie om de 5 °C
als ((moet-soll_alt) >= 5)
Serial.print("Berekening voor ");
Serial.print(moet);
Serial.println("°C";
curve[number].minval = sens_alt;
curve[number].maxval = sens;
floatfactor = (moet-soll_alt)/float(sens-sens_alt);
curve[number].factor = factor;
curve[number].delta = moet - (sens * factor);
soll_alt = moeten;
sens_alt = sens;
getal++;
}
indien (moet > 50)
meting = 0;
Serial.println("Analyse voltooid";
voor (byte i = 0; i<nummer; i++)
Serial.print(curve[i].minval);
Serial.print(" - ");
Serial.print(curve[i].maxval);
Serial.print(" - ");
Serial.print(curve[i].factor);
Serial.print(" - ");
Serial.println(curve[i].delta);
}
vertraging(5000);
}
• anders
byte i = 0;
als (sens > curve[0].minval)
((sen > curve[i].maxval) && (i<number)) i++;
}
als (digitalRead(output)==1)
{
/* Handig om de functie te controleren
Serial.print("Gevonden: Min = ");
Serial.print(curve[i].minval);
Serial.print(" Max= ");
Serial.print(curve[i].maxval);
Serial.print(" Feit= ");
Serial.print(curve[i].factor);
Serial.print(" Delta= ");
Serial.print(curve[i].delta);
Serial.print(sensor= ");
Serial.println(sens);
*/
float is = curve[i].temperatur(sens);
Serial.print("Metingen: Doel = ");
Serial.print(moet);
Serial.print(" Actueel= ");
Serial.print(is);
Serial.print(" Afwijking= ");
Serial.println(should-is);
}
vertraging(1000);
}
Na het opstarten bevindt het programma zich in de analysemodus, dat wil zeggen dat wanneer de temperatuur met 5 °C is gestegen, de helling en de verschuiving worden berekend en opgeslagen in een tabel. Dit gebeurt tot de temperatuur boven de 50 °C ligt.
De eenvoudigste manier om de temperatuur te veranderen is met een föhn. Het is echter belangrijk om ervoor te zorgen dat de verwarming niet te snel plaatsvindt, omdat de twee sensoren verschillende traagheid hebben.
Wanneer een temperatuur van 50 °C is bereikt, wordt de inhoud van de correctiecurve weergegeven op de seriële monitor. Vanaf nu kunnen setpoint, werkelijke waarde en afwijking worden weergegeven. Aangezien het display is onderdrukt (pin 8) zodat u de resultaten van de analyse bekijken, is het noodzakelijk om de pin 8 van GND te scheiden.
In mijn pogingen was ik niet tevreden met het resultaat. De temperatuurverandering kan te snel zijn geweest tijdens de analyse.
Veel plezier experimenteren.