• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przepływomierz, po dodaniu DS18B20 pomiary skaczą
#1
Question 
Witam,
Zrobiłem przepływomierz według tego poradnika https://www.instructables.com/How-to-Use...-Tutorial/
Wszystko ładnie działało do póki nie dodałem obsługi czujników DS18B20. Po dodaniu odczytów temperatury pomiary z przepływomierza strasznie "skaczą". 
Co mogę zrobić aby ustabilizować pomiary z przepływomierza?

Mój zmodyfikowany kod:
Kod:
#include <Wire.h>  
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire(3); //Podłączenie do 3
DallasTemperature sensors(&oneWire); //Przekazania informacji do biblioteki
LiquidCrystal_I2C lcd(0x27, 20, 4);  // Ustawienie adresu układu na 0x27

byte sensorInterrupt = 0;  // 0 = digital pin 2
byte sensorPin       = 2;

float calibrationFactor = 0.45;

volatile byte pulseCount; 

float flowRate;
unsigned long oldTime;

void setup()
{
  sensors.begin(); //Inicjalizacja czujnikow
 
  lcd.begin(20,4);  
  lcd.backlight(); // załączenie podświetlenia
 
  pinMode(4, OUTPUT);
  digitalWrite(4, LOW);
 
  pinMode(sensorPin, INPUT);
  digitalWrite(sensorPin, HIGH);


  pulseCount        = 0;
  flowRate          = 0.0;
  oldTime           = 0;

  attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
}

void loop()
{
  sensors.requestTemperatures(); //Pobranie temperatury z czujników
 
  if(flowRate > 60 & sensors.getTempCByIndex(1) > 5){ //włączenie pompy na pinie 4
    digitalWrite(4, HIGH);
  }
    else {
    digitalWrite(4, LOW);
  }
   
  if((millis() - oldTime) > 1000)    // Only process counters once per second
  {
    detachInterrupt(sensorInterrupt);
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / calibrationFactor;
    oldTime = millis();
    unsigned int frac;
   
    //lcd.clear();                    //wyczysc ekran
    lcd.setCursor(0,0);
    lcd.print("PRZEPLYW");
    lcd.setCursor(10,0);
    lcd.print(int(flowRate));
    lcd.print(" L/min   ");

    lcd.setCursor(0,1);
    lcd.print("ODZYSK");
    lcd.setCursor(10,1);
    lcd.print((int(flowRate)*60*1.16*(sensors.getTempCByIndex(0) - sensors.getTempCByIndex(1)))/1000);
    lcd.print(" kW/h ");

    lcd.setCursor(0,3);
    lcd.print("T1 ");
    lcd.print(sensors.getTempCByIndex(0));
    lcd.setCursor(10,3);
    lcd.print("T2 ");
    lcd.print(sensors.getTempCByIndex(1));


     
    pulseCount = 0;
   
    attachInterrupt(sensorInterrupt, pulseCounter, FALLING);
  }
}

void pulseCounter()
{
   pulseCount++;
}
 
Odpowiedź
  


Wiadomości w tym wątku
Przepływomierz, po dodaniu DS18B20 pomiary skaczą - przez pietrek345 - 15-01-2022, 10:37

Skocz do:


Przeglądający: 1 gości