Модуль HX711: АЦП для тензодатчиков и весов на Arduino

Модуль HX711: АЦП для тензодатчиков и весов на Arduino

Как устроен модуль HX711, как подключить к нему тензодатчик и плату Arduino и как откалибровать самодельные весы до 1 кг.

Для чего нужен HX711

Тензодатчик преобразует деформацию в электрический сигнал, но сигнал этот очень слабый, и штатного АЦП Arduino с разрешением 10 бит для него недостаточно. Модуль HX711 решает задачу целиком: на плате стоит специализированная микросхема HX711, объединяющая усилитель и 24-битный АЦП. За счёт такого разрешения достигается высокая точность измерений.

У модуля два входных канала, A и B, поэтому к нему можно подключить два тензодатчика. Для канала A доступен коэффициент усиления 64 или 128, для канала B он фиксированный — 32. Частота измерений составляет 80 Гц.

Модуль HX711 для Arduino

Характеристики

Рабочее напряжение5 В
Каналы для тензодатчиков2 (A и B)
Коэффициент усиления32, 64, 128
Дифференциальный вход±40 мВ
Разрядность АЦП24 бит
Частота измерений80 Гц
Рабочий токменее 10 мА
Рабочая температураот -40 до 85 °C
Размеры38 x 21 x 10 мм

Контакты и схема подключения

На плате два разъёма. К первому подключается измерительная часть:

  • E+ и E- — питание тензодатчиков;
  • A- и A+ — дифференциальный вход канала A;
  • B- и B+ — дифференциальный вход канала B.

Второй разъём связывает модуль с контроллером:

  • VCC — напряжение питания;
  • GND — общий контакт;
  • DT — линия данных;
  • SCK — линия синхронизации.

В примере из источника линия DT подключена к выводу A1 платы Arduino Uno (цифровой номер 15), а SCK — к выводу A0 (номер 14).

Схема соединения HX711, тензодатчика и Arduino

Сборка весов до 1 кг

Для простых весов понадобятся плата Arduino Uno, модуль HX711, один тензодатчик на 1 кг и четыре провода. Тензодатчик в данном случае — это тензорезистор, то есть резистор, сопротивление которого меняется при деформации. Он скрыт под слоем белого защитного полимера. Измерительная схема на таком датчике полумостовая: один тензорезистор расположен сверху и работает на растяжение, второй снизу — на сжатие.

Тензодатчик на 1 кг

На корпусе датчика указаны направление приложения нагрузки и максимальный вес, на который он рассчитан. Чтобы балка могла изгибаться под грузом, один её конец нужно жёстко закрепить — например, зажать в тисках.

Самодельные весы на HX711 в сборе

Калибровка

Программная часть строится на библиотеке HX711 (автор bogde, распространяется через GitHub). В скетче создаётся объект с указанием выводов DT и SCK, а коэффициент пересчёта хранится в отдельной переменной типа float.

Калибровочный скетч работает так: при запуске вызывается scale.set_scale() без параметра и scale.tare(), то есть показания обнуляются. Поэтому в момент старта на весах не должно быть груза. Далее в цикле применяется текущий коэффициент, считывается значение через get_units(), отрицательные результаты приравниваются к нулю, а вес и сам коэффициент выводятся в монитор последовательного порта на скорости 9600 бод.

После запуска на весы ставят груз известной массы, например гирю, и сравнивают показания с реальным весом. Если они расходятся, коэффициент в скетче меняют и повторяют проверку, пока результат не совпадёт. Для датчика на 1 кг из примера подошло значение 64.80; для другого экземпляра оно будет своим.

Измерение веса и возможные проблемы

Рабочий скетч отличается немногим: найденный коэффициент задаётся сразу в setup() после сброса на ноль, а в цикле берётся десять отсчётов подряд и вычисляется среднее — так показания получаются стабильнее. Результат выводится в последовательный порт в граммах.

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

← Все статьи