Ich möchte einen Lüfter Abhängigkeit des Outputs eines DHT22-Sensor steuern und bin kompletter Anfänger. Aus anderen Beiträgen habe ich folgenden Code zusammengebastelt und möchte gern fragen, ob bitte jemand meinen Code kommentieren könnte?
Hardware:
Arduino UNO Rev3
DHT22
be quiet Shadow wings 2 PWM (4 Pin)
Was passieren soll:
Wenn Temperatur und Luftfeuchte kleiner als x (hier 30GradCelsius und 55%H), dann soll der Lüfter AUS sein. Wenn größer als x, soll er 100% laufen (später dann gern noch eine 50% Abstufung).
Was passiert:
Der Lüfter läuft mit geringer Leistung trotz Temperatur kleiner x.
Einen Schaltplan habe ich per PDF-Skizze erstellt, kann ihn aber offenbar nicht hochladen, da das neuen Nutzern nicht gestattet ist. Weiß jemand Rat?
Die Anzeige im seriellen Monitor funktioniert.
Würde mich sehr über direkte Hilfe freuen.
Danke im Voraus und viele Grüße, Steffen
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define fan 9
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600); //nur für Darstellung der Werte notwendig
Serial.println("DHT22"); //nur für Darstellung der Werte notwendig
delay(2000);
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
return;
}
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\t"); // Tabulator
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.write('°'); // Schreiben des ° Zeichen
Serial.println("C");
if (t < 30 || h < 55) {
analogWrite(fan, 0);
delay(100);
}
/*
else if(t==26 || h > 50 && h < 55) {
analogWrite(fan, 51);
delay(100); }
else if(t==28 || h > 55 && h < 60) {
analogWrite(fan, 153);
delay(100); }
else if(t==29 || h > 60 && h < 65) {
analogWrite(fab, 204);
delay(100); }
*/
else if (t > 30 || h > 55) {
analogWrite(fan, 255);
delay(100);
}
delay(3000);
}
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Serial.println("C");
if (t < 30) // Temperatur hat Wert nicht erreicht?...
{
if (h < 55) // .. UND Luftfeuchte auch nicht? ...
{
analogWrite(fan, 0); // ... Ausmachen
delay(100);
}
}
else if (h > 55) // ... Temperatur ist erreicht UND Luftfeuchte auch
{
analogWrite(fan, 255); // Anmachen
delay(100);
}
Dann mach mal bitte folgendes: In der IDE unter DATEI - VOREINSTELLUNGEN - "Ausführliche Ausgabe während" [x] Kompilierung
Darunter ALLE
Dann bekommst Du eine Warnung die solltest Du auflösen.
Ich schätze mall das ist ein 12V Lüfter, wie wird er angesteuert, mit welchem Transistor, was für Widertand ist zwischen Basis oder Gate zu Arduino.
Je nach Typ und Beschaltung kann sein das er nicht "zu ist" und bleibt leichte Spannung so das nach anlaufen er langsam weiter dreht, versuch die PDF rein schieben, manchmal klappst
zu 1.1) Ich habe meinen Post leider falsch formuliert. Der Lüfter soll angehen, wenn entweder das eine oder das andere eintritt. Also ODER nicht UND
zu 1.2) Unter DATEI finde ich leider keine VOREINSTELLUNGEN. Woanders auch nicht. Nutze die IDE-Version für Macs.
zu 2) Ich habe gar keinen Transistor dazwischen, sondern den Lüfter direkt an "Vin" und GND vom Arduino geschaltet.
Später sollen der Lüfter und der Arduino direkt an einen 12 V - Akku angeschlossen werden. Das heißt, ich brauche noch einen Transistor? Falls ja, welchen und muss ich dann am Code etwas ändern?
PS: Leider wird mir immer noch nicht gestattet den Schaltplan hochzuladen.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
#define fan 9
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600); //nur für Darstellung der Werte notwendig
Serial.println("C"); //nur für Darstellung der Werte notwendig
delay(2000);
dht.begin();
}
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
return;
}
Serial.print("Luftfeuchtigkeit: ");
Serial.print(h); // Ausgeben der Luftfeuchtigkeit
Serial.print("%\t"); // Tabulator
Serial.print("Temperatur: ");
Serial.print(t); // Ausgeben der Temperatur
Serial.write('°'); // Schreiben des ° Zeichen
Serial.println("C");
if (t < 30 || h < 55) { // ..Temperatur/Luftfeuchtegrenze nicht erreicht
analogWrite(fan, 0); // .. Lüfter ausmachen
delay(100);
}
/*
else if(t==26 || h > 50 && h < 55) {
analogWrite(fan, 51);
delay(100); }
else if(t==28 || h > 55 && h < 60) {
analogWrite(fan, 153);
delay(100); }
else if(t==29 || h > 60 && h < 65) {
analogWrite(fab, 204);
delay(100); }
*/
else if (t > 30 || h > 55) { // Temperatur oder Luftfeuchte erreicht
analogWrite(fan, 255); // Lüfter anmachen
delay(100);
}
delay(3000);
}
Nicht gut, Du brauchst ein Transistor am besten ein Low Level MOSFET Diode und zwei Widerstände. Wen ich Schafe zeichne Morgen ein Schaltplan. Ohne Freilaufdiode las den nicht Laufen sonst kann passieren das Du dein Uno schrotest.
Hier zum nachlesen
Das ist böse.
Vin ist das, was es heisst. Ein INPUT für die Versorgung.
Du brauchst in jedem Fall eine Leistungsstufe, die zwischen dem OutputPin 9 und dem Lüfter dafür sorgt, das Du den Arduino nicht killst.
Ok, dann wieder zurück.
Serial.println("C");
if (t > 30 || h > 55) // Temparatur oder Luftfeuchte hat Wert nicht erreicht?...
{
analogWrite(fan, 255); // ... Anmachen
delay(100);
}
if (t < 30 && h < 55) // Temperatur ist unterschritte UND Luftfeuchte auch
{
analogWrite(fan, 0); // Ausmachen
delay(100);
}
delay(3000);
}
Guten Morgen,
ich nehme alles zurück, nach dem ausschalten meines Rechners ist mir erst aufgefallen 4Pin Lüfter also ist schon zum teil ok deine Beschaltung, den der Lüfter hat intern ein Steuer IC oder Transistor
Die Pin Belegung solte sein - = GND, +, RPM Geber, PWM Pin
Bei Arduino UNO:
Zwischen der schwarzen Netzteilbuschse und Vin ist eine 1A Diode die verhindet daß der Arduino Kaputtgeht wenn die Polung des netzteils falsch ist.
Vin kann als SpannungsversorgungsAusgangsPin verwendet werden. es kommt da die Netzteilspannung minus 0,7V heraus . Die max strombelstung ist etwas unter 1A.
Wenn Du einen 2 Poligen Lüfter (+ und Gnd Spannungsversorgung) an Gnd und Vin anschließt dreht der sich dauernd unabhängig vom Arduino.
4 Wire Lüfter mit PWM Eingang.
Der PWM Eingeng kann irekt von einem PWM Ausgang des Arduino angesteuert werden. Beim Starten des Lüfters ist es gut diesen für 5 Sekunden auf 100% Anzusteuern um danach auf den Tatsächlichen Wert herunterzuschalten.
Fehlt das PWM-Signal dreht der Lüfter trotzdem zum Schutz der Elektronik.
Okay, meinetwegen könnte dann da ein MOSFET dazwischen (habe aber derzeit keinen da), allerdings würde es ja dann, sofern ich dich in deinem späteren Post richtig verstehe aufgrund des 4PIN-PWM gar nicht unbedingt nötig sein, oder?
Wie ist dann jetzt aber die Schaltung zu machen?
Deinem Schaltplan ist zu entnehmen, dass PIN 9 (nicht PIN 10) in meinem Code wie gehabt das PWM-Signal geben sollte.
Plus 12 V+ und GND habe ich zwar (noch) nicht an einer externen Spannungsquelle, sondern wie erwähnt an Vin und GND, aber wie uwefed sagt, liefert Vin ja doch eine Ausgangsspannung, wenn auch nur eine sehr kleine.
Siehe:
@uwefed Doch wie muss ich nun meinen Code ändern, sodass es funktioniert?
Offenbar fehlt bei mir ja das PWM-Signal, da der Lüfter trotzdem dreht (vgl. deine Aussage:
Ich darf leider immer noch keine Anhänge senden..
Freu mich auf Eure Vorschläge.
Viele Grüße! Steffen
Auf den PWM Pin + drauf, wurde der so angeklemmt wie oben im Plan, nur den PWM Pin anpassen die Stecker sind genormt, außer Du hast ein nackten Lüfter.
Zweite Frage werden dir im Serial monitor die Werte angezeigt?
Hi @Miq1,
mal geschaut, wie und an was der Lüfter da angepinnt ist?
Wenn hier so ein Foto gepostet würde....
Und ja, ich schliesse mich @fony an. Mein C't Abo ist vor nem halben Jahr nach fast 20 Jahren nicht mehr verlängert worden.
Wer mal die 194 Seiten mit früheren Ausgaben verglichen hat, wird wissen warum.
Nachdem im Jahr zuvor die Mehrwertsteuersenkung nicht durchgereicht wurde war dann die letzte Preiserhöhung der Scheidepunkt.... Dafür gibts jetzt regelmäßig trotz Papierpreise Spezialangebote enmass...
Ja, der Hardwareaufbau ist nicht so geschickt. Ich würde das auch nicht sklavisch nachbauen, sondern als Basis nehmen. Ich mag auch keine Anlagen, bei denen man zum Austausch von Sensoren oder Verbrauchern die Kiste aufschrauben muss - ich würde die DHT22 per extern zugänglicher Steckbuchsen anschließen und dem Lüfter eine Steckdose spendieren. Und intern dann direkt mit dem Relais verbinden, die 230V-Anschlüsse per Wagoklemmen.