DS18B20 - mcworkshop

MC   WORKSHOP
Vai ai contenuti

Menu principale:

DS18B20

Projects
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
//mcworkshop ottobre 2019
//This example code is in the public domain.
//Questo sketch può essere usato con LCD I2C oppure a monitor seriale

#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 //pin 2 segnale DS oppure BUS 14 pin A0
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
//#include <LiquidCrystal_I2C.h>
//#define DS1307_I2C_ADDRESS 0x27 // attenzione all'indirizzo dell'LCD
//LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup()
{
 Serial.begin(9600);
 //lcd.init();
 //lcd.backlight();
 //lcd.begin (16, 2);
 sensors.begin();
}
void loop()
{
 //lcd.home();
 //lcd.clear ();
 //lcd.setCursor(0, 0);
 sensors.requestTemperatures();
 //lcd.print("t H2O ");
 //lcd.print(sensors.getTempCByIndex(0));
 //lcd.println(" C");
 Serial.print (sensors.getTempCByIndex(0));
 Serial.println (" C");
 delay (10000);
}

Termostato

Implementazione del codice

float tempmax = 0;

void setup(){
...
}

void loop (){
...
tempmax = sensors.getTempCByIndex(0);
 if (tempmax > 23) //impostare temparatura allarme
{
lcd.setCursor(0, 1);
lcd.print("Allarm");
 }
else{
 lcd.setCursor(0, 1);
lcd.print("Status ok");
}
Termostato
Codice completo. Allarme a 23°C
#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
#include <LiquidCrystal_I2C.h>
#define DS1307_I2C_ADDRESS 0x27 // attenzione all'indirizzo dell'LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
float tempmax = 0;
void setup()
{
 Serial.begin(9600);
 lcd.init();
 lcd.backlight();
 lcd.begin (16, 2);
 sensors.begin();
}
void loop()
{
 lcd.home();
 lcd.clear ();
 lcd.setCursor(0, 0);
 sensors.requestTemperatures();
 lcd.print("t");
 lcd.print(' ');
 lcd.print(sensors.getTempCByIndex(0));
 lcd.print(' ');
 lcd.print((char)223);
 lcd.println("C      ");
tempmax = sensors.getTempCByIndex(0);
 if (tempmax > 23){
lcd.setCursor(0, 1);
lcd.print("Allarm");
 }
else{
 lcd.setCursor(0, 1);
lcd.print("Status ok");
}
 delay (10000);
}
Termostato

Codice completo senza delay()
La lettura viene effettuata ogni 5 secondi
Allarme a 27°C
int period = 5000;

#include <OneWire.h>
#include <Wire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2 //14 pin A0
OneWire ourWire(ONE_WIRE_BUS);
DallasTemperature sensors(&ourWire);
#include <LiquidCrystal_I2C.h>
#define DS1307_I2C_ADDRESS 0x27 // attenzione all'indirizzo dell'LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
float tempmax = 0;
int period = 5000;
unsigned long time_now = 0;
void setup()
{
 Serial.begin(9600);
 lcd.init();
 lcd.backlight();
 lcd.begin (16, 2);
 sensors.begin();
}
void loop()
{
 time_now = millis(); {
   lcd.setCursor(0, 0);
   sensors.requestTemperatures();
   lcd.print("t");
   lcd.print(' ');
   lcd.print(sensors.getTempCByIndex(0));
   lcd.print(' ');
   lcd.print((char)223);
   lcd.println("C      ");
   tempmax = sensors.getTempCByIndex(0);
   if (tempmax > 23) {
     lcd.setCursor(0, 1);
    lcd.print("Allarm      ");
   }
   else {
     lcd.setCursor(0, 1);
     lcd.print("Status OK");
   }
   while (millis() < time_now + period);
 }
}

Latenza

La tabella mostra i tempi di risposta del sensore.
Notate come all'innalzarsi della temperatura il tempo di risposta è molto veloce, mentre necessita di un tempo molto lungo per tornare allo stato iniziale.
The table shows the sensor response times.
Note how the response time is very fast when the temperature rises, while it takes a very long time to return to the initial state.
ttimet
21,6915''27,12
...14'45''21,69
 
Copyright 2015. All rights reserved.
Torna ai contenuti | Torna al menu