^^DS18B20 Sensore di Temperatura Digitale.

la nascita di questo interesse e' stato di risolvere il problema del "Controllo dei congelatori a pozzetto della sagra".

 

  1. acquisto

  2. amazon DS18B20 Sonda con cavo 3 metri, lmpermeabile.
  3. amazon DS18B20 formato TO-92. 20 pezzi  16euro
  4. doc arduino

    1. maffucci/2021/arduino-ds18b20-in-modalita-singola
    2. lastminuteengineers/multiple-ds18b20-arduino
  5. doc raspberry 4

  6. twoerner.blogspot.com/2020/12/temperature-readings-with-ds18b20
    1. multiple-ds18b20-temperature-probes
    2. device-enumeration-on-1-wire-bus

 

voc:

HVAC Heating, Ventilation, Air Conditioning  is the use of various technologies to control the temperature, humidity, and purity of the air in an enclosed space.

Links

esOf: Sensore.

 

DS18B20 struttura

  1. degrees Celsius is output temperature data;
    for Fahrenheit a conversion must be used.
  2. 1.5mA max when ADConverting T, or copying data from scratchpad to EEPROM.

 

DS18B20 Sensore di Temperatura Digitale. Caratteristiche misura.

scratchpad 9 bytes, piccola memoria di servizio

LSB MSB TH TL CFG RES RES RES CRC

0 temperature LSB. Read only.

1 temperature MSB. Read Only.

2 TH temperature high alarm

3 TL temperature low alarm

4 configuration

5 reserved

6 reserved

7 reserved

8 CRC

LSB Least Significant Byte

MSB Most Significant Byte

CRC Cyclic Redundancy Check

SW per guidare HW

  1. Dallas Temperature Control Library, libreria per i sensori di temperatura

    The intention of this Library is to build on Jim Studt (OneWire lib) work and make it quick and easy for beginners to get started.

    ref: www.milesburton.com/w/index.php/Dallas_Temperature_Control_Library

  2. OneWire  libreria per il bus di comunicazione

    1-Wire communication.

Links

  1. 1-Wire communication. | Arduino.

 

Il programma vero e proprio.
Programma SW per pilotare DS18B20

Terminologia particolare della libreria OneWire

"address" e' il nome dato al contenuto della ROM di DS18B20 che e' univoco di ogni singolo pezzo prodotto, e che quindi lo puo' identificare.

Io lo avrei chiamato "identificatore", ma e' anche vero che assuona al

MAC della Rete EthernetRete Wi-Fi che mi verrebbe decodificare come Machine Address Code, e invece e' Medium Access Control.

Registrazione delle periferiche

nel nostro programma "Congelatori"

i termometri sono stati identificati, cioe' di ognuno

Nel pg registrata una tb con questi dati: l'etichetta-nr del termometro, e il suo identificatore digitale.

Problema: se si sostituisce un termometro occorre aggiornare il programma.

Registrare l'inizio dei tempi

all'accensione, o reset, in pratica quando viene chiamata fun setup(), inviare msg al supervisore perche' si segni l'orario, che al MCU e' ignoto, se non dotato di RTC.

millis().

Funzioni della libreria OneWire che ho usato

// Perform a 1-Wire reset cycle.

// Returns 1 if a device responds with a presence pulse.
// Returns 0 if there is no device, or the bus is shorted,
// or otherwise held low for more than 250uS
uint8_t reset(void);

// Issue a 1-Wire ROM select command (Match Rom [55H]), before you must reset.
void select(const uint8_t rom[8]);

// Issue a 1-Wire rom skip command, to address all on bus.
void skip(void);

// Write a byte. If 'power' is one then the wire is held high at
// the end for parasitically powered devices. You are responsible
// for eventually depowering it by calling depower() or doing
// another read or write.
void write(uint8_t v, uint8_t power = 0);


// Read a byte.
uint8_t read(void);

 

tranne reset, le altre funzioni non hanno return code !

credo che sia il protocollo che non ha possibilita' di controllo di sapere se l'opèrazione e' andata a buon fine. Credo che il controllo sia tutto basato sui CRC e su rilettura dopo la scrittura, se si vuole farlo.

Comportamento fallace

Come rilevare anomalia dopo conversione e lettura scratchpad, cioe' risposte fallaci

Riposta quando: periferica scollegata

Data = FF FF FF FF FF FF FF FF FF   CRC = C9
Temperature = -0.0625 Celsius, 31.8875 Fahrenheit
cioe': CRC errato, e tutti di byte FF.
In pratica nel mio programma considero per semplicita'
CRC errato e CRC==C9 come "periferica scollegata"

R: conversione fallita, a causa di parasite_power insufficiente

Data = 50 05 4B 46 7F FF 0C 10 1C    CRC = 1C
Temperature = 85.0000 °C, 185.0000 °F
cioe'

 

 

Serial.available()    return nr byte available in receive buffer

  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.print(inByte, DEC);
  }