Главная → Датчики

Тензодатчик и HX711: делаем электронные весы

16 сентября 2026 · Датчики

Почему датчику не обойтись без усилителя

Электронные весы — это пара: тензодатчик, превращающий деформацию металла в изменение сопротивления, и АЦП-усилитель, потому что сигнал датчика крошечный. Разберём ходовой комплект: балочный датчик YZC-133 и модуль HX711.

Посчитаем: у балки на 1 кг чувствительность 1 мВ/В, при питании 5 В весь диапазон укладывается в 5 мВ. А десятиразрядный АЦП Arduino различает шаг около 4,9 мВ — вся шкала датчика равна одному шагу. Поэтому между мостом и контроллером стоит HX711: усилитель с programmable gain 128 и собственным 24-битным сигма-дельта АЦП. Та же история, что с фоторезистором против BH1750: голый чувствительный элемент без обвязки бесполезен.

Как устроен тензодатчик

Внутри алюминиевой балки YZC-133 четыре тензорезистора в мост Уитстона. Один конец жёстко крепят к основанию за два отверстия, вес давит на противоположный. Алюминий упруго изгибается на микроны, резисторы растягиваются и сжимаются, мост разбалансируется — на сигнальной паре появляется напряжение, пропорциональное силе. Нелинейность — ±0,03% полной шкалы.

Провода: красный E+ и чёрный E− питают мост, белый A+ и зелёный A− — сигнальная пара. Мост питается прямо с модуля: у HX711 есть встроенный стабилизатор для датчика.

Что делает HX711

HX711 — АЦП, спроектированный под весы: усилитель с переключаемым усилением 32/64/128, 24-битный сигма-дельта АЦП, стабилизатор для моста, встроенный генератор и фильтр сетевых помех. С контроллером он общается по двум проводам, без адресов и регистров: число импульсов на PD_SCK задаёт канал и усиление следующего замера — 25 импульсов: канал A с усилением 128, 26 — канал B с усилением 32, 27 — канал A с усилением 64. Частота измерений 10 или 80 Гц — уровнем на ножке RATE.

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

Тензодатчик YZC-133, паспорт поставщика:

Параметр Значение
Пределы взвешивания 1 / 5 / 10 / 20 кг
Чувствительность 1,0 ± 0,15 мВ/В
Нелинейность, гистерезис, повторяемость по 0,03% полной шкалы
Ползучесть (5 минут под грузом) 0,05% полной шкалы
Входное / выходное сопротивление 1066 ± 20% / 1000 ± 10% Ом
Напряжение возбуждения моста 5 В (максимум 10 В)
Рабочая температура −20…+65 °C
Материал и размеры алюминий, 75×12,7×12,7 мм, 25 г

Модуль HX711, datasheet Avia Semiconductor:

Параметр Значение
Разрядность 24 бита
Канал A (тензомост) ±20 мВ при усилении 128, ±40 мВ при 64 (AVDD 5 В)
Канал B ±80 мВ, усиление 32
Частота измерений 10 или 80 Гц (ножка RATE)
Подавление сетевых помех 50 и 60 Гц одновременно
Шум на входе 50 нВ RMS (усиление 128, 10 Гц)
Питание и ток 2,6–5,5 В, до 1,5 мА; в power-down меньше 1 мкА
Выход, корпус дополнительный код 800000–7FFFFF; SOP-16, −40…+85 °C

Подключение к Arduino и ESP32

Датчик к HX711: красный E+ → клемма E+, чёрный E− → E−, белый A+ → A+, зелёный A− → A−. HX711 к Arduino Uno: VCC → 5V, GND → GND, DT → D4, SCK → D5. Библиотека — bogde/HX711 из Менеджера библиотек.

На ESP32 схема та же (DT → GPIO16, SCK → GPIO17), но модуль питайте от 3V3: при питании 5 В на DOUT будут те же 5 В, а входы ESP32 пятёрку не держат. При 3,3 В модуль работает штатно — измерение относительное, калибровка компенсирует уменьшение сигнала моста сама.

Механика здесь важнее электрики: балка работает на изгиб. Крепите её за крайние отверстия к жёсткому основанию, вес — на противоположный конец; крепёж посередине или груз прямо на балку ломает линейность.

Скетч с калибровкой по эталонному грузу

#include "HX711.h"          // bogde/HX711 (Менеджер библиотек)

const byte DT_PIN  = 4;   // DOUT модуля -> D4 (ESP32: GPIO16)
const byte SCK_PIN = 5;   // PD_SCK модуля -> D5 (ESP32: GPIO17)

HX711 scale;

void setup() {
  Serial.begin(9600);            // ESP32: Serial.begin(115200)
  scale.begin(DT_PIN, SCK_PIN);

  Serial.println(F("Снимите груз, запоминаю ноль"));
  scale.set_scale();             // множитель 1: читаем сырые тики
  scale.tare();                  // обнуление пустых весов

  Serial.println(F("Положите эталонный груз (100 г) и введите c"));
  while (!Serial.available()) {} // ждём символ в мониторе порта
  Serial.read();

  long raw = scale.get_units(10);    // среднее 10 замеров минус ноль
  Serial.print(F("Сырые тики: "));
  Serial.println(raw);

  float k = (float)raw / 100.0;      // тиков на грамм (груз 100 г)
  scale.set_scale(k);                // теперь get_units() вернёт граммы
  Serial.println(F("Готово, взвешиваю"));
}

void loop() {
  if (scale.is_ready()) {
    Serial.print(F("Вес, г: "));
    Serial.println(scale.get_units(5), 1);  // среднее по 5 замерам
  }
  delay(500);
}

Число k после калибровки зашейте прямо в скетч. Если же весы должны сами управлять нагрузкой — наливать, досыпать, отключать — схема с реле разобрана в проекте умной розетки на ESP32.

Частые ошибки

Показания прыгают на десятки грамм. Наводки сети 50 Гц. Ножку RATE посадите на GND: в режиме 10 Гц HX711 давит 50 и 60 Гц одновременно. Держите датчик рядом с модулем — длинным пусть будет хвост до контроллера. Усредняйте по 5–10 замерам.

Вес с минусом или зашкаливает. Перепутаны сигнальные провода — белый и зелёный (A+ и A−). Поменяйте их местами: для схемы это безопасно, знак просто развернётся.

DOUT молчит. Питание не дошло до модуля либо HX711 ушёл в power-down: если SCK удерживается высоким дольше 60 мкс, микросхема выключается. Лечится перезагрузкой питания; в библиотеке PD_SCK всегда возвращается в ноль.

Ноль плывёт. Ползучесть балки — 0,05% шкалы за 5 минут под грузом, плюс температурный дрейф. Не оставляйте груз на весах часами и не ставьте их к батарее; перед точным взвешиванием делайте tare.

Кладу 500 г — показывает 350. Балка закреплена не за крайние отверстия, усилие приложено не там, где рассчитывал конструктор, либо калибровка снята при другом питании модуля.

Взял балку на 1 кг, взвешиваю по три. За пределом упругости алюминий деформируется насовсем, ноль смещается и не возвращается. Берите датчик с запасом примерно вдвое от максимального груза.

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

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

Читайте дальше

Датчики

Ультразвуковой дальномер HC-SR04: обзор и подключение

Для чего он нужен HC-SR04 — ультразвуковой дальномер, с которого начинается почти каждый проект про роботов и умные вещи. Два «глаза» на…

Читать обзор →
Готовые проекты

Автополив теплицы на ESP32: датчик влажности почвы, помпа и реле

Что собираем Теплица живёт по своему расписанию: вода нужна растениям каждый день, а хозяин бывает раз в неделю. Соберём систему, которая поливает…

Читать обзор →
Дисплеи

Цветной TFT-дисплей 1.8″ на ST7735: обзор и подключение

Экран 16×2 показывает только готовые символы из своей прошивки. Этот модуль — другой жанр: 128×160 = 20 480 пикселей, и каждый закрашивается…

Читать обзор →