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

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
Star ATtiny Servo SOS SOS hansanne1310 14 217 Heute 19:57
Letzter Beitrag: hotsystems
  Servo über Temperatur steuern querkopf71 3 74 07.12.2016 19:21
Letzter Beitrag: hotsystems
  ATtiny und Servo Bibliothek malsehen 9 312 15.10.2016 18:09
Letzter Beitrag: malsehen
  Servo soll nur in Ruhelage stoppen Sven1996 1 241 19.08.2016 14:37
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 761 16.07.2016 11:43
Letzter Beitrag: Binatone
  Servo und PWM Ausgabe F2Ingo 4 497 17.06.2016 14:53
Letzter Beitrag: F2Ingo
  Hilfe bei Servo-steuerung Innocence 7 821 23.02.2016 11:00
Letzter Beitrag: hotsystems
  Servo.h lässt sich nicht einbinden ^^ EvilBen 5 706 08.02.2016 18:07
Letzter Beitrag: hotsystems
  Weichensteuerung mit Servo RCudino 21 3.028 05.01.2016 18:04
Letzter Beitrag: Markus0815
  Servo per Serieller Mointor ansteuern iggy 1 820 03.08.2015 03:08
Letzter Beitrag: yasi

Gehe zu:


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