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

Тензодатчик с 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. Можно автоматизировать какие-то процессы — например наливать напитки по весу (в том числе и из нескольких ингредиентов. Конкретно этот датчик покупался для автоматизации самогоноварения — отсечь головы от основного продукта в автоматическом режиме.

Спасибо всем, кто дочитал этот обзор до конца, надеюсь кому-то данная информация окажется полезной.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Наверх