Некорректная работа сонара HC-SR04

arsi
Offline
Зарегистрирован: 28.12.2021

Добрый день!

На базе Nano, сонара HC-SR04 и модема SIM800C сделал измеритель уровня дизельного топлива в большом баке (объем 2000 л, высота 146 см). Бак стоит на улице в заглубленном в землю кирпичном кессоне. Температура в нем примерно -3. Измеритель стоит в горловине бака и смотрит строго вертикально вниз - на поверхность топлива. Измеритель принимает СМСки с настройками параметров (установка высоты бака и скорости звука, которая зависит от температуры). По СМС-запросу отправляет ответную СМС с уровнем топлива (высота бака минус расстояние от сонара до поверхности). Пока отлаживал дома - все было четко. Сотню раз уровень определялся довольно точно (ошибка 1%) в широком диапазоне (многократно менял высоту бака). Скорость звука тоже менял в ходе тестирования. Т.е. скетч работает отлично. Как только поставил в бак, первые пару часов работал нормально - показывал 110 см (проверял рулеткой), но потом стал постоянно показывать одно и тоже значение - 140 см (т.е. 6 см до поверхности). Топливо я не доливал. На этом расстоянии перед сонаром нет никаких препятствий. До ближайшей стенки бака сантиметров 35-40.

В чем может быть проблема?

SAB
Offline
Зарегистрирован: 27.12.2016

А как вы меняли скорость звука?

Вообще то в баке звук отражается не только от поверхности топлива, но и от стенок бака. И радар принимает множество отраженок.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Есть такая штука - ДУТ (датчик уровня топлива). Купил, поставил (подключил), один раз оттарировал и забыл.

SLKH
Offline
Зарегистрирован: 17.08.2015
идея использовать HC-SR04 в условиях, отличных от комнатных, представляется мне несколько сомнительной. имхо, влагостойкий датчик в баке и дополнительная герметизация платы с электроникой выглядят предпочтительней.
SLKH
Offline
Зарегистрирован: 17.08.2015

SAB пишет:

А как вы меняли скорость звука?

Вообще то в баке звук отражается не только от поверхности топлива, но и от стенок бака. И радар принимает множество отраженок.

угу. первые 2 часа от стенок не отражался, а потом начал.

SAB
Offline
Зарегистрирован: 27.12.2016

SLKH пишет:

угу. первые 2 часа от стенок не отражался, а потом начал.

Так автор даже скетч не показал. Может там в условиях стоит, что только при изменении уровня от точки отчета дергать порт. А изменения уровня жидкости , как говорит топикстартер , не менялись. И тут что то пошло не так через 2 часа , пошел замер, приведший к такому результату.

arsi
Offline
Зарегистрирован: 28.12.2021

Если бы датчик заглючил сразу, то я бы поверил в отражения от стенок бака. Но 2-3 часа он работал нормально, хотя и остыл до температуры -3. Показания с сонара считываются не постоянно, а только по запросу из Ардуино, которая опрашивает GSM-модем на предмет получения СМС. Т.е. я, находясь в другом городе, сам посылаю СМС определенного формата, которую принимает модем, обрабатывает Ардуино, считывает с датчика показания (код метода чтения указан ниже) и отправляет мне ответную СМС. Другими СМС я могу настраивать высоту бака и скорость звука. Оба параметра сохраняются в EEPROM Ардуино, так что даже после передергивания питания настройки сохраняются.

Весь бутерброд из 3х плат (Ардуино Нано, модем SIM800 и сонар HC-SR04), облитых лаком, слепленных между собой двухсторонним скотчем, наглухо замурован в силиконовый герметик. Только "глаза" сонара я ничем не защитил.

float HCSR04::DistanceFloat()
{
	unsigned long tm = 0;
	
	// Подаем сонару команду на запуск измерения
  digitalWrite(trigPin, LOW);	  // Записываем 0 в порт триггера
  delayMicroseconds(2);			  	// Ждем, пока порт переключится в 0
  digitalWrite(trigPin, HIGH);	// Записываем 1 в порт триггера
  delayMicroseconds(100);				// Ждем 10 микросекунд - команда на старт измерения
  digitalWrite(trigPin, LOW);   // Записываем 0 в порт триггера

	// Измеряем время прохождения звука и рассчитываем расстояние до преграды
  tm = pulseIn(echoPin, HIGH);	// Читаем длительность импульса из порта echo
  return (SoundSpeed*tm*Adjustment/20000);	// Возвращаем расстояние в см
}

 

arsi
Offline
Зарегистрирован: 28.12.2021

Подскажите, пожалуйста, марку влагостойкого датчика, который нормально работает в уличных условиях (от -10 до +30). Я что-то такого для Arduino не видел. Может не ультразвуковой, а с каким-то другим излучением?

SLKH
Offline
Зарегистрирован: 17.08.2015

arsi пишет:

Подскажите, пожалуйста, марку влагостойкого датчика, который нормально работает в уличных условиях (от -10 до +30). Я что-то такого для Arduino не видел. Может не ультразвуковой, а с каким-то другим излучением?

Например, https://aliexpress.ru/item/1005001967470892.html

И ещё в разных местах по поиску "парктроник" или JSN-SR04T

arsi
Offline
Зарегистрирован: 28.12.2021

SLKH пишет:

arsi пишет:

Подскажите, пожалуйста, марку влагостойкого датчика, который нормально работает в уличных условиях (от -10 до +30). Я что-то такого для Arduino не видел. Может не ультразвуковой, а с каким-то другим излучением?

Например, https://aliexpress.ru/item/1005001967470892.html

И ещё в разных местах по поиску "парктроник" или JSN-SR04T

Датчики парктроников точно не годятся - у них угол 75%, как у этого по ссылке. Все отражения от стенок бака будет ловить. Нужен узконаправленный датчик. Лучше, посмотрю в сторону ИК-дальномеров.

b707
Offline
Зарегистрирован: 26.05.2017

arsi пишет:

Лучше, посмотрю в сторону ИК-дальномеров.

лучше поплавок на штанге, проверенный десятилетиями метод.

arsi
Offline
Зарегистрирован: 28.12.2021

b707 пишет:

arsi пишет:

Лучше, посмотрю в сторону ИК-дальномеров.

лучше поплавок на штанге, проверенный десятилетиями метод.

Кто из них будет передавать мне уровень СМСкой в другой город - поплавок или штанга?

Вы, если мыслей в голове нет, лучше ничего не пишите.

b707
Offline
Зарегистрирован: 26.05.2017

arsi пишет:

Кто из них будет передавать мне уровень СМСкой в другой город - поплавок или штанга?

у вас сейчас сам УЗ-датчик СМС-ки шлет, или все-таки микроконтроллер?

Вы. если хотите отвести мое предложение - придумайте что-нить поумнее

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Поплавок с резистивным слоем, например, достаточно простое и надежное решение. В каждом (почти) баке стоит)))

SLKH
Offline
Зарегистрирован: 17.08.2015

arsi пишет:

Датчики парктроников точно не годятся - у них угол 75%, как у этого по ссылке. Все отражения от стенок бака будет ловить. Нужен узконаправленный датчик.

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

arsi
Offline
Зарегистрирован: 28.12.2021

BOOM пишет:

Поплавок с резистивным слоем, например, достаточно простое и надежное решение. В каждом (почти) баке стоит)))

Предыдущий уровнемер у меня как раз был такой - стандартный стрелочный датчик с поплавком на веревочке. Я посадил на ость стрелки переменный резистор и откалибровал. Все работало отлично до первых морозов. Внутри механизма бывает конденсат, который замерзает и датчик начинает подклинивать - поплавок не опускается вслед за топливом. Я намучился обливать механику спреем для размораживания замков с силиконовой смазкой - помогает не надолго. Поэтому и решил отказаться от механики. Но HC-SR04 тоже оказался глючный. Может такой экземпляр попался, а может он не работает на холоде и в сырости. Попробую использовать ИК-дальномер. На Ali продаются герметичные. Плюс ИК-дальномерам не нужно подстраивать скорость звука, которая меняется от 325 до 350 м/с при изменении температуры от -10 до +30.