HX711

dewinss
Offline
Зарегистрирован: 22.01.2016

Доброго времени суток. Подключил четыре весовых датчика мостом к hx711, по инструкции с этого сайта:
http://www.instructables.com/id/Make-your-weighing-scale-hack-using-arduino/step2/Understanding-the-sensor/

При загрузке тестового скетча, вес отображался через серийный монитор, как я понял в ADC. Поставив известный вес, я вычислил коэффициент, и умножил на нужное число(просто домножив вывод в скетче). При взвешивании веса (110 грамм), результат постоянно отличается и колеблется. В чем может быть проблема? Возможно плохой контакт? И как нормально сделать привидение?

dmitron1036
Offline
Зарегистрирован: 10.01.2016

ээээ...1) без оу подключать мост к АЦП не корректно. 2) Изучайте источник погрешности АЦП.

dewinss
Offline
Зарегистрирован: 22.01.2016

Как я понял необходимо усреднять значение в скетче? Измерять раз 20 подряд и просто выводить среднее, тогдла такого разброса не будет. Это так нужно делать?

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Если арифметика целочисленная, а величины невелики, то правильнее накапливать несколько замеров суммированием и под конец делить на количество замеров. Если замеры кратны степени 2, то делить можно будет сдвигом, что существенно шустрее.

Если величины замеров велики в среднем и есть риск переполнения при сложениях, то правильнее делать "бегущее среднее", добавляя 1/N от текущего замера.

Иногда полезно и то и другое: накапливаем суммированием 2,4 замера и потом добавляем их алгоритмом бегущего среднего ..

Иногда требуется отбрасывать из усреднения заведомо ошибочные результаты, особенно когда датчик может тупо глукнуть и выдать "стандартное значение". Но тут часто надо уметь верно классифицировать это "стандартное значение". Так, к примеру замер расстояний - датчик может выдать "таймаут" как при состоянии "очень далеко", так и в случае сбоя .. у меня: 1 раз - сбой, 2-4 раза подряд - "далеко".

Каких-то единых, общих рекомендаций нет. Но надо помнить, что количество замеров улучшают точность от "белого шума" примерно в корневой зависимости. То есть 4 замера снижают шумы в 2 раза.

dewinss
Offline
Зарегистрирован: 22.01.2016

Огромное спасибо за информацию.

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Допишусь сюда же.. Тоже возникла задача подключения к ардуине тензодатчиков из кухонных весов. Там 4 тензодатчика, соединенных по схеме топикстартера. Вобщем подключил через HX711 по инструкции, взятой отсюда http://www.naylampmechatronics.com/blog/25_Tutorial-trasmisor-de-celda-de-carga-HX711-Ba.html . Откалибровал на весе 2 кг. Всё хорошо, но! Значения очень "плавающие". То есть разбег измерений +/- 15-20 грамм. Во время включения вес показывается 0.000 кг, а дальше начинает расти с каждой секундой до значения 78-80 грамм, а дальше медленней, но продолжает расти. Для меня это плохо. Нужна точность +/- 2 грамма. 

Мои мысли почему так происходит:

1) Помехи. Возможно на входе в АЦП НХ711 появляются посторонние сигналы в проводах тензодатчиков. Может попробовать заэкранировать провода?

2) слишком большой коэффициент усиления, и, как следствие, большой разбег выходного сегнала. Что-то про это писали вот тут https://forum.arduino.cc/index.php?topic=226314.0 но я не на столько силен в английском (хром тоже тот ещё переводчик).

Вобщем прошу помощи (((

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

а дальше начинает расти с каждой секундой до значения 78-80 грамм

Тут возможен прогрев тензодатчика. Попробуйте:

а) Калибровать после прогрева.

б) Использовать меньшее напряжение подаваемое на мостовую схему.

в) Питать мост и измерять в импульснм режиме. Припустим 10 раз/с по 10-20 мс.

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

а) Про прогрев не думаю, что он настолько долгий. Ведь в весах это происходит за пару секунд. И уже сделал задержку калибровки примерно на 5 секунд. Не помогает. Вес растёт примерно в течении 2-х минут, затем, вроде как останавливается.

б) Использовал 5В и 3,3В (от ардуины) результат одинаковый.

в) А вот тут поподробнее можно? Не совсем понял как это реализовать? Посредством програмного кода (скетча)?

Okmor
Okmor аватар
Offline
Зарегистрирован: 16.10.2015

а) Есть тензодатчики с термокомпенсацией и без нее. Я не работал с обычными датчиками, но много работал с датчиками промышленного исполнения стоимостью от 100$. Так вот на них обязательный прогрев 2-5 минут. Боюсь, что проблема именно в прогеве тензорезисторов. Еще заметил, что дешевые датчики "плывут" со временем. Некоторые при включении 2-5 минут, некоторые при постоянной нагрузке за сутки.

б) Для поднятия тосности измерения, некоторые приборы поднимают напряжение подаваемое на измерительный мост. Отсюда следует следующий пункт:

в) При повышеном напряжении питания , происходит нагрев тензорезисторов. Потому питание (и измерение) производят импульсами по несколько милисекунд. За это время датчик не успевает нагреватся и держит стабильную температуру.

 

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Вобщем добился таки точности 2 грамма следующим образом.

1) Заэкранировал НХ711. По колхозному обмотал изолентой а поверх него фольгу и подсоединил на общую землю.

2) Укоротил по минимуму провода на тензодатчиках и припаял экранированный провод от USB удленителя. Экран также присоединил к земле.

3) также фольгой заэкранировал и весы.

4) подал на мост напряжение 3,3 вольта.

5) В скетче добавил время "на прогрев" 10 секунд. Т.е. обнуляю датчики, жду 10 секунд и ещё раз обнуляю. Только пришлось по новой градуировать контрольным весом в 2 кг.

 

P.S. а датчики всё-таки "ползут".. В состоянии покоя весы за 10 минут потяжелели на 2 грамма.

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Теперь точность 1 грамм! И датчики не ползут. Уменьшил коэффициент усиления с 128 на 64. Откалибровал по новой и заработало.

repin_anton
Offline
Зарегистрирован: 09.06.2016

Пожалуйста опишите как вы изменили коэфициент усиления. Какой библиотекой пользовались?

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Да там всё просто. В стандартной библиотеке HX711-master в файле HX711.cpp всё про это написано.

Когда в скетче прописываются параметры АЦП надо указать коэффициент усиления (у НХ711 это 128 и 64 на канале А и 32 на канале В). У меня это выглядит так:

#include <HX711.h>

#define DOUT  A1
#define CLK  A0

HX711 weight (DOUT, CLK);
HX711 scale (A1, A0, 64); // В данном случае 64 как раз и характеризует коэффициент усиления

Правда могу ошибаться.. Во всяком случае у меня работает.

Кстати ещё есть момент в самом АЦП. Есть которые работают на 10 Гц, есть на 80. Сначала я использовал тот что на 10. он просто ужасен. Потом из Китая заказал экранированный Красный НХ711 на 80 Гц, вот с ним полёт вообще отличный. С ним точность до грамма без проблем.

repin_anton
Offline
Зарегистрирован: 09.06.2016

Дело в том что последняя версия arduino ide предлогает мне скачать библиютеку с точно таким же названием, однако она другую (пины для передачи данных по другому задаются) и мне почемуто не попадалась пока такая библиотека как вы описываете. Может у вас осталась ссылка именно на эту библиотеку?

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Я отсюда скачивал. Вроде эта https://github.com/bogde/HX711

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуй по этой схеме подключить. питание не 3.3В а с платы

и еще один вариант. у нижних по схеме синий с черным поменять. если есть возможность конечно

хотя для проверки можно попробовать запитать схему и от 3.3В. итого 4 варианта. экранирование оставить как есть

еще вариант по китайской схеме. итого 6 вариантов

repin_anton
Offline
Зарегистрирован: 09.06.2016

У меня тензодатчик с 4-мя проводами.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

repin_anton пишет:
У меня тензодатчик с 4-мя проводами.

а я для Jackson_KHV писал раз у него схема уже собрана

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

Да у меня всё работает, так-то )) Четыре трехпроводных датчика собраны как раз по этой схеме. На питание подано 3.3 В с Ардуины, а на питание АЦП подано 5 В.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Jackson_KHV пишет:

Да у меня всё работает, так-то )) Четыре трехпроводных датчика собраны как раз по этой схеме. На питание подано 3.3 В с Ардуины, а на питание АЦП подано 5 В.

почему не с e+ e-? проверял и получилось хуже?

Jackson_KHV
Offline
Зарегистрирован: 15.02.2016

jeka_tm пишет:

почему не с e+ e-? проверял и получилось хуже?

Да, проверял. У меня хуже. Там, правда, как то можно регулировать напряжение, но я не стал заморачиваться. Подал 3.3 с ардуино, полет нормальный.

Тем более для моих тензодатчиков 3.3 В "родное" напряжение. 

Andrey86
Offline
Зарегистрирован: 06.10.2017

Здраствуйте!

А почему выставлая коэфициент  усиления (64 или 128) эффект виден только используя функцию:
scale.read_average(20);
Почему на однократное щитавание нет никакова эффекта (функция -  scale.read();)?
Да и при измерение усредненного значения значение ADC не становится меньше два раза (у меня в конкретной ситуации при GAIN=64 ADC=94750 а при GAIN=128 ADC=164000).
Библиотеку изучал, но в лучшем случае получались теже результаты.

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Андрей, доброго времени суток!

А вы какой библиотекой чтения HX711 пользуетесь? Дело в том, что их в сети море, но все кривые (в чем-то). У некоторых GAIN только для виду - ничего не переключает по жизни.

П. 

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Andrey86 пишет:

Здраствуйте!

А почему выставлая коэфициент  усиления (64 или 128) эффект виден только используя функцию:
scale.read_average(20);

P.S. В целом... с Gain = 64 и 32 АЦП работает заведомо хуже - см. даташит.
Необходимость в них возникает только если при усилении 128 сигнал выходит за измеряемый диапазон, что очень нестандарно. т.е. оно вам точно надо? )))