Страница 1 из 2

Ультразвуковой расходомер жидкости.

Добавлено: 31.05.2019{, 19:01}
EgorKa
Надоело менять механические расходомеры из Китая. Турбинки ломаются -люфт появляется через 6 месяцев.
Решил сделать ультразвуковой расходомер.
Концепция у меня простая. Применить два ультразвуковых приемопередатчика.
Закрепить на трубе.
Отправить сигнал с первого приемопередатчика на второй, вычислить время t1.
Затем, отправьте сигнал со второго приемопередатчика на первый, и рассчитать время t2.
Если поток отсутствует, то время t1 должно равняться времени t2.
Стоит вопрос выбора датчиков. Какие применить?
Форумчане, делал кто нибудь ультразвуковой расходомер жидкости на Arduino?

Ультразвуковой расходомер жидкости.

Добавлено: 31.05.2019{, 19:20}
dizzyy
а не будет как со светом и движением источника света - учитывание скорость света, направление движения источника можно игнорировать.

Ультразвуковой расходомер жидкости.

Добавлено: 31.05.2019{, 20:04}
Alias
Смотря какая точность нужна. Учитывая, что на 15см в воде приходится 100мкс, если правильно прикинул в уме, то чисто на ардуино я бы стал делать только индикатор потока, например, для защиты от сухого хода, не более того. Для более точных измерений нужны не столько датчики, сколько специально заточенные измерили времени.
Если давление не велико, то можете посмотреть, как Грачик сделал эхолот на датчике автомобильного парктроника.

Ультразвуковой расходомер жидкости.

Добавлено: 01.06.2019{, 04:33}
MTSnik
Не рекламы ради, можно попробовать использовать датчики от измерителя потока Tuf2000, ts1 или ts2. Но думаю сложновато будет. Там очень много нюансов, диаметр трубы, толщина стенки трубы, скорость прохождения звука в жидкост, расстояние между датчиками.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 00:29}
Александр_Светлый
Хм... А может пойти по другому пути, в трубу через тройник приладить тензодатчк с каким нибудь "щупом-мишенью"? То-есть вода в тройнике идёт по прямой, перпендикулярно потоку в тройник установить "шуп" тензодатчика. Жидкость двигаясь в трубе будет отклонять щуп чем быстрее - тем сильнее. Дальше вычислить расход зная диаметр трубы и скорость потока измеренную по отклонению щупа думаю будет не сложно (что то вроде диаметр помножить на отклонение, зависимость думаю будет практически или линейная) но скорее всего понадобится "эталонный" расходомер для калибровки.
А с ультразвуком мне кажется дёшево и просто не выйдет, начать хотя бы с того чем и как в жидкость излучать и принимать сигнал, то есть конструкция девайса...

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 01:38}
ViktorPetrov
Я так понимаю ультразвуковые датчики устанавливают в баках ,уровень жидкости в баке изменяется ,меняя расстояние от датчика до жидкости,зная обьем бака ,нетрудно рассчитать расход.Но для баков лучше подходят емкостные датчики уровня топлива. Для трубы лучше все таки переделать водопроводные счетчики.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 01:53}
Skull
Не, есть и уз расходомеры. вычисляется разность хода импульса в двух направлениях.
Самые надежные расходомеры что встречал- основаны на законе Фарадея. И не создают завихрений с заужениями. Но есть ограничение- жидкость должна хоть немного проводить.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 07:58}
Brand2
В медицине для определения скорости кровотока в сосудах используется Доплеровский метод измереня.
Может следует искать в этом направлении
СпойлерПоказать
dopler.jpeg

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 08:20}
fsergei70
Brand2 писал(а):
02.06.2019{, 07:58}
Доплеровский метод измереня.
Вот вариант доплеровского расходомера на 32 atmege http://avr.ru/ready/measure/mass/debet/part2

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 14:45}
EgorKa
Всем спасибо кто откликнулся.
Ребята небольшое уточнение - мне надо измерять не уровень в емкости, а измерять поток в реальном времени.
Это полив грядок и моя бабуля огородник для разных растений требует что бы в час , например, поступало 100 литров. А на другую грядку 1000л.
Ну и соответственно она регулирует поток на свое усмотрение.
В общем, сейчас на механической турбине считаю литры в минуту.

Как я немного разобрался надо от датчиков плясать.
Конечно же для грядок надо бюджетный вариант.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 15:25}
Alias
Любой счётчик для воды из хозмага будет иметь ресурс куда выше расхода на грядки при цене до 500р. Датчик к нему приделать можно хоть магнитоуправляемый, хоть оптический. А импульсы считать уже дело техники.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 16:16}
Fuji1604
Можно б/у использовать, у меня после замены 4шт лежат, ждут своего часа.

Ультразвуковой расходомер жидкости.

Добавлено: 02.06.2019{, 23:18}
bsn
Несколько лет назад попадалась эта статья: "Ультразвуковой анемометр на одной паре датчиков" Сейчас не нашёл там скетча. Но у автора, как я понял, путь от идеи до реализации пройден.
http://blog.regimov.net/%D1%83%D0%BB%D1 ... 5-hc-sr04/

Ультразвуковой расходомер жидкости.

Добавлено: 03.06.2019{, 13:04}
krom23
EgorKa писал(а):
31.05.2019{, 19:01}
Надоело менять механические расходомеры из Китая.
Купите российский, работают годами, и пофиг на каком принципе измерения он основан. Малыми деньгами обойтись здесь не прокатит.

Ультразвуковой расходомер жидкости.

Добавлено: 03.06.2019{, 14:57}
SSSergeich
bsn писал(а):
02.06.2019{, 23:18}
Несколько лет назад попадалась эта статья: "Ультразвуковой анемометр на одной паре датчиков" Сейчас не нашёл там скетча. Но у автора, как я понял, путь от идеи до реализации пройден.
http://blog.regimov.net/%D1%83%D0%BB%D1 ... 5-hc-sr04/
Там 3 кода

Первый
СпойлерПоказать

Код: Выделить всё

#include <dht.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define Trig 4
#define Echo 2
#define Trig2 8
#define Echo2 12
#define ONE_WIRE_BUS 7
#define Steps

dht DHT;

#define DHT21_PIN 0
static const float defDist  = .6985; // m
static const float defDist2 = .713; // m

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
void setup() 
{ 
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Trig2, OUTPUT);
pinMode(Echo2, INPUT);
Serial.begin(57600); 
  // Start up the library
  sensors.begin();
Serial.println("X Distance  Tds18820  Tcalc Tdht  Hum V");
} 
unsigned long impulseTime=0; 

void loop() 
{
      // READ DATA
    //Serial.print("DHT21, \t");
    int chk = DHT.read21(DHT21_PIN);
    float DHTtemp = 10; 
    float DHThum = 50;
    switch (chk)
    {
    case DHTLIB_OK:
//        Serial.print("OK,\t");
      DHTtemp =DHT.temperature; 
      DHThum = DHT.humidity;
      break;
    default:
        Serial.print("DHT Error,\t");
        break;
    }

    // DISPLAY DATA
//    Serial.print(DHThum, 1);
//    Serial.print(",\t");
    //Serial.println(DHTtemp, 1);

    sensors.requestTemperatures(); // Send the command to get temperatures DS18820

  float dist = 0;
  float dist2 = 0;
  float temp = sensors.getTempCByIndex(0); //DHTtemp;

unsigned long impulseTime=0; 
unsigned long impulseTime2=0; 
int N=250;
for (int i = 0; i <N; i++) { digitalWrite(Trig, HIGH); delayMicroseconds(10); digitalWrite(Trig, LOW); impulseTime +=pulseIn(Echo, HIGH); delay(50); digitalWrite(Trig2, HIGH); delayMicroseconds(10); digitalWrite(Trig2, LOW); impulseTime2 +=pulseIn(Echo2, HIGH); delay(50); } //float P = 101325; float P = 761 * 133.3; float M = (28.95-10.934*DHT.humidity/100*(133.3*4.579*exp(17.14*temp/(235.3+temp)))/P)/1000; float R= 8.31447; float X = 1.4 * R/M ; //X = 287; float c = sqrt( X *(temp+273.15)); dist = impulseTime * c / 1e6 /N; dist2 = impulseTime2 * c / 1e6 /N; float Speed_of_sound = defDist*N/impulseTime * 1e6; float Speed_of_sound2 = defDist2*N/impulseTime2 * 1e6; float Tcalc = sq(Speed_of_sound)/X - 273.15; float v = c- Speed_of_sound; float v2 = c- Speed_of_sound2; float v3 = sqrt(sq(v) + sq(v2)); int wd = int(atan(-v/v2)*180/3.1416); if (v>0) {wd+=90;} else {wd+=270;}

//Serial.println("X Distance  Tds18820  Tcalc Tdht  Hum V");
//Serial.println(String(impulseTime) + char(9) + String(impulseTime2));
Serial.println(String(impulseTime) + char(9) + String(impulseTime2) + char(9) + String(dist, 5) + char(9) + String(dist2, 5) + char(9) + String(temp) + char(9) + String(Tcalc) + char(9) + String(DHTtemp)+ char(9) + String(DHThum) + char(9) + String(v) + char(9) + String(v2) + char(9) + String(v3) + char(9) + String(wd));
Второй
СпойлерПоказать

Код: Выделить всё

#include <dht.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define Trig 4         // HC-SR04 №1
#define Echo 2
#define Trig2 8        // HC-SR04 №2
#define Echo2 12
#define ONE_WIRE_BUS 7 // DS18B20
#define Steps

dht DHT;

#define DHT21_PIN 0    // DHT21
static const float defDist  = .2121; // m
static const float defDist2 = .2121; // m
float Tcalc = 0;

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature. 
DallasTemperature sensors(&oneWire);
void setup() 
{ 
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Trig2, OUTPUT);
pinMode(Echo2, INPUT);
Serial.begin(57600); 
  // Start up the library
  sensors.begin();
Serial.println("X Distance  Tds18820  Tcalc Tdht  Hum V");
} 
unsigned long impulseTime=0; 

void loop() 
{
  float temp = 0;
  float DHTtemp = 0; 
  float DHThum = 50;
  // READ DHT DATA
  int chk = DHT.read21(DHT21_PIN);
  if (chk == DHTLIB_OK) 
    {
      DHTtemp =DHT.temperature; 
      DHThum = DHT.humidity;
    }
  if (sensors.getDeviceCount() > 0)
    {
      sensors.requestTemperatures(); // Send the command to get temperatures DS18820
      temp = sensors.getTempCByIndex(0); //DHTtemp;
    }
  float dist = 0;
  float dist2 = 0;

  unsigned long impulseTime=0; 
  unsigned long impulseTime2=0; 
  int N=50;
  for (int i = 0; i <N; i++)
  {

  digitalWrite(Trig, HIGH); 
  delayMicroseconds(10);
  digitalWrite(Trig, LOW);
  impulseTime +=pulseIn(Echo, HIGH);
  delay(50);
  digitalWrite(Trig2, HIGH); 
  delayMicroseconds(10);
  digitalWrite(Trig2, LOW);
  impulseTime2 +=pulseIn(Echo2, HIGH);
  delay(50);
  
  }

  //float P = 101325;
  float P = 761 * 133.3;
  float M = (28.95-10.934*DHThum/100*(133.3*4.579*exp(17.14*Tcalc/(235.3+Tcalc)))/P)/1000;  //M = 0.02895;
  float R= 8.31447;
  float X = 1.4 * R/M ;     
  Tcalc = sq((defDist+defDist2)*N/(impulseTime+impulseTime2) * 1e6)/X - 273.15;
  float c = sqrt( X *(Tcalc+273.15));
  dist = impulseTime * c / 1e6 /N;
  dist2 = impulseTime2 * c / 1e6 /N;

  float Speed_of_sound = defDist*N/impulseTime * 1e6;
  float Speed_of_sound2 = defDist2*N/impulseTime2 * 1e6;

  float v = (Speed_of_sound-Speed_of_sound2)/2;
  //float v2 = c- Speed_of_sound2;
  //float v3 = sqrt(sq(v) + sq(v2));
  //int wd = int(atan(-v/v2)*180/3.1416);
  //if (v>0) {wd+=90;} else {wd+=270;}

  Serial.println(String(impulseTime) + char(9) + String(impulseTime2) + char(9) + String(dist, 5) + char(9) + String(dist2, 5) + char(9) 
  + String(temp) + char(9) + String(Tcalc) + char(9) + String(DHTtemp)+ char(9) + String(DHThum)+ char(9) + String(M,5) + char(9) + String(v));

3-й код не нашел...

Ультразвуковой расходомер жидкости.

Добавлено: 03.06.2019{, 20:09}
DrMario
А чем не нравится датчик такого типа?
https://ru.aliexpress.com/item/1-30L/32 ... 33edEJaViv

Ультразвуковой расходомер жидкости.

Добавлено: 04.06.2019{, 10:16}
Phazz
DrMario, наверное поэтому
Надоело менять механические расходомеры из Китая.

Ультразвуковой расходомер жидкости.

Добавлено: 04.06.2019{, 15:35}
Mining
EgorKa, как альтернатива термоанемометр
Изображение

Ультразвуковой расходомер жидкости.

Добавлено: 05.06.2019{, 05:52}
Berserker
А не проще сделать магнитный подвес крыльчатки и считать импульсы любым датчиком. Датчик в принципе вечен получается.

Ультразвуковой расходомер жидкости.

Добавлено: 10.06.2019{, 16:54}
EgorKa
krom23 писал(а):
03.06.2019{, 13:04}
Купите российский, работают годами
я не знаю таких измерителей потока - задача измерять литры в минуту.
Знаю только те что считают кубы воды и они все живут только два месяца на поливе грядок. Китайские прочннее- весна и лето .
Механика не интересна надо бесконтактные.

Отправлено спустя 4 минуты 49 секунд:
Igor писал(а):
05.06.2019{, 11:30}
Зачем изобретать велосипед? Тем более для дачи. Цена вопроса 900р
не надежная конструкция, требует воду без твердых включений -воду из речки не переносит.