MISURA DELLA PORTATA della Fonte del Capriolo 

Dati GPS:41.848558°N, 14.269407°E

Sensore Water Flow     POW11D3B

Collegamento con Arduino (come riferimento)

 

Il  sensore invierā un impulso al pin 2 di Arduino ogni volta che la turbina  effettua una rotazione completa.

Ad ogni rotazione  sono passati attraverso il sensore 2.25 ml di acqua.

La Portata ( Litri al minuto) si calcola  moltiplicando   N.ro  giri al minuto x  2.25

 Per verificare il perfetto funzionamento del sensore provvedo ad effettuare vari test della portata del mio rubinetto di casa.

Il test di base consiste nel verificare il tempo di riempimento di una  bottiglia di un 1 litro.

Dal test effettuato occorrono circa 16  secondi.

La portata d'acqua  č di circa 4 litri al minuto.

Test pratico con Arduino:

Test del programma:

Ecco il risultato:

Test pratico con l'ESP8266 E-12

Test del programma:

#include <SPI.h>

#include <Wire.h>

#include <Adafruit_GFX.h>

#include <Adafruit_SSD1306.h>

 #define SCREEN_WIDTH 128   

#define SCREEN_HEIGHT 64   

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

 #define SENSOR  2

 long currentMillis = 0;

long previousMillis = 0;

int interval = 1000;

float calibrationFactor = 8.8;//Parametro desunto da TEST pratico

volatile byte pulseCount;

byte pulse1Sec = 0;

float flowRate;

unsigned long flowMilliLitres;

unsigned int totalMilliLitres;

float flowLitres;

float totalLitres;

 void IRAM_ATTR pulseCounter()

{

  pulseCount++;

void setup()

{

  Serial.begin(115200);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)

  display.clearDisplay();

  delay(10);

  pinMode(SENSOR, INPUT_PULLUP); 

  pulseCount = 0;

  flowRate = 0.0;

  flowMilliLitres = 0;

  totalMilliLitres = 0;

  previousMillis = 0;

   attachInterrupt(digitalPinToInterrupt(SENSOR), pulseCounter, FALLING);

}

 void loop()

{

  currentMillis = millis();

  if (currentMillis - previousMillis > interval)

  {

        pulse1Sec = pulseCount;

    pulseCount = 0;

        flowRate = ((1000.0 / (millis() - previousMillis)) * pulse1Sec) / calibrationFactor;

    previousMillis = millis();

     flowMilliLitres = (flowRate / 60) * 1000;

    flowLitres = (flowRate / 60);

        totalMilliLitres += flowMilliLitres;

    totalLitres += flowLitres;          

    display.clearDisplay();   

    display.setCursor(10,0);  //oled display

    display.setTextSize(1);

    display.setTextColor(WHITE);

    display.print("FONTE del CAPRIOLO");   

    display.setCursor(0,20);  //oled display

    display.setTextSize(2);

    display.setTextColor(WHITE);

    display.print("Q:");

    display.print(float(flowRate));

    display.setCursor(100,28);  //oled display

    display.setTextSize(1);

    display.print("l/m");     

    display.setCursor(0,45);  //oled display

    display.setTextSize(2);

    display.setTextColor(WHITE);

    display.print("T:");

    display.print(totalLitres);

    display.setCursor(110,53);  //oled display

    display.setTextSize(1);

    display.print("l");

    display.display();

  }

 }

 

 

 

 

 

SX1276 V2 Lora ESP32 LX6 Dual-Core 0.96 Pollici Blue OLED

WiFi Kit 32 Modulo CP2012 Scheda di Sviluppo IOT 868MHZ-915MHz

INFORMAZIONI TECNICHE:

 

 

IMPORTANTE: I GPIO con asterisco sono solo di INPUT es.: GPIO38* - GPIO36* - ecc..

 

Sensori alimentati dal modulo devono essere del tipo a 3.3 Vcc.

 

Box realizzato con la stampante 3D  l'ANYCUBIC MEGA S (Circa 6 ore)

 

Test pratico con l'ESP32 LoRa:

 

 

Test del programma:

 

#include "heltec.h"

#define SENSOR  17

 long currentMillis = 0;

long previousMillis = 0;

int interval = 1000;

float calibrazione = 8.8;//Parametro desunto dal TEST pratico

volatile byte pulseCount;

byte pulse1Sec = 0;

float flowRate;

String FlowRate;

String Tot_litri;

unsigned long flowMilliLitres;

unsigned int totalMilliLitres;

float flowLitres;

float totalLitres;

#define BAND    433E6

 void IRAM_ATTR pulseCounter()

{

  pulseCount++;

void setup()

{

  Heltec.begin(true, true, true, true, BAND);

  Serial.begin(115200);

  LoRa.setTxPower(20,RF_PACONFIG_PASELECT_PABOOST);// MAX POTENZA

   Heltec.display->clear();

  delay(10); 

    pinMode(SENSOR, INPUT_PULLUP); 

  pulseCount = 0;

  flowRate = 0.0;

  flowMilliLitres = 0;

  totalMilliLitres = 0;

  previousMillis = 0; 

  attachInterrupt(digitalPinToInterrupt(SENSOR), pulseCounter, FALLING);

void loop()

{

  currentMillis = millis();

  if (currentMillis - previousMillis > interval)

  {

        pulse1Sec = pulseCount;

    pulseCount = 0;   

    flowRate = ((1000.0 / (millis() - previousMillis)) * pulse1Sec) / calibrazione;

    previousMillis = millis(); 

    flowMilliLitres = (flowRate / 60) * 1000;

    flowLitres = (flowRate / 60); 

       totalMilliLitres += flowMilliLitres;

    totalLitres += flowLitres; 

       Heltec.display->setContrast(255);

    Heltec.display->clear(); 

    Heltec.display->setFont(ArialMT_Plain_10);

    Heltec.display->drawString(10,0,"  FONTE del CAPRIOLO");   

    Heltec.display->setFont(ArialMT_Plain_10);

    String Flowrate = "Q: " + String (flowRate) + " l/m";

    Heltec.display->drawString(0,20,Flowrate);       

   Heltec.display->setFont(ArialMT_Plain_10);

    String Tot_litri = "Tot: " + String (totalLitres) + " litri";

     Heltec.display->drawString(0,45,Tot_litri);   

   Heltec.display->display();

  }

 }

Continua....