Конечно, сейчас электронными весами никого не удивишь, их много, причем дешевых и сравнительно точных. Но иногда требуется узнать вес в своей поделке, или передать его куда-то для последующей обработки. Такие весы будут отличаться своей логикой. Либо, можно сделать весы с уникальным дизайном, например, ретро и т.п. Под катом описание одного из самых распространенных современных инструментов электронного измерения веса, пригодного для использования в поделках.
Тензометрический датчик (тензодатчик; от лат. 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. Можно автоматизировать какие-то процессы — например наливать напитки по весу (в том числе и из нескольких ингредиентов. Конкретно этот датчик покупался для автоматизации самогоноварения — отсечь головы от основного продукта в автоматическом режиме.
Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной.
принцип работы:
upd: нашел похожую эпюру:
эпюры продольной, перерезывающей силы и изгибающего момента
а по делу Ivan_113 прав — измерения будут не совсем корректны при такой конструкции (из-за крутящего момента в не защемлённом конце датчика), а во вторых, длина зажима тензодатчика должна быть нормирована (меньше у нижнего оранжевый упора, а то он доходит до места измерения и калибровочных отверстий и больше у верхнего, иначе рычаг будет некорректным) и в третьих, провод должен выходить из неподвижной части. Хотя это не претензии к проверочному стенду (для проверки то нормально), а к принципу построения измерения веса с такими тензодатчиками.
cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf
после доработки(смотри сообщение).
вот мой обзор на более устойчивые датчики — но я решил, что вес тоже важен
По поводу «вес важен», то это больше религиозное… :) «Сколько вешать граммов»? Когда головы кончатся? Я просто отбираю 10% голов, по 5 в каждой ректификации, и спокойно с этим живу. Первые 5% в костер, вторые 5% в оборот.
Две пары проводов соединены попарно для разделения цепей питания и контроля.
Шестипроводное подключение датчика используется при его удалённой установке или при подключении через разъём
Придется ждать папу, который и сделает эти пару движений гравера )
Хотя, в принципе — каждая HX711 поддерживает подключение двух датчиков. Но я не помню — ардуиновская библиотека умеет управлять входным мультиплексором или нет.
в любом случае не понятно как включать ЧЕТЫРЕ полумостовых датчика как в напольных весах.
Именно так они соединяются в платформенных весах среднего класса точности
Судя по плате тут соединение типа мост (черные и белые попарно соединены). Краснве провода между собой не соединены, и вероятно используются как «информационные», если можно так выразиться.
В напольных весах нужно, что бы если груз (человек) стоит не по центру а ближе к одному углу, что бы это не сказалось на измерениях.
Кстати, у меня есть напольные утопленные весы. Хочу использовать корпус и тензодатчики, их там 4шт для самодельных весов.
Мостовые имеют 4 или 6 проводов
Интересует все 4 датчика, которые в весах.
Питание 3В относительно общего провода
Дифференциальный сигнал снимается с обоих +1,5В
По такой схеме можно подключить любое чётное число трёхпроводных датчиков
Верно?
Я попытался описать конструкцию весов с которыми работал, но я только программист, я не разрабатывал весовую платформу, и это было давно, так что в моем описании что-то не сходилось.И вообще это весы для конвейера, там другая специфика, свои требования, свои заморочки в конструкции, нет смысла повторять если у Вас статические весы.При изготовлении своих весов (или замене измерителя) важно чтобы те две площадки к которым будут крепиться тензодатчики не отклонялись более чем на N мм (N смотрим в даташите на тензодатчик) при максимальном загрузке. Также есть смысл установить ограничители этих отклонений (удобно сделать винтами — винт легко подкрутить на доли мм). Иначе можно погнуть тензодатчики и в дальнейшем получать от них искаженные данные.
Если нужны одни весы то проще купить [и переделать]. Если хотите изготавливать… то все равно имеет смысл купить и посмотреть как конкуренты делают. Наши инженеры не одну версию весовой платформы сделали, пока не дошли до требуемой точности и стабильности. (Некоторые версии даже перетирались со временем) На первых версиях показания тензодатчика вообще нелинейно зависели от массы на весах, так что если хотите сами — готовьтесь к велосипедостроению и переделыванию.
Еще не забудьте что тензодатчики разными бывают, сильно отличаясь по точности. (На тех конвейерных весах самой дорогой частью по себестоимости являются как раз тензодатчики) Но вероятно это Вам не понадобиться У нас погрешность не более 1% и это хорошо для конвейерных весов, но представьте засыпали в вагон 10т, поехали взвешиваться — перегруз на 100кг — тащут вагон назад, вручную лопатами выгребают 100кг и заново едут взвешиваться. При статическом взвешивании точность гораздо выше на тех же тензодатчиках.
тем более, что проектирование системы контроля уровня, в емкости с водой, с выдачей команд исполнительным механизмам и сигнализацией — это моя рабочая рутина.
Но мне захотелось пофантазировать в этом направлении — я люблю искать, не всегда, тривиальные решения разных технических задач, причём, не обязательно с технической реализацией, просто так, для тренировки мозгов.
И потом, по вашей ссылке, простой пороговый (верхний/нижний уровень) регулятор. Разве может он сказать «металлическим голосом», человеку, который купается в душе: "Срочно смываем мыло, воды осталось три литра… 2 литра… 1 литр… всё, можно не дергаться ..." :)
на метровом расстоянии у него погрешность 3%, макс.дистанция — два метра. В бочку можно кинуть кусок пенопласта, чтобы плавал и давал лазеру лучше прицеливаться. На али — 350 рублей.
(даже если в нём двойная передозировка контроллеров;)
Если необходимо получить приличную точность, то придется учитывать гистерезис, который может быть ощутимым на таких датчиках и нелинейность.
Соответственно надо несколько раз (хотя бы парочку, но нет смысла больше 10 раз) пройтись от начала диапазона до его конца и обратно в начало, хотя бы по 5 точкам (лучше конечно по 11 и больше, иначе нелинейность не видно обычно) равномерно распределенным по диапазону. Результат получаемый АЦП в каждой точке хорошенько осреднить (чтобы шумы не мешали). Полученную таблицу обработать по методу наименьших квадратов, получив коэффициенты аппроксимирующего полинома, обычно достаточно 3 степени.
!!! Тут важно именно добавлять постепенно вес при проходе в одну сторону и снимать также постепенно вес при проходе в другую сторону. Никак иначе, в противном случае получится ерунда.
По обзору очень интересно было бы увидеть поведение при разных температурах. К примеру откалибровали хоть даже так как в обзоре при комнатной температуре, потом посмотрели на результат после охлаждения в морозилке и после нагрева феном.
У самого есть поломанные весы (вода попала в ванной в них, и хоть экранчик и показывает цифры, но на вес не реагирует). Дорожки целые вроде. Нужно делать блютуз или вайфай реикарнированную версию.