Зарегистрироваться

Тензодатчик с HX711 для построения своих весов и автоматизации процессов


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

Тензометрический датчик (тензодатчик; от лат. tensus — напряжённый) — датчик, преобразующий величину деформации в удобный для измерения сигнал (обычно электрический, чаще напряжение). Существует множество способов измерения деформаций: тензорезистивный, пьезоэлектрический, оптико-поляризационный, пьезорезистивный, волоконно-оптический, или простым считыванием показаний с линейки механического тензодатчика. Среди электронных тензодатчиков наибольшее распространение получили тензорезистивные датчики (именно такой используется в обозреваемом приборе).

Тензорезистивный датчик обычно представляет собой специальную упругую конструкцию с закреплённым на ней тензорезистором и другими вспомогательными деталями. После калибровки, по изменению сопротивления тензорезистора можно вычислить степень деформации, которая будет пропорциональна силе, приложенной к конструкции.

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

Вынимаем содержимое:

Данный датчик рассчитан на вес до 2х килограмм:

В центре датчика имеется характерное отверстие:

Соединение проводов с датчиком залито компаундом:

Обращаться с ним следует аккуратно, у меня один из проводков отвалился в ходе сооружения конструкции, пришлось расковыривать компаунд и припаиваться.
Проводки имеют длину порядка 22 см:

Сам датчик длиной порядка 8 см:

Для крепления датчика и измеряющего механизма имеются отверстия с резьбой:

Резьба разная на части крепления датчика и измерительного механизма (М5 и М4):

Больший диаметр отверстий предусмотрен со стороны крепления датчика (неподвижной части):


Вес датчика веса :) 29 грамм:

Платка подключения была в отдельном пакетике вместе со штырьками:

Основным элементом платы является микросхема HX711, это 24 битный аналого-цифровой преобразователь специализированный для весов, к которому подключается тензодатчик.

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

Данный набор содержит все необходимое, для создания минималистичных весов:


Получились не самые симпатичные дизайнерские весы, но нам на этом этапе будет вполне достаточно.
Как я и писал ранее, красный проводок в ходе построения просто отвалился, пришлось произвести оперативный ремонт паяльником и малярным скотчем:

К плате я припаял гребенку и проводки от датчика:

Подключение датчика производится так:

DT и SCK можно подключить к любым цифровым пинам Arduino, я использовал для тестов Arduino Nano (SCK к выводу 2, DT к выводу 3), получилось как-то так:

Для работы с датчиком существует простая библиотека HX711.

Загрузим пример, идущий с библиотекой, поправив на свои пины

#include "HX711.h"

HX711 scale;

void setup() {
  Serial.begin(38400);
  Serial.println("HX711 Demo");

  Serial.println("Initializing the scale");
  // parameter "gain" is ommited; the default value 128 is used by the library
  // HX711.DOUT	- pin #A1
  // HX711.PD_SCK	- pin #A0
  scale.begin(3, 2);

  Serial.println("Before setting up the scale:");
  Serial.print("read: \t\t");
  Serial.println(scale.read());			// print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));  	// print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight (not set yet)

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);	// print the average of 5 readings from the ADC minus tare weight (not set) divided
						// by the SCALE parameter (not set yet)

  scale.set_scale(994.68);                      // this value is obtained by calibrating the scale with known weights; see the README for details
  scale.tare();				        // reset the scale to 0

  Serial.println("After setting up the scale:");

  Serial.print("read: \t\t");
  Serial.println(scale.read());                 // print a raw reading from the ADC

  Serial.print("read average: \t\t");
  Serial.println(scale.read_average(20));       // print the average of 20 readings from the ADC

  Serial.print("get value: \t\t");
  Serial.println(scale.get_value(5));		// print the average of 5 readings from the ADC minus the tare weight, set with tare()

  Serial.print("get units: \t\t");
  Serial.println(scale.get_units(5), 1);        // print the average of 5 readings from the ADC minus tare weight, divided
						// by the SCALE parameter set with set_scale

  Serial.println("Readings:");
}

void loop() {
  Serial.print("one reading:\t");
  Serial.print(scale.get_units(), 1);
  Serial.print("\t| average:\t");
  Serial.println(scale.get_units(10), 1);

  scale.power_down();			        // put the ADC in sleep mode
  delay(5000);
  scale.power_up();
}



Данный пример при запуске устанавливает текущий вес нулевым и далее в цикле считывает все что прибавилось и выдает в консоль результат измерений. Конечно же, он выдал ерунду, так как датчик нуждается в калибровке. Для калибровки требуется предмет вес которого известен, я использовал это:

Далее согласно README к библиотеке пишем нехитрый код калибровки:
Код калибровки

#include "HX711.h"
HX711 scale(3, 2);
unsigned int weight_of_standard = 436; 

void setup() {
  Serial.begin(9600);
  scale.set_scale();
  scale.tare();
  Serial.println("GO");
  delay(10000);
  Serial.print("scale factor: ");
  Serial.println(scale.get_units(10)/weight_of_standard);
}

void loop() {}


weight_of_standard известный вес нашего предмета. Программа позволяет вычислить поправочный коэффициент, который будет использоваться при взвешивании, в нашем случае, он равен 989.

Пробуем измерять и сравнивать с «эталонными весами». Остаток свечки:



Малярный скотч:



Стружка для чистки паяльника с подставкой:




Таким образом, предмет обзора оказался рабочим, выдает то, что требуется. Если более тщательно подойти к калибровке и обеспечить большую жесткость конструкции «весов», то можно добиться неплохой точности, которой во многих случаях будет достаточно. Следует сказать, что взвешивающий элемент такого типа существует на разные диапазоны веса, и вполне можно подобрать подходящий для конкретной задачи.

На основе этого датчика можно сделать красивые весы с уникальным дизайном. Можно передавать данные взвешивания на сервер посредством WIFI или Ethernet. Можно автоматизировать какие-то процессы — например наливать напитки по весу (в том числе и из нескольких ингредиентов. Конкретно этот датчик покупался для автоматизации самогоноварения — отсечь головы от основного продукта в автоматическом режиме.

Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной.
Планирую купить +43 Добавить в избранное +72 +110
+
avatar
0
Клевые весы… только предел маловат… хотя бы до 100 кг, был бы… можно было бы за своим весом следить…
+
avatar
  • sir0ta
  • 19 января 2018, 07:01
+4
только предел маловат
Купите на больший предел. в чем проблема?
+
avatar
  • Kartus
  • 19 января 2018, 07:01
-1
А упростить конструкцию не получится? Че то мне кажется что великоват рычаг для надежной конструкции. Не пробовали просто на платформу в двух точках прикрутить и посмотреть будет измерять или нет?
+
avatar
  • yurok
  • 19 января 2018, 07:05
+3
будут, там главное подвижность средней части обеспечить и устойчивость конструкции — «эталонные весы» на таком же элементе

принцип работы:
+
avatar
+6
Сдаётся мне, что не совсем корректная картинка. Груз должен находиться над свободным концом, как в «эталонных весах», иначе создаётся ещё крутящий момент, вносящий ошибку измерения.
+
avatar
  • lkwqas
  • 19 января 2018, 11:18
+2
а мне кажется — нет, все что лежит на платформе так или иначе все равно давит на сенсор
+
avatar
+12
Да, но должно давить именно «так», а не «иначе». Сопромат сейчас уже не вспомню, но правильную картинку все же нашел.


upd: нашел похожую эпюру:

эпюры продольной, перерезывающей силы и изгибающего момента
+
avatar
  • islera
  • 19 января 2018, 13:29
+1
www.youtube.com/watch?v=vT9uBxsfLRo
а по делу Ivan_113 прав — измерения будут не совсем корректны при такой конструкции (из-за крутящего момента в не защемлённом конце датчика), а во вторых, длина зажима тензодатчика должна быть нормирована (меньше у нижнего оранжевый упора, а то он доходит до места измерения и калибровочных отверстий и больше у верхнего, иначе рычаг будет некорректным) и в третьих, провод должен выходить из неподвижной части. Хотя это не претензии к проверочному стенду (для проверки то нормально), а к принципу построения измерения веса с такими тензодатчиками.
+
avatar
  • risotto
  • 19 января 2018, 07:02
+1
Встречал где-то на Гиктаймс или Хабре статью, где автор из тензодатчика делал мощемер для велосипеда — на шатун его прикрутил).
+
avatar
+1
+
avatar
  • risotto
  • 19 января 2018, 08:38
0
точно!
+
avatar
  • ksiman
  • 19 января 2018, 07:09
0
Плата АЦП имеет прецизионный стабилизатор для питания моста тензодатчиков?
+
avatar
  • skif31
  • 19 января 2018, 07:19
0
разве его не видно? Вы фотки то посмотрите
+
avatar
  • Phisik
  • 19 января 2018, 07:27
0
А чем вариант с датчиком уровня не понравился? Стоит копейки, работает как часы. Прикинул объем, опустил в банку на нужную глубину и вперёд.
+
avatar
  • yurok
  • 19 января 2018, 07:33
+1
там по факту ацетон в банке — не все на это хорошо реагирует, да еще и доставать потом и оно где-то будет лежать или мыть его… мне кажется так проще
+
avatar
  • Surami
  • 19 января 2018, 09:08
+1
Я сам для этого использовал датчики влажности. Один для определения уровня жидкости(в том числе голов), второй для определения спиртуозности,
http://forum.homedistiller.ru/index.php?topic=108287.580#msg13215332

после доработки(смотри сообщение).
http://forum.homedistiller.ru/index.php?topic=108287.560#msg13108973
+
avatar
  • yurok
  • 19 января 2018, 09:45
+1
mySKU.me/blog/aliexpress/56072.html
вот мой обзор на более устойчивые датчики — но я решил, что вес тоже важен
+
avatar
  • Phisik
  • 19 января 2018, 10:55
+1
Использую самые простые датчики, типа того, что сгнил у вас в земле в обзоре по ссылке. И ничего с ними у меня не случилось за 10 ректификаций, думаю и за 50 не случится. В банку, куда головы пойдут, добавляю соль или соду, чтобы срабатывало наверняка и как только уровень коснется датчика (головы плохо проводят ток).
По поводу «вес важен», то это больше религиозное… :) «Сколько вешать граммов»? Когда головы кончатся? Я просто отбираю 10% голов, по 5 в каждой ректификации, и спокойно с этим живу. Первые 5% в костер, вторые 5% в оборот.
+
avatar
0
Интересная штучка
+
avatar
  • Tuks
  • 19 января 2018, 07:35
+2
Спасибо за обзор интересной вещи. Буду иметь ввиду, что может быть когда-нибудь пригодится в самоделками.
+
avatar
  • Anum
  • 19 января 2018, 08:06
0
У меня на тензодатчике шесть проводов двое синих как его подключить не знаю.
+
avatar
  • ksiman
  • 19 января 2018, 09:02
+3
Вызвонить.
Две пары проводов соединены попарно для разделения цепей питания и контроля.
Шестипроводное подключение датчика используется при его удалённой установке или при подключении через разъём
+
avatar
+1
Автор, спасибо за обзор. А вон тот конструктор металлический рекомендовать можете для детей 7 лет? Или видели что нибудь получше?
+
avatar
  • yurok
  • 19 января 2018, 08:51
+1
Не могу рекомендовать, родной отверткой почти анрил что то прикрутить
+
avatar
0
ну акромя отвертки? сами детали нормальные?
+
avatar
  • yurok
  • 19 января 2018, 09:36
0
сами нормальные, а отвертка шире чем шлиц под нее )
+
avatar
  • shaman
  • 19 января 2018, 15:41
0
Ну это чинится двумя взмахами гравёра :)
+
avatar
  • yurok
  • 19 января 2018, 15:43
0
представляю, купила мама ребенку — пришли домой — а оно не крутится… будет разочарование в конструировании у ребенка )

Придется ждать папу, который и сделает эти пару движений гравера )
+
avatar
  • klop
  • 19 января 2018, 09:04
+2
Интересная штука, возьму на заметку. Обзор хорош, плюс. Только картинку, поясняющую принцип действия, поместите в сам обзор из комента.
+
avatar
  • ailcat
  • 19 января 2018, 09:26
0
Только это — там отверстия не «поменьше» и «побольше», а с одной стороны — с резьбой М5, с другой стороны — с резьбой М4
+
avatar
  • JVS
  • 19 января 2018, 09:43
0
А как сложно объединить показания четырех датчиков?
+
avatar
  • yurok
  • 19 января 2018, 09:46
0
не сложно, если добиться равномерного распределения веса — то поровну будет
+
avatar
  • JVS
  • 19 января 2018, 09:54
+1
С распределением, думаю, проблем не будет. Я в своем доме лифт делаю — датчики 4-е штуки по углам пола кабинки. Сами датчики с Тао давно утянул, но без плат. Ардуин скока надо?
+
avatar
  • Dru4
  • 19 января 2018, 10:02
0
1 концевик по центру и все дела.
+
avatar
0
Плат-преобразователей по количеству датчиков, ардуины достаточно одной.
Хотя, в принципе — каждая HX711 поддерживает подключение двух датчиков. Но я не помню — ардуиновская библиотека умеет управлять входным мультиплексором или нет.
+
avatar
0
Просто просуммировать и всё. Имеется в виду вариант установки по углам?
+
avatar
  • yurok
  • 19 января 2018, 11:12
0
тут важно не перегрузить например если в один угол встать — остальные отрицательный вес покажут в худьшем случае )
+
avatar
  • ksiman
  • 19 января 2018, 21:18
0
А как сложно объединить показания четырех датчиков?
Если нагрузка распределяется на все четыре (по углам) — просто соединить все датчики в параллель.
Именно так они соединяются в платформенных весах среднего класса точности
+
avatar
  • Shurman
  • 19 января 2018, 11:04
0
А подключение двух датчиков для увеличения измерения веса есть возможность?
+
avatar
  • yurok
  • 19 января 2018, 11:11
0
смотря как сбалансируете — вообще можно конечно
+
avatar
  • LynXzp
  • 19 января 2018, 13:48
+1
Используйте плечо. Мы до тонны такими датчиками меряем (2х3кг) (не плечом, а параллельно датчикам часть веса уходит на металлическую конструкцию не сильно отличающуюся от датчика)
+
avatar
  • marat2
  • 19 января 2018, 14:23
0
А Вы бы не могли подробнее тему раскрыть, для неспециалиста? Как Ваша конструкция устроена? Допустим, хочется мерять нагрузки до 150кг, или даже до 300, а соответствующие датчики на али дороговаты. И если можно обойтись «маломощными», это существенно веселее :)
+
avatar
  • LynXzp
  • 19 января 2018, 15:35
+1
Ну вообще конструкции любых весов могут подойти (гуглить товарные / платформенные / сельскохозяйственные весы), если есть аналоговые то заменить измеритель на электронный, если получится, и не мучатся. Хотя сейчас почти все электронные.

Я попытался описать конструкцию весов с которыми работал, но я только программист, я не разрабатывал весовую платформу, и это было давно, так что в моем описании что-то не сходилось. И вообще это весы для конвейера, там другая специфика, свои требования, свои заморочки в конструкции, нет смысла повторять если у Вас статические весы.

При изготовлении своих весов (или замене измерителя) важно чтобы те две площадки к которым будут крепиться тензодатчики не отклонялись более чем на N мм (N смотрим в даташите на тензодатчик) при максимальном загрузке. Также есть смысл установить ограничители этих отклонений (удобно сделать винтами — винт легко подкрутить на доли мм). Иначе можно погнуть тензодатчики и в дальнейшем получать от них искаженные данные.

Если нужны одни весы то проще купить [и переделать]. Если хотите изготавливать… то все равно имеет смысл купить и посмотреть как конкуренты делают. Наши инженеры не одну версию весовой платформы сделали, пока не дошли до требуемой точности и стабильности. (Некоторые версии даже перетирались со временем) На первых версиях показания тензодатчика вообще нелинейно зависели от массы на весах, так что если хотите сами — готовьтесь к велосипедостроению и переделыванию.

Еще не забудьте что тензодатчики разными бывают, сильно отличаясь по точности. (На тех конвейерных весах самой дорогой частью по себестоимости являются как раз тензодатчики) Но вероятно это Вам не понадобиться У нас погрешность не более 1% и это хорошо для конвейерных весов, но представьте засыпали в вагон 10т, поехали взвешиваться — перегруз на 100кг — тащут вагон назад, вручную лопатами выгребают 100кг и заново едут взвешиваться. При статическом взвешивании точность гораздо выше на тех же тензодатчиках.
+
avatar
  • marat2
  • 19 января 2018, 16:06
0
Большое спасибо за развернутый ответ. Принцип понятен. Еще уточняющий вопрос — если использовали именно китайские датчики подобно указанному в обзоре — у них не было проблем с дрейфом показателей со временем? Перекалибровывать приходилось по даташиту (если там указан этот параметр) или условно «чаще»?
+
avatar
  • LynXzp
  • 19 января 2018, 16:11
0
Честно говоря понятия не имею, работал только с довольно дорогими, но АЦП зачастую и сами по себе убегают со временем. А так же с температурой (существуют АЦП с термокомпенсацией). Просто точность на пару бит снижается из-за этого. Поэтому все надо брать с запасом.
+
avatar
  • ksiman
  • 19 января 2018, 21:24
0
Используйте плечо.
Можно, но точность может пострадать — плечо само будет иметь дополнительную погрешность (включая температурную).
+
avatar
  • bakinec
  • 19 января 2018, 12:06
0
Интересная штуковина — сразу возникла мысль, как применить её на даче для контроля уровня (или, точнее, не уровня, а количества воды, хотя один чёрт) в бочке дачного душа, например. Конечно, наверно, можно применить и более специализированные решения, но мне вот вариант понравился
+
avatar
  • Madjo
  • 19 января 2018, 13:28
0
Для таких целей применяют датчики уровня, а не весы. Как вариант из поднебесной ali.onl/Px2
+
avatar
  • bakinec
  • 19 января 2018, 14:08
+1
Для таких целей применяют датчики уровня
Естественно, потому я и написал
можно применить и более специализированные решения
тем более, что проектирование системы контроля уровня, в емкости с водой, с выдачей команд исполнительным механизмам и сигнализацией — это моя рабочая рутина.
Но мне захотелось пофантазировать в этом направлении — я люблю искать, не всегда, тривиальные решения разных технических задач, причём, не обязательно с технической реализацией, просто так, для тренировки мозгов.
И потом, по вашей ссылке, простой пороговый (верхний/нижний уровень) регулятор. Разве может он сказать «металлическим голосом», человеку, который купается в душе: "Срочно смываем мыло, воды осталось три литра… 2 литра… 1 литр… всё, можно не дергаться ..." :)
+
avatar
  • Sanja
  • 19 января 2018, 13:32
+1
гораздо лучше вашу задачу решит ультразвуковой датчик расстояния, поставленный над бочкой. Абсолютно бесконтактный, т.е. будет отсутствовать коррозия.

+
avatar
  • bakinec
  • 19 января 2018, 14:19
0
А вот ваш вариант, мне понравился больше, чем предложение камрада Madjo — более точный, и главное — «аналоговый» контроль, не просто «пустая — полная». Но насчёт коррозии, есть некоторые опасения — в бочке, естественно, более влажный воздух, и если саму плату ультразвукового датчика, можно защитить каким-нибудь лаком/герметиком, то как к влажности отнесутся излучатель и приемник отраженного сигнала? Их ведь не зальешь герметиком. Но все равно, интересная идея
+
avatar
  • Sanja
  • 19 января 2018, 15:02
+2
тогда вкрутите лазерный дальномер VL53L0X:



на метровом расстоянии у него погрешность 3%, макс.дистанция — два метра. В бочку можно кинуть кусок пенопласта, чтобы плавал и давал лазеру лучше прицеливаться. На али — 350 рублей.
+
avatar
  • bakinec
  • 19 января 2018, 15:44
0
Спасибо, и за этот вариант :)
+
avatar
  • Sanja
  • 19 января 2018, 16:52
+1
такой датчик вкручивают в тыл дорогим квадрокоптерам — они по ним осуществляют автоматическую посадку. Ещё одно применение — автоматические рукомойники в общественных местах. Так что при должной изоляции их можно применять во влажных условиях.
+
avatar
  • LynXzp
  • 19 января 2018, 15:41
0
В агрессивных средах применяют еще один способ измерения — две параллельные ленты (или стержня) работают как конденсатор, по его емкости определяется уровень. Изолировать от среды можно чем угодно (только нужно оставить пространство между ними). Так же такой способ подходит для измерений уровня в запыленных контейнерах.
+
avatar
  • Sanja
  • 19 января 2018, 13:29
+1
если оторвать HX711 ногу, то частоту его работы можно очень сильно повысить: 3dtoday.ru/blogs/sanja/i-want-to-consult-about-the-installation-of-the-load-cell-weight-cell-/
+
avatar
  • Shurman
  • 19 января 2018, 13:53
+1
Для измерения уровня вот хороший проект datagor.ru/home-automation/2313-urovnemer.html, я то хотел что-то вроде электронных весов для взвешивания заполнителей для приготовления бетонной смеси (чтобы не ведрами и не лопатами), а точное взвешивание и плюс еще бы измерение влажности этих заполнителей для корректировки рецепта.
+
avatar
  • bakinec
  • 19 января 2018, 14:24
0
Спасибо, любопытный проект. По сути, практическая реализация, того про, что сказал Sanja
вашу задачу решит ультразвуковой датчик расстояния, поставленный над бочкой
+
avatar
  • tedbeer
  • 19 января 2018, 23:25
+1
Вот еще нетрадиционное использование датчика — настройка экструдера 3D принтера. По ссылке находится мой перевод. А оригинал статьи на английском тут — Airtripper Extruder Filament Force Sensor – Introduction
+
avatar
+2
Вот правильное видео с теорией (по-английски, можно помочь перевести субтитры), весы сделаны на Arduino + ESP32.
+
avatar
0
видео с котом всегда правильное!
(даже если в нём двойная передозировка контроллеров;)
+
avatar
0
Там второй контроллер на будущее, как я понял. Для включения кормушки в состав умного дома чере MQTT + NodeRed