Arduino GAS meter logger

Beste Arduino programmeurs.

Op dit moment ben ik bezig met mijn eerste Arduino project. De bedoeling is dat ik mijn Analoge GAS meter thuis kan loggen. Op het laatste cijfer zit een reflectie waarop de Arduino met reflectiesensor op reageert. Bij elke reflectie stuurt hij een HTTP post naar mijn webserver, deze logt vervolgens de pulsjes in een database. Als de gas meter ‘Vol Gas’ draait, duurt het op zijn minst 8 seconden voor de teller helemaal rond is, en dus de volgende puls komt.

Het probleem: Het is niet stabiel, de ene keer geeft hij 2 pulsjes kort achter elkaar, de andere keer 5 kort achter elkaar (dit is niet te veranderen) Ik heb het nu opgelost in de php code, wat niet charmant is. Deze kijkt of er binnen 8 seconden weer een post is gedaan, zo ja; niets in de database plaatsen.
Echter moet ik de Arduino continue resetten en loopt deze na een korte tijd weer vast, waardoor hij geen post opdrachten meer geeft. Ik denk dat dit komt door te veel POST opdrachten in een te korte tijd?

Kan iemand mij uitleggen wat ik moet veranderen aan de volgende code? (dit is mijn eerste arduino script)

long pulseCount = 0;     

#include <Ethernet.h>
#include <SPI.h>

byte mac[] = { 0x54, 0x34, 0x41, 0x30, 0x30, 0x31 };                                       

EthernetClient client;
char server[] = "www.mijnwebsite12345.nl";

void setup() {

  //Serial.begin(9600);
  Ethernet.begin(mac);

  //attached to IRQ 0  = pin2
  attachInterrupt(0, onPulse, FALLING);
}

void loop() {

}

void onPulse() {

  pulseCount++;
  
      Serial.print(pulseCount);
      
      if (client.connect(server, 80)) {
        client.print( "GET /add_data.php?");
        client.print("sensor=");
        client.print("GAS");
        client.print("&&");
        client.print("counter=");
        client.print(pulseCount);
        client.println( " HTTP/1.1");
        client.print( "Host: " );
        client.println(server);
        client.println( "Connection: close" );
        client.println();
        client.println();
        client.stop();
      }
      
}

Alvast bedankt voor de reacties!

Groeten Nick

Het zou zo maar eens kunnen dat hij door die interrupt van slag raakt. Je moet variabelen die door zowel een interrupt als de rest van het programma worden gebruikt uitbreiden met volaltile en maak er maar unsigned van. Dus:

volatile unsigned long pulseCount = 0;

Of het helpt? geen idee, maar wie weet. In feite blijft de php oplossing natuurlijk een symptoom bestrijding. Maar ze zouden toch dit jaar alle huizen uitrusten met een smartmeter? Mogelijk kan je daar straks wat mee.

@edit: Ik keek nog ff naar je code, maar ik zou alles wat niet direct met die interrupt te maken heeft eruit slopen waardoor de interrupt alleen nog maar de pulse counter ophoogt. De rest van de code zet je dan in de loop. En wat je dan kan doen is bijvoorbeeld kijken of de pulse counter is veranderd (opgehoogd). Zo ja print je via de serial en stuur je die php call eruit. dus bijvoorbeeld in de loop():

if (pulseCounter != oldPulseCounter){
   //
   // printen en php uitsturen
   //
   oldPulseCounter = pulseCounter;
}

Beste Nico,

Allereerst bedankt voor je snelle reactie. Het klopt inderdaad dat we in 2015 slimme meters krijgen. Maar het voornaamste doel van dit script is om het Arduino programmeren onder de knie te krijgen :)

Ik ga met jou tips aan de gang. Bedankt!

Zag trouwens dat die dingen alleen de elektriciteit meten en dat je kennelijk moet betalen om de info op je PC oid te krijgen.... Nou die meter zal ik wel niet tegen kunnen houden maar 20 euro om iets te krijgen dat er als is.... Zie tzt wel hoe die info eraf is te halen zonder kosten

Ik vraag me af of het ding de energie die ie zelf gebruikt ook gaat meten (denk dat ik het antwoord al weet). Dan gaan we dus mooi weer een beetje meer betalen (al die beetjes bij elkaar zijn toch wel interessant voor de leverancier). En hoe zit het met de communicatie, moet een gebruiker dat ook aanleveren ?

Sorry, off topic, ik houd al op...

Goeiendag,

Google eens,solarmeter-v11.

Kun je analogemeters mee uitlezen en ook de toekomstige slimme meter.

Ik gebruik het nu al een klein jaar werkt perfect. een arduino en een ethernetkaart voor 15 euro ben je klaar.

Groeten Bernhard

Het kan dat jou gasmeter indien dit geen hele oude is. Een magneetje in het telwerk heeft. Het magneetje zit achterde koma de midelste van de 3 getallen 0,0x0 Deze kan met een reedkontact geteld worden.(onderzijde met plakband) Oude meters hebben dit niet.

Groet bart,

Tja het kan natuurlijk ook vals licht zijn, dat kun je detecteren door telkens een puls licht te sturen en als er dan een andere waarde gemeten wordt dan is het plaatje te zien en anders niet. dan kun je dus een drempelwaarde instellen. Methode wordt gebruikt in optische sluizen die in zonlicht staan.