Wettersensor ähnlich WS7000-20 (Luftdruck, Temperatur, Luftfeuchte)

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Wettersensor ähnlich WS7000-20 (Luftdruck, Temperatur, Luftfeuchte)

      Hallo Zusammen,

      um die recht verbreitete Hausautomation FHEM mit eigenen Sensoren anzureichern (und das mit geringem finanziellen Aufwand - ca. 3-10€, je nach Ausstattung) habe ich auf Basis frei im Netz verfügbarer Protokoll-Informationen einen WS7000-20 Meteo Sensor nachgebaut. Dazu verwende ich:
      - ATTiny85, ATTiny84 oder ATMega328 mit 8MHz (interner RC-Generator)
      - BMP180
      - optional DHT11
      - optional LCD-Display (2x8 Zeichen reicht) mit I2C-/TWI-Interface
      - billiger 1€ Sender 433MHz

      Die Schaltung läuft mit 3,3V oder 5V und muss in Richtung Luftrdrucksensor auf jeden Fall einen Pegelwandler beinhalten (Widerstände genügen) - wenn mit 5V gearbeitet wird. Der Sender wird zum Stromsparen mit einem Transistor BC547 erst bei Bedarf mit der Versorgungsspannung verbunden. Dass Display läuft in der beiliegenden Version immer mit - inkl. LED-Hintergrundbeleuchtung - sollte aber mit einer winzigen Anpassung ebenfalls schaltbar gemacht werden, um Strom zu sparen.
      Theoretisch braucht man das Display nicht, immer Innenbereich ist es aber schön etwas ablesen zu können.

      Der aktuell integrierte Höhenanzeiger ist - wie der überwiegende Rest - noch nicht optimal und kann mit etwas mehr Mühe und Flash (im ATMega z.B.) praxistauglich gemacht werden. Um Platz im Speicher zu sparen (habe eine Menge Tiny85 rumliegen) habe ich die Barometrische Höhenformel mit einem bissel Interpolation nachgebaut - für mich reicht es, Tipps willkommen.

      In FHEM lässt sich das Sensor-Modul mit Hilfe eines Signalduino (Arduino Nano + CC1101 Transceiver) sofort einbinden. Es lassen sich auch andere Sensoren auf der Basis aufbauen. Die Interpretation der Empfangsdaten lässt sich sehr einfach anderen Aufgabenbereichen anpassen.

      BASCOM ist für mich ein Mittel zur schnellen Implementierung diverser Automationsprojekte - da gibts hier im Forum sehr erfahrene Leute.

      FF - Viel Vergnügen

      Uwe
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Hallo Uwe,
      sehr interessantes Projekt.
      Du schreibst, dass du billige 1€ Sender verwendest. Hast du dazu mal einen Link?
      Ich habe mir auch eine Hausautomation gebaut, wo ich den Funkverkehr von Conrad FHT Modulen überwache. Wenn ich da etwas senden will, habe ich bisher immer Sendemodule aus FHT80B oder FHT80TF Modulen benutzt, die aber etwas teuer sind.

      Danke dir
    • Sooo, nicht schön der Schaltplan - aber hoffentlich verständlich.

      Die Sender gibt es als 5er Pack für 3,50 regelmäßig als Aktionsware aus Fernost, ebenso das Display für 1,79€ oder der Luftdrucksensor für 2,39€.
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • So, das Teil habe ich ein wenig von Fehlern befreit und mit einem moderneren Display versorgt. Außerdem wird das Teil jetzt regelmäßig schlafen gelegt. An der Logik zum Stromsparen arbeite ich gerade noch. Aktuell verwende ich ein DOGS-104 Display im I2C Modus, das ist schön sparsam und vor allem flach. Das Teil kann als Sensor fast beliebig platziert werden und mit einer monströsen LiIon 18650 Zelle habe ich im Garten auch keine Not zum ständigen aufladen. Es fehlt noch die Unterspannungsüberwachung, die sich ja indirekt über die Verwendung der Bangap Referenz erledigen lässt. Zur Zeit ist extern da noch so ein Micro-BMS angelötet, aber das frisst auch Strom.

      Bilder mache ich demnächst von den fertigen Teilen...

      Edit: Typo
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Herbstzeit ist wieder Projektzeit.

      Jetzt habe ich das Thema Schalter wieder aufgegriffen. Es funktioniert echt gut mit dem Berührungssensor. Wie immer gibt es ein „aber“, welches ich noch lösen muss.
      Sobald der Sensor schlafen gelegt wird, dann schalte ich den Pin an dem eigentlich der DHT-11 hängt, als Eingang. Und der erkennt via PCINT sauber die Berührung und schaltet das Display ein.

      Da ich aber meinen Finger nicht schnell genug vom Sensor wegbekomme, wird natürlich der DHT11-Sensor nicht erkannt, weil der Berührungsschalter immer noch den Pegel auf Low zieht.
      Als Workaround habe ich erstmal ein WAIT eingebaut, aber wenn das Teil z.B. auf einem feuchten Tisch liegt, dann ist das blöd.
      Vermutlich muss ich noch etwas wie einen Monoflop verwenden. Andere Ideen?

      Sicher ist nur: Pins habe ich keine mehr frei….
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • monkye wrote:

      Da ich aber meinen Finger nicht schnell genug vom Sensor wegbekomme, wird natürlich der DHT11-Sensor nicht erkannt, weil der Berührungsschalter immer noch den Pegel auf Low zieht.
      Du kannst ja nach der Schalterabfrage prüfen, bis der Schalter losgelassen wurde. Und dann erst das Programm fortsetzen.
      Also anstelle dein Wait als Workaround eine While Wend Schleife, die verlassen wird, wenn der Taster losgelassen wurde.
    • Aufgefallen im Code:

      BASCOM Source Code

      1. ' ____________
      2. ' OFF = 0 = ______| |______|
      3. ' 2/3 2/3 800us + 400us = 1.200us = 1,2 ms


      Sollte das nicht 2/3 1/3 heißen?

      BASCOM Source Code

      1. '---[Watchdog konfigurieren]----------------------------------------------------
      2. Config Watchdog = 8192
      3. Wdtcr.wdie = 1
      4. Enable Wdt
      In Zeile 3 wird doch schon der Watchdog-Interrupt eingeschaltet.
      Was soll Enable Wdt bewirken?

      Sollte das Enable Watchdog heißen?

      Oder willst du da den Watchdog einschalten?
      Das wäre dann Watchdog Start oder Set WDT.

      BASCOM Source Code

      1. Dim WS7_Sens(12) AS Byte
      2. Dim WS7_T1 As Byte At WS7_Sens(1) + 0 Overlay
      3. Dim WS7_T2 As Byte At WS7_Sens(1) + 1 Overlay
      4. Dim WS7_T3 As Byte At WS7_Sens(1) + 2 Overlay
      5. Dim WS7_H1 As Byte At WS7_Sens(1) + 3 Overlay
      6. Dim WS7_H2 As Byte At WS7_Sens(1) + 4 Overlay
      7. Dim WS7_H3 As Byte At WS7_Sens(1) + 5 Overlay
      8. Dim WS7_P1 As Byte At WS7_Sens(1) + 6 Overlay
      9. Dim WS7_P2 As Byte At WS7_Sens(1) + 7 Overlay
      10. Dim WS7_P3 As Byte At WS7_Sens(1) + 8 Overlay
      11. Dim WS7_P4 As Byte At WS7_Sens(1) + 9 Overlay
      12. Dim WS7_XOR As Byte At WS7_Sens(1) + 10 Overlay
      13. Dim WS7_CRC As Byte At WS7_Sens(1) + 11 Overlay
      Display All
      Solche Konstrukte kann man einfacher formulieren, indem man zuerst einfach die Einzel-Variablen nacheinander dimensioniert (die sind dann in der richtigen Reihenfolge) und danach das Array als Overlay auf das 1. Einzelelement legt.

      BASCOM Source Code: Leserlicher Datenblock mit Overlay-Array

      1. Dim WS7_T1 As Byte
      2. Dim WS7_T2 As Byte
      3. Dim WS7_T3 As Byte
      4. Dim WS7_H1 As Byte
      5. Dim WS7_H2 As Byte
      6. Dim WS7_H3 As Byte
      7. Dim WS7_P1 As Byte
      8. Dim WS7_P2 As Byte
      9. Dim WS7_P3 As Byte
      10. Dim WS7_P4 As Byte
      11. Dim WS7_XOR As Byte
      12. Dim WS7_CRC As Byte
      13. Dim WS7_Sens(12) AS Byte At WS7_T1 Overlay
      Display All
      Da findet sich im Code bestimmt noch mehr, was man optimieren kann.
      (Nichts für Ungut, ist nur konstruktive Kritik)
    • Mitch64 wrote:

      BASCOM Source Code

      1. '---[Watchdog konfigurieren]----------------------------------------------------
      2. Config Watchdog = 8192
      3. Wdtcr.wdie = 1
      4. Enable Wdt
      In Zeile 3 wird doch schon der Watchdog-Interrupt eingeschaltet.
      Was soll Enable Wdt bewirken?

      Sollte das Enable Watchdog heißen?

      Oder willst du da den Watchdog einschalten?
      Das wäre dann Watchdog Start oder Set WDT.Da findet sich im Code bestimmt noch mehr, was man optimieren kann.
      (Nichts für Ungut, ist nur konstruktive Kritik)
      Also es läuft der WDT und wird per Interrupt geweckt. Es passiert aber nix, weil am Interrupt Vektor 0x000C ein RETI steht.

      Es funktioniert wie gewünscht.
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Der Schaltplan ist anbei. Vermutlich werde ich den Ansatz vom @Mitch64 verwenden, in Verbindung mit einem Timeout, so dass das Aufwachen nicht mehr stattfindet, bis die Ursache für das dauerhafte „Low“ am Sende-Pin beseitigt ist.
      Files
      • Schaltplan.png

        (108.41 kB, downloaded 35 times, last: )
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Mitch64 wrote:

      Da haste aber einen schönen Schnitzer in deinem Schaltplan.

      Wenn der Controller gerade was senden will (PortB.4 = High) und gleichzeitig die Sensor-Taste gedrückt wird, haste einen satten Schluss des Controller Ausgangs auf Masse.
      Ja, daher auch die Aussage oben, das ein Monoflop ran muss. Oder eine Entkopplung per Kondensator.
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Guter Hinweis @Pluto25, den Komparator wollte ich ursprünglich auch ausschalten, habe ich irgendwann vergessen.

      Zu dem Thema „Kurzschluss“ gibt es noch eine Variante: den Standardpegel in diesem Schaltungsabschnitt umdrehen. Denn durch den 470k Widerstand wird es keinen großen Strom gegen Masse geben.
      Muss erstmal die anderen Varianten prüfen und ein bisschen auf dem Steckbrett experimentieren und messen…
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Du könntest den Sensor-Taster auch an den Pin wie der DHT11 anschließen (PinB.3).
      Der DHT11 treibt aktiv nur Low, daher ist auch der Pullup-Widerstand R2 wichtig.
      Den gleichen könntest du für deinen Sensor benutzen.

      Also Taster an PinB.3 nutzen, R8 entfällt.

      Deine Routine zum Lesen des DHT11 solltest du nochmal überdenken.
      Du solltest hier nicht aktiv High treiben, das macht der PullUp R2 für die Datenleitung.
      Praktisch treibt der Pin immer nur Low und du schaltest nur das DDR-Bit um.
      Der Pin sollte nur für den Resetpuls des DHT11 als Ausgang und Low aktiv sein, sonst immer Eingang.
      Ist das DDR-Bit gesetzt, wird Low getrieben, ist es gelöscht, ist der Pin Eingang und wird vom PullUp R2 hochgezogen.

      Das lässt sich z.B. schön durch ein Makro erledigen.

      BASCOM Source Code: Makro für DHT11-Reset

      1. ' DHT11 Reset-Puls ausgeben
      2. Macro DHT11_Reset
      3. Reset DHT_Put ' Ausgang Low schalten
      4. Config DHT_Put = Output ' Port als Ausgang schalten (jetzt Low)
      5. Waitms 18 ' 18ms Low-Puls
      6. Config DHT_Put = Input ' Port-Pin wieder als Eingang (High durch PullUp)
      7. End Macro
    • Huch, da bin ich der Schussel - ist schon am DHT-11 Pin angebunden, da muss ich den Schaltplan nochmal korrigieren...
      Das Thema "Du solltest hier nicht aktiv High treiben, das macht der PullUp R2 für die Datenleitung." ist mir bewusst, nur war ich zu faul die Variante mit internem Pullup zu ändern. Guter Punkt von Dir.

      Und ich muss mal die neue Version hochladen, die hatte ich im September schon überarbeitet. Jetzt werde ich gleich noch ein paar Stellen sauber machen...
      Files
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Mitch64 wrote:

      Solche Konstrukte kann man einfacher formulieren, indem man zuerst einfach die Einzel-Variablen nacheinander dimensioniert (die sind dann in der richtigen Reihenfolge) und danach das Array als Overlay auf das 1. Einzelelement legt.
      Gut möglich, dass die Reihenfolge so im Speicher bleibt. Nur hatte ich in Erinnerung, dass es eine "Code Optimierung" (Optimize Code) gibt. Und daher: der sichere Weg (und in meinem "Style").
      Aus datenschutzrechtlichen Gründen befindet sich die Kontaktdaten auf der Rückseite dieses Beitrages.
    • Die Variablen werden im Speicher in der Reihenfolge angelegt, in der sie in der Codeabfolge angegeben sind.
      Codeoptimierung findet nur zur Laufzeitoptimierung statt (wenn angehakt im Setting) und hat nichts mit den Variablen (Reihenfolge im Speicher) zu tun.

      Wenn du schon so auf "Nr Sicher" gehen willst, dann solltest du auch diese Umschaltung für den DHT korrekt machen. Nicht dass der Hops geht.

      Und zudem gibt es da noch den Power Schalten für den Sender 433MHz.
      Eine HF-Schaltung braucht immer eine gute Masse. Schon alleine daher macht es keinen Sinn, die Masse des Moduls über einen Transistor zu schalten.
      Null Ohm (mit dem Multimeter gemessen) ist nicht das selbe wie Impedanz = 0 Ohm!

      Grundsätzlich schaltet man den VCC Pin. @Michael hatte es schon mal erwähnt. Mit einem PNP Transistor oder es geht auch ein P-Kanal Fet.

      Jetzt sehe ich gerade noch die Antenne aus Litze (letztes Foto).
      Das ist bestimmt keine gute Anpassung an 433MHz. Dazu die schlechte Masse vom Modul über Transistor.
      Also ich schätze, die Reichweite des Senders wird nicht überragend sein.