От мобилни телефони до цифрови камери
pipilica - майстор
Сътворих един топломер от водомер с монтиран хол датчик и два МСР9701 на входящата и изходящата вода на един радиатор, кода е малко от нета малко от мен и работи почти чудесно.
Тъкмо да публикувам въпроса и реших да пробвам малко нов код и то взе че се получи, не знам дали е правилния код но работи и помни последните показания при спиране на водата и при намаляване на температурната разлика.
Ето кода

Код: Избери всички

volatile int flow_frequency; // Measures flow sensor pulses
// Calculated litres/hour
 float vol = 0.0,l_minute;
unsigned char flowsensor = 2; // Sensor Input
unsigned long currentTime;
unsigned long cloopTime;
#include <LiquidCrystal_I2C.h>

int decimalPrecision = 1;
int sensorPin0 = A0;
int sensorPin1 = A1;
int temperature0 = 0;
int temperature1 = 0;
int E = 0;
int Ehi = -1;


//define I2C address......
LiquidCrystal_I2C lcd(0x27, 20, 4);
void flow () // Interrupt function
{
   flow_frequency++;
}
void setup()
{
  lcd.init();
  lcd.clear();
  lcd.backlight();
   pinMode(flowsensor, INPUT);
   digitalWrite(flowsensor, HIGH); // Optional Internal Pull-Up
   Serial.begin(9600);
   
   attachInterrupt(digitalPinToInterrupt(flowsensor), flow, RISING); // Setup Interrupt
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Water Heat Meter");
   lcd.setCursor(0,1);
   lcd.print("Home Made");
   currentTime = millis();
   cloopTime = currentTime;
}
void loop ()
{
   float E;
  float Ehi;
   float temperature0 = 0;
        temperature0 = (analogRead(sensorPin0) * 5 / 1024.0) - 0.4;
        temperature0 = temperature0 / 0.0195;
  float      temperature1 = 0;
        temperature1 = (analogRead(sensorPin1) * 5 / 1024.0) - 0.4;
        temperature1 = (temperature1 / 0.0195)+0.6;
    
    
    
   currentTime = millis();
   // Every second, calculate and print litres/hour
   if(currentTime >= (cloopTime + 1000))
   {
    cloopTime = currentTime; // Updates cloopTime
    if(flow_frequency != 0){
      // Pulse frequency (Hz) = 3Q, Q is flow rate in L/min.
      l_minute = (flow_frequency / 0.58); // (Pulse frequency x 60 min) / 3Q = flowrate in L/hour
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print(l_minute);
      lcd.print(" L/M");
      l_minute = l_minute/60;
      lcd.setCursor(0,1);
      vol = vol +l_minute;
      lcd.print("Vol:");
      lcd.print(vol);
      lcd.print(" L");
      lcd.setCursor(0,2);
     lcd.print("T Low ");
     lcd.print(temperature0,decimalPrecision);
     lcd.setCursor(10,2);
     lcd.print(" T Hi ");
     lcd.print(temperature1,decimalPrecision);
  lcd.setCursor(0,3);
  E =  (temperature1 - temperature0) * 0.001163 * vol;
  if (E > Ehi) Ehi = E; 
  lcd.print("Energy  ");
  lcd.print(Ehi);
  lcd.print(" kW");
      
      
      
      flow_frequency = 0; // Reset Counter
      Serial.print(l_minute, DEC); // Print litres/hour
      Serial.println(" L/Sec");
    }
    else {
      Serial.println(" flow rate = 0 ");
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print( flow_frequency );
      lcd.print(" L/M");
      lcd.setCursor(0,1);
      lcd.print("Vol:");
      lcd.print(vol);
      lcd.print(" L");
      lcd.setCursor(0,2);
     lcd.print("T Low ");
     lcd.print(temperature0,decimalPrecision);
     lcd.setCursor(10,2);
     lcd.print(" T Hi ");
     lcd.print(temperature1,decimalPrecision);
  lcd.setCursor(0,3);
  E =  (temperature1 - temperature0) * 0.001163 * vol;
  if (E > Ehi) Ehi = E;
  lcd.print("Energy  ");
  lcd.print(Ehi);
  lcd.print(" kW");
     

    }
   }
}
brum - майстор
Би ли споделил схемата? Ще помогне на желаещите да повторят проекта ти :) .

Какво целиш да постигнеш с устройството? Да мериш текущата мощност или да събираш данните за мощността за да можеш да генерираш графики и да анализираш консумацията?

Притеснява ли те загуба на данни при спиране на тока? Или това не е проблем за целите които си поставил?
pipilica - майстор
Идеята е да видя колко енергия отива за отоплението е единя оранжер който е около 40-45 квадрата, поликарбонат 10мм, отоплението е с голям воден радиатор от 2.1 турбо дизел както си е с двете перки.
Схемата е по фабричен топломер, само че при мен е домашна изработка. На сух водомер съм монтирал хол датчик от РС вентилатор 12 волтов, ардуино нано и два датчика МСР9701, кода е в предния ми пост. Захранването е с литиева батерия която изкарва една нощ така че и да спре тока не ми е проблем.
pipilica - майстор
Може пък да ви е интересно.
Изображение

Изображение

Изображение
Vectra - специалист
Браво! Добър проект!.=D>
Само да добавя, че ако някой няма водомер за преправяне или не му се играе, китайците продават готови дебитомери с датчик на Хол за няколко лева....

И една идея за надграждане на проекта:
Ако на мястото е наличен интернет и за база вместо Ардуино се ползва ESP8266 с малки промени по кода ще може данните да се следят и от мобилния.
Само че , ще трябва да се сменят температурните датчици на DS18B20, щото ESP-то има само един аналогов вход. Ако подмяната на датчиците не е желателно, може да се премине нпараво на ESP32.
pipilica - майстор
Идеята на проекта е да събера малко инфо в последните дни с отопление колко енергия отива за тоя оранжер, в понеделник ми пристига и фабричен водомер с импулсен изход който ще монтирам на другия оранжер. Цялата работа е защото мисля от следващата зима да сменявам горивото и трябва да знам колко енергия отива, до сега буфкам Донбаски на 385лв/т но тая есен ме изненадаха с некви 800лв и то за не пресяти, а ся се очаква и да ги няма вече.
То и за това системата е в насипен вид за няколко дена за измерването.
brum - майстор
Датчика за температурата на вода как е монтиран? Че при мен правих експеримент с датчик монтиран върху метална муфа и топлоизолация отгоре. И резултата е, че газовият котел показваше с 5-6 градуса по-висока температура на топлоносителят от датчика.
pipilica - майстор
Топлия датчик е на холедровата гайка на водомера с изолация отгоре а студения е върху главата на един винт който е завит в тръбата, не е правилно но беше най-лесния и бърз начин да го монтирам.

Тема "Ардуино топломер" | Включи се в дискусията:


Сподели форума:

Бъди информиран. Следвай "Направи сам" във Facebook:

Намери изпълнител и вдъхновения за дома. Следвай MaistorPlus във Facebook: