Il Set comprende due di questi moduli. Entrambi i moduli utilizzano lo stesso conduttore termico. Uno di questi, tuttavia, ha anche un comparatore che, in funzione della regolazione del potenziometro a una determinata temperatura, azzera L'uscita digitale. Amm uscita analogica è disponibile praticamente lo stesso segnale del semplice sensore.
Sensore Semplice
Sensore con comparatore
Curva caratteristica
L'NTC è una resistenza che riduce la resistenza al riscaldamento. Per misurare le temperature con il NTC e non solo a una determinata temperatura, è necessaria la linea di riferimento. Il diagramma mostra il valore di resistenza in kOhm (blu) e il valore basale (1024) letto con analogRead (rosso).);
La tensione di Uscita è lineare in modo discontinuo per mezzo del Divisore di tensione utilizzato.
Determinazione della curva di correzione:
Con un circuito semplice, possiamo cercare di individuare una curva di correzione. A tal fine utilizzeremo il semplice sensore a caldo e il DS18B20 come riferimento. Colleghiamo le PIN medie di entrambi i moduli con +5V sull'Arduino e i – pin di entrambi i moduli con la BND. Colleghiamo il Pin S del modulo NTC con A0 e il Pin s del modulo DS18B20 con D2. Per raggiungere la stessa temperatura per entrambi i sensori, colleghiamo questi come l'immagine che segue.
Ora carichiamo il seguente programma Sull'Arduino. E colleghiamo il Pin 8 sull'Arduino a Ground per bloccare l'edizione.
* Scalette calde e testate
* Come riferimento si usa un sensore del tipo DS18B20
*/
#include < OneWire.h>
#include <temperature del DALLAST.h>
// Collegamenti
const byte ds18b20 = 2; // sensore di riferimento
const byte sensor = 0; // sensore da tarare
const byte edizione = 8; // Entrata per sopprimere l'edizione.
const byte led = 13; // messled
// istanze di riferimento sensore DS18B20
OneWire oneWire (ds18b20));
Sensori a temperatura elevata (& oneWire));
DeviceAddress CDR;
//per memorizzare i dati di correzione creiamo una classe
class Korr {
pubblico:
int minval; //Valore iniziale di validità
int maxval; // Valore finale della validità
fattore float; //Fattore di correzione
float delta; // Offset relativo
temperatura variabile (int val)) {
float temp = float (val) * fattore + delta;
return temp;
}
};
// variabili globali
Curva di Korr [20]; // Array con correzione
byte numero = 0; // Numero di correzioni esistenti
byte misura = 1;
float = 0; // valore attuale indicativo
int sens = 0; // valore attuale del sensore
float sollalt = 0; // ultimo valore indicativo
float sens_alt = 0; // ultimo valore del sensore
void setup() {
/avvia l'interfaccia
Seriale.begin(115200);
// Prepara il sensore di riferimento
sensori.begin();
sensori.(adr, 0);
// Dissoluzione a 10 bit;
sensori.setResolution (CDR, 10);
//output per led
pinMode(led, OUTPUT));
pinMode(output, INPUT_PULLUP));
misura = 1; /siamo in modalità misurazione
// una misurazione per i valori di partenza
Seriale.println ("inizio analisi");
valori misurati();
soll_alt = dovrebbe;
sens_alt = sens;
}
// funzione di lettura dei valori misurati
misurazione void(){
// Richiedere il valore di riferimento
sensori.temperature di Request();
// e leggere dal saggio
//poiché la tensione diminuisce con L'aumentare della temperatura
//invertiamo il valore sottraendolo dal valore massimo
sens = 1024-analogead (sensore));
// Leggere il valore di riferimento
SEF = sensori.(Comitato delle regioni));
}
void loop() {
// indicare le condizioni
write digitale (led,misura));
// valori
valori misurati();
if (misura) {
// stiamo verificando se abbiamo raggiunto una certa differenza
// Capo a 5 °C
if ((soll_alt) >= 5) {
Seriale.print("calcolo per: ");
Seriale.print);
Seriale.println ("°C");
curva [numero].minval = sens_alt;
curva [numero].maxval = sens;
fattore float = (soll_alt)/float (sens-sens_alt);
curva [numero].fattore = fattore;
curva [numero].delta = valore obiettivo (sens * fattore);
soll_alt = dovrebbe;
sens_alt = sens;
numero++;
}
if (so > 50) {
misura = 0;
Seriale.println ("analisi completata");
for (byte I = 0; I< Numero; i++) {
Seriale.print [curva [i].minval);
Seriale.print(" - ");
Seriale.print [curva [i].maxval);
Seriale.print(" - ");
Seriale.print [curva [i].fattore);
Seriale.print(" - ");
Seriale.println [curva [i].delta);
}
delay (5000);
}
# else {
byte I = 0;
if (sens > curva[0].minval) {
while [(sens > curva [i].maxval) && (i< Numero) i++;
}
if [digitalRead (output)=1)
{
/ * Utile per verificare la funzione
Seriale.print ("trovato: Min = ");
Seriale.print [curva [i].minval);
Seriale.print ("Max= ");
Seriale.print [curva [i].maxval);
Seriale.print ("fatto= ");
Seriale.print [curva [i].fattore);
Seriale.print ("Delta= ");
Seriale.print [curva [i].delta);
Seriale.print ("sensore= ");
Seriale.println (sens));
*/
float è = curva [i].temperatura (sens));
Seriale.print ("valori misurati: Soll = ");
Seriale.print);
Seriale.print ("Ist= ");
Seriale.print (è);
Seriale.print ("deviazione= ");
Seriale.println);
}
delay (1000));
}
Dopo il decollo, il programma è in modalità Analisi, ossia ogni volta che la temperatura è aumentata di 5 °C, la pendenza e L'Offset sono calcolate e memorizzate in una tabella. Ciò avviene fino a quando la temperatura non supera i 50 °C.
Il cambiamento di temperatura è più facile da ottenere con un asciugacapelli. Tuttavia, è importante evitare che il riscaldamento avvenga troppo rapidamente, poiché i due sensori presentano una diversa inerzia.
Quando si raggiunge una temperatura di 50 °C, si visualizza il contenuto della curva di correzione sul Monitor seriale. D'ora in poi, il valore nominale, il valore effettivo e la deviazione possono essere visualizzati. Poiché L'indicatore è stato soppresso (Pin 8) per poter vedere i risultati Dell'analisi, è necessario separare il Pin 8 dalla GND.
I miei tentativi non mi hanno soddisfatto. Il cambiamento di temperatura durante l'analisi potrebbe essere stato troppo rapido.
Goditi la sperimentazione.