da bin ich wieder. Meine Relay Karte, das Mega 2560 und das Wiznet sind schon da.
Also denke ich das ich doch schonmal die ersten geh versuche wagen kann.
Die arduino Software habe ich runtergeladen aber wo komme ich zum Virtuellen steckbrett ????
ein freund hatte mir das mal gezeigt in diesem virtuellem Steckbrett konnte man die komplette schaltung quasi fertig aufbauen und das ganze dan virtuell testen um nachzuvolziehen ob es theoretisch "wenn in der praxis gleich aufgebaut" auch funktioniert.
ich bin mal gespannt wann die dgzrs in der Nordheide einläuft und hoffe das ich bis dahin ein Haus boot und kein U-hausboot habe 8)
Mal sehen heute habe ich viel zeil daher werde ich mich heute mal mit der Temperaturerfassung mit den DS18B20 widmen.
I so nun habe ich folgenden Quellcode gefunden: #include <OneWire.h>
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*, 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 = ds.read();_ _ Serial.print(data*, HEX); Serial.print(" "); } Serial.print(" CRC="); Serial.print(OneWire::crc8(data, 8), HEX); Serial.println(); // convert the data to actual temperature*
* 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*
* // 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"); }* Wenn ich den aber aufspiele und die Sensoren entsprechend der Website von der der Code ist anschließe (Links masse, mitte Data, rechts +5v) dann bekomme ich nur no more adresses ausgelesen Mfg der Junkie_
hast erecht habe ich vergessen zu erwähnen ist aber drin.
den fehler habe ich auch schon gefunden hab zwar + auf den pull up gegeben aber nicht auf den rechten :~ :~
nun habe ich doch mal was hingebastelt aber irgendwie will das nicht so richtig würde mich sehr freuen wenn mir einer Helfen kann.
Hier mal der Quellcode:
#include <OneWire.h>
// OneWire DS18B20 Temperature Example
//
int Relay = (22);
OneWire ds(23); // on pin 10
void setup(void) {
pinMode(Relay, OUTPUT);
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)) {
delay(250);
return;
}
type_s = 0; // konstant festgelegt auf Sensor mit Chip = DS18B20
// erkennung vom sensor
switch (addr[7]) {
case 0xC8:
Serial.println(" Kessel ");
break;
case 0xE4:
Serial.println(" Vorlauf ");
break;
case 0xD9:
Serial.println(" Ruecklauf ");
break;
default:
Serial.println(" Unbekannter Sensor.");
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // start conversion, with parasite power on
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
for ( i = 0; i < 9; i++) { // we need 9 bytes
data[i] = ds.read();
Serial.print(" ");
}
// convert the data to actual temperature
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
// default is 12 bit resolution, 750 ms conversion time
}
celsius = (float)raw / 16.0;
Serial.print(" Temperatur = ");
Serial.print(celsius);
Serial.print(" Celsius, ");
if (0xC8 >=25) //abfrage: ist Temperatur über 25°C (funktioniert nicht)
{
digitalWrite(Relay, HIGH); //wenn ja Relay an
}
else
{
digitalWrite(Relay, LOW); // wenn nein aus
}
}
die if funktion funktioniert nicht richtig wenn der Sensor unter 25°C geht schaltet das Relay nicht ab
Hall Ulf,
ich persönlich mag diese Programmierung mit den ganzen "Hieroglyphen" wie 0xC8 und so gar nicht weil man das nicht
vernünftig lesen kann.
Es gibt für die 18B20 eine DallasTemperature.h, dann kann man mit sensors.getTempC die Temperatur direkt in °C auslesen
und diese auch abfragen.
Das ist meiner Meinung nach viel einfacher und auch besser zu verstehen.
gruß
leider bin ich eher noch der Dau in sachen Programmierung könntest du mir weiterhelfen wie das ganze dann aussehen muß ??? damit ich auch die zuordnung sicherstellen kann ???
Hallo Ulf,
wenn du willst kann ich dir eine komplette Programmierung schicken. Diese kann folgendes: Steuerung der Gasheizung, einer Solaranlage sowie eines wasserführenden Kachelofens.
Die Programmierung ist sehr ausführlich auskommentiert, da kannst du sicherlich vieles verwenden.
Schick mir mal deine Mail Adresse
Gruß
Bernward
Hallo allerseits ich habe mich leider länge nicht melden können da ich seit April einen neuen Arbeitgeber habe wo ich jetzt erstmal sehr stark eingebunden war.
Nun legt sich aber der anfangsstreß und ich kann mich wieder den wesentlichem widmen.
Danke nochmal für eure bisherige unterstützung ich hoffe ich kann auch in zukunft auf euch zählen!!!