Sketch zum Ermitteln der richtigen Temperatur aller Sensoren der DS1820 Baureihe. Ermitteln der Minusgrade wurde mit diesem Sketch noch nicht getestet. Bevor der Sketch auf den Arduino geladen wird, geben Sie bitte den Digitalen Pin am Arduino an, an den Sie die Sensoren (OneWire) angeschlossen haben. Außerdem muss die Hardware-Adresse jedes Sensors angegeben werden. Über diese Adresse ist jeder Sensor eindeutig identifizierbar.

ds18s20 sketch_nov22a

/*****************************************************************************
Ermitteln der Temperatur von ds1820, ds1822, ds18S20 und ds18B20 Sensoren *
Autor: Enrico Sadlowski *
Datum: 19.11.2012 *
*****************************************************************************/
#include
#include

OneWire ds(7); //pin für ds1820

//DeviceAdressen der einzelnen ds1820 Temperatursensoren angeben.
DeviceAddress sensor1 = { 0x10, 0x16, 0x2E, 0x57, 0x02, 0x08, 0x00, 0x2F };
DeviceAddress sensor2 = { 0x10, 0x11, 0x40, 0xC0, 0x01, 0x08, 0x00, 0x9A };
DeviceAddress sensor3 = { 0x28, 0xE3, 0xAE, 0xBE, 0x03, 0x00, 0x00, 0x9F };

void setup(void)
{
Serial.begin(9600);
}

void loop(void)
{
float temp1 = getTemperature(sensor1);
float temp2 = getTemperature(sensor2);
float temp3 = getTemperature(sensor3);

Serial.println(temp1);
Serial.println(temp2);
Serial.println(temp3);
Serial.println();

delay(5000);
}

/******************************************************
Temperatur eines Sensors in Grad Celsius ermitteln *
******************************************************/
float getTemperature(byte* address)
{
byte type_s;
byte data[12];
float celsius;

writeTimeToScratchpad(address);
readTimeFromScratchpad(address,data);

switch (address[0])
{
case 0x10: // DS18S20 oder alter DS1820
type_s = 1;
break;
case 0x28: // DS18B20
type_s = 0;
break;
case 0x22: // DS1822
type_s = 0;
break;
}

unsigned int 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);
if (cfg == 0x00) raw = raw << 3; // 9 bit resolution, 93.75 ms
else if (cfg == 0x20) raw = raw << 2; // 10 bit res, 187.5 ms
else if (cfg == 0x40) raw = raw << 1; // 11 bit res, 375 ms
}
celsius = (float)raw / 16.0;
return celsius;
}

/**************************************************************
Hilfsfunktionen zum ermitteln der Temperatur eines Sensors *
**************************************************************/
void writeTimeToScratchpad(byte* address)
{
ds.reset();
ds.select(address);
ds.write(0x44,1);
delay(1000);
}

void readTimeFromScratchpad(byte* address, byte* data)
{
ds.reset();
ds.select(address);
ds.write(0xBE);
for (byte i=0;i<9;i++)
{
data[i] = ds.read();
}
}

Hat ihnen dieser Artikel gefallen?
Was passiert mit den Spenden? - Mit den Spenden bezahle ich das Hosting, kaufe neue Hardware um diese testen und hier veröffentlichen zu können.
Zusätzlich werden Affiliate Links von Amazon verwendet um das Hosting bezahlen zu können.
Vorheriger ArtikelArduino – Adressen aller ds1820 ermitteln
Nächster ArtikelStandard Passwörter für Micro Einplatinen PC’S
Mein Name ist Christoph Purin und befasse mich mit IoT Geräten wie Raspberry, Arduino, ESP. Auch Aktivitäten wie die FFW, Quad-fahren, Amateurfunk zählen zu meinen bevorzugten Hobbys. Dieser Blog, stellt eine Sammlung meiner Projekte dar, wie Dinge gelöst oder umgebaut werden können.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Ich stimme der Datenschutzerklärung zu