Projekt
EL Effekt Monitor
med ARDUINO Uno R3

INDEX
  • Inledning
  • senast uppdaterat
  • Beskrivning
  • Köp / Transport / Embalage m.m.
  • Referenser / Länkar m.m.
  • Disclaimer
  • Budget
  • Referenser
  • Disclaimer

  • Inledning
    Ett effekt monitor / mät projekt. Använder en Arduino UNO + Ethernet / SD Shield och en TAOS TSL25x ljus sensor för att räkna pulser på LED indikeringen på våran EL-Mätare

    Denna metod kräven inga livsfarliga ingrepp i EL-Installationen eller EL-Mätaren, sensorn monteras med dubbelhäftande tape på EL-Mätaren.


    Några ARDUINO UNO R3


    Senast uppdaterat
    2016.01.22 Installerade en server för att ta emot och behandla mät-data. Kör eMoncms med tillhörande PHP och mySQL på en UBUNTU v.14.04.


    Systemskiss

    Aktuella
    mät-data (Ej i funktion!)

    2016.01.20 Har beställt TSL250/252 ljus sensorer från ELFA.se[L2] - Experimenterar med programkod från airSensor.co.uk[R8] - Den borde vara rellativt lätt att använda / modifiera för mina behov.

    Provar att använda ett färdigt Webb GUI från emoncms.org[R9] - Det är en del av 'Open Energy Monitor' GPL projektet[R10]


    Exempel på webb / app presentation av mätdata med emoncms

    En bra instruktion på hur man kan göra för att skicka upp data till en webbserver med hjälp av php hittade jag på tweaking4all.com[R11]

    /*
    * By Hadley Rich 
    * Released under the MIT license.
    * Some ideas taken from arduino.cc example code.
    */
    
    #include 
    #include 
    #include 
    #include 
    
    byte mac[6] = { 0x90, 0xA2, 0xDA, 0x44, 0x34, 0x28 };
    char macstr[18];
    
    const int chan1_pin = 2;
    //My meter flashes 1000 times per kWh
    const float w_per_pulse = 1;
    const unsigned long ms_per_hour = 3600000UL;
    
    unsigned int chan1_count = 0;
    unsigned long report_time = 0;
    unsigned long chan1_first_pulse = 0;
    unsigned long chan1_last_pulse = 0;
    volatile byte chan1_pulse = 0;
    
    
    EthernetClient ethClient;
    PubSubClient client("192.168.1.3", 1883, callback, ethClient);
    
    void callback(char* topic, byte* payload, unsigned int length) {
    }
    
    void chan1_isr() {
      chan1_pulse = 1;
    }
    
    boolean connect_mqtt() {
      Serial.print("MQTT...");
      if (client.connect(macstr)) {
        Serial.println("connected");
        char topic[35];
        snprintf(topic, 35, "house/node/%s/state", macstr);
        client.publish(topic, "start");
        return true;
      }
      Serial.println("Failed.");
      return false;
    }
    
    void setup() {
      pinMode(chan1_pin, INPUT);
      attachInterrupt(0, chan1_isr, RISING);
      Serial.begin(9600);
      delay(1000);
      snprintf(macstr, 18, "%02x:%02x:%02x:%02x:%02x:%02x",
        mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
      Serial.print("DHCP (");
      Serial.print(macstr);
      Serial.print(")...");
      if (Ethernet.begin(mac) == 0) {
        Serial.println("Failed.");
        while(true);
      }
      Serial.println(Ethernet.localIP());
    }
    
    void loop() {
      char topic[35];
      char value[6];
      static unsigned int chan1_watts;
      unsigned long chan1_delta; // Time since last pulse
    
      if (!client.connected() && !connect_mqtt()) {
        return;
      }
      client.loop();
    
      if (millis() - chan1_last_pulse > 60000) {
        chan1_watts = 0;
      }
    
    
      if (millis() - report_time > 5000) {
        chan1_delta = chan1_last_pulse - chan1_first_pulse;
        if (chan1_delta && chan1_count) {
          chan1_watts = (chan1_count - 1) * w_per_pulse * ms_per_hour / chan1_delta;
          chan1_count = 0;
        }
    
        if (!(report_time == 0 && chan1_watts == 0)) {
          snprintf(topic, 35, "house/power/meter/1/current");
          snprintf(value, 6, "%d", chan1_watts);
          client.publish(topic, value);
          Serial.print("Chan1 ");
          Serial.println(chan1_watts);
     
          report_time = millis();
        }
      }
    
      if (chan1_pulse == 1) {
        chan1_count++;
        chan1_pulse = 0;
    
        chan1_last_pulse = millis();
        if (chan1_count == 1) { // was reset
          chan1_first_pulse = chan1_last_pulse;
        }
    
        snprintf(topic, 35, "house/power/meter/1/usage");
        client.publish(topic, "1");
      }
    
      int dhcp_status = Ethernet.maintain();
      /*
        returns:
        0: nothing happened
        1: renew failed
        2: renew success
        3: rebind fail
        4: rebind success
      */
      if (dhcp_status) {
        long now = millis();
        Serial.println("DHCP Lease");
      }
    }
    


    Beskrivning


    Några noteringar Plus :-)


  • Några noteringar Minus :-(


  • Tekniska data 'Effekt Monitor'
    =====================================================================
    Typ ............................... Effekt Monitor
    =====================================================================
    


    Köp / Transport / Embalage m.m.


    Budget
    Kostnader t.o.m. 2014.07.10
    ============================================================
    Förstärkaren / Inköp ...................... 
    Införsel kostnader (Moms/Tull) ............
    
    

    Till index / top

    Länkar / Referenser
    Honors to the brains behind! - 'Äras den som äras bör!' - som talesättet säger. Som vanligt så är det inte jag som kommit på allt detta. Här hittar ni länkar till referenser och leverantörer.

    [L1] Köp din Arduino från
    Electrokit.se
    [L2] TSL250/252 sensor ELFA.se
    [R1] Allt om Arduino @ Arduino.cc
    [R2] Lär dig programmera Arduino @ ladyada.net
    [R3] Getting started guide @ Arduino.cc
    [R4] datablad för sensor TSL250R
    [R5] Om ljus sensorer @ adafruit.com
    [R6] Effekt mät projekt av Jon Archer
    [R7] Effekt mätning @ fun-tech.se
    [R8] Effekt mätning @ airSensor.co.uk
    [R9] Webb GUI för Open Energy Monitor GPL projekt @ emoncms.org
    [R10] GPL projekt @ OpenEnergyMonitor.org
    [R11] Push data using php @ -->tweaking4all.com
    https://community.particle.io/t/open-energy-monitor-port/3166


    Till index / top


    Disclaimer!
    The information given on this page is given on an 'As Is' basis and aimed for NON COMMERCIAL use only. The author can not be held responsible for any use of the information. Any registered product / trademark or company name on the page is the property of their respective owners.

    NOTERA!
    Det är helt personliga reflektioner och upplevelser vi skriver om på den här sidan, dessa är inte några 'Expert' kommentarer / utlåtanden. Vi rekommenderar INTE att någon ska göra dom ändringar / Modifieringar som vi gjort och som beskrivs på denna sida, då dessa HELT SÄKERT gör att alla garantier som leverantören utställt OMEDELBART upphör.

    Våra tester och slutsatser kan INTE, och ska INTE tas för intäkt att samma eller motsvarande resultat eller upplevelse kan erhållas eller efterliknas någon annanstans eller av någon annan - http://sm2yer.dyndns.org - ©1999-2013 G.Larsson / SM2YER

    Go Back!


    ©2010--2016 SM2YER Goran