Ankündigung

Einklappen
Keine Ankündigung bisher.

Arudino KNX Regenmesser

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Arudino KNX Regenmesser

    Hallo,
    hier mal eine kleine "Foto-LoveStory" als weiteres Beispiel für einen Arudino Einsatz: (siehe Anhang)

    Folgendes Szenario: billiger Regenmesser vom Ebay (29,95) - elektronik Rausgeworfen, 2 Kabel vom Reed-Kontakt zum Arduino (10€), 4 Kabel vom Arduino zum BCU (30€).
    Summe ~70€ - Fertig.

    Der Code speichert den "Zählerstand" im EEProm. Außerdem wird die "debouncer" library zum Entprellen eingesetzt. Links im Code.
    Der Code ist noch nicht ganz Fertig - ich muss den Zählerstand noch umrechnen auf die Regenmenge pro Wippenschlag...
    Debug-Informationen sind auch noch im Code...

    Code:
    #include <EEPROM.h> // Zum permanent speichern des Zählers im EEPROM
    // Erweiterung zum Speichern von "anything" im EEPROM http://playground.arduino.cc/Code/EEPROMWriteAnything
    #include "EEPROMAnything.h"
    // Bounce2 zum Entprellen http://playground.arduino.cc/Code/Bounce
    #include <Bounce2.h>
    // KNX-Library https://bitbucket.org/thorstengehrig/arduino-tpuart-knx-user-forum/
    #include <KnxTpUart.h>
    
    //Initialize the KNX TP-UART library on the Serial1 port of Arduino Mega
    KnxTpUart knx(&Serial1, "1.1.7");
    
    const int CounterPin = 2;  // definiert den Eingangs-PIN
    int InputState = 0; // Status des Eingangs
    int InputStateHIGH = 0;
    long counter = 0; // Variable zum zählen
    unsigned long buttonPressTimeStamp;
    
    // Instantiate a Bounce object
    Bounce debouncer = Bounce();
    
    void setup() {
      Serial.begin(19200);
      Serial1.begin(19200);
      UCSR1C = UCSR1C | B00100000; // Even Parity
      knx.uartReset();
    
      // Diese Zeile auskommentieren wenn EEPROM genullt werden soll
      // EEPROM_writeAnything(0, counter);
      EEPROM_readAnything(0, counter); // Lesen des EEPROMs nach Reset
    
      Serial.print("Initwert:");
      Serial.println(counter);
    
      // Setup the Input
      pinMode(CounterPin, INPUT);
      // Activate internal pull-up
      digitalWrite(CounterPin , HIGH);
      debouncer.attach( CounterPin ); // De-bouncer initialisieren
      debouncer.interval(30); // Mindestlänge eines Signals = 30ms
    }
    
    void loop() {
      // Update the debouncer
      boolean stateChanged = debouncer.update();
      // Get the update value
      int InputState = debouncer.read();
    
      if (stateChanged && InputState == LOW)
      {
        counter++;
        EEPROM_writeAnything(0, counter);
        //Set timer zum messen der länge
        buttonPressTimeStamp = millis();
        knx.groupWrite4ByteFloat("1/2/3", counter );
        InputStateHIGH = 0;
        Serial.print("Impulse count:");
        Serial.println(counter);
      }
      if (stateChanged && InputState == HIGH)
      {
        Serial.print("Lenght in ms:");
        Serial.println(millis() - buttonPressTimeStamp );
      }
    }
    Ich hoffe die Foto-Lovestory gefällt euch :-)

    Gruß
    Thorsten
    Angehängte Dateien
    Zuletzt geändert von ThorstenGehrig; 28.07.2015, 19:42.

    #2
    Cooles Projekt. Danke für die Doku!

    Viele Grüße,

    David

    Kommentar


      #3
      Zitat von ThorstenGehrig Beitrag anzeigen

      Der Code speichert den "Zählerstand" im EEProm.

      Code:
        if (stateChanged && InputState == LOW)
        {
          counter++;
          EEPROM_writeAnything(0, counter);
      Hier wird jedesmal der counter im EEprom abgespeichert. Leider ist die Lebensdauer vom EEProm nicht unendlich. Atmel gibt in der Regel bei den AVR's min 100.000 Schreibzyklen an. Das könnte somit schnell erreicht werden. Da solltest Du nochmal darüber nachdenken.

      Dirk

      Kommentar


        #4
        Danke - das ist mir bekannt.
        Die Lebensdauer ist imho meistens höher als angegeben - zumal 100.000 (mindestens) bedeuted erstmal 100.000 Wippenschläge mal geschätzt 3 Liter pro Wippenschlag (ich muss das noch ermitteln) = 300.000 Liter/m2 niegerschlag... ich glaube solange wird das Plastik des Regenmessers nicht leben.

        Jede andere Lösung sichert keine Regenmenge bei Busausfall. Man kann aber auch einfach nur die Tagesmenge im RAM speichern - und den rest extern Lösen...

        Gruß
        Thorsten

        Kommentar


          #5
          Zitat von ThorstenGehrig Beitrag anzeigen
          Jede andere Lösung sichert keine Regenmenge bei Busausfall.
          • Der TPUART2 liefert ein SAVE-Signal bei Busausfall. Das reicht bei mir locker, um noch die Daten ins Flash zu schreiben, bevor der Unterspannungsreset zuschlägt. Für ein Byte im EEPROM am Arduino sollte es dreimal reichen. Ich weiß aber nicht, ob das bei deiner Hardware so funktioniert.
          • Du könntest einen Block mit z.B. 16 Byte reservieren, bei jedem Schreiben ein anderes Byte nehmen und nach Überlauf alles wieder ausnullen. Würde die Abnutzung um Faktor 16 reduzieren.

          Max

          Kommentar


            #6
            Hallo Thorsten,
            dein Intro hat mich neugierig gemacht, doch der Link zum PDF liefert bei mir eine leere Seite. Mache ich etwas falsch?
            Viele Grüße
            Mike

            Kommentar


              #7
              Der link hat das Forum-Update wohl nicht überlebt. Ich habe den Eintrag mal aktualisiert - Datei kann jetzt runtergeladen werden.
              Gruß
              Thorsten

              Kommentar


                #8
                Zitat von ThorstenGehrig Beitrag anzeigen
                Der link hat das Forum-Update wohl nicht überlebt. Ich habe den Eintrag mal aktualisiert - Datei kann jetzt runtergeladen werden.
                Gruß
                Thorsten
                Hi Thorsten,

                ich suche aktuell nach einer Regensensor Lösung und bin auf den Thread aufmerksam geworden.
                Der Download funktioniert bei mir aktuell leider immer noch nicht - haben andere auch das Problem?

                VG
                Marcel

                Kommentar


                  #9
                  Moin,

                  ich kann auch keine PDF zum downloaden entdecken und hätte Interesse daran.

                  Grüße
                  Mark

                  Kommentar


                    #10
                    bei mir gehts.. erster Post.. KNX Regenmesser.pdf

                    Gruß Martin
                    Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                    Kommentar


                      #11
                      Ich seh überhaupt keinen Dateianhang oder Link :-(

                      Kommentar


                        #12
                        Hier:

                        Bereich.png

                        Gruß Martin
                        Die Selbsthilfegruppe "UTF-8-Probleme" trifft sich diesmal abweichend im groüen Saal.

                        Kommentar


                          #13
                          Ist bestimmt wieder der Forum-Cache ... Mal im anderen Browser testen bevor ich den Cache wieder leere.

                          [update]
                          Nö, auch im IE, wo ich das KNXUF noch nicht besucht hatte, zeigt den Link nicht an. An meinem Cache liegt's damit nicht.

                          Kommentar


                            #14
                            Puh, es liegt also nicht an mir... Hier ist mit Safari auch kein Link/Download zu sehen...

                            Michael

                            edit: nach Browser komplett zurücksetzen geht es. Download liefert aber kein PDF sondern PDF-Quelltext als Text, zumindest auf meinem iPad.
                            Zuletzt geändert von MGK; 29.07.2015, 20:26.

                            Kommentar


                              #15
                              Also ich sehe den Link ...aber der führt nur auf eine leere Seite.
                              Viele Grüße Jens

                              Kommentar

                              Lädt...
                              X