Energie verbruik datalogger

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 4
Geregistreerd: 03 Mei 2014, 21:57

Energie verbruik datalogger

Berichtdoor ahoetelm » 04 Mei 2014, 09:38

LS,

Ik probeer iets wat ik dacht dat dat wel ff snel te realiseren zou zijn, maar ik krijg de oplossing niet stabiel.

De situatie is dat ik een Current Cost energie meter heb, die middels een klem rond de hoofdader via inductie het totale stroomverbruik van mijn huis meet en dat draadloos doorgeeft aan een display kastje waar je de gemeten waarden kunt uitlezen.
Dus op het schermpje staat netjes het aantal watts wat verbruikt wordt, met de tijd en temperatuur (waromweet ik ook niet) en dat wordt elke 6 seconden ververst.
Die data wil ik graag verzamelen, zodat ik daar wat analyses op kan loslaten.

Nu is er een mogelijkheid om met een speciale kabel (van RJ-45 naar USB) het kastje te koppelen aan een PC om hem uit te lezen, maar dat betekent dat je continue een PC aan moet hebben staan, dus wil ik dat met een Arduino oplossen.

Ik heb gegoogled en uitgevogeld dat als ik een afgeknipte UTP kabel draadjes 4 en 8 verbind met mijn Arduino ik die data serieel kan uitlezen en dat heb ik aan de praat gekregen: De output kan ik naar mijn Serial monitor doorzetten en dan zie ik inderdaad netjes elke 6 seconden een xml achtig berichtje gedumped worden.

De volgende stap is om die data op te slaan op een SD kaartje, zodat ik de Arduino stand alone kan laten draaien.
Dus ik op hetzelfde breadboard waar ik de energiemeter op had aangesloten het SD kaartje gemonteerd en aangesloten, maar daar kreeg ik vel problemen mee: Op een of andere manier werkte het SD kaartje wel (als ik de Cardinfo sketch uit de Examples probeerde kreeg ik bevestiging dat alles netjes was aangesloten), maar als ik dan ging schrijven, dan kreeg ik al snel foutmeldingen en was de data op het kaartje helemaal vernaggeld (rare bestandsnamen, rare tekens in de data etc.). Alleen op te lossen door opnieuw te formatteren.

Na wat experimenteren (andere SD kaart, speciaal SD kaart formateer programmaatje gebruikt, ander SD kaart breakout boardje gekocht want het kon de HW zijn natuurlijk, en uitgebreide code checks en googlen naar vergelijkbare problemen) kwam ik er achter dat als ik het sd kaartje op dezelfde Ground aansloot als de energiemeter, er dan die problemen optraden.
Dit had ik niet verwacht (ground is toch ground?) maar blijkbaar hebben de energiemeter en de SD kaart module toch invloed op elkaar.
De SD kaart module zit nu aangesloten op de pinnen 10-13 + de GND daarnaast en de energiemeter zit op de GND bij de 5V en pin 4.
Verder nog een RGB ledje aangesloten die groen flikkert als het schrijven van het bericht succesvol is en rood als het fout gaat.

Op zich werkt het nu wel, maar om een of andere manier gaat het na een uur of 2 toch weer fout en gaat het lampje rood knipperen en volgen er ook geen groene meer. Het SD kaartje kan ik dan wel uitlezen en dat ziet er wel goed uit, maar als ik dan opnieuw probeer op te starten dan blijft hij weigeren.
De enige manier om het weer werkend te krijgen is om het kaartje te formatteren en dan is een Quick format niet voldoende.

Ik vermoed dat er toch enige interferentie is tussen het SD kaart moduletje en de energiemeter, dus dat er via de GND wellicht toch een signaal of zo mee komt die het schrijven naart hetr SD kaartje beïnvloed???

Mijn vraag is dus of iemand tips heeft om b.v. met weerstanden, diodes, condensatoren of een Hans Klok truukje ervoor te zorgen dat ik een stabiele oplossing kan realiseren, zodat ik de opstelling een weekje kan laten draaien zonder problemen, wat volgens alle andere SD kaar datalog projecten op het WWW toch de meesten prima voor elkaar krijgen.

Alvast bedankt!

Anton

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Energie verbruik datalogger

Berichtdoor nicoverduin » 04 Mei 2014, 10:52

Galvanische scheiding toepassen met optokoppelaars tussen dat kastje en de Arduino. Ben je gelijk van dat probleem af. En GND is zeker geen GND......
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4
Geregistreerd: 03 Mei 2014, 21:57

Re: Energie verbruik datalogger

Berichtdoor ahoetelm » 04 Mei 2014, 12:13

Dag Nico,

Bedankt voor je snelle reactie: Ik heb zelf geen ervaring met optocouplers, maar volgens mij zit het probleem in de GND en ik kan me niet voorstellen dat de optocoupler gebruikt kan worden om de GND te verbinden?

Heb geen duidelijk beeld hoe je dat in gedachte hebt: Kun je dat toelichten?

Sowieso zie ik zoveel voorbeelden van sensoren etc. die een SD kaart gebruiken om data te loggen en daar worden nergens optocouplers gebruikt, dus wat zou dit hier kunnen veroorzaken?

Nogmaals bedankt,

Anton

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Energie verbruik datalogger

Berichtdoor nicoverduin » 04 Mei 2014, 14:00

Het probleem waar jij kennelijk tegenaan loopt is problemen met de GND van het kastje. Kan ook mogelijk opgelost worden door de stekker om te draaien.

Met een optokoppelaar, heb je een LED aan de zendende kant met eigen GND en een fototransistor aan de ontvangende kant. Eveneens met zijn eigen GND. Hierdoor heb je een galvanische scheiding en heeft ieder zijn eigen GND. Ben je gelijk van het probleem van de ander af ff googelen hoe. Zat voorbeelden voor opto koppelaars

Verder is het meestal handig als je de code laat zien die je gebruikt en graag de [ code ] en [ /code ] tags gebruiken.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4
Geregistreerd: 03 Mei 2014, 21:57

Re: Energie verbruik datalogger

Berichtdoor ahoetelm » 04 Mei 2014, 15:10

Dag Nico,

Wederom bedankt voor je reactie: Ik snap wat je bedoeld en op die manier scheid je inderdaad de circuits van elkaar.

Ik blijf het wel vreemd vinden dat het verbinden van de GND de problemen veroorzaakt: Als je b.v. motoren aanstuurt heb ik begrepen dat je vooral ook de GND met elkaar moet verbinden en zo zijn er meer voorbeelden van "best practices" die problemen voorkomen.

Ik ben wel geïnteresseerd in de achtergronden hiervan en wanneer het nodig is om condensators en diodes etc. toe te voegen om storingen etc. te voorkomen: Ik zie ze wel in voorbeelden van schakelingen en b.v. met motoren kan ik de toegevoegde waarde van een diode wel begrijpen, maar dat wordt niet overal duidelijk.
ik ben van huis uit eerder een software ontwikkelaar en dan kun je er over het algemeen wel in vertrouwen dat een bit aan of uit staat, maar in HW is dat toch wat minder eenduidig (tenminste wat ik er van begrijp) :-)

Dat zijn ook wel de dingen waar je als bouwer van een project tegenaan kan lopen en je flink wat frustratie op kan leveren....

Dus je voorstel van een optocoupler lost het probleem waarschijnlijk wel op, maar het zou leerzaam zijn om inzicht te verkrijgen in de reden, in plaats van een work around.

Ik was overigens meer gefocussed op het HW probleem, maar voor de volledigheid hieronder mijn code: Als daar een reden voor de problemen in zou kunnen zitten, dan hoor ik het graag (b.v. is het mogelijk dat ik een verkeerde combinatie van pinnen gebruik?)

Nogmaals bedankt,

Anton

Code: Alles selecteren
/*
 * Current Cost Reader
 *
 * Based on an internet example fom ruffandrea: http://forum.arduino.cc/index.php?topic=73812.0;
 *
 * Phyical design:
 * The Current cost is connected with a cut UTP cable, from which 2
 * lines are connected to the Arduino:
 *   - Blue: To Arduino Grnd
 *   - Brown: To Arduino pin 7
 *
 * The Arduino is powered from USB (smart phone loader) and Data is written to an SD card
 *
 * An RGB led is added to indicate status (RGB blinks on every write action)
 *
 */
// SD definitions
#include <SD.h>
const int chipSelect = 10; // CS pin = 10

// Current cost definitions
#include <SoftwareSerial.h>
SoftwareSerial currentcost(4, 300); //connected on pin 4 the rx and on nonexistent pin the tx that isn't used
String dataString = "";         // a string to hold incoming data

//RGB definitions
int red = 5; // the pins for the LED
int green = 6;
int blue = 3;

void setup(void)

        // Init Current Cost
   currentcost.begin(57600);

        // init RGB
        pinMode(red, OUTPUT); // tell Arduino LED is an output
        pinMode(green, OUTPUT);
        pinMode(blue, OUTPUT);

        // init serial out for debugging
   Serial.begin(9600);

        // init SD card: make sure that the default chip select pin is set to output, even if you don't use it:
   Serial.print("Initializing SD card...");
   pinMode(10, OUTPUT);
   if (!SD.begin(chipSelect)) // see if the card is present and can be initialized:
   {
      Serial.println("Card failed, or not present");
                error();
      return; // don't do anything more:
   }
   Serial.println("card initialized.");
        succes();

   // Initialize data gathering
   dataString.reserve(500);
   Serial.println("Setup ready");
}

void loop(void)
{
    if (currentcost.available()) //log only if data is coming in
    {
      char t = (char)currentcost.read();
      if (t != '\n') // Check on newline character
      {
         dataString += t;
      }
      else
      {   // EOL character reached: write message
         dataString.replace('\r','@'); // remove carriage return by replacing it with a @: helpfull for processing data
         File dataFile = SD.open("datalog.txt", FILE_WRITE);

         // if the file is available, write to it:
         if (dataFile)
         {
            dataFile.println(dataString);
            dataFile.close();

            // print to the serial port too for debugging:
            Serial.println(dataString);
                                succes();
         } 
         // if the file isn't open, pop up an error:
         else
         {
            Serial.println("error opening datalog.txt");
                                error();
         }
         // reset dataString
         dataString = "";
      }//end of send line to PC
    }//end of data available
}

void succes()
{
      analogWrite(green, 100);      // set the LED brightness
      delay(20);
      analogWrite(green, 0);      // set the LED brightness
}
void error()
{
      analogWrite(red, 100);      // set the LED brightness
      delay(50);
      analogWrite(red, 0);      // set the LED brightness
}
void proces()
{
      analogWrite(blue, 100);      // set the LED brightness
      delay(50);
      analogWrite(blue, 0);      // set the LED brightness
}

Gebruikers-avatar
Berichten: 116
Geregistreerd: 23 Dec 2011, 00:11
Woonplaats: Enschede

Re: Energie verbruik datalogger

Berichtdoor bigred » 05 Mei 2014, 18:26

ik heb een soortgelijke interface gebouwd voor mijn zend/ontvanger:
Afbeelding

Het bovenste deel is voor scheiding van de audio signalen en het onderste deel voor rs232.

Bij zend apparatuur komt het vaak voor dat er ongewenste signalen mee komen op het GND signaal.
De meest bekende is wel de brom op een audio systeem door aardlussen ?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Energie verbruik datalogger

Berichtdoor nicoverduin » 05 Mei 2014, 19:11

Ik denk dat de TS een grove onderschatting maakt van de "rommel" op de GND lijn. Als je dat wilt onderzoeken zou je bijvoorbeeld kunnen meten of er een verschil is in de spanningen tussen de GND van de Arduino en die van het kastje. Zeker met de schakelende voedingen van tegenwoordig is alles mogelijk. Of je code voor de SD goed is heb ik geen tijd voor om te beoordelen. Wel weet ik dat ik een project heb draaien in Malawi (Afrika) en daar draait een sketch van mij met SD logger elke dag in wat hogere temperaturen zo'n uurtje of 10 per dag..... En werkt prima.

Wel zag ik ff gauw dat je elke keer de file opent en closed in de loop. Dat is nogal een duur resource gebruik. Dan kan je beter openen in de setup en dan tussentijds bij schrijven daarna ff flush() uitvoeren. Dan worden de buffers geleegd op de SD.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4
Geregistreerd: 03 Mei 2014, 21:57

Re: Energie verbruik datalogger

Berichtdoor ahoetelm » 05 Mei 2014, 21:22

Dag Nico en ook jij bedankt voor je reactie bigred: Altijd blij met elke feedback.

Ik heb overigens de oorzaak gevonden: en dat blijkt van heel andere orde te zijn :oops:

Ik zat de logbestanden die ik inmiddels gemaakt had eens nader te bekijken en toen viel het me op dat het laatste record van alle bestanden steeds was geschreven binnen de minuut na een heel uur.
Nu geloof ik wel in toeval, maar dat is wat teveel van het goede, dus ik nog maar eens stevig gegoogled naar de technische data van het Current Cost kastje en toen kwam ik er eindelijk achter dat het appraat 1 minuut na elk oneven uur (hoe verzin je het) een history dump genereert van zo'n 25K aan data van de afgelopen 31 dagen, en dat past natuurlijk niet in mijn string buffertje...

Dus dat verklaart wel waarom ik wat schrijf problemen krijg.

Heb er nu even een max lengte check op gezet en nu processed hij de zaken netjes en loopt hij niet meer vast.

Dus gelukkig blijkt het gewoon verklaarbaar, en is het dus wel mogelijk om een stabiele datalogger te bouwen.

In ieder geval bedankt voor de feedback en die tip over de flush ga ik zeker proberen.

Groeten,

Anton

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 30 gasten