Smarthome steuerung mit klimaanlage

Guten Tag

wenn ich diesen sketch auf das arduino hochlade habe ich ein smart home system und alles funktioniert heisst ich kann die 4 relays mit dem handy steuern.

Der Sketch:

 //Pause before taking next measurement
    delay(interval); 
 
  //Trigger reading by holding data pin low for 18ms
    pinMode(data_pin, OUTPUT);
    digitalWrite(data_pin,LOW);
    delay(18);
    digitalWrite(data_pin,HIGH);
    pinMode(data_pin, INPUT_PULLUP); 
  
  //read 41 bits of signal
    for(int i=0;i<=40;i++){
      result[i]=(pulseIn(data_pin, HIGH)>40);
    }

  //Extract Humidity (from byte 1)
    humidity=0;
    for (int i=1;i<=8;i++){
      humidity=humidity<<1;
      if (result[i]) humidity|=1;
    }
      
  //Extract Temperature (from Byte 3)
    temp=0;
    for (int i=17;i<=24;i++){
      temp=temp<<1;
      if (result[i]) temp|=1;
    }
    
   //Send data over Bluetooth
    Serial.print("*T"+String(temp)+"*");
    Serial.print("*H"+String(humidity)+"*");  // relay_4 turn ON

    if(temp <= 25)
    {
      digitalWrite (relay_4, HIGH);      
    }
    else if (tem > 25)
    {
      digitalWrite (relay_4, LOW);
    }

wenn ich jedoch den dht11 sensor einbaue um sowas wie ne klimaanlage zu erhalten funktionniert gar nichts mehr. Relay 1 und 2 sind für beliebige geräte, bei Relay 3 möchte ich eine elektroheizung anhängen und bei relay 4 möchte ich eine kühlung anhängen. Ich habe den sketch für den dht11 sensor bei state 3 und vier in die geschweiften klammern gesetzt anstatt "digitalWrite(Relay_3 bzw. 4, LOW)". und habe dann die if bedingung genutz heisst wenn die themperatur kleiner als 20°c ist soll relay 3 (Heizung) angeschalten werden und bei mehr als 25°C soll relay 4 (kühlung) angeschalten werden. mit dem handy soll man dazu zusätzlich die heizung sowie die kühlung manuell abschalten können. Doch nun funktionniert wie ja schon gesagt gar nichts mehr. Nicht mal mehr relay 1 und 2.

Der sketch für die ansteuerung vom dht11 sieht so aus:

// DHT11 Temperature and Humidity Via Bluetooth
// By keuwlsoft:  www.keuwl.com  26th Sept 2015
// cc Attribution-ShareAlike

// The DHT11 returns 5 bytes of data:
// Bytes 1 & 2 are Humidity, Bytes 3 & 4 are Temperature
// and Byte 5 is the checksum (ignored in this demo).
// Since sensor is only 8-bit resolution, we ignore bytes 2 and 4.
// Internal 20k pullup on Arduino used, so no external 5k resistor needed.
// Powered from digital output lines so no breadboard/cables required.
#
int data_pin = 10;
int vcc_pin=9;
int gnd_pin=8;
boolean result[41]; //holds the result
int interval=2000; //Sample every 2 seconds
unsigned int temp; //in celcius
unsigned int humidity; //in %RH

void setup() {

  //Supply power to DHT11 (Uses upto 2.5mA)
    pinMode(gnd_pin, OUTPUT);
    pinMode(vcc_pin, OUTPUT);
    digitalWrite(gnd_pin,LOW);
    digitalWrite(vcc_pin,HIGH);
    pinMode(relay_4, OUTPUT);
    digitalWrite(relay_4, HIGH);

    
  //Initiate Serial for Bluetooth Communication
    Serial.begin(9600); 
}

void loop() {
  //Pause before taking next measurement
    delay(interval); 
 
  //Trigger reading by holding data pin low for 18ms
    pinMode(data_pin, OUTPUT);
    digitalWrite(data_pin,LOW);
    delay(18);
    digitalWrite(data_pin,HIGH);
    pinMode(data_pin, INPUT_PULLUP); 
  
  //read 41 bits of signal
    for(int i=0;i<=40;i++){
      result[i]=(pulseIn(data_pin, HIGH)>40);
    }

  //Extract Humidity (from byte 1)
    humidity=0;
    for (int i=1;i<=8;i++){
      humidity=humidity<<1;
      if (result[i]) humidity|=1;
    }
      
  //Extract Temperature (from Byte 3)
    temp=0;
    for (int i=17;i<=24;i++){
      temp=temp<<1;
      if (result[i]) temp|=1;
    }
    
   //Send data over Bluetooth
    Serial.print("*T"+String(temp)+"*");
    Serial.print("*H"+String(humidity)+"*");
}

und die zusammenfügung sieht so aus:

#define relay_1 4
#define relay_2 5
#define relay_3 6
#define relay_4 7

int state = 0;

int data_pin = 10;
int vcc_pin=9;
int gnd_pin=8;
boolean result[41]; //holds the result
int interval=2000; //Sample every 2 seconds
unsigned int temp; //in celcius
unsigned int humidity; //in %RH


void setup() {
  Serial.begin(9600);
  pinMode(relay_1, OUTPUT);
  pinMode(relay_2, OUTPUT);
  pinMode(relay_3, OUTPUT);
  pinMode(relay_4, OUTPUT);

  // Ininially all relay pin HIGH because relay active LOW
  digitalWrite(relay_1, HIGH);
  digitalWrite(relay_2, HIGH);
  digitalWrite(relay_3, HIGH);
  digitalWrite(relay_4, HIGH);

    pinMode(gnd_pin, OUTPUT);
    pinMode(vcc_pin, OUTPUT);
    digitalWrite(gnd_pin,LOW);
    digitalWrite(vcc_pin,HIGH);

}

void loop(void) {
  loop();

  if (Serial.available() > 0)
  {
    state = Serial.read();
  }
  if (state == 'A')
  {
    digitalWrite(relay_1, HIGH);  // relay_1 turn OFF
    state = 0;
  }
  else if (state == '1')
  {
    digitalWrite(relay_1, LOW); // relay_1 turn ON
    state = 0;
  }
  else if (state == 'B')
  {
    digitalWrite(relay_2, HIGH);  // relay_2 turn OFF
    state = 0;
  }
  else if (state == '2')
  {
    digitalWrite(relay_2, LOW);  // relay_2 turn ON
    state = 0;
  }
  else if (state == 'C')
  {
    digitalWrite(relay_3, HIGH);  // relay_3 turn OFF
    state = 0;
  }
  else if (state == '3')
  {
 
  //Trigger reading by holding data pin low for 18ms
    pinMode(data_pin, OUTPUT);
    digitalWrite(data_pin,LOW);
    delay(18);
    digitalWrite(data_pin,HIGH);
    pinMode(data_pin, INPUT_PULLUP); 
  
  //read 41 bits of signal
    for(int i=0;i<=40;i++){
      result[i]=(pulseIn(data_pin, HIGH)>40);
    }
      
  //Extract Temperature (from Byte 3)
    temp=0;
    for (int i=17;i<=24;i++){
      temp=temp<<1;
      if (result[i]) temp|=1;
    }

    if(temp >= 20)
    {
      digitalWrite (relay_4, HIGH);      
    }
    else if (temp < 20)
    {
      digitalWrite (relay_4, LOW);
    }
    state = 0;
  }
  else if (state == 'D')
  {
    digitalWrite (relay_4, HIGH); // relay_4 turn OFF
    state = 0;
  }
  else if (state == '4')
 
{ 
  //Trigger reading by holding data pin low for 18ms
    pinMode(data_pin, OUTPUT);
    digitalWrite(data_pin,LOW);
    delay(18);
    digitalWrite(data_pin,HIGH);
    pinMode(data_pin, INPUT_PULLUP); 
  
  //read 41 bits of signal
    for(int i=0;i<=40;i++){
      result[i]=(pulseIn(data_pin, HIGH)>40);
    }
      
  //Extract Temperature (from Byte 3)
    temp=0;
    for (int i=17;i<=24;i++){
      temp=temp<<1;
      if (result[i]) temp|=1;
    }

    if(temp <= 25)
    {
      digitalWrite (relay_4, HIGH);      
    }
    else if (temp > 25)
    {
      digitalWrite (relay_4, LOW);
    }
    state = 0;
  }
  }

kann mir jemand sagen wiso dannach gar nichts mehr funktionniert?

Du kannst nicht die loop innerhalb der loop, also sich selbst aufrufen.

HotSystems:
Du kannst nicht die loop innerhalb der loop, also sich selbst aufrufen.

würde es mit einer while schleife funktionieren? oder gibt es sonst eine lösung?

aaronwaelchli:
würde es mit einer while schleife funktionieren? oder gibt es sonst eine lösung?

Sorry, aber du hast nichts verstanden.
Du hast offensichtlich die Antworten in deinem vorherigen Beitrag nicht gelesen.

Da hatte ich und andere dir das schon geschrieben.
Wenn du das nicht mal lesen willst, verstehe ich nicht, was du hier fragst.

P.S.
Ich hoffe, ich war nicht frech. :wink:

wenn ich diesen sketch auf das arduino hochlade habe ich ein smart home system und alles funktioniert heisst ich kann die 4 relays mit dem handy steuern.

glaub' ich nicht.

zwieblum:
glaub' ich nicht.

wiso nicht. es funktionniert. natürlich braucht es noch ein hc-05 modul

aaronwaelchli:
wiso nicht. es funktionniert. natürlich braucht es noch ein hc-05 modul

Da hat Zwieblum schon völlig Recht.

Der kann nicht funktionieren, da es nur ein Fragment ist und nicht komplett.
Du solltest auch mal nachdenken, warum du unfertige Sachen hier postest.

Naja ...

Die Weltherrschaft erlangt man nicht, wenn man jeden Straßenkehrer mit ins Boot holt ...

in diesem Sinne :slight_smile: