Projektvorstellung Regelung Fussbodenheizung

Hallo,
ich wollte mal kurz mein Projekt Einzelraumregelung für Fußbodenheizung vorstellen.
Da ich vor knapp 30 Jahren leider keine Kabel von den einzelnen Räumen zur Heizungsanlage verlegt habe, mußte ich jetzt alles mit Funksendern ausstatten. In den Sendekisten ist ein DS18B20, ein Poti zum Ändern der Raumtemperatur um +/- 5K, sowie ein billiger 433MHz Sender. Übertragen wird die ist-Temperatur, die eingestellte Temperaturdifferenz, die Batteriespannung, sowie eine ID für jeden Sender.
Auf der Empfangsseite habe ich einen billigen Empfänger, eine DS3231, sowie ein 8-fach SSR Relais Board an einem Pro Mini mit denen ich 8 Thermoelektrische Stellantriebe 230V NC ansteuere. Ich brauche bei mir keine Mischersteuerung und keine Außentemperatur abhängige Regelung, da das bereits meine Heizungsanlage macht.
Vielleicht hat jemand von euch ähnliche Probleme und kann die Regelung gebrauchen.
LG
Ardubu

/*ATtiny_DS18B20_1_Funk_Sender_ID_VBat_T_delta.ino
  Attiny Core Files von hier:https://code.google.com/p/arduino-tiny/
  Bevor das Programm auf den Attiny übertragen wird, muß der Bootloader installiert werden
  um den Attiny auf 8MHz zu Fusen
  5974 Bytes
  Bu.Kli.
  09.02.2014
Belegung des Attiny:
   1  (SS)PB5  |  \/  |  Vcc         8
   2 ADC3 PB3  |      |  PB2 (SCK)   7
   3      PB4  |      |  PB1 (MISO)  6
   4      GND  |      |  PB0 (MOSI)  5
8k Falsh, 512Bytes Ram
*/
#include <OneWire.h>
#include <VirtualWire.h> // bei verwendung von VirtualWire.h und JeeLib.h, die crc16.h
#include <JeeLib.h>      // von C:\Program Files (x86)\Arduino\hardware\tools\avr\avr\include\util nach 
                         //C:\Program Files (x86)\Arduino\libraries\VirtualWire\util kopieren 
                         //und vorher die bestehende Datei umbenennen.

#undef abs
#undef double
#undef round

ISR(WDT_vect) {Sleepy::watchdogEvent();}
 
#define tx_Pin PB1 //auf dem ProMini 12
#define dallas_Data_Pin PB4 //auf dem ProMini 9
#define T_delta_Pin PB3 //auf dem ProMini 14
#define schlafzeit 39000 //zeit in ms, die der MC schlafen soll
char ID[5]="ID01"; //muß für jeden Sender fortlaufend einzeln vergeben werden von 00 bis xx
char UBat[5];
char Temp_ist[5];
char Temp_delta[5];
char line[22];
byte i;
byte present = 0;
byte data[12];
byte addr[8];
int T_ist;
int T_delta;

OneWire  ds(dallas_Data_Pin); 
//___________________________________________________________________________________________________________________
int readVcc() {
  bitClear(PRR, PRADC); ADCSRA |= bit(ADEN); // AD-Wandler einschalten
  long result;
  // Read 1.1V reference against Vcc
  #if defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    ADMUX = _BV(REFS0) | _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  #elif defined (__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || defined(__AVR_ATtiny84__)
    ADMUX = _BV(MUX5) | _BV(MUX0);
  #elif defined (__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
    ADMUX = _BV(MUX3) | _BV(MUX2);
  #else
    ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); //ATmega328
  #endif  

  delay(5); 
  ADCSRA |= _BV(ADSC); 
  while (bit_is_set(ADCSRA,ADSC));
  result = ADCL;
  result |= ADCH<<8;
  result = 1073434L / result; 
  ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // AD-Wandler ausschalten um Strom zu sparen
  return result;
}
//______________________________________________________________________________________________________________________
 void setup(void) {
   analogReference(INTERNAL);
    DDRB=6;//PB1 + PB2 als Ausgang setzen
    vw_setup(2000);
    vw_set_tx_pin(tx_Pin);
  }
//_______________________________________________________________________________________________________________________
void loop(void) {
    
  
   PORTB=4;//PB2 auf High setzen
   bitClear(PRR, PRADC); 
   ADCSRA |= bit(ADEN); // AD-Wandler einschalten
   delay(5);
   T_delta=analogRead(T_delta_Pin);
   ADCSRA &= ~ bit(ADEN); bitSet(PRR, PRADC); // AD-Wandler ausschalten um Strom zu sparen
   
    //Dallas DS18B20 auslesen
    if ( !ds.search(addr)) {
    ds.reset_search();
    return;}
    ds.reset();
    ds.select(addr);
    ds.write(0x44,0);  // 0=ohne 1=mit parasite power
    delay(750);        // vielleicht sind 750ms genug
    present = ds.reset();
    ds.select(addr);    
    ds.write(0xBE);             
    for ( i = 0; i < 9; i++) {   
    data[i] = ds.read();}
    T_ist =  ((data[1] << 8) + data[0] );
      //Umwandlung Integer zu Char
      itoa(readVcc(),UBat,10);
      itoa(T_ist,Temp_ist,10);
      itoa(T_delta,Temp_delta,10);
        //Sendestring aufbereiten
        strcpy(line,ID);
        strcat(line,",");
        strcat(line,UBat);
        strcat(line,",");
        if (T_ist<1000){strcat(line,"0");}
        if (T_ist<100){strcat(line,"0");}
        if (T_ist<10){strcat(line,"0");}
        strcat(line,Temp_ist);
        strcat(line,",");
        if (T_delta<1000){strcat(line,"0");}
        if (T_delta<100){strcat(line,"0");}
        if (T_delta<10){strcat(line,"0");}
        strcat(line,Temp_delta);
    //Senden
    vw_send((uint8_t *)line, strlen(line)); 
    vw_wait_tx();      

    PORTB=0;//alle Ausgänge auf 0 setzen
      Sleepy::loseSomeTime(schlafzeit);  //Schlafzeit in ms max 60000
    
}

Regelung_FBH_Empf_3.ino (4.62 KB)

Vielen Dank für die Bereitstellung.
Hast du auf der Senderseite auch einen Arduino sitzen ? Ich suche noch nach einer Möglichkeit ohne diesen die Raumtemperatur zu übertragen

Darkstyle:
Vielen Dank für die Bereitstellung.
Hast du auf der Senderseite auch einen Arduino sitzen ? Ich suche noch nach einer Möglichkeit ohne diesen die Raumtemperatur zu übertragen

Im Sketch steht "ATtiny" und da sicher der 85.
Den brauchst du mindestens, oder eben einen Arduino, um die Temperatur zu senden.

@ardubu
Auch von mir ein Dankeschön für die Offenlegung des Sketches.
Das freie Senden der einzelnen Sender macht keine Probleme ?

für die Sender nutze ich Attiny 85, und einen 14500 Lipo (900mAh), den Sketch habe ich noch etwas abgeändert, damit er nur alle 2 Minuten sendet, damit habe ich eine Akkulaufzeit von ca. einem Jahr. Ich habe mal 2 Bilder vom Sender angehängt.

@Hotsystem die Anlage läuft seit 2013 störungsfrei.

ardubu:
für die Sender nutze ich Attiny 85, und einen 14500 Lipo (900mAh), den Sketch habe ich noch etwas abgeändert, damit er nur alle 2 Minuten sendet, damit habe ich eine Akkulaufzeit von ca. einem Jahr. Ich habe mal 2 Bilder vom Sender angehängt.

@Hotsystem die Anlage läuft seit 2013 störungsfrei.

danke...sehr schön.
Ok, hier ist es auch nicht so tragisch, wenn sich 2 Signale mal überschneiden.

Warum vermisse ich das Projekt in "zeigt her eure geilen Projekte" ?

Warum vermisse ich das Projekt in "zeigt her eure geilen Projekte" ?

wie du oben siehst, habe ich das Projekt hier im Feb.2014 eingestellt, da gab es das "zeigt her eure geilen Projekte" noch nicht.

ardubu:
wie du oben siehst, habe ich das Projekt hier im Feb.2014 eingestellt, da gab es das "zeigt her eure geilen Projekte" noch nicht.

OK...das kann man auch noch nachträglich machen. :wink:
Also rein damit.
Oder diesen Thread darin verlinken.

Ahh die attinys kannte ich noch nicht.. darüber werde ich es auch machen, nur etwas abwandeln :slight_smile: Danke