Termometro immersione - Micrometeo

Vai ai contenuti

Menu principale:

Termometro immersione

Sensoristica
TRIPLO TERMOMETRO CON SONDE A IMMERSIONE DS18B20

SENSORE E APPLICAZIONI
Il termometro si basa dul sensore della Dallas DS18B20. E' un sensore versatile, preciso e ha un indirizzo univoco. Questa peculiarità permette di utilizzare più sonde collegate allo stesso microcontrollore. Utilizzo: Sistema di lettura della temperatura ridondante; mappatura aree urbane: terra, 1m, 1.70m.; acquari, biotopi... E' possibile aggiungere dei relè per attivare svariati dispositivi quali: riscaldatori, ventilazione, pompe, etc...



clic per ingrandire



TEMPO DI LATENZA
Il microcontrollore legge i sensori ogni secondo. Per portare un sensore da 26.5°C a 30.5°C servono 45'' circa.
Il tempo necessario per riportare la lettura a 26,5 varia da 6' a 8' (grafico).


clic per ingrandire

CARATTERISTICHE

Unique 1-Wire interface requires only one port pin for communication.
Multidrop capability simplifies distributed temperature sensing applications.
Requires no external components.
Can be powered from data line.
Power supply range is 3.0V to 5.5V.
Zero standby power required.
Measures temperatures from -55°C to +125°C. Fahrenheit equivalent is -67°F to +257°F.
±0.5°C accuracy from -10°C to +85°C.
Thermometer resolution is programmable from 9 to 12 bits.
Converts 12-bit temperature to digital word in 750 ms (max.).
User-definable, nonvolatile temperature alarm settings.
Alarm search command identifies and addresses devices whose temperature isoutside of programmed limits (temperaturealarm condition).
Applications include thermostatic controls, industrial systems, consumer products,thermometers, or any thermally sensitive system.

L'interfaccia a un filo richiede solo un pin per la comunicazione.
Non richiede componenti esterni.
L'intervallo di alimentazione è compreso tra 3,0 V e 5,5 V.
Misura temperature da -55 ° C a + 125 ° C. L'equivalente di Fahrenheit è da -67 ° F a + 257 ° F.
Precisione di ± 0,5 ° C da -10 ° C a + 85 ° C.
La risoluzione è programmabile da 9 a 12 bit.
Conversione in 750 ms (max.).
Impostazioni di allarme della temperatura non volatili definibili dall'utente.
Le applicazioni includono controlli termostatici, sistemi industriali, prodotti di consumo, termometri o qualsiasi sistema termicamente sensibile.

CONNESSIONI AL MICROCONTROLLORE

filo giallo sensore al PIN 2 di Arduino
filo rosso sensore a 5V Arduino
filo nero sensore a GND Arduino
tra il filo giallo e quello rosso mettere un resistore da 4.7K

SCL del display a SCL di Arduino
SDA del display a SDA di Arduino
Vcc del display a 5V di Arduino
GND del display a GND di Arduino

SCHEMA ELETTRICO

clic per ingrandire





CODICI
Questo sketch stampa su LCD le tre temperature lette da ciascun sensore

/* DS18B20 3X + LCD I2C
 Created August 2020 by MC Workshop & Micometeo.
 This example code is in the public domain.
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
 lcd.init();
 lcd.backlight();
 sensors.begin();
 lcd.clear();
}
void loop()
{
 sensors.requestTemperatures();
 float temp = sensors.getTempCByIndex(0);// lettura sensore 1 indice 0
 lcd.setCursor (0, 0 );
 lcd.print("1 ");
 lcd.print(temp);
 lcd.print(" ");
 temp = sensors.getTempCByIndex(1);// lettura sensore 2 indice 1
 lcd.setCursor (0, 1 );
 lcd.print("2 ");
 lcd.print(temp);
 lcd.print(" ");
 temp = sensors.getTempCByIndex(2);// lettura sensore 3 indice 2
 lcd.print("3 ");
 lcd.print(temp);
 delay(1000);
}

Questo codice stampa su monitor seriale

/* DS18B20 3X + LCD I2C
 Created August 2020 by MC Workshop & Micometeo.
 This example code is in the public domain.
 Stampa su seriale
*/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
LiquidCrystal_I2C lcd(0x27, 16, 2);
int deviceCount = 0;
float tempC;
void setup(void)
{
 sensors.begin();
 Serial.begin(9600);
 Serial.print("Locating devices...");
 Serial.print("Found ");
 deviceCount = sensors.getDeviceCount();
 Serial.print(deviceCount, DEC);
 Serial.println(" devices.");
 Serial.println("");
}
void loop(void)
{
 sensors.requestTemperatures();
 for (int i = 0;  i < deviceCount;  i++)
 {
   Serial.print("Sensor ");
   Serial.print(i + 1);
   Serial.print(" : ");
   tempC = sensors.getTempCByIndex(i);
   Serial.print(tempC);
   Serial.print("C  |  ");
   Serial.print(DallasTemperature::toFahrenheit(tempC));
   Serial.println("F");
 }
 Serial.println("");
 delay(1000);
}

Questo sketch legge le temperature richiamando ciascun sensore con il suo indirizzo

/* DS18B20 3X + LCD I2C
 Created August 2020 by MC Workshop & Micometeo.
 This example code is in the public domain.
 Lettura per indirizzo
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

uint8_t sensor1[8] = { 0x28, 0xEE, 0xD5, 0x64, 0x1A, 0x16, 0x02, 0xEC };
uint8_t sensor2[8] = { 0x28, 0x61, 0x64, 0x12, 0x3C, 0x7C, 0x2F, 0x27 };
uint8_t sensor3[8] = { 0x28, 0x61, 0x64, 0x12, 0x3F, 0xFD, 0x80, 0xC6 };

void setup(void)
{
 Serial.begin(9600);
 sensors.begin();
}
void loop(void)
{
 sensors.requestTemperatures();
 Serial.print("Sensor 1: ");
 printTemperature(sensor1);
 Serial.print("Sensor 2: ");
 printTemperature(sensor2);
 Serial.print("Sensor 3: ");
 printTemperature(sensor3);
 Serial.println();
 delay(1000);
}
void printTemperature(DeviceAddress deviceAddress)
{
 float tempC = sensors.getTempC(deviceAddress);
 Serial.print(tempC);
 Serial.print("C  |  ");
 Serial.print(DallasTemperature::toFahrenheit(tempC));
 Serial.println("F");
}

Questo sketch trova gli indirizzi di ciascun sensore

/* DS18B20 3X + LCD I2C
 Created August 2020 by MC Workshop & Micometeo.
 This example code is in the public domain.
 Trova indirizzi DS
*/
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress Thermometer;
int deviceCount = 0;
void setup(void)
{
 Serial.begin(9600);
 sensors.begin();
 Serial.println("Locating devices...");
 Serial.print("Found ");
 deviceCount = sensors.getDeviceCount();
 Serial.print(deviceCount, DEC);
 Serial.println(" devices.");
 Serial.println("");
 Serial.println("Printing addresses...");
 for (int i = 0;  i < deviceCount;  i++)
 {
   Serial.print("Sensor ");
   Serial.print(i + 1);
   Serial.print(" : ");
   sensors.getAddress(Thermometer, i);
   printAddress(Thermometer);
 }
}
void loop(void)
{}
void printAddress(DeviceAddress deviceAddress)
{
 for (uint8_t i = 0; i < 8; i++)
 {
   Serial.print("0x");
   if (deviceAddress[i] < 0x10) Serial.print("0");
   Serial.print(deviceAddress[i], HEX);
   if (i < 7) Serial.print(", ");
 }
 Serial.println("");
}
 
Copyright 2015. All rights reserved.
Torna ai contenuti | Torna al menu