Warum gibt mir DHT Sensor im seriellen Monitor immer 0°C und 0% Luftfeuchtigkeit an?

Die Verdrahtung stimmt ganz sicher aber ich habe schon mehrere Programme probiert und der Sensor wird zwar erkannt, gibt aber immer nur 0 aus.

// Example testing sketch for various DHT humidity/temperature sensors
// Written by ladyada, public domain


// REQUIRES the following Arduino libraries:
// - DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
// - Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor


#include "DHT.h"


#define DHTPIN 9    // Digital pin connected to the DHT sensor
// Feather HUZZAH ESP8266 note: use pins 3, 4, 5, 12, 13 or 14 --
// Pin 15 can work but DHT must be disconnected during program upload.


// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT11   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)


// Connect pin 1 (on the left) of the sensor to +5V
// NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
// to 3.3V instead of 5V!
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor


// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);


void setup() {
  Serial.begin(9600);
  Serial.println(F("DHTxx test!"));


  dht.begin();
}


void loop() {
  // Wait a few seconds between measurements.
  delay(2000);


  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  float h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit (isFahrenheit = true)
  float f = dht.readTemperature(true);


  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }


  // Compute heat index in Fahrenheit (the default)
  float hif = dht.computeHeatIndex(f, h);
  // Compute heat index in Celsius (isFahreheit = false)
  float hic = dht.computeHeatIndex(t, h, false);


  Serial.print(F("Humidity: "));
  Serial.print(h);
  Serial.print(F("%  Temperature: "));
  Serial.print(t);
  Serial.print(F("°C "));
  Serial.print(f);
  Serial.print(F("°F  Heat index: "));
  Serial.print(hic);
  Serial.print(F("°C "));
  Serial.print(hif);
  Serial.println(F("°F"));
}
programmieren, Arduino Uno, Arduino Nano
Wie schaffe ich es, dass ich eine LED durch Knopfdruck blinken lassen kann und durch den Knopf die LED dann wieder ausschalten kann?

Hi, ich will mit einer LED ein Auge nachstellen. Um genauer zu werden, man soll per Knopfdruck die LED anschalten, diese soll dann 5 Sekunden an sein, dann für 1 Sekunde aus und dann wieder für 5 Sekunden an, und so weiter... Wenn man dann aber den Taster wieder betätigt, soll die LED ausgehen und die LED soll dann einfach aus bleiben.

Ich habe bereits ein Sketch geschrieben, in dem die LED blinkt und wenn man den Knopf drückt, die LED wieder ausgeht. Soweit so gut, aber ich hab leider keine Ahnung, wie ich es hinbekomme, dass die LED nicht einfach nur blinkt, sondern halt für 5s blinkt, dann für 1s und so weiter, und nicht einfach nur in einem Intervall von 1 Sekunde... Habt ihr eine Idee, was ich im Sketch falsch gemacht habe, oder eine IDee wie man das Problem lösen kann?

Sketch:

int ledState = LOW; 

uint8_t TasterValue = 0;

uint8_t BlinkValue = 0;

uint8_t status = 0;

unsigned long previousMillis = 0;     

const byte TasterPin = 12; 

const long interval = 1000;        // Blinkintervall in Millisekunden

void setup() {

 pinMode(13, OUTPUT); 

 pinMode (TasterPin, INPUT_PULLUP); 

}

void loop() {

 unsigned long currentMillis = millis();

 if (BlinkValue == HIGH) {          

  if (currentMillis - previousMillis >= interval) {

   previousMillis = currentMillis;

   if (ledState == LOW)

    ledState = HIGH;

   else

    ledState = LOW;

   digitalWrite(13, ledState);

  }

 }

 else

  digitalWrite(13, LOW);       

 

 TasterValue = digitalRead (TasterPin); 

 if (status != TasterValue) {   

  if (TasterValue) {            

   BlinkValue = !BlinkValue;    

  }

  status = TasterValue;     

  delay (200);

 }

}

Ich hoffe das dies einigermaßen übersichtlich ist und nur nochmal zum Verständnis. Mit diesem Sketch kann ich per Knopfdruck die LED aktivieren und diese blinkt dann im Intervall von 1s. Ich will aber das Gleiche, nur dass die LED nicht einfach nur im Intervall von 1s blinkt sondern dass die LED 5s an ist, dann 1s aus und dann wieder 5s an..., aber man soll das ganze per Knopfdruck komplett wieder ausschalten können.

~ArduinoGeek

Computer, Technik, Elektronik, programmieren, Arduino, LED, Sketch, Technologie, Arduino Uno, Arduino IDE
Zeit am Arduino lcd Display wird falsch ausgegeben (Komische Zeichen)?

Hallo zusammen

Ich möchte die Zeit also millis() auf dem LCD Dsiplay ausgeben. Dazu habe ich der Variable times millis() zugewiesen. Dann rechen ich times / 100 und speichere dies in der Variable Time ab. Nun rechne ich weiter. Ich rechne die Sekunde, Minuten und Stunden aus. Für die Sekunde und Minute habe ich 10er und 1er Stellen gemacht. Bei Stunden 100er, 10er und 1er Stellen.

Anschliessend möchte ich die Zeit auf dem LCD Display ausgeben. Dazu speichere ich jede Stelle einzeln im Array timeOfEntry ab, da die Zeit ja sonst auf dem Display abgeschnitten wird. Auf dem Display erhalte ich aber komische Ausgaben. Die Doppelpunkte werden korrekt angezeigt. Die Zahlen aber leider nicht.

Der Code:

times = millis();
Time = times / 1000;
seconds = Time % 60;
sectomin = Time / 60;
minutes = sectomin % 60;
hours = sectomin / 60;
seconds1 = seconds % 10;
seconds10 = seconds / 10;
minutes1 = minutes % 10;
minutes10 = minutes / 10;
hours1 = hours % 10;
hours = hours / 10;
hours10 = hours % 10;
hours100 = hours / 10;

logEntry[logEntryCounter].timeOfEntry[0] = hours100;
logEntry[logEntryCounter].timeOfEntry[1] = hours10;
logEntry[logEntryCounter].timeOfEntry[2] = hours1;
logEntry[logEntryCounter].timeOfEntry[3] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[4] = minutes10;
logEntry[logEntryCounter].timeOfEntry[5] = minutes1;
logEntry[logEntryCounter].timeOfEntry[6] = doublepoint;
logEntry[logEntryCounter].timeOfEntry[7] = seconds10;
logEntry[logEntryCounter].timeOfEntry[8] = seconds1;

Ausgabe:

Wie man auf dem Bild sieht, sind die ersten beiden Zeichen anders als die Restlichen. Da schon 10 Sekunden vorbei waren, sollte dort auch z.B 12 Sek. stehen. Es wird aber irgendwie falsch angezeigt. Die Doppelpunkte stimmen. Die anderen Zeichen denke ich sind für die leeren Stellen im Array.

Habt ihr eine Idee, was ich falsch mache?

Vielen Dank im Voraus.

Bild zum Beitrag
Computer, Technik, Technologie, C (Programmiersprache), Arduino Uno, Spiele und Gaming
Arduino: millis() als delay() in If-Klause benutzen?

Hi! Ich suche schon lange nach einer Lösung wie ich millis() als delay() benutzen kann. Ich habe einen Bodenfeuchtesensor und ein Relais, das an eine Pumpe angeschlossen wird. Ich möchte, dass das Relais für 10 Sekunden angeht, wenn der Bodenfeuchtesensor einen Wert über 600 ausspuckt. Bisher lautet die If-Klause so:

(siehe unten)

Möchte das aber gerne mit millis() machen. Habe schon viel studiert und probiert, aber keine Lösung gefunden. Nachgelesen habe ich auch. Das Prinzip von millis habe ich verstanden, nur nicht, wie das in einem If-Satz funktioniert.

Vielen Dank für Eure Hilfe!

#include "DHT.h"
#define DHTPIN 12
#define DHTTYPE DHT22

//VENT DELAY//
long schedule_freq = 3200000L;
long schedule_duration = 300000L;


long schedule_timestamp = 0L;
long schedule_timestamp_off = 0L;


bool schedule = false;
//VENT DELAY//


//PUMP//

//PUMP//


const int heatPin = 7;
const int ventPin = 4;
const int pumpPin = 12;


int moist_value = analogRead(A0);

DHT dht(DHTPIN, DHTTYPE);




void setup() {
  dht.begin();
  pinMode(heatPin, OUTPUT);
  pinMode(ventPin, OUTPUT);
}


void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();


  if (t <= 16.0) {
      digitalWrite(heatPin, HIGH);
  }


  if (t >= 25.0) {
    digitalWrite(heatPin, LOW);
  }


  if(moist_value >= 600) {
    digitalWrite(pumpPin, HIGH);
    delay(10000);)
    digialWrite(pumpPin, LOW;
    
    }
    
      if (schedule_timestamp < millis()) {
      schedule_timestamp = millis() + schedule_freq;
        schedule_timestamp_off = millis() + schedule_duration;
        schedule = true;
        //Vent On
        digitalWrite(ventPin, HIGH);
      }
    
    
      if (schedule_timestamp_off < millis() && schedule ) {
      schedule = false;
      //Vent Off
      digitalWrite(ventPin, LOW);
    
    
      }
    
    
    }
Computer, Technik, programmieren, Arduino, Technologie, C (Programmiersprache), If clauses, Arduino Uno, Arduino IDE
Fragen rund um den Arduino Uno?

Hi Leute, ich habe ein paar Projekte mit dem Arduino Uno gemacht und eines davon war folgender:

Einen Motor mittels eines Potentiometers steuern, also dessen Geschwindigkeit. Dabei gab es zudem einen Schalter zum an und ausschalten des Motors und einen Schalter zum Ändern der Richtung des Motors. Der Motor wurde mit einer 9 Volt Batterie betrieben, gesteuert wurde das ganze mit einem IC, welches genau, weiß ich leider nicht mehr.

Zu dem Projekt ergeben sich für mich folgende Fragen:

  • Es schien egal zu sein, welchen Wert der Poti hat, die beiden äußeren Beine wurden mit 5V und GND verbunden, die mittlere Leitung ging an einen Analogen Pin. Auslesen tat der Arduino dabei, je nach Zustand des Potis, Werte von 0 bis 1023. Ich würde gerne wissen, warum das so ist? Was genau gibt der mittlere Pin eines Potis aus, sodass der Arduino es, egal welchen Widerstandswert der Poti hat, von 0 bis 1023 interpretiert.
  • Wo wir schon beim Poti sind, wenn ich den Widerstand auf 0 Setze durch drehen des Hebels, dann habe ich ja 5V mit GND kurzgeschlossen. Warum ist dem Arduino dennoch nichts passiert? Ist dort eine Sicherung vorhanden? Oder fließt ein so geringer Strom, sodass dem Arduino dabei nichts passiert? Eigentlich sollten die 500mA des USB Steckers doch ausreichen, den zu grillen oder?
  • Was genau ist der Unterschied zwischen +5V und Vic?

Vielen Dank für die, hoffentlich, kommenden Infos :)

Arduino, Kurzschluss, Schaltung, Potentiometer, Elektrik Elektronik, arduino mega, Arduino Uno, einplatinencomputer
Arduino Uno; programmer not responding - was tun?

Hallo erstmal..

Ich habe einen Arduino Uno, der eigentlich prima funktioniert hat. Seit kurzem - ich bin mir jedoch keines Fehlers bewusst, da ich alles wie sonst auch gemaht habe - bekomme ih immer folgende Fehlermeldung:

Beim Hochladen des Sketches ist ein Fehler aufgetreten avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0xf9 avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0xf9 Problem beim Hochladen auf das Board. Hilfestellung dazu unter http://www.arduino.cc/en/Guide/Troubleshooting#upload.

Wenn ich auf "hochladen mit Programmer" drücke, kommt einfach nur "Beim Hochladen des Sketches ist ein Fehler aufgetreten"...das passiert Da ich mich mit Computern etc. leider garnicht auskenne und einfach nur ein bisschen programmieren kann, wärs echt hilfreich, wenn ich eine einfache/leicht verständliche Erklärung zur Lösung des Problems bekommen könnte... ;)

Danke schonmal =)

Fehlermeldung, programmer, Arduino Uno

Meistgelesene Beiträge zum Thema Arduino Uno