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?