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

На этом форуме Вы можете задать вопросы знатокам программы и автору.
EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09.03.2019{, 17:49}
Репутация: 21
Имя: Egor

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

#1

Сообщение EgorKa » 31.05.2019{, 19:01}

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

Аватара пользователя
dizzyy
Капитан
Сообщения: 752
Зарегистрирован: 24.11.2017{, 16:25}
Репутация: 37
Откуда: Червоноград
Имя: Марьян

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

#2

Сообщение dizzyy » 31.05.2019{, 19:20}

а не будет как со светом и движением источника света - учитывание скорость света, направление движения источника можно игнорировать.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

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

#3

Сообщение Alias » 31.05.2019{, 20:04}

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

MTSnik
Рядовой
Сообщения: 60
Зарегистрирован: 28.09.2017{, 12:14}
Репутация: 1
Откуда: Tashkent

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

#4

Сообщение MTSnik » 01.06.2019{, 04:33}

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

Александр_Светлый
Лейтенант
Сообщения: 355
Зарегистрирован: 12.10.2016{, 19:03}
Репутация: 2
Откуда: Краснодар

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

#5

Сообщение Александр_Светлый » 02.06.2019{, 00:29}

Хм... А может пойти по другому пути, в трубу через тройник приладить тензодатчк с каким нибудь "щупом-мишенью"? То-есть вода в тройнике идёт по прямой, перпендикулярно потоку в тройник установить "шуп" тензодатчика. Жидкость двигаясь в трубе будет отклонять щуп чем быстрее - тем сильнее. Дальше вычислить расход зная диаметр трубы и скорость потока измеренную по отклонению щупа думаю будет не сложно (что то вроде диаметр помножить на отклонение, зависимость думаю будет практически или линейная) но скорее всего понадобится "эталонный" расходомер для калибровки.
А с ультразвуком мне кажется дёшево и просто не выйдет, начать хотя бы с того чем и как в жидкость излучать и принимать сигнал, то есть конструкция девайса...
Я не флудер , просто мне есть что сказать =)

Аватара пользователя
ViktorPetrov
Лейтенант
Сообщения: 674
Зарегистрирован: 09.04.2018{, 23:56}
Репутация: 46
Имя: Виктор

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

#6

Сообщение ViktorPetrov » 02.06.2019{, 01:38}

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

Аватара пользователя
Skull
Лейтенант
Сообщения: 424
Зарегистрирован: 08.09.2015{, 16:18}
Репутация: 4
Откуда: Мариуполь

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

#7

Сообщение Skull » 02.06.2019{, 01:53}

Не, есть и уз расходомеры. вычисляется разность хода импульса в двух направлениях.
Самые надежные расходомеры что встречал- основаны на законе Фарадея. И не создают завихрений с заужениями. Но есть ограничение- жидкость должна хоть немного проводить.

Brand2
Лейтенант
Сообщения: 413
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 41
Откуда: Haifa
Имя: Alex

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

#8

Сообщение Brand2 » 02.06.2019{, 07:58}

В медицине для определения скорости кровотока в сосудах используется Доплеровский метод измереня.
Может следует искать в этом направлении
СпойлерПоказать
dopler.jpeg

fsergei70
Капитан
Сообщения: 786
Зарегистрирован: 17.11.2015{, 20:36}
Репутация: 54
Имя: Сергей

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

#9

Сообщение fsergei70 » 02.06.2019{, 08:20}

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

EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09.03.2019{, 17:49}
Репутация: 21
Имя: Egor

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

#10

Сообщение EgorKa » 02.06.2019{, 14:45}

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

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

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

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

#11

Сообщение Alias » 02.06.2019{, 15:25}

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

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

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

#12

Сообщение Fuji1604 » 02.06.2019{, 16:16}

Можно б/у использовать, у меня после замены 4шт лежат, ждут своего часа.
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню

Аватара пользователя
bsn
Лейтенант
Сообщения: 347
Зарегистрирован: 22.07.2018{, 07:24}
Репутация: 90
Откуда: Ростовская обл.
Имя: Сергей

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

#13

Сообщение bsn » 02.06.2019{, 23:18}

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

krom23
Лейтенант
Сообщения: 444
Зарегистрирован: 06.09.2015{, 15:18}
Репутация: 12
Откуда: Калуга
Имя: Андрей

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

#14

Сообщение krom23 » 03.06.2019{, 13:04}

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

SSSergeich
Капитан
Сообщения: 708
Зарегистрирован: 06.02.2016{, 11:01}
Репутация: 37
Откуда: Ярославль
Имя: Сергей

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

#15

Сообщение SSSergeich » 03.06.2019{, 14:57}

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-й код не нашел...

Аватара пользователя
DrMario
Лейтенант
Сообщения: 371
Зарегистрирован: 07.11.2016{, 13:11}
Репутация: 58
Откуда: Камень-на-Оби
Имя: Евгений
Контактная информация:

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

#16

Сообщение DrMario » 03.06.2019{, 20:09}

А чем не нравится датчик такого типа?
https://ru.aliexpress.com/item/1-30L/32 ... 33edEJaViv

Аватара пользователя
Phazz
Полковник
Сообщения: 2552
Зарегистрирован: 17.10.2016{, 15:38}
Репутация: 367
Откуда: Сургут
Имя: Анатолий

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

#17

Сообщение Phazz » 04.06.2019{, 10:16}

DrMario, наверное поэтому
Надоело менять механические расходомеры из Китая.

Mining
Сержант
Сообщения: 148
Зарегистрирован: 31.10.2016{, 15:01}
Репутация: 4
Имя: Алексей

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

#18

Сообщение Mining » 04.06.2019{, 15:35}

EgorKa, как альтернатива термоанемометр
Изображение

Berserker
Рядовой
Сообщения: 58
Зарегистрирован: 17.05.2018{, 16:13}
Репутация: 0
Имя: Александр

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

#19

Сообщение Berserker » 05.06.2019{, 05:52}

А не проще сделать магнитный подвес крыльчатки и считать импульсы любым датчиком. Датчик в принципе вечен получается.

EgorKa
Сержант
Сообщения: 217
Зарегистрирован: 09.03.2019{, 17:49}
Репутация: 21
Имя: Egor

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

#20

Сообщение EgorKa » 10.06.2019{, 16:54}

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

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

Ответить

Вернуться в «Спросить у знатоков»