MeteoPi

Le Pluviomètre

Le Matériel

Pluviomètre à augets basculants avec support intégré - 7857M - Davis Instruments
Le pluviomètre est livré en version métrique et est équipé d'une bride en U qui permet d'installer le pluviomètre sur un tube de diamètre 30 mm à 40 mm. Il est possible d'installer le pluviomètre sur une poutre en bois par exemple avec les deux tires fonds inclus.
Le pluviomètre est équipé de la nouvelle version du cône avec les piques anti-oiseaux, de la nouvelle grille anti-débris et d'un câble d'une longueur de 12 mètres (avec connecteur RJ11).
Acheté chez Chez Météo Shopping

Le montage

Le Script
Pluvio.ino
#include <Arduino.h>
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Hardware pin definitions
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
const byte RAIN = 2;
const byte LED = 13;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
const float DEF_RAIN = 0.20;
char sonde[] = "Davis";
char NOM[]="Pluvio";
char Resolution[] = "0.20";
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#define INTERVAL_SEND          20000        // 20 secondes
#define VERSION "1.025"
char buffer[20];
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Variables Pluviometre
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
float pluint = 0;
float pluieTot = 0;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//Global Variables
// Timers
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
unsigned long lastPublish = 0;
unsigned long CurrentMillis  = 0;
volatile float dailyrainin = 0;
volatile unsigned long raintime, rainlast, raininterval, rain;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Compteur de pulsations
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
unsigned long PulsesRain = 0  ;
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//Interrupt routines (these are called by the hardware interrupts, not by the main code)
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void IRQPluvio()
{
  raintime = millis();
  raininterval = labs(raintime - rainlast);     // calculate interval between this and last event
  if (raininterval > 2000)
  {
    PulsesRain ++ ;
    pluieTot = PulsesRain * DEF_RAIN ;
    rainlast = raintime;
    double intensite = (DEF_RAIN * 3600000) / raininterval;
    if (intensite > pluint)
    {
      pluint = intensite;
    }
  }
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void setup()
{
  Serial.begin(115200);
  pinMode(LED, OUTPUT); //Status LED Blue
  pinMode(RAIN, INPUT_PULLUP); // input from wind meters rain gauge sensor
  lastPublish = millis();
  // attach external interrupt pins to IRQ functions
  attachInterrupt(digitalPinToInterrupt(RAIN), IRQPluvio,FALLING);
  // turn on interrupts
  interrupts();
  sprintf (buffer, "%s version: %s\t\t| Resolution = %s mm", NOM, VERSION, Resolution );
  Serial.println(buffer);
  delay (1000);
  pluieTot = 0;
  PulsesRain = 0;
  pluint = 0;
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void loop()
{
  CurrentMillis = millis() ;
  if (CurrentMillis > lastPublish )
  {
    Send();
    lastPublish = CurrentMillis + INTERVAL_SEND;
    digitalWrite(LED, !digitalRead(LED));
  }
}
/*******************************************************************************
    Envoie des données
*******************************************************************************/
void Send()
{
  Serial.print("|PluRel=");
  Serial.print(pluieTot, 2);
  Serial.print("|PluInt=");
  Serial.print(pluint, 3);
  Serial.println("|");
  PulsesRain = 0 ;
  pluieTot = 0;
  pluint = 0;
}
meteoduino/pluviometre.txt · Dernière modification: 13/07/2017 16:24 par michel
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5