INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DHT22 Servo
31.01.2015, 20:41
Beitrag #1
DHT22 Servo
Hallo an alle Arduino-Freunde...
Ich versuche gerade mit einem Wert vom DHT22 einen Servo anzusprechen...
Code:
//
#include "Wire.h"                     // Library für wire aufgerufen
#include "math.h"                     // Library für math aufgerufen
#include "Servo.h"                    // Library für servo aufgerufen
#define SERVOPIN 13                   // Servopin festlegen
//Servo myservo;
//int pos = 45;
#include "DHT.h"                      // Library für DHT aufgerufen
#define DHTPIN A0                     // DHT Pin festlegen
//#define DHTTYPE DHT11               // DHT 11
#define DHTTYPE DHT22                 // DHT 22
DHT dht(DHTPIN, DHTTYPE);             // Initialize DHT sensor for normal 16mhz Arduino
// Einbinden des LCD                    
#include "LiquidCrystal_I2C.h"        // Library für I2C aufgerufen
LiquidCrystal_I2C lcd(0x27,16,2);     // LCD Adresse auf 0x27 gesetzt, 16 Zeichen / 2 Zeilen LCD

void setup()
  {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("DHT22 am arbeiten...");
  dht.begin();
//  myservo.attach(9);
  lcd.init();                          // Initialisierung des LCD                                            
  lcd.backlight();                     // LCD Hintergrundbeleuchtung aktivieren    
  }

void loop()
{
  int hum = dht.readHumidity();
  delay(2000);                         // Wait a few seconds between measurements
  // 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();        // Humidity einlesen
  float t = dht.readTemperature();     // Temperature einlesen Celsius
  float f = dht.readTemperature(true); // Temperature einlesen Fahrenheit
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Lesefehler am DHT-Sensor!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  if (hum < 40) digitalWrite (13, HIGH);
  else digitalWrite (13, LOW);
  {
   if (hum < 40) analogWrite(SERVOPIN, 90);
   if (hum > 50) analogWrite(SERVOPIN, 0);

///    Serial.println(" Luefter an!");
///    digitalWrite(led, LOW);   // turn the LED on (HIGH is the voltage level)
///  } else {
///    Serial.println(" Luefter aus!");
  }
  
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :");                      // Temp. : auf LCD ausgeben
lcd.setCursor(9, 0);                       // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 0);                      // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C");                            // C auf LCD ausgeben
lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:");                      // Luft.: auf LCD ausgeben
lcd.setCursor(9, 1);                       // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 1);                      // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%");                            // % auf LCD ausgeben
}

DHT und LCD funktionieren...
Kann mir bitte jemand unter die Arme greifen?
Im Vorraus besten Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 20:49
Beitrag #2
RE: DHT22 Servo
Hi,
mit analogWrite geht das nicht. Du musst schon die Servo-Lib benutzen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.01.2015, 23:44 (Dieser Beitrag wurde zuletzt bearbeitet: 31.01.2015 23:45 von v1000.)
Beitrag #3
RE: DHT22 Servo
(31.01.2015 20:49)Thorsten Pferdekämper schrieb:  Hi,
mit analogWrite geht das nicht. Du musst schon die Servo-Lib benutzen.
Gruß,
Thorsten

Danke Thorsten,
ich bin jetzt einen Schritt weiter!
Aber der Servo bewegt sich immer minimal.
Wenn sich die Luftf. ändert macht er seinen Job, aber wenn er nix zu tun hat zuckt er...
was könnte das sein?
Danke
Code:
//
#include "Wire.h"                     // Library für wire aufgerufen
#include "math.h"                     // Library für math aufgerufen
#include "Servo.h"                    // Library für servo aufgerufen
#define SERVOPIN 13                   // Servopin festlegen
Servo servo;
int pos = 90;
#include "DHT.h"                      // Library für DHT aufgerufen
#define DHTPIN A0                     // DHT Pin festlegen
//#define DHTTYPE DHT11               // DHT 11
#define DHTTYPE DHT22                 // DHT 22
DHT dht(DHTPIN, DHTTYPE);             // Initialize DHT sensor for normal 16mhz Arduino
// Einbinden des LCD                    
#include "LiquidCrystal_I2C.h"        // Library für I2C aufgerufen
LiquidCrystal_I2C lcd(0x27,16,2);     // LCD Adresse auf 0x27 gesetzt, 16 Zeichen / 2 Zeilen LCD

void setup()
  {
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("DHT22 am arbeiten...");
  dht.begin();
  servo.attach(13);
  lcd.init();                          // Initialisierung des LCD                                            
  lcd.backlight();                     // LCD Hintergrundbeleuchtung aktivieren    
  }

void loop()
{
  int hum = dht.readHumidity();
  delay(2000);                         // Wait a few seconds between measurements
  // 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();        // Humidity einlesen
  float t = dht.readTemperature();     // Temperature einlesen Celsius
  float f = dht.readTemperature(true); // Temperature einlesen Fahrenheit
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Lesefehler am DHT-Sensor!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);

  if (hum < 40) digitalWrite (13, HIGH);
  else digitalWrite (13, LOW);
  {
   if (hum < 40) servo.write (90);
   if (hum > 40) servo.write (0);

///    Serial.println(" Luefter an!");
///    digitalWrite(led, LOW);   // turn the LED on (HIGH is the voltage level)
///  } else {
///    Serial.println(" Luefter aus!");
  }
  
  Serial.print("Humidity: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(t);
  Serial.print(" *C ");
  Serial.print(f);
  Serial.print(" *F\t");
  Serial.print("Heat index: ");
  Serial.print(hi);
  Serial.println(" *F");
  
lcd.setCursor(0, 0);                       // Anfang auf Stelle 0, Zeile 0 setzen
lcd.print("Temp. :");                      // Temp. : auf LCD ausgeben
lcd.setCursor(9, 0);                       // Anfang auf Stelle 9, Zeile 0 setzen
lcd.print(t);                              // Wert aus "t" ausgeben (Temperatur)
lcd.setCursor(15, 0);                      // Anfang auf Stelle 15, Zeile 0 setzen
lcd.print("C");                            // C auf LCD ausgeben
lcd.setCursor(0, 1);                       // Anfang auf Stelle 0, Zeile 1 setzen
lcd.print("Luftf.:");                      // Luft.: auf LCD ausgeben
lcd.setCursor(9, 1);                       // Anfang auf Stelle 9, Zeile 1 setzen
lcd.print(h);                              // Wert aus "h" ausgeben (Luftfeuchtigkeit)
lcd.setCursor(15, 1);                      // Anfang auf Stelle 15, Zeile 1 setzen
lcd.print("%");                            // % auf LCD ausgeben
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2015, 00:21
Beitrag #4
RE: DHT22 Servo
Hallo,

vermutlich zuckt der Servo weniger oder nicht mehr wenn die Hysterese um den Schaltpunkt etwas größer ist.

Versuch es mal mit:
Code:
if (hum < 39) servo.write (90);
if (hum > 41) servo.write (0);

Gruß
Arne

Gruß Arne
ExclamationMit zunehmender Anzahl qualifizierter Informationen bei einer Problemstellung, erhöht sich zwangsläufig die Gefahr auf eine zielführende Antwort.Exclamation
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.02.2015, 11:30
Beitrag #5
RE: DHT22 Servo
(31.01.2015 23:44)v1000 schrieb:  Aber der Servo bewegt sich immer minimal.
Momentan fallen mir dazu drei Gründe ein:
1. Bei manchen Servos ist das einfach so. Der Regelkreis, der im Servo die Position hält, ist manchmal nicht ganz perfekt.

2. und 3.: Dazu brauchen wir erstmal einen Ausschnitt aus Deinem Coding:

Zitat:
Code:
if (hum < 40) digitalWrite (13, HIGH);
  else digitalWrite (13, LOW);
  {
   if (hum < 40) servo.write (90);
   if (hum > 40) servo.write (0);
  }

2. Mit Deinem "digitalWrite" pfuschst Du der Servo-Library in die Arbeit. Google Dir mal zusammen, wie so ein Servo angesteuert wird. Das Servo braucht definierte Pulse, die Du mit dem digitalWrite kaputt machst. Sobald Du also ein Servo mit "attach" an einen Pin gehängt hast, dann musst Du diesen Pin ansonsten komplett in Ruhe lassen.

3. Wie Arne schon gesagt hat fehlt Dir die Hysterese.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
15.02.2015, 13:38
Beitrag #6
RE: DHT22 Servo
Hallo an alle Helfer,
habe wieder ein wenig probiert,
Danke Arne, Hyserese eingefügt
Danke Thorsten, habe folgenden Code:
if (hum < 38) servo.write (90);
if (hum < 38) digitalWrite (12, HIGH);
if (hum > 42) servo.write (0);
if (hum > 42) digitalWrite (12, LOW);

Jetzt gehts....
Vielen Dank
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Einmalige Servo Motor Ausführung BanditBandeh 29 1.685 12.04.2018 12:04
Letzter Beitrag: MicroBahner
  Servo langsamer drehen und auf position lassen Thor Wallhall 13 1.318 12.04.2018 11:42
Letzter Beitrag: BanditBandeh
  Arduino DUE mit Adafruit 16 Kanal Servo-Driver juergen001 3 164 09.04.2018 10:51
Letzter Beitrag: juergen001
Question Servo.h Hilgi 9 348 28.03.2018 17:58
Letzter Beitrag: Hilgi
  Servo Steuerung mit PCA 9685 (Adressiernung) bernhard66 3 357 10.03.2018 11:06
Letzter Beitrag: juergen001
  Nextion+DHT22+Arduino Niklas 24 1.477 16.02.2018 22:35
Letzter Beitrag: Tommy56
  Servo über Transistor Harry 21 1.541 29.01.2018 19:30
Letzter Beitrag: hotsystems
  servo hector73 5 482 25.01.2018 06:13
Letzter Beitrag: hector73
  Bei Power ein geht der Servo auf 90 Grad ? Franz54 12 1.025 09.01.2018 20:55
Letzter Beitrag: Franz54
  3 DHT22 Sensoren im WEB anzeigen Ziege777 6 821 30.10.2017 11:18
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste