Hilfe gesucht bei Projekt Lüftersteuerung mit Arduino und Digitalen Fühlern

Hallo Arduino Community,

ich war immer der Meinung, das bekomme ich schon irgendwie mit viel Gedult und Spucke hin. Aber nach über 2 Wochen hin und her Versucherei bin ich fast am durchdrehen... :confused:

Kurz zum Hintergrund.

Ich möchte eine Lüftersteuerung bauen für unsere Waschküche. Ich habe einen Aussenfühler installiert und einen Innenfühler. Dieser vergleicht nun anhand der Temperatur und Luftfeuchte innen und außen, ob ein Lüften sinnvoll ist.

Bis hier hin, habe ich mir alles selber als Arduino Neuling in vielen, vielen selbst Stunden beigebracht... In bester Try&Error Manier und es funktionierte auch alles soweit.

Dann kam es jedoch zu ersten DHT22 Fühler Ausfällen (die Luftfeuchte wurde zu hoch gemessen). Meine Suche im Internet ergab dann, das wohl der DHT22 für den Außeneinsatz nicht zu gebrauchen wäre, da er wohl bei längerem Betrieb in hoher Luftfeuchte gerne in einen Latch Up Modus fällt und dann unbrauchbar ist.

Toll dachte ich, nehm ich halt einen anderen (besseren) Fühler. Damit begann dann mein ganzes Drama...
Ich besorgte mir den HTU21, nur um dann festzustellen, das der gar keine langen Leitungen kann (i2c)....
Viel rumprobieren mit niedrigen Taktraten brachten auch keinen Erfolg. Zu i2c Extendern hab ich leider auch nichts brauchbares gefunden.
Dann versuchte ich den DHT21... Sollte angeblich stabiler sein. Alles sah auch gut aus, bis auch dieser mir die erste 106% Luftfeuchte außen meldete...
Also wieder zurück zu den HTU´s...
Ich wollte dann mein Glück mit nrf24l01 Modulen versuchen und die HTU21 Werte per Funk übertragen. Es war auch das eine einzige Katastrophe... Mal kam gar nichts an, mal nur wirres Zeug. Mit Kondensator keine Besserung . Selbst andere Module mit Antenne funktionierten bei mir nicht.
Mal klappte es, mal nicht.
Zum Schluss war es dann sogar so, das selbst mit abgezogenem Modul plötzlich irgendwelche wirren Werte empfangen wurden, ja selbst als ich schon gar kein kabel mehr am Arduino hatte, wurde was empfangen... :o

Nach zig Stunden hab ich auch das schließlich verworfen.

Nun versuche ich gerade mein Glück mit RS485 Modulen und möchte die Werte also per Kabel übertragen.

Auch das will nicht klappen. Ich schaffe es einfach nicht, 3 Werte von der Außenstelle (im Prinzip die ID (wer sendet also die werte) zusammen mit Temp und Feuchte zu übertragen.

Jetzt nach über 2 Wochen rumprobiererei hab ich wirklich die Nase bis oben gestrichen voll, mir qualmt die Rübe und wenn ich nicht schon soviel in Arduino Kram reingesteckt und so wahnsinnig viel Zeit damit verbrannt hätte, ich würde am liebsten alles wegwerfen...

Meine ganze Hoffnung liegt jetzt im Prinzip auf den oder die netten Leute hier, die mir hoffentlich dabei unter die Arme greifen und mich bei meinem Projekt unterstützen.

LG

DHT22 hat geklappt bis du ihn ertränkt hast?

Dann nimm einen DHT22 kompatiblen Außenfühler.

AM2306 oder
billiger Am2305 - denn darfst zwar auch nicht Wässern er überlebt die Außenwelt einige Jahre wenn du ihn halbwegs geschützt aufstellst.

Ersterer kommt mit gefühlt 5 oder 10m Kabel - da kommst leicht nach außen, der zweite mit etwa einem Meter.

Meine kommerzielle Lüftersteuerung verzichtet auf Außenfühler.

70% : Lüfter an
< 55% : Lüfter aus

oder so ähnlich...

Hallo,

Du hast also 2 Controller und willst die über RS485 koppeln. ? Als Fühler würde ich dann einen BME280 nehmen. Und wiso geht das nicht ?

Heinz

Ein herzliches Dankeschön schonmal für die ganzen Antworten...So zahlreich hab ich das noch gar nicht erwartet. :slight_smile:

noiasca:
DHT22 hat geklappt bis du ihn ertränkt hast?

Ähm nein, der hing immer geschützt unter einem Kunststoffdach im Außenbereich. Habe diesen zusätzlich sogar mit der Öffnung nach unten aufgehangen, um ihn noch zusätzlich vor Feinstaub zu schützen...

noiasca:
AM2306 oder
billiger Am2305 - denn darfst zwar auch nicht Wässern er überlebt die Außenwelt einige Jahre wenn du ihn halbwegs geschützt aufstellst.

Die Info hätte ich mal früher haben sollen... Ich hab wohl damals mit "Alternativen zu DHT22" als Google Suchbegriff das falsche drin gehabt....
Wärend der erste ja preislich echt den Vogel abschiesst, macht der 2. schon einen interessanten Eindruck. Bin allerdings etwas verwirrt, weil an dem 4 Kabel zu sehen sind. Das soll noch 1-Wire sein ?

michael_x:
Meine kommerzielle Lüftersteuerung verzichtet auf Außenfühler.

70% : Lüfter an
< 55% : Lüfter aus

:wink: , mag ja so gehen, aber ich bevorzuge da schon etwas mehr präzision, um das Maximum rauszuholen.
Außerdem denke ich, könnte das im Sommer vielleicht sogar noch kontraproduktiv sein, sich in einem feuchten, kalten Keller zur Mittagszeit bei 35°C die Luft reinzusaugen.
Zumindest sagte mir da das Programm immer, lass das mal besser sein, sonst wirds noch feuchter...

Rentner:
Hallo,

Du hast also 2 Controller und willst die über RS485 koppeln. ? Als Fühler würde ich dann einen BME280 nehmen. Und wiso geht das nicht ?

Im Prinzip hab ich neben diversen Controllern (denke mal du meinst damit Arduinos?) allen möglichen Krempel hier rumzuliegen, in der Hoffnung, irgendwie die Sache ans laufen zu bekommen...
Ich hab hier mehere Nanos, 1x d1 Mini, mehere esp8266 01 Module, ESP32 NodeMCU, die nrf24l01 in der kleinen Variante und die mit Stabantenne, die HTU21 (SHT21), SHT31, SHT35 (auch die closed cube version)... noch mind. 10x DHT22 Module, DHT21 und dann natürlich noch die RS-485 Max TTL Konverter...

Damit muss es doch irgendwie möglich sein, ein sicheres (verlässliches) Temperatur und Feuchte Signal von außen ranzuholen. Die Idee mit dem 2305 oder 2306 würde ja meine Probleme lösen, aber dann wäre alles was hier rumliegt erstmal unbrauchbar.

Grundsätzlich wäre meine 1.Wahl dabei aber eine Kabelgebundene Variante der Fühler.

Ich finde, heut zu Tage funkt einfach schon genug in den eigenen 4 Wänden.

Falls Ihr noch irgendwelche Info´s von mir braucht, sagt es mir bitte....
Ich habe ein gutes Gefühl, das ich das mit Eurer Hilfe schaffen kann :slight_smile:

noiasca:
"Wer funkt kennt nimmt Kabel."

Den Satz versteh ich irgendwie nicht so richtig ... :astonished:

Ich geb Dir ja irgendwo Recht. Das einfachste wäre wirklich, ich hole mir den teuren AM2306, hoffe darauf, das der lange hält und gut is...

Jedoch würde ich gerne die ganzen SHT21, 31, 35 Fühler nutzen wollen, die hier rumliegen. Die kosten ja nun auch nicht nur 50 Cent...
Ich hab das Gefühl ich bin dicht dran und benötige nur den richtigen Wink mit dem Zaunpfahl... Die Werte werden ja per rs485 übermittelt (kabelgebunden würde ich ja bevorzugen....)

Nur hin und wieder kommt eben Müll bei der Übertragung raus und ich erkenne nicht, woran das liegt...

Gemeint sind hier die -1 Werte, die wohl bedeuten, das er nichts empfangen hat. Im Prinzip ist "i" so ne Art Counter. Soll später eine ID darstellen, damit ich weiß, von welcher Stelle die Meßwerte kommen und zu ordnen kann. temp und hum sollten klar sein. Hin und wieder scheint ja die Übertragung zu funktionieren, bis halt auf die -1 Aussetzer, worauf dann auch auf der linken Seite der Rest der empfangenen Werte scheinbar wild zusammengesetzt wird...

Sorry wegen dem Bild. Leider hat Datei anhängen als Bild nicht funktioniert, und warum ich kein größeres Bild bekomme, wenn ich darauf klicke, hab ich auch nich nicht herausgefunden.

Mit Rechtsklick und Grafik anzeigen lassen funktioniert es aber (zumindest bei mir)...

Die Verkabelung habe ich danach aufgebaut...

https://arduinoinfo.mywikis.net/wiki/SoftwareSerialRS485Example

Von dort habe ich auch den Master und Remote Sketch übernommen und hatte versucht, diesen an meine Umgebung anzupassen.

Der Empfängersketch sieht bei mir jetzt so aus...

/* YourDuino SoftwareSerialExample1
   - Connect to another Arduino running "YD_SoftwareSerialExampleRS485_1Remote"
   - Connect this unit Pins 10, 11, Gnd
   - Pin 3 used for RS485 direction control
   - To other unit Pins 11,10, Gnd  (Cross over)
   - Open Serial Monitor, type in top window.
   - Should see same characters echoed back from remote Arduino

   Questions: terry@yourduino.com
*/

/*-----( Import needed libraries )-----*/
#include <SoftwareSerial.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define SSerialRX        10  //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin

#define SSerialTxControl 3   //RS485 Direction control

#define RS485Transmit    HIGH
#define RS485Receive     LOW

#define Pin13LED         13

/*-----( Declare objects )-----*/
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

/*-----( Declare Variables )-----*/
int byteReceived;
int byteSend;

int temp;
int hum;
int i;

void setup()   /****** SETUP: RUNS ONCE ******/
{
  // Start the built-in serial port, probably to Serial Monitor
  Serial.begin(57600);

  while (!Serial) {
    ;// wait for serial port to connect. Needed for native USB port only
  }

  pinMode(Pin13LED, OUTPUT);
  pinMode(SSerialTxControl, OUTPUT);

  RS485Serial.begin(57600);
  digitalWrite(SSerialTxControl, RS485Receive);  // Init Transceiver

}//--(end setup )---


void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{

  RS485Serial.listen();

  while (RS485Serial.available() > 0) {
    i = RS485Serial.read();
    temp = RS485Serial.read();
    hum = RS485Serial.read();

    Serial.println("Hab was empfangen...");
    Serial.println();
    Serial.print("Das war drin... :\t");
    Serial.println(i);
    Serial.print("Temp:\t");
    Serial.println(temp);
    Serial.print("Hum:\t");
    Serial.println(hum);
    Serial.println();

    digitalWrite(Pin13LED, HIGH);  // Show activity

    delay(30);
  }

  digitalWrite(Pin13LED, LOW);  // Show activity


}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/

//NONE
//*********( THE END )***********

Der Sketch vom Senders wäre jetzt das ....

/* YourDuino SoftwareSerialExample1Remote
   - Used with YD_SoftwareSerialExampleRS485_1 on another Arduino
   - Remote: Receive data, loop it back...
   - Connect this unit Pins 10, 11, Gnd
   - To other unit Pins 11,10, Gnd  (Cross over)
   - Pin 3 used for RS485 direction control
   - Pin 13 LED blinks when data is received

   Questions: terry@yourduino.com
*/

/*-----( Import needed libraries )-----*/
#include <SoftwareSerial.h>
/*-----( Declare Constants and Pin Numbers )-----*/
#define SSerialRX        10  //Serial Receive pin
#define SSerialTX        11  //Serial Transmit pin

#define SSerialTxControl 3   //RS485 Direction control

#define RS485Transmit    HIGH
#define RS485Receive     LOW

#define Pin13LED         13

#include <Adafruit_HTU21DF.h>
Adafruit_HTU21DF htu = Adafruit_HTU21DF();

/*-----( Declare objects )-----*/
SoftwareSerial RS485Serial(SSerialRX, SSerialTX); // RX, TX

/*-----( Declare Variables )-----*/
int byteReceived;
int byteSend;

int temp;
int hum;
int i;

void setup()   /****** SETUP: RUNS ONCE ******/
{
  // Start the built-in serial port, probably to Serial Monitor
  Serial.begin(57600);

  htu.begin();

  pinMode(Pin13LED, OUTPUT);
  pinMode(SSerialTxControl, OUTPUT);

  //digitalWrite(SSerialTxControl, RS485Receive);  // Init Transceiver
  digitalWrite(SSerialTxControl, RS485Transmit);  // Enable RS485 Transmit

  // Start the software serial port, to another device
  RS485Serial.begin(57600);   // set the data rate

}//--(end setup )---

void loop()   /****** LOOP: RUNS CONSTANTLY ******/
{

  i++;

  temp = htu.readTemperature();
  hum = htu.readHumidity();

  delay(50);

  RS485Serial.write(i); // Send the byte back
  RS485Serial.write(temp); // Send the byte back
  RS485Serial.write(hum); // Send the byte back
  RS485Serial.flush();

  Serial.print("Wert i= \t");
  Serial.println(i);
  Serial.print("Temp: \t");
  Serial.print(temp);
  Serial.print("  Luftfeuchte: \t");
  Serial.println(hum);

  delay(5000);
}

//}//--(end main loop )---

/*-----( Declare User-written Functions )-----*/
//NONE

//*********( THE END )***********

Ist halt etwas umgemodelt worden vom original.....

Und das ist dann auf der Empfängerseite zu sehen und ich komm einfach nicht dahinter, warum mal die Werte korrekt übertragen und empfangen werden, und manchmal scheinbar nicht ankommen ( die -1) unter nur Bruchstücke davon ( das z.B. der erwartete Temperatur Wert nicht kommt, dafür aber der der Luftfeuchte)

noiasca:
ich rate dir zunächst das Tutorial Serial Input Basics Serial Input Basics - updated - Introductory Tutorials - Arduino Forum durchzugehen

Hätte ich fast vergessen ....
Vielen Dank für den Link. Bin gerade dabei mich da einzulesen. Auch wenn ich das durch ein Übersetzungsprogramm gejagt habe....
Ich glaube, damit könnte ich weiter kommen.

Alles klar... :slight_smile:

Nochmals vielen vielen Dank für deinen Link . Ich hab mich da etwas eingelesen und versucht umzusetzen.
Erste Test sehen vielversprechend aus. Ich bekomme die Daten sauber rüber, kein -1 mehr und alles kommt auch an. Ich muss halt nur das was ankommt scheinbar wieder in "int" umwandeln...

Somit bin ich wirklich nach 2 Wochen und vielen vielen Stunden des hin und her probieren einen riesen Schritt in die richtige Richtung gekommen und benötige erstmal weiter keine Hilfe mehr.

VIELEN DANK ! :wink:

Somit bin ich wirklich nach 2 Wochen und vielen vielen Stunden

tja dafür hast 80 EUR gespart (oder 36USD beim freundlichen Chinesen)
lol - der musste jetzt sein :wink:

p.s: atoi ist dein Freund...