Forum: Mikrocontroller und Digitale Elektronik DHT22 und Funksteckdosen


von Arduino (Gast)


Lesenswert?

Hallo,

ich kann bisher mit einem Funkmodul meine Funksteckdosen ein- und 
ausschalten. Ebenso kann ich mit dem DHT22 die Temperatur messen.

Nun möchte ich ab einer gewissen Temperatur eine Steckdose einschalten. 
Wie mache ich das? Dies ist mein Code bisher:
1
// Example testing sketch for various DHT humidity/temperature sensors
2
// Written by ladyada, public domain
3
4
#include "DHT.h"
5
#include <RCSwitch.h>
6
7
RCSwitch mySwitch = RCSwitch();
8
9
#define DHTPIN 8     // what pin we're connected to
10
11
// Uncomment whatever type you're using!
12
//#define DHTTYPE DHT11   // DHT 11 
13
#define DHTTYPE DHT22   // DHT 22  (AM2302)
14
//#define DHTTYPE DHT21   // DHT 21 (AM2301)
15
16
// Connect pin 1 (on the left) of the sensor to +5V
17
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
18
// to 3.3V instead of 5V!
19
// Connect pin 2 of the sensor to whatever your DHTPIN is
20
// Connect pin 4 (on the right) of the sensor to GROUND
21
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
22
23
// Initialize DHT sensor for normal 16mhz Arduino
24
DHT dht(DHTPIN, DHTTYPE);
25
// NOTE: For working with a faster chip, like an Arduino Due or Teensy, you
26
// might need to increase the threshold for cycle counts considered a 1 or 0.
27
// You can do this by passing a 3rd parameter for this threshold.  It's a bit
28
// of fiddling to find the right value, but in general the faster the CPU the
29
// higher the value.  The default for a 16mhz AVR is a value of 6.  For an
30
// Arduino Due that runs at 84mhz a value of 30 works.
31
// Example to initialize DHT sensor for Arduino Due:
32
//DHT dht(DHTPIN, DHTTYPE, 30);
33
34
void setup() {
35
  Serial.begin(9600); 
36
  Serial.println("DHTxx test!");
37
 
38
  dht.begin();
39
  // Transmitter is connected to Arduino Pin #10  
40
  mySwitch.enableTransmit(10);
41
  // Optional set pulse length.
42
   mySwitch.setPulseLength(313);
43
  // Optional set protocol (default is 1, will work for most outlets)
44
   mySwitch.setProtocol(1);
45
  // Optional set number of transmission repetitions.
46
  // mySwitch.setRepeatTransmit(15);
47
  
48
}
49
50
void loop() {
51
  // Wait a few seconds between measurements.
52
  delay(2000);
53
54
  // Reading temperature or humidity takes about 250 milliseconds!
55
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
56
  float h = dht.readHumidity();
57
  // Read temperature as Celsius
58
  float t = dht.readTemperature();
59
  // Read temperature as Fahrenheit
60
  float f = dht.readTemperature(true);
61
  
62
  // Check if any reads failed and exit early (to try again).
63
  if (isnan(h) || isnan(t) || isnan(f)) {
64
    Serial.println("Failed to read from DHT sensor!");
65
    return;
66
  }
67
68
  // Compute heat index
69
  // Must send in temp in Fahrenheit!
70
  float hi = dht.computeHeatIndex(f, h);
71
72
  Serial.print("Humidity: "); 
73
  Serial.print(h);
74
  Serial.print(" %\t");
75
  Serial.print("Temperature: "); 
76
  Serial.print(t);
77
  Serial.print(" *C ");
78
  Serial.print(f);
79
  Serial.print(" *F\t");
80
  Serial.print("Heat index: ");
81
  Serial.print(hi);
82
  Serial.println(" *F");
83
 
84
85
  mySwitch.send("000001000000010101010001 "); //einschalten
86
  delay(1000);  
87
  mySwitch.send("000001000000010101010100 "); //ausschalten
88
  delay(1000);
89
}


Wie man sieht, wird bisher die Steckdose einfach nur ein- und 
ausgeschaltet.

Irgendwie benötige ich nun einen If Befehl, richtig? Wo kommt dieser hin 
und wie sieht er aus?

von Johannes (Gast)


Lesenswert?

Naja,
eigentlich gibt es nur einen platz wo der hinkommen könnte und den würde 
man sehen, wenn man sich den Code mal angucken würde.
Dann fragste einfach, ob die gemessene Temperatur größer als der zu 
vergleichenden Temperatur ist.
wenn ja, einschalten ansonsten ausschalten

von Pete K. (pete77)


Lesenswert?

Arduino schrieb:
> Dies ist mein Code

Sicher?


if (t>20.0) mySwitch.send("000001000000010101010001 ") else 
mySwitch.send("000001000000010101010100 ");



Was für ein grottiger Code da oben. Wie wäre es mal mit einem C-Buch? Wo 
ist eigentlich delay deklariert?

: Bearbeitet durch User
von Arduino (Gast)


Lesenswert?

Pete K. schrieb:
> Was für ein grottiger Code da oben. Wie wäre es mal mit einem C-Buch? Wo
> ist eigentlich delay deklariert?

Ich habe beide Codes erst einzeln gehabt und dann versucht, die zu 
kombinieren. :/

Wie macht man es denn besser?

von eiderdaus (Gast)


Lesenswert?

Hysterese nicht vergessen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.