Temperaturdifferenz Schaltung

Hallo Arduino Gemeinde,
ich will mich kurz mal vorstellen. Ich heiße Karl-Heinz, bin 39 Jahre alt und komme aus Oberfranken. Ich habe vor ein paar Wochen angefangen mich mit der Programmierung von Mikrocontrollern zu beschäftigen und habe auch schon erste gute Erfolge erzielen können.
Mein neues Projekt soll eine Temperaturdifferenz Schaltung werden. Das heißt, ich möchte zwei Temperaturen messen und vergleichen. Bei einer bestimmten Differenz (5K(5°C)) soll ein Relais angesteuert werden. Als Sensoren habe ich mir die DS18B20 heraus gesucht. Die Sensoren sollen jeweils einen eigenen Pin belegen, damit eine Verwechselung minimiert wird.
Ich habe meinen Sketch jetzt angefangen und bekomme prompt die erste Fehlermeldung, ist es überhaupt möglich die Sensoren so zu programmieren oder bin ich da auf den Holzweg? Wenn ich eine Fehler mache, wie müsste ich den Sketch verfassen damit ein Sensor einen eigen Pin belegt?

[code]
// Zirkulationsregelung
#include <OneWire.h> //==> Temperatursensor
#include <DallasTemperature.h> //==> Temperatursensor
//#include <LiquidCrystal_I2C.h> //==> Display
//LiquidCrystal_I2C lcd(0x27, 20, 4); //==> Zeichen und Zeilen Display

//--------------------Einstellungen---------------------------------

#define Sensor_Warmwasser 2 //==> Daten Pin Sensor (DS18B20) Warmwasser
#define Sensor_Zirkulation 4 //==> Daten Pin Sensor (DS18B20) Zirkulation
#define Taster 7 //==> Taster für Umstellung Dauerbetrieb Pumpe
#define Relais 5 //==> Relais für die Zirkulationspumpe
#define LED_Pin 6 //==> LED an wenn Zirkulationspumpe an ist

//------------------------------------------------------------------
OneWire oneWire(Sensor_Warmwasser);
OneWire oneWire(Sensor_Zirkulation);
DallasTemperature sensors(&oneWire);






void setup() {
  //lcd.init();
  //lcd.backlight();
  sensors.begin();
  pinMode(Relais, OUTPUT);
  digitalWrite(Relais, LOW);
  pinMode(Taster,INPUT_PULLUP);
  
}

void loop() {
  if (digitalRead(Taster) == 0){
   
    
  }
  
  

}
[/code]

Danke schon mal im voraus für eure Mühe!!
Liebe Grüße
Kalle

PS: Ich bin echt noch ein Blutiger Anfänger und meine erlernten Grundkenntnisse liegen schon fast 25 zurück. Bitte verzeiht mir evtl. für euch Dumme fragen bzw. nachfragen wenn ich etwas nicht gleich verstehe.

Das sind ganz normale Variablen. Nur dass die halt als Typ nicht "int" oder "byte" haben, sondern eine Klasse. Wie jede andere Variable müssen die unterschiedliche Namen haben.

Und du brauchst entsprechend auch zwei DallasTemperature Objekte. Das ist der eigentliche Sensor. Die OneWire Klasse macht nur dir darunterliegende Kommunikation.

Wenn beide Sensoren am gleichen Pin hängen braucht man nur jeweils ein Objekt. Die Sensoren kann man dann mit einem Index oder nach deren Adresse unterscheiden

Hallo
Welche Fehlermeldungen bekommst du?

Etwas in die Richtung dass ein Variablen-Name schon verwendet wurde. Das sollte man sofort sehen

OneWire oneWire(Sensor_Warmwasser);
OneWire oneWire(Sensor_Zirkulation);
Arduino: 1.8.16 (Windows 10), Board: "Arduino Uno"


Zirkulationspumpenregelung:18:28: error: 'oneWire' was not declared in this scope

 DallasTemperature sensors(&oneWire);

                            ^~~~~~~

C:\Users\reinh\OneDrive\Dokumente\Arduino\Zirkulationspumpenregelung\Zirkulationspumpenregelung.ino:18:28: note: suggested alternative: 'oneWire2'

 DallasTemperature sensors(&oneWire);

                            ^~~~~~~

                            oneWire2

exit status 1

'oneWire' was not declared in this scope






Das ist die Fehlermeldung

Der Compiler sagt dir sogar was du machen sollst:

Die angemeckerte Zeile ist aber ein Folge-Fehler. Der ursprüngliche Fehler ist dass er der Namen nicht nochmal vergeben kann.

Ok, da fehlt mir jetzt die Erfahrung. Wie müsste es den geschrieben werden das es funktioniert?

Die zwei OneWire Objekte müssen unterschiedliche Variablen-Namen haben. "OneWire" ist der Name der Klasse. "oneWire" ist der Name der Variable. Mach z.B. "oneWire1" und "oneWire2" daraus.
Und genauso mit den zwei DallasTemperature Objekten die du brauchst.

Das geht genausowenig:

int zahl;
int zahl;

Hat es einen besonderen Grund dass du die an 2 Pins willst? Das geht natürlich, aber OneWire ist ein Bus. Man kann da problemlos mehrere Sensoren an einen Pin hängen. Das kann den Code etwas einfacher machen.

Hallo
Starte ganz einfach mit diesem Tutorial und wenn das gut läuft dann passe dieses an deine Anforderungen an:

Richte Dich nach dem Bibliotheksbeispiel TwoPin_DS18B20.ino.

Ungefähr so:

// Zirkulationsregelung
#include <OneWire.h> //==> Temperatursensor
#include <DallasTemperature.h> //==> Temperatursensor
//#include <LiquidCrystal_I2C.h> //==> Display
//LiquidCrystal_I2C lcd(0x27, 20, 4); //==> Zeichen und Zeilen Display

//--------------------Einstellungen---------------------------------

#define Sensor_Warmwasser 2 //==> Daten Pin Sensor (DS18B20) Warmwasser
#define Sensor_Zirkulation 4 //==> Daten Pin Sensor (DS18B20) Zirkulation
#define Taster 7 //==> Taster für Umstellung Dauerbetrieb Pumpe
#define Relais 5 //==> Relais für die Zirkulationspumpe
#define LED_Pin 6 //==> LED an wenn Zirkulationspumpe an ist

//------------------------------------------------------------------
OneWire oneWire_Warmwasser(Sensor_Warmwasser);
OneWire oneWire_Zirkulation(Sensor_Zirkulation);
DallasTemperature sensors_Warmwasser(&oneWire_Warmwasser);
DallasTemperature sensors_Zirkulation(&oneWire_Zirkulation);

void setup() {
  //lcd.init();
  //lcd.backlight();
  sensors_Warmwasser.begin();
  sensors_Zirkulation.begin();
  pinMode(Relais, OUTPUT);
  digitalWrite(Relais, LOW);
  pinMode(Taster,INPUT_PULLUP);
}

void loop() {
  if (digitalRead(Taster) == 0){
  }
}

Danke für die Hilfestellungen, jetzt wo ich es lese ist es ja fast schon offensichtlich :man_facepalming:. Ich werde mich gleich darüber machen und es Probieren.

Dann mal los :smiley:
Viel Spass beim Programmieren in C++.

Ja hatte es. Diese Schaltung soll für den Dauerbetrieb sein. Falls ein Sensor mal den Geist aufgibt und getauscht werden soll, will ich eine Verwechselung der Sensoren vermeiden. Man könnte sie ja kennzeichnen aber die Erfahrung zeigt, das solche Kennzeichnungen in ein paar Jahren kaum noch lesbar ist. So schaue ich auf den Pin und ich weiß sofort bescheid.
Dazu kommt noch, ich weiß nicht ob es so einfach mit dem Sensorwechsel funktioniert und der Arduino sofort weiß das der getauschte Sensor auch wieder die Aufgabe hast wie der vorherige defekte. Ich bilde mir ein, wenn ein jeder Sensor einen eigenen Pin hat, dürfte es keine Probleme geben. Es soll alles Plug and Play werden.
Wenn ich da falsch liege lasse ich mich gerne eines besseren belehren :sweat_smile:.

Es kommt darauf an wie man sie anspricht. Wenn man es nach Adresse macht macht muss man den Sketch anpassen. Man kann es auch nach Index machen. Dann geht es nach der Reihenfolge auf dem Bus.

Wie gesagt, jeder Sensor einen eigenen Pin ist ok. Dieser "Anwendungsfall" ist genau dafür

Es gibt auch eine andere Möglichkeit der Kennzeichnung. :slight_smile:
Die Sensoren haben einen beschreibbaren Speicher, der dafür 'missbraucht' werden kann.

In der DallasTemperature lib, gibt es die Beispiele "UserDataBatch" und UserDataDemo.

Ich habe meine Sensoren alle durchnummeriert, das funktioniert sehr gut.

Diese Schaltung ist für mein Bruder gedacht. Ziel ist es, wenn mal ein Sensor defekt sein sollte, dass es ihn selber tauschen kann ohne den Sketch zu bearbeitet.
Also alten Sensor weg, neuer dran und läuft. :wink:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.