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
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
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.
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 .
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
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.