Temperaturmessung mit DS18B20 - Z-Uno - SmartHome Z-Wave Modul

Direkt zum Seiteninhalt

Temperaturmessung mit DS18B20

-> Temperaturmessung
Beschreibung:
Diese Z-Wave-Baugruppe realisiert eine Temperatur-Messung über den Sensor, der sich mehrere Meter vom Z-Uno entfernt befinden kann (zum Beispiel ein Boden-Temperatur-Sensor, ein Pool-Sensor,...).
Die 4 Sensoren 18B20 werden parallel geschaltet und durch ihre einmaligen Adressen angesprochen.

DS18B20 Sensoren gibt es auch aös wasserdichte Sensoren mit Kabel unterschiedlicher Länge.

Seit der Version 2.0.7 können die Adressen automatisch gescannt werden.
Dadurch ist es einfach möglich, weitere Sensoren hinzuzufügen - nur der Z-Wave spezifische Teil muss angepasst werden (Anzahl der Kanäle)

Weitere Beispiele unter: http://z-uno.z-wave.me/examples/

Aufbau
(Fritzing -
folgt bald)


Schaltplan:
(Fritzing folgt bald)

Arduino Code: (Arduino 1.6.5)


#include "ZUNO_OneWire.h"
#include "ZUNO_DS18B20.h"

// 18B20 pin number
#define BUS_PIN 11      // Z-Uno pin for 18B20
#define ROM_SIZE 8
#define MAX_SENSOR 8

OneWire ow(BUS_PIN);
DS18B20Sensor ds18b20(&ow);

byte sensor_roms[ROM_SIZE*MAX_SENSOR];
byte number_of_sensors;

#define n_zw_sensor 3  // number of Z-Wave sensors
int temp[n_zw_sensor];

#define ROM_DATA(index) (&sensor_roms[index*ROM_SIZE])

// 3 Z-Wave Sensors

ZUNO_SETUP_CHANNELS(
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE, SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS, getterTemp0),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE, SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS, getterTemp1),
ZUNO_SENSOR_MULTILEVEL(ZUNO_SENSOR_MULTILEVEL_TYPE_TEMPERATURE, SENSOR_MULTILEVEL_SCALE_CELSIUS, SENSOR_MULTILEVEL_SIZE_TWO_BYTES, SENSOR_MULTILEVEL_PRECISION_TWO_DECIMALS, getterTemp2));

void printROM(byte * rom)
{
    byte i;
    for(i=0; i<8; i++)
    {
      Serial.print(" ");
      Serial.print(rom[i], HEX);
    }
}

void setup() {

  Serial.begin();
  Serial.println("Sketch is starting...");
  number_of_sensors = ds18b20.findAllSensors(sensor_roms);
  Serial.print("FOUND ");
  Serial.print(number_of_sensors);
  Serial.println(" DS18B20 sensor(s)");
  byte i;
 
 
  for(i=0; i < number_of_sensors; i++)
 {
       Serial.print("Sensor ");
       Serial.print(i);
       Serial.print(" ROM: ");
       printROM(ROM_DATA(i));
       Serial.println("");
  }
}

void loop() {
  byte i;
  int my_temp;

  Serial.println("Polling temperature sensors...");
  for(i=0; i< number_of_sensors;i++)
  {
    Serial.print("Sensor [");
    Serial.print(i);
    Serial.println("] ");
    Serial.print("Address [");
    printROM(ROM_DATA(i));
    Serial.println("] ");
    my_temp=ds18b20.getTemperature(ROM_DATA(i))*100;
    Serial.print((float)my_temp/100);
    Serial.println(" C");
    Serial.println("-------------------");

    // Sending report to the right channel
    if(i < n_zw_sensor) {
      temp[i]= my_temp;
      zunoSendReport(i+1);
    }
  }
delay(30000);
}

int getterTemp0()
{
return temp[0];
}

int getterTemp1()
{
return temp[1];
}

int getterTemp2()
{
return temp[2];
}


Copyright 2018 Michael Prüfer
Zurück zum Seiteninhalt