In questo articolo, discuteremo i diversi tipi di sensori di temperatura e come possono essere utilizzati caso per caso. La temperatura è un parametro fisico che viene misurato in gradi. È una parte essenziale di qualsiasi processo di misurazione. Le aree che richiedono misurazioni accurate della temperatura includono medicina, ricerca biologica, elettronica, ricerca sui materiali e prestazioni termiche dei prodotti elettrici. Un dispositivo utilizzato per misurare la quantità di energia termica che ci consente di rilevare i cambiamenti fisici della temperatura è noto come sensore di temperatura. Sono digitali e analogici.
Principali tipi di sensori
In generale, esistono due metodi per ottenere i dati:
1. Contatto... I sensori di temperatura a contatto sono in contatto fisico con un oggetto o una sostanza. Possono essere utilizzati per misurare la temperatura di solidi, liquidi o gas.
2. Contactless... I sensori di temperatura senza contatto rilevano la temperatura intercettando parte dell'energia infrarossa emessa da un oggetto o da una sostanza e rilevandone l'intensità. Possono essere utilizzati solo per misurare la temperatura in solidi e liquidi. Non sono in grado di misurare la temperatura dei gas a causa della loro incolore (trasparenza).
Regole di selezione del sensore
Il sensore di temperatura per il riscaldamento a pavimento viene selezionato tenendo conto di caratteristiche quali potenza, tipo di rivestimento superiore, metodo di installazione e apparecchiature con funzionalità aggiuntive.
Energia
Il valore deve certamente soddisfare i requisiti e il carico del pavimento caldo. In caso contrario, il sensore non funzionerà correttamente. Quando la potenza dell'elemento riscaldante è maggiore di quella del regolatore stesso, diventa necessario installare anche un avviatore magnetico tra di loro - per evitare danni al dispositivo a causa dell'aumento del carico.
Set di funzionalità
Il pavimento caldo è controllato da un'unità elettrica, che consente di regolare il funzionamento degli elementi riscaldanti. I controller moderni hanno funzionalità come l'avvio e la diseccitazione del sistema, la regolazione delle condizioni di temperatura e l'impostazione della frequenza di collegamento e scollegamento dell'elemento riscaldante.
Facilità di utilizzo
Se pensi di non capire la programmazione, non dovresti acquistare un dispositivo complesso. Anche tenendo conto di tutte le sue funzionalità. Ad esempio, le persone anziane trovano piuttosto problematico gestire i dispositivi programmabili. Farebbero meglio a scegliere l'opzione meccanica.
Facile da collegare
La documentazione di accompagnamento per il termostato indica sempre come collegare il sensore di riscaldamento a pavimento. I terminali si trovano sul bordo su un lato della centralina. Dopo aver collegato i cavi elettrici secondo lo schema, sarà necessario verificare le prestazioni dell'impianto di riscaldamento. Per fare ciò, misurare la resistenza ai terminali del sensore di temperatura e del cavo elettrico di riscaldamento, oppure collegare un pavimento caldo e aumentare i valori di temperatura da zero all'indicatore consigliato da SNIP, cioè fino a 30 ° C.
Aspetto
Un sensore termico non dovrebbe essere solo funzionalmente comprensibile, ma anche attraente nel design. Le manopole moderne sono disponibili in una varietà di colori e forme. Puoi scegliere un'opzione che è in armonia con l'interno della stanza.
Tipi di sensori di temperatura
Esistono molti tipi diversi di sensori di temperatura.Dal semplice controllo on / off di un dispositivo termostatico a complessi sistemi di controllo dell'approvvigionamento idrico, con funzione di riscaldamento, utilizzati nei processi di coltivazione delle piante. I due principali tipi di sensori, contatto e non contatto, sono ulteriormente suddivisi in sensori resistivi, di tensione ed elettromeccanici. I tre sensori di temperatura più comunemente usati sono:
- Termistori
- Termocoppie a resistenza
- Termocoppia
Questi sensori di temperatura differiscono l'uno dall'altro in termini di parametri operativi.
Dispositivo
Questa è una termocoppia (piastra o asta) costituita da fili collegati ai terminali dell'elemento di rilevamento.
A seconda delle informazioni sulla temperatura, la resistenza della parte sensibile cambia, rispettivamente, cambia il segnale elettrico fornito al termostato. Pertanto, viene determinato il valore assoluto della temperatura del mezzo.
Esterno (sensore di temperatura esterna per riscaldamento a pavimento), di regola, si trova sotto il rivestimento del pavimento di finitura e misura i suoi indicatori di temperatura. Interno (incorporato), situato all'interno del regolatore e determina il livello di riscaldamento dell'aria.
Il design dei sensori di temperatura viene selezionato in base alle caratteristiche del sistema:
Termistore
Un termistore è un resistore sensibile che cambia la sua resistenza fisica con la temperatura. Tipicamente, i termistori sono fatti di un materiale semiconduttore ceramico come cobalto, manganese o ossido di nichel e sono rivestiti di vetro. Sono piccoli dischi piatti sigillati che reagiscono in modo relativamente rapido a qualsiasi variazione di temperatura.
A causa delle proprietà semiconduttrici del materiale, i termistori hanno un coefficiente di temperatura negativo (NTC), ad es. la resistenza diminuisce con l'aumentare della temperatura. Tuttavia, esistono anche termistori PTC la cui resistenza aumenta con l'aumentare della temperatura.
Programma termistore
Vantaggi dei termistori
- Alta velocità di risposta ai cambiamenti di temperatura, precisione.
- Basso costo.
- Maggiore resistenza nell'intervallo da 2.000 a 10.000 ohm.
- Sensibilità molto più elevata (~ 200 ohm / ° C) entro un intervallo di temperatura limitato fino a 300 ° C.
Dipendenze dalla temperatura della resistenza
La dipendenza della resistenza dalla temperatura è espressa dalla seguente equazione:
Dove A, B, C - queste sono costanti (fornite dai termini di calcolo), R - resistenza in Ohm, T - temperatura in Kelvin. Puoi facilmente calcolare la variazione di temperatura da una variazione di resistenza o viceversa.
Come si usa un termistore?
I termistori sono classificati per il loro valore resistivo a temperatura ambiente (25 ° C). Un termistore è un dispositivo resistivo passivo, quindi richiede la produzione del monitoraggio della tensione di uscita corrente. Di regola sono collegati in serie con opportuni stabilizzatori che formano un partitore di tensione di rete.
Esempio: Considerare un termistore con un valore di resistenza di 2,2 K a 25 ° C e 50 ohm a 80 ° C. Il termistore è collegato in serie con un resistore da 1 kΩ tramite un'alimentazione a 5 V.
Pertanto, la sua tensione di uscita può essere calcolata come segue:
A 25 ° C, RNTC = 2200 ohm;
A 80 ° C, RNTC = 50 ohm;
Tuttavia, è importante notare che a temperatura ambiente, i valori di resistenza standard sono diversi per i diversi termistori, poiché non sono lineari. Un termistore ha una variazione di temperatura esponenziale, e quindi una costante beta, che viene utilizzata per calcolare la sua resistenza per una data temperatura. La tensione e la temperatura di uscita del resistore sono correlate in modo lineare.
Caratteristiche dell'interfaccia di corrente a due fili nei sensori di temperatura LMT01
Fico. 4. Organizzazione dell'attuale interfaccia con LMT01
Come accennato in precedenza, per trasmettere il risultato della misurazione, l'LMT01 genera una sequenza di bit sotto forma di impulsi di conteggio della corrente. Per questo, il sensore richiede solo due cavi (Figura 4). Per convertire gli impulsi di corrente nella forma familiare ai microcircuiti digitali, in alcuni casi è possibile utilizzare un singolo resistore (ma non sempre, più su quello di seguito).
Dopo l'accensione, l'LMT01 avvia un ciclo di misurazione che dura fino a 54 ms (Figura 5). Durante questo periodo, all'uscita del sensore si forma una corrente di basso livello di 28 ... 39 μA. Segue un ciclo di trasferimento del risultato della misurazione sotto forma di impulsi di corrente con un'ampiezza di 112 ... 143 μA. Il microcontrollore ricevente deve contare questi impulsi, ad esempio utilizzando il contatore / timer incorporato. Poiché la frequenza dei segnali è di circa 82 ... 94 kHz, quindi con il numero massimo di impulsi (4095), la durata della trasmissione può raggiungere i 50 ms.
Fico. 5. Diagrammi di temporizzazione del sensore LMT01
Dal numero di impulsi contati (PC), il valore della temperatura può essere determinato secondo la formula 1:
, (1)
Pertanto, a 0 ° C, il sensore genererà circa 800 impulsi.
Sfortunatamente, l'utilizzo di una resistenza esterna non è sempre possibile a causa della limitazione della caduta di tensione minima sul sensore LMT01. Durante il ciclo di misurazione, la caduta attraverso il sensore deve essere di almeno 2,15 V. Durante il ciclo di trasmissione dei dati, la caduta di tensione può essere ridotta a 2 V. Non è difficile fare alcuni calcoli approssimativi.
Si consideri un dispositivo con una tensione di alimentazione Vdd = 3,3 V. Se si prende la caduta minima consentita attraverso il sensore pari a 2,15 V durante il ciclo di misurazione, si osserverà un segnale di non più di 1,15 V sul resistore. Per la maggior parte dei digitali controllori, l'unità logica è 0, 7 ∙ Vdd, che nel nostro caso sarà 2,31 V. Di conseguenza, l'uso di un semplice resistore risulta impossibile, poiché il microcontrollore semplicemente non "vedrà" il segnale di un unità logica. La via d'uscita da questa situazione può essere l'uso di un microcontrollore con un comparatore integrato o circuiti di conversione di livello.
Sensori di temperatura resistivi
I sensori di resistenza alla temperatura (RTD) sono realizzati con metalli rari, come il platino, la cui resistenza elettrica varia con la temperatura.
I rilevatori di temperatura resistivi hanno un coefficiente di temperatura positivo e, a differenza dei termistori, forniscono un'elevata precisione di misurazione della temperatura. Tuttavia, hanno una scarsa sensibilità. Pt100 è il sensore più ampiamente disponibile con un valore di resistenza standard di 100 ohm a 0 ° C. Lo svantaggio principale è il costo elevato.
I vantaggi di tali sensori
- Ampio intervallo di temperatura da -200 a 650 ° C
- Fornire un'uscita di corrente ad alta caduta
- Più lineare rispetto alle termocoppie e agli RTD
Componenti aggiuntivi e circuito del sensore
Oltre ai principali dispositivi a diodi, il circuito del sensore di temperatura include una serie di elementi aggiuntivi. Prima di tutto, è un condensatore che protegge il dispositivo da influenze estranee. Il fatto è che l'amplificatore operazionale è altamente sensibile agli effetti dei campi elettromagnetici alternati. Il condensatore rimuove questa dipendenza iniettando feedback negativo.
Con la partecipazione di un transistor e un diodo zener, si forma una tensione di riferimento stabilizzata. Qui vengono utilizzati resistori con una classe di precisione superiore con un valore basso del coefficiente di resistenza della temperatura. In tal modo, l'intero schema acquisisce ulteriore stabilità. In caso di possibili variazioni significative delle condizioni di temperatura, è possibile omettere le resistenze di precisione. Sono usati solo per controllare un piccolo surriscaldamento.
Termocoppia
I sensori di temperatura a termocoppia sono più comunemente utilizzati perché sono precisi, funzionano in un ampio intervallo di temperatura da -200 ° C a 2000 ° C e sono relativamente economici. Una termocoppia con un filo e una spina nella foto sotto:
Funzionamento termocoppia
Una termocoppia è composta da due metalli dissimili saldati insieme per produrre una differenza di potenziale rispetto alla temperatura. Dalla differenza di temperatura tra le due giunzioni viene generata una tensione che viene utilizzata per misurare la temperatura. La differenza di tensione tra le due giunzioni è chiamata effetto Seebeck.
Se entrambi i composti sono alla stessa temperatura, il potenziale di differenza in composti diversi è zero, ad es. V1 = V2. Tuttavia, se le giunzioni sono a temperature diverse, la tensione di uscita relativa alla differenza di temperatura tra le due giunzioni sarà uguale alla loro differenza V1 - V2.
Tipi di sensori di temperatura
Elettronico-meccanico
Il tipo di regolatore più semplice ed economico. La sua parte lavorativa principale è una speciale piastra metallica che risponde a un aumento o una diminuzione della temperatura. Il sistema si accende e si spegne modificando la curvatura della piastra durante il riscaldamento e il raffreddamento. L'impostazione del valore esatto della temperatura su un tale regolatore non funzionerà.
Elettronico
Il dispositivo ha un elemento speciale che genera un segnale speciale. La potenza dipende direttamente dai valori della temperatura ambiente. Su tali dispositivi, è possibile impostare letture accurate della temperatura di riscaldamento fino a una frazione di grado. Il sistema è controllato da pulsanti e un piccolo schermo.
Programmabile
Il più costoso dei termoelementi. Su di esso è possibile impostare determinati valori, al raggiungimento dei quali l'intero sistema viene acceso o spento dal regolatore. Grazie al dispositivo, viene creato un microclima nella stanza che si adatta a una persona in particolare. È possibile configurare il termostato in modo che il sistema venga acceso in un momento specifico. Cioè, i pavimenti vengono riscaldati prima che il proprietario arrivi a casa e, allo stesso tempo, l'elettricità non viene consumata quando il proprietario non lo è.
Molti modelli presentano un design luminoso ed elegante e schermi LCD che visualizzano le informazioni e facilitano la regolazione fine.
Lavorare con librerie già pronte
Quindi, per lavorare con i sensori di temperatura DS18B20 sulla rete, puoi trovare un numero enorme di librerie, ma di norma vengono utilizzati due dei più popolari. È una biblioteca e una biblioteca. Inoltre, la seconda libreria è un componente aggiuntivo più conveniente della prima e non può essere utilizzata senza di essa. In altre parole, prima di connettere la libreria DallasTemperature.h, è necessario connettere anche OneWire.h. Come installare alcune librerie nell'IDE di Arduino è possibile.
Libreria OneWire.h
Consideriamo prima di tutto lavorare con la libreria OneWire.h. Di seguito è riportato un elenco delle sue funzioni con una breve descrizione.
- Sensore di temperatura OneWire (uint8_t pinNumber)
Questa funzione è un costruttore della classe OneWire e crea un oggetto temperatureSensor, ad es. apre un canale di comunicazione con un sensore o un gruppo di sensori sul pin pinNumber. Nei nostri esempi (Figure 3-5) questo è il pin "D2" di Arduino Nano. È stato ad esso che abbiamo collegato il bus dati DQ DS18B20.
Esempio:
Sensore di temperatura OneWire
(
D2
);
// Un sensore o un gruppo di sensori è collegato al pin D2
- uint8_t ricerca (addrArray)
La funzione cerca il dispositivo successivo sul bus 1-Wire e, quando viene trovato, inserisce il valore dell'indirizzo nell'array addrArray, restituendo true. Poiché l'indirizzo univoco di ogni sensore è a 64 bit, addrArray deve avere una dimensione di 8 byte. Se la ricerca fallisce, la funzione restituisce false. Si noti che quando più sensori di temperatura sono collegati a un bus, ogni chiamata alla funzione di ricerca verrà indirizzata al sensore successivo, quindi al successivo, ecc., Finché tutti i dispositivi sul bus non saranno enumerati. La particolarità di questa funzione è quella di ricordare indirizzi già elaborati. Per ripristinare la coda, è necessario chiamare la funzione reset_search (), che verrà discussa di seguito.
Esempio:
byte addrArray
[
8
];
// Array per memorizzare un indirizzo a 64 bit // Se il dispositivo è del tutto assente sul bus o tutti i dispositivi sono enumerati // visualizza le informazioni corrispondenti nel monitor della porta
Se(!
termometro
.
ricerca
(
addrArray
))
Seriale
.
println
(
"Niente più indirizzi."
);
// Altrimenti, se il dispositivo successivo ha risposto alla richiesta di presenza, // visualizza il suo indirizzo a 64 bit nel monitor della porta
altro{per(
io
=
0
;
io
<
8
;
io
++)
Seriale
.
Stampa
(
addrArray
[
io
],
ESADECIMALE
);
}
- vuotoreset_search ()
Come accennato in precedenza, questa funzione reimposta la coda di polling per i dispositivi sul bus 1-Wire all'inizio. Dovrebbe essere sempre utilizzato insieme alla funzione di ricerca quando quest'ultima restituisce false. Ad esempio, nel nostro caso con 5 sensori sul bus, chiamando la funzione di ricerca 5 volte, possiamo ottenere 5 indirizzi. Per la sesta volta, la funzione di ricerca ci restituirà false e lo farà ad ogni successivo sondaggio fino a quando la coda non verrà cancellata. Dovresti prestare attenzione a questo per evitare situazioni incomprensibili.
Esempio:
byte addrArray
[
8
];
// Array per memorizzare un indirizzo a 64 bit // Se il dispositivo è del tutto assente sul bus o tutti i dispositivi sono enumerati // reimposta la coda di polling per ripetere il ciclo di ricerca
Se(!
termometro
.
ricerca
(
addrArray
))
termometro
.
reset_search
();
- uint8_tRipristina ()
La funzione di ripristino 1-Wire avvia il processo di comunicazione. Viene chiamato ogni volta che vogliamo comunicare con il sensore di temperatura. I valori restituiti possono essere veri o falsi. Otterremo il valore vero se almeno un sensore sul bus risponde al ripristino con un impulso di presenza. Altrimenti, diventiamo falsi;
Esempio:
Se(!
termometro
.
Ripristina
())
Seriale
.
println
(
"Nessun sensore sul bus"
);altro
Seriale
.
println
(
"Il sensore è stato rilevato"
);
- vuotoseleziona (addrArray)
La funzione consente di selezionare un dispositivo specifico con cui vogliamo lavorare al momento. La scelta viene effettuata specificando esplicitamente l'indirizzo a 64 bit immesso nell'array addrArray. L'indirizzo può essere impostato esplicitamente scrivendolo in un array o utilizzando quello letto in precedenza dalla funzione di ricerca. Si noti che la funzione di ripristino deve essere chiamata prima di chiamare la funzione di selezione. Al successivo ripristino, la connessione con il sensore selezionato viene interrotta fino alla chiamata successiva da selezionare.
Esempio:
byte addrArray
[
8
];
// Array per memorizzare un indirizzo a 64 bit // Se il dispositivo è del tutto assente sul bus o tutti i dispositivi sono enumerati // invia le informazioni corrispondenti al monitor della porta
Se(!
termometro
.
ricerca
(
addrArray
))
Seriale
.
println
(
"Niente più indirizzi."
);
// Altrimenti, se il dispositivo successivo ha risposto alla richiesta di presenza, // selezionalo per il lavoro successivo
altro{
termometro
.
Ripristina ()
;
// Non dimenticare di emettere il comando di ripristino temperatureSensor
.
seleziona (addrArray)
;
// Specifica un array con l'indirizzo di lettura
}
- vuotoSalta ()
La funzione è rilevante solo quando si lavora con un sensore sul bus e si salta semplicemente la selezione del dispositivo. In altre parole, non puoi utilizzare la funzione di ricerca e quindi accedere rapidamente con il tuo unico sensore.
Esempio:
termometro.
Ripristina
();
// Reimposta lo pneumatico del sensore di temperatura
.
Salta
();
// Seleziona l'unico sensore per lavorarci ulteriormente
- vuotoScrivi (uint8_tbyte, uint8_t powerType = 0)
La funzione invia un byte di dati al dispositivo selezionato sul bus. L'argomento powerType specifica il tipo di alimentazione per i sensori (0 - i sensori sono alimentati direttamente da una fonte esterna; 1 - viene utilizzata una connessione alimentata parassita). Il secondo parametro può essere omesso se viene utilizzata l'alimentazione esterna, poiché è 0 per impostazione predefinita.
Esempio:
termometro
.
Ripristina
();
// Resetta lo pneumatico del sensore di temperatura
.
Salta
();
// Seleziona un singolo sensore per il successivo lavoro con esso // Invia un comando per convertire la temperatura, // utilizzando una connessione con alimentazione parassita dal bus dati temperatureSensor
.
Scrivi
(
0x44
,
1
);
- uint8_tleggere ()
Questa funzione legge un byte di dati inviati dal dispositivo slave (sensore) al bus 1-Wire.
Esempio:
// Legge 9 byte di dati dal bus 1-Wire e inserisce il risultato nell'array di byte array
[
9
];per(
uint8_t i
=
0
;
io
<
9
;
io
++){
Vettore
[
io
]=
termometro
.
leggere
();}
- statico uint8_t crc8 (const uint8_t * addr, uint8_t len);
La funzione è progettata per calcolare il checksum. Progettato per verificare la corretta comunicazione con il sensore di temperatura. Qui addr è un puntatore all'array di dati e len è il numero di byte.
Esempio:
byte addrArray
[
8
];
// Array per memorizzare un indirizzo a 64 bit // Se il dispositivo è del tutto assente sul bus o tutti i dispositivi sono enumerati // invia le informazioni corrispondenti al monitor della porta
Se(!
termometro
.
ricerca
(
addrArray
))
Seriale
.
println
(
"Niente più indirizzi."
);
// Altrimenti, se il dispositivo successivo ha risposto alla richiesta di presenza, // controlla il checksum del suo indirizzo
altro{
// Se il checksum non corrisponde, visualizza un messaggio di errore
Se(
OneWire
::
crc8
(
addrArray
,
7
)!=
addrArray
[
7
]){
Seriale
.
println
(
"CRC non è valido!"
);}}
Abbiamo esaminato separatamente ogni funzione della libreria OneWire.h e per fissare il materiale, di seguito fornirò uno schizzo per la lettura della temperatura da un gruppo di sensori di temperatura DS18B20, che saranno collegati al pin D2 utilizzando un circuito di alimentazione parassita. Lo schizzo conterrà commenti dettagliati su tutti i punti necessari.
#include // Colleghiamo la libreria per lavorare con i sensori termici DS18B20OneWire ds
(
2
);
// Un sensore o un gruppo di sensori è collegato al pin D2 di Arduino // PRESET FUNCTION void setup
(
vuoto
){
Seriale
.
inizio
(
9600
);
// Inizializzazione del lavoro con Serial-port} // MAIN CYCLE void loop
(
vuoto
){
byte i
;
// Variabile ausiliaria per i cicli di byte presenti
=
0
;
// Variabile per determinare la disponibilità del sensore per la comunicazione byte type_s
;
// Variabile per definire il tipo di sensore termico sul bus dati byte
[
12
];
// Array per memorizzare le informazioni ricevute dal sensore byte addr
[
8
];
// Array per memorizzare l'indirizzo a 64 bit del sensore celsius a virgola mobile
,
fahrenheit
;
// Variabili per il calcolo della temperatura // Se i dispositivi sul bus non vengono trovati o tutti i dispositivi sul bus sono enumerati // visualizza le informazioni corrispondenti nel monitor della porta, reimposta la coda // ed esegui di nuovo una ricerca, aspettando 250 ms
Se(!
ds
.
ricerca
(
addr
)){
Seriale
.
println
(
"Niente più indirizzi."
);
Seriale
.
println
();
ds
.
reset_search
();
ritardo
(
250
);ritorno;}
// Se viene trovato il dispositivo successivo sul bus, visualizza il suo indirizzo univoco // nel monitor della porta in forma esadecimale Seriale
.
Stampa
(
"ROM ="
);per(
io
=
0
;
io
<
8
;
io
++){
Seriale
.
Scrivi
(
‘ ‘
);
Seriale
.
Stampa
(
addr
[
io
],
ESADECIMALE
);}
// Controlla il checksum dell'indirizzo del dispositivo trovato // e se non corrisponde, visualizza le informazioni corrispondenti
Se(
OneWire
::
crc8
(
addr
,
7
)!=
addr
[
7
]){
Seriale
.
println
(
"CRC non è valido!"
);ritorno;}
Seriale
.
println
();
// Controlla il byte zero dell'indirizzo, che contiene informazioni // su un tipo specifico di sensore di temperatura. A seconda del valore dello zero // byte, visualizziamo la serie del chip nel monitor della porta. Se il byte zero contiene un valore // sconosciuto, visualizza un messaggio sulla famiglia sconosciuta del sensore di temperatura.
interruttore(
addr
[
0
]){Astuccio
0x10
:
Seriale
.
println
(
"Chip = DS18S20"
);
type_s
=
1
;rompere;Astuccio
0x28
:
Seriale
.
println
(
"Chip = DS18B20"
);
type_s
=
0
;rompere;Astuccio
0x22
:
Seriale
.
println
(
"Chip = DS1822"
);
type_s
=
0
;rompere;predefinito:
Seriale
.
println
(
"Il dispositivo non è un dispositivo della famiglia DS18x20."
);ritorno;}
ds
.
Ripristina
();
// Reimposta il bus per inizializzare lo scambio di dati ds
.
Selezionare
(
addr
);
// Seleziona il sensore con l'indirizzo corrente per lavorarci // Invia il comando per convertire la temperatura (secondo la documentazione 0x44) // Non dimenticare il secondo parametro "1", poiché stiamo trasmettendo dati tramite / / linea con alimentazione parassita. ds
.
Scrivi
(
0x44
,
1
);
// Il sensore avvia la conversione, che secondo la documentazione richiede max. 750ms // Per essere sicuri, organizzeremo una pausa di ё secondi di ritardo
(
1000
);
// Resetta di nuovo il bus per leggere le informazioni dal sensore // salva la risposta della funzione reset () alla variabile presente per lavorare ulteriormente con essa
=
ds
.
Ripristina
();
ds
.
Selezionare
(
addr
);
// Riselezionare il sensore tramite il suo indirizzo, poiché c'è stato un impulso di reset // Il comando 0xBE, secondo la documentazione tecnica, permette di leggere la memoria interna // del sensore di temperatura (Scratchpad), che consiste di 9 byte. ds
.
Scrivi
(
0xBE
);
// Legge e visualizza 9 byte dalla memoria interna del sensore di temperatura Seriale al monitor della porta
.
Stampa
(
"Data ="
);
Seriale
.
Stampa
(
presente
,
ESADECIMALE
);
Seriale
.
Stampa
(
» «
);per(
io
=
0
;
io
<
9
;
io
++){
dati
[
io
]=
ds
.
leggere
();
Seriale
.
Stampa
(
dati
[
io
],
ESADECIMALE
);
Seriale
.
Stampa
(
» «
);}
// Verifica e invia al monitor della porta il checksum dei dati ricevuti Serial
.
Stampa
(
"CRC ="
);
Seriale
.
Stampa
(
OneWire
::
crc8
(
dati
,
8
),
ESADECIMALE
);
Seriale
.
println
();
// Avvia il processo di conversione dei dati ricevuti nella temperatura effettiva, // che viene memorizzata in 0 e 1 byte di memoria di lettura. Per fare ciò, combiniamo questi due // byte in un numero a 16 bit int16_t raw
=(
dati
[
1
]<<
8
)|
dati
[
0
];
// Prima di un'ulteriore conversione, è necessario definire la famiglia a cui appartiene // questo sensore (in precedenza abbiamo salvato il risultato nella variabile type_s). // A seconda della famiglia, la temperatura verrà calcolata in modo diverso, // poiché DS18B20 e DS1822 restituiscono un valore a 12 bit, mentre DS18S20 restituisce un valore a 9 bit
Se(
type_s
){
// Se il sensore appartiene alla famiglia raw DS18S20
=
crudo
<<
3
;
// la risoluzione predefinita è 9 bit
Se(
dati
[
7
]==
0x10
){
crudo
=(
crudo
&
0xFFF0
)+
12
—
dati
[
6
];}}altro{
// Determina con quale precisione di misurazione è configurato questo sensore byte cfg
=(
dati
[
4
]&
0x60
);
// A risoluzioni inferiori, è possibile azzerare i bit meno significativi, // poiché non sono definiti in anticipo
Se(
cfg
==
0x00
)
crudo
=
crudo
&~
7
;
// 9 bit (la conversione richiede 93,75 ms)
altroSe(
cfg
==
0x20
)
crudo
=
crudo
&~
3
;
// 10 bit (la conversione richiede 187,5 ms)
altroSe(
cfg
==
0x40
)
crudo
=
crudo
&~
1
;
// 11 bit (la conversione richiede 375 ms) // La precisione predefinita è 12 bit (la conversione richiede 750 ms)
}
// Calcola e invia i valori di temperatura al monitor della porta Celsius
=(
galleggiante
)
crudo
/
16.0
;
fahrenheit
=
centigrado
*
1.8
+
32.0
;
Seriale
.
Stampa
(
"Temperatura ="
);
Seriale
.
Stampa
(
centigrado
);
Seriale
.
Stampa
(
"Centigrado,"
);
Seriale
.
Stampa
(
fahrenheit
);
Seriale
.
println
(
"Fahrenheit"
);}
Se tutto è stato eseguito correttamente, nella finestra del monitor della porta dovremmo vedere qualcosa di simile (Figura 6):
Figura 6: il risultato dell'utilizzo della libreria OneWire.h
Libreria DallasTemperature.h
Questa libreria è basata sulla precedente e semplifica un po 'il processo di programmazione grazie a funzioni più comprensibili. Dopo l'installazione, avrai accesso a 14 esempi di codice ben documentato per tutte le occasioni. Nell'ambito di questo articolo, verrà considerato un esempio di funzionamento con un sensore.
Il risultato del programma è mostrato nella Figura 7
Figura №7 - il risultato della lettura della temperatura utilizzando la libreria DallasTemperature.h
// Colleghiamo le librerie necessarie # include #include // Colleghiamo il bus dati al pin # 2 di Arduino # definiamo ONE_WIRE_BUS 2 // Crea un'istanza della classe per il nostro bus e un collegamento ad essa OneWire oneWire
(
ONE_WIRE_BUS
);
Dallas Sensori di temperatura
(&
oneWire
);
// PRESET FUNCTION void setup
(
vuoto
){
Seriale
.
inizio
(
9600
);
// Inizializza i sensori della porta seriale
.
inizio
();
// Inizializza il bus
}
// CICLO PRINCIPALE
(
vuoto
){
Seriale
.
Stampa
(
"Lettura della temperatura ..."
);
// Invia il comando per leggere i sensori
.
requestTemperatures
();
Seriale
.
println
(
"Leggere"
);
Seriale
.
Stampa
(
"Temperatura sensore 1:"
);
// Visualizza il valore di temperatura Serial
.
Stampa
(
sensori
.
getTempCByIndex
(
0
));}
Sensore di temperatura KY-001 con interfaccia a 1 filo
Questo sensore viene utilizzato per una misurazione accurata della temperatura. La comunicazione con il sensore avviene tramite l'interfaccia 1-Wire [1-2], che consente di collegare diversi dispositivi simili alla scheda Arduino utilizzando un pin del microcontrollore [3-4]. Il modulo si basa sul microcircuito ds18b20 [5].
Dimensioni modulo 24 x 15 x 10 mm, peso 1,3 g. Per il collegamento viene utilizzato un connettore a tre poli. Contatto centrale - alimentazione + 5V, contatto "-" - comune, contatto "S" - informativo.
La scheda ha un LED rosso che si accende durante lo scambio di informazioni.
Consumo di corrente 0,6 mA durante lo scambio di informazioni e 20 μA in modalità standby.
Il collegamento di questo tipo di sensori ad Arduino è ben descritto in molte fonti [6-8]. In questo caso, si manifestano nuovamente i principali vantaggi di Arduino: versatilità e presenza di un'enorme quantità di informazioni di riferimento. Per lavorare con il sensore, avrai bisogno della libreria OneWire [9]. Dopo aver caricato il programma da [8] (c'è un errore nella prima versione del programma - non c'è connessione alla libreria #include nell'intestazione del codice), le seguenti informazioni possono essere osservate nel monitor della porta seriale.
L'autore ha anche testato il codice da [7], tutto ha funzionato subito, nel monitor della porta seriale è possibile leggere le informazioni sul tipo di sensore collegato ei dati di temperatura effettiva.
In generale, un sensore molto utile che consente di familiarizzare con l'interfaccia 1-Wire nella pratica. Il sensore fornisce immediatamente i dati di temperatura corretti, l'utente non ha bisogno di calibrare.