Same to you -- happy 2024 New Year!
this evenning have ordered 10 pieces ds18b20 raw..
they will arrive until weekend..will see,what they do.. ![]()
When you get them, try each one with this test program, connect the signal pin (DQ) to Arduino pin 2, don't forget the 4.7k pullup resistor from Arduino Vcc to DQ pin.
#include <OneWire.h>
// OneWire DS18S20, DS18B20, DS1822 Temperature Example
//
// http://www.pjrc.com/teensy/td_libs_OneWire.html
//
// The DallasTemperature library can do all this work for you!
// https://github.com/milesburton/Arduino-Temperature-Control-Library
OneWire ds(2); // on pin 2 (a 4.7K resistor is necessary)
void setup(void) {
Serial.begin(9600);
}
void loop(void) {
byte i;
byte present = 0;
byte type_s;
byte data[12];
byte addr[8];
float celsius, fahrenheit;
if ( !ds.search(addr)) {
Serial.println("No more addresses.");
Serial.println();
ds.reset_search();
delay(250);
return;
}
Serial.print("ROM =");
for( i = 0; i < 8; i++) {
Serial.write(' ');
Serial.print(addr[i], HEX);
}
if (OneWire::crc8(addr, 7) != addr[7]) {
Serial.println("CRC is not valid!");
return;
}
Serial.println();
// the first ROM byte indicates which chip
switch (addr[0]) {
case 0x10:
Serial.println(" Chip = DS18S20"); // or old DS1820
type_s = 1;
break;
case 0x28:
Serial.println(" Chip = DS18B20");
type_s = 0;
break;
case 0x22:
Serial.println(" Chip = DS1822");
type_s = 0;
break;
default:
Serial.println("Device is not a DS18x20 family device.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // start conversion, with parasite power on at the end
delay(1000); // maybe 750ms is enough, maybe not
// we might do a ds.depower() here, but the reset will take care of it.
present = ds.reset();
ds.select(addr);
ds.write(0xBE); // Read Scratchpad
Serial.print(" Data = ");
Serial.print(present, HEX);
Serial.print(" ");
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(data[i], HEX);
Serial.print(" ");
}
Serial.print(" CRC=");
Serial.print(OneWire::crc8(data, 8), HEX);
Serial.println();
// Convert the data to actual temperature
// because the result is a 16 bit signed integer, it should
// be stored to an "int16_t" type, which is always 16 bits
// even when compiled on a 32 bit processor.
int16_t raw = (data[1] << 8) | data[0];
if (type_s) {
raw = raw << 3; // 9 bit resolution default
if (data[7] == 0x10) {
// "count remain" gives full 12 bit resolution
raw = (raw & 0xFFF0) + 12 - data[6];
}
} else {
byte cfg = (data[4] & 0x60);
// at lower res, the low bits are undefined, so let's zero them
if (cfg == 0x00) raw = raw & ~7; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw & ~3; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw & ~1; // 11 bit res, 375 ms
//// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
fahrenheit = celsius * 1.8 + 32.0;
Serial.print(" Temperature = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
Serial.print(fahrenheit);
Serial.println(" Fahrenheit");
delay(2000);
}
I have had no experience with these sensor in a tube purchased from China, however others have claimed they all have fake sensors inside.
These sensors should not get hot. Some of the fakes have turned out to be transistors remarked as Dallas sensors.
I know sensors purchased from Digikey are the real think.
many thanks for the sketch..will use it for all
sensors if have..
in addition my pharmacist offered me that i can
use his calibrated thermometer for some days
to calibrate my equipment if ready..
Sounds like a good deal, I would be interested in your results, please post when / if you can.
hi,
think the best practive will be to mount as many sensors
on a terminal strip as needed for the project (here 5) and
inspect, which sensors come nearest with the truth.
guess, i have to store divergences in an array for each sensor,,
but the goal is to signalize temperature-deviation from a range of
room-temps (i.e 16 - 24 degrees celsius as default) by a buzzer in the room i'm working or resting
the thermal-monitor-unit will be placed in the floor, shows temps as
horizontal bars and vertical lines as bounds
it is Not planned to manipulate radiators automatically because there are
thermostates mounted at each radiator to use manually.
But if i forget to close a door or window Thermomonitor should warn me soon
to close and limit radiation.
Which equipment you want to calibrate -- DS18B20?
hi,
may be, as i have seen several codes about the sensor meanwhile,
it seems one can influence several parameters like limiters..so i'll
study more issues of that theme if necessary..
with equipment i meant the whole complex of processor and other
components like stepdown-converter, switches , potentiometers and so far..
Usually, calibration is performed on input device (that includes sensor, amplifier, and ADC) which has offset and gain. The output of DS18B20 is a factory calibrated binary data, which does not require any further calibration.
i expect that output values derive on production tolerances
and circumstances here like voltage and resistances..
Circumstances should have very little influence (unless your power supply voltage is outside the range recommended by the srnsor manufacturer.
The sensor may have a structural error. If the sensor is guaranteed to be within 0.5 degC, I would expect that most sensors will be more accurate than that.
