Startseite Skripte für das Wintersemester 2018/19 Projekt „Citizen Science“ Arduino Grundlagen Temperatur- und Luftfeuchtigkeits-Sensor-Kombination


Temperatur- und Luftfeuchtigkeits-Sensor-Kombination

Der Sensor kombiniert das Messen von Temperatur und Luftfeuchtigkeit

Der Code ist ziemlich komplex, weil die Werte für Temperatur und Feuchtigkeit ausgelesen müssen!

Arduino

// http://linksprite.com/wiki/index.php5?title=Advanced_Sensors_Kit_for_Arduino

int dht_dpin = A0;

byte bGlobalErr;
byte dht_dat[5];

void setup() {
  InitDHT();
  Serial.begin(9600);
  delay(300);
  Serial.println("Luftfeuchtigkeit und Temperatur");
  delay(700);
}

void loop() {
  ReadDHT();
  switch (bGlobalErr) {
    case 0:
      Serial.print("Aktuelle Luftfeuchtigkeit = ");
      Serial.print(dht_dat[0], DEC);
      Serial.print(".");
      Serial.print(dht_dat[1], DEC);
      Serial.print("% ");
      Serial.print("Temperatur = ");
      Serial.print(dht_dat[2], DEC);
      Serial.print(".");
      Serial.print(dht_dat[3], DEC);
      Serial.println("C");
      break;
    case 1:
      Serial.println("Error 1: DHT start condition 1 not met.");
      break;
    case 2:
      Serial.println("Error 2: DHT start condition 2 not met.");
      break;
    case 3:
      Serial.println("Error 3: DHT checksum error.");
      break;
    default:
      Serial.println("Error: Unrecognized code encountered.");
      break;
  }
  delay(800);
}

void InitDHT() {
  pinMode(dht_dpin, OUTPUT);
  digitalWrite(dht_dpin, HIGH);
}

void ReadDHT() {
  bGlobalErr = 0;
  byte dht_in;
  byte i;
  digitalWrite(dht_dpin, LOW);
  delay(20);
  digitalWrite(dht_dpin, HIGH);
  delayMicroseconds(40);
  pinMode(dht_dpin, INPUT);

  //delayMicroseconds(40);
  dht_in = digitalRead(dht_dpin);
  if (dht_in) {
    bGlobalErr = 1;
    return;
  }

  delayMicroseconds(80);
  dht_in = digitalRead(dht_dpin);
  if (!dht_in) {
    bGlobalErr = 2;
    return;
  }

  delayMicroseconds(80);
  for (i = 0; i < 5; i++)
    dht_dat[i] = read_dht_dat();
  pinMode(dht_dpin, OUTPUT);
  digitalWrite(dht_dpin, HIGH);
  byte dht_check_sum =
    dht_dat[0] + dht_dat[1] + dht_dat[2] + dht_dat[3];
  if (dht_dat[4] != dht_check_sum)
  {
    bGlobalErr = 3;
  }
}

byte read_dht_dat() {
  byte i = 0;
  byte
  result = 0;
  for (i = 0; i < 8; i++) {
    while (digitalRead(dht_dpin) == LOW);
    delayMicroseconds(30);
    if (digitalRead(dht_dpin) == HIGH)
      result |= (1 << (7
                       -
                       i));
    while (digitalRead(dht_dpin) == HIGH);
  }
  return result;
}