ДатчикиМеханика

HX711 + Load Cell

Avia Semiconductor — ADC; плата SparkFun · HX711, SparkFun SEN-13879; четырёхпроводный полный тензомост

24-битный ADC для мостового тензодатчика. Пример SparkFun 13879, UNO R3 и калибровка собственным эталонным грузом.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает HX711, SparkFun SEN-13879; четырёхпроводный полный тензомост

HX711 усиливает малое дифференциальное напряжение тензомоста и преобразует его в цифровые отсчёты. Сам ADC не знает массу в граммах: результат зависит от механики, нуля и калибровки известным грузом.

Пример использует SparkFun SEN-13879 и четырёхпроводный полный мост. Трёхпроводные половинные мосты из напольных весов требуют другой схемы объединения. Цвета проводов тензодатчиков не универсальны: определяйте E+/E− и S+/S− по документации.

Закрепите тензодатчик в соответствии с его конструкцией, не зажимая рабочую область. Груз не должен превышать паспортную нагрузку. Вибрация, перекос, температура и ползучесть меняют результат. 24-битный формат ADC не означает 24 бита полезной точности весов. Это основа учебного прибора, а не поверенные торговые весы.

Фото: SparkFun Electronics / ESPHome, CC BY 2.0. Исходный фон удалён; реальная плата пропорционально масштабирована и размещена на фоне SLDV LAB, геометрия, контакты и детали не перерисованы. Показан только усилитель HX711 SparkFun SEN-13879; тензодатчик подключается и приобретается отдельно.

Схема распиновки

Авторская схема SLDV LAB для SparkFun SEN-13879, PCB v11 с отдельными VDD и VCC. Вид со стороны компонентов, два больших конденсатора сверху. Схема относится к этой плате и не задаёт универсальную распиновку четырёхконтактных HX711-клонов. Цветовые подписи на плате не заменяют паспорт тензодатчика; E± и A± определяйте по его документации.

Источники: страница реального модуля SparkFun SEN-13879, исходная схема производителя и PCB производителя.

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

Формат результата ADC
24 бит
Частота выдачи данных
10 или 80 отсчётов/с
Усиление канала A
128 или 64; в примере 128
Усиление канала B
32
Цифровой интерфейс
DOUT и PD_SCK; не I²C и не стандартный SPI
Тензодатчик примера
Полный четырёхпроводный мост; грузоподъёмность выбирается по задаче
Питание модуля
SparkFun SEN-13879: в примере VCC и VDD подключены к 5V UNO R3; по схеме каждый вход рассчитан на 2,7–5,5 В. VCC питает аналоговую часть и мост, VDD задаёт цифровые уровни. Для контроллера 3,3 В VDD должен соответствовать 3,3 В; у безымянных модулей VCC/VDD часто не разделены. Допустимое возбуждение и нагрузку самого тензодатчика проверяйте по его паспорту.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
VCC5VSparkFun 13879: аналоговое питание; не путать с E+ моста.
VDD5VЦифровая логика UNO R3.
GNDGNDОбщая земля.
DAT / DOUTD3Вход данных UNO R3.
SCK / PD_SCKD2Выход тактирования; не аппаратный SPI.
E+ / REDExcitation+ тензодатчикаПитание моста от модуля; цвет провода уточнить по паспорту.
E− / BLKExcitation− тензодатчикаПитание моста; это не сигнальный вывод.
A+ / GRNSignal+ тензодатчикаДля ревизии SparkFun v11 по схеме; ориентироваться по A+, а не только цветовой надписи.
A− / WHTSignal− тензодатчикаЕсли знаки изменены, коэффициент калибровки может быть отрицательным; не переставляйте питание наугад.
B+, B−; YLWНе подключатьКанал B и экран в минимальном примере не используются. Если нужен экран, подключение проектируется отдельно.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги собрать весы с HX711. Уточни точный модуль, тип моста, его паспортную нагрузку/возбуждение, контроллер и механическое крепление. Основа: SparkFun 13879, полный 4-проводный мост на A, UNO R3, DAT D3/SCK D2, VCC/VDD 5 В, bogde HX711 0.7.5. Дай схему по функциям проводов без универсальных цветов, полный скетч с тайм-аутом, тарированием и калибровкой моим известным грузом. Не подставляй выдуманный коэффициент или грузоподъёмность; объясни сохранение калибровки и проверку несколькими грузами.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Библиотека
HX711 Arduino Library 0.7.5

Автор bogde; не путать с HX711_ADC и другими несовместимыми API.

Заголовок
#include <HX711.h>

В начало скетча.

Инициализация
scale.begin(3, 2, 128)

DOUT D3, SCK D2, канал A с усилением 128.

Частота
10 SPS

Штатно замкнутая RATE-перемычка SparkFun; 80 SPS увеличивает шум.

Калибровка
counts_per_gram = (loaded_raw - zero_raw) / known_grams

Определяется экспериментально для собственной механики; знак сохраняется.

Arduino UNO R3 · полный скетч

cpp
#include <HX711.h>
#include <math.h>

HX711 scale;
float zeroRaw = 0;
float countsPerGram = 0;
bool hasZero = false;

bool averageRaw(float &out) {
  long sum = 0;
  for (uint8_t i = 0; i < 10; ++i) {
    if (!scale.wait_ready_timeout(1000, 1)) return false;
    long raw = scale.read();
    if (raw <= -8388608L || raw >= 8388607L) return false;
    sum += raw;
  }
  out = sum / 10.0f;
  return true;
}

void setup() {
  Serial.begin(115200);
  Serial.setTimeout(1500);
  scale.begin(3, 2, 128);
  Serial.println(F("Empty scale: send t. Then place known mass and send c followed by grams."));
}

void loop() {
  if (Serial.available()) {
    char command = Serial.read();
    if (command == 't') {
      float raw;
      if (averageRaw(raw)) {
        zeroRaw = raw;
        hasZero = true;
        countsPerGram = 0;
        Serial.println(F("Tare done; calibrate next"));
      } else Serial.println(F("Tare failed: timeout or saturation"));
    } else if (command == 'c') {
      float grams = Serial.parseFloat();
      float raw;
      if (!hasZero || !isfinite(grams) || grams <= 0) {
        Serial.println(F("Tare first; enter positive known grams"));
      } else if (!averageRaw(raw)) {
        Serial.println(F("Calibration read failed"));
      } else {
        float factor = (raw - zeroRaw) / grams;
        if (!isfinite(factor) || fabs(factor) < 0.0001f) {
          Serial.println(F("No useful load change; check bridge and mounting"));
        } else {
          countsPerGram = factor;
          Serial.print(F("Counts_per_gram=")); Serial.println(factor, 6);
        }
      }
    }
  }
  float raw;
  if (!averageRaw(raw)) {
    Serial.println(F("HX711 timeout or saturation"));
  } else if (hasZero && countsPerGram != 0) {
    Serial.print(F("Mass_g=")); Serial.println((raw - zeroRaw) / countsPerGram, 2);
  } else {
    Serial.print(F("Raw=")); Serial.println(raw, 1);
  }
}

Полный скетч UNO R3, Arduino AVR Boards 1.8.6 и bogde HX711 0.7.5. Объявления API и схема сверены; компиляция и аппаратный тест не выполнялись. Serial Monitor: 115200 бод, окончание строки Newline. После стабилизации пустой платформы отправьте t. Положите известный груз в пределах допустимой нагрузки и отправьте c сразу с его массой в граммах: например c100 только если груз действительно 100 г. Масса не задана константой. После калибровки снимите груз и проверьте ноль, затем используйте второй известный груз. Калибровка хранится только в RAM и сбрасывается при перезапуске или новом t. Отрицательный коэффициент допустим при противоположной полярности сигнала. Усреднение 10 отсчётов на 10 SPS занимает примерно секунду; это блокирующий учебный пример. Проверяются готовность и насыщение ADC, но обрыв тензомоста может дать правдоподобные числа и требует отдельной проверки.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты