HX711: Полное Руководство — Распиновка, Подключение Тензодатчиков и Проекты на Arduino / Raspberry Pi
HX711 — специализированный 24-битный АЦП (ADC) для тензометрических датчиков (load cells). Низкий шум, программируемое усиление (32/64/128), два дифференциальных входа, последовательный интерфейс (2 провода), ультранизкое потребление. Основа всех электронных весов: кухонных, торговых, промышленных, медицинских. Разберем пины, схемы подключения и два готовых проекта: весы на Arduino и на Raspberry Pi.
Что такое HX711?
24-битный сигма-дельта АЦП с встроенным низкошумным PGA (Programmable Gain Amplifier). Назначение: усилить микровольтовый сигнал от мостовой схемы тензодатчика (обычно 1–2 мВ/В) и передать цифровое значение микроконтроллеру. Интерфейс: 2-проводной синхронный (PD_SCK — такт, DOUT — данные). Не требует программирования регистров — управление тактовыми импульсами.
Распиновка HX711 (16 пинов, корпус SOP-16 / DIP-16 модуль)
| Пин | Имя | Функция |
|---|---|---|
| 1 | VSUP | Питание стабилизатора (2.7–5.5 В) — опционально |
| 2 | BASE | Выход стабилизатора (управление внешним транзистором) — обычно NC |
| 3 | AVDD | Аналоговое питание (2.6–5.5 В) — основное питание чипа |
| 4 | VFB | Обратная связь стабилизатора — к AGND если не используется |
| 5 | AGND | Аналоговая земля |
| 6 | VBG | Опорное напряжение (bandgap) — байпас конденсатором 0.1 мкФ |
| 7 | INA- | Канал A: отрицательный дифф. вход |
| 8 | INA+ | Канал A: положительный дифф. вход |
| 9 | INB- | Канал B: отрицательный дифф. вход |
| 10 | INB+ | Канал B: положительный дифф. вход |
| 11 | PD_SCK | Цифровой вход: такт / Power-Down (HIGH > 60 мкс = sleep) |
| 12 | DOUT | Цифровой выход: последовательные данные (MSB first) |
| 13 | XO | Кварц выход / Цифровой I/O (обычно NC, используется внутренний осциллятор) |
| 14 | XI | Кварц вход / Внешний такт (обычно NC) |
| 15 | RATE | Скорость выхода: LOW = 10 SPS, HIGH = 80 SPS |
| 16 | DVDD | Цифровое питание (2.6–5.5 В) — соединить с AVDD |
На модулях (красная/зеленая плата): выведены только VCC (AVDD/DVDD), GND (AGND), INA+/INA-, INB+/INB-, PD_SCK, DOUT. Остальные — внутри.
Характеристики
- Разрядность: 24 бит (эффективное разрешение ~18–20 бит без шума).
- Усиление PGA: 128 (канал A, ±20 мВ), 64 (канал A, ±40 мВ), 32 (канал B, ±80 мВ).
- Частота выдачи: 10 SPS (RATE=0) или 80 SPS (RATE=1).
- Подавление 50/60 Гц: одновременное (common-mode rejection).
- Потребление: <1.5 мА (активный), <1 мкА (Power-Down).
- Питание: 2.6–5.5 В (обычно 3.3 В или 5 В).
- Температура: -40…+85 °C.
- Интерфейс: 2-проводной синхронный (PD_SCK, DOUT), совместим с любым MCU.
Что такое тензодатчик (Load Cell)?
Преобразователь силы/веса в электрический сигнал. Основа — металлический эластичный элемент (алюминий/сталь) с наклеенными тензорезисторами (стренг-гейджами) в мостовой схеме Уитстона (4 провода: E+, E-, S+, S-). Под нагрузкой металл деформируется → меняется сопротивление тензорезисторов → дисбаланс моста → дифференциальное напряжение на S+/S- (мВ). HX711 усиливает и оцифровывает это.
Проект 1: Весы на Arduino + HX711 + 5 кг тензодатчик
Компоненты
- Arduino Uno / Nano.
- Модуль HX711 (красный или зеленый).
- Тензодатчик 5 кг (4-проводной).
- Жесткая база + подвижная платформа + стойки/шайбы (критично!).
- Питание (USB или 5В).
Монтаж тензодатчика (важно!)
- Тензодатчик имеет стрелку направления силы. Закрепите сторону без стрелки на неподвижную базу.
- Сторону со стрелкой — на подвижную платформу (весовую панель).
- Между тензодатчиком и платами — жесткие распорки (шайбы, втулки). Без них нагрузка уйдет в базу, минуя тензодатчик — показания будут нулевыми.
- Затяните болты крепко, но не перегибайте корпус датчика.
Подключение HX711 к Arduino
| HX711 | Arduino | Провод тензодатчика |
|---|---|---|
| VCC | 5V (или 3.3V) | — |
| GND | GND | — |
| DT (DOUT) | D3 (любой цифровой) | — |
| SCK (PD_SCK) | D2 (любой цифровой) | — |
| E+ | — | Красный (питание моста +) |
| E- | — | Черный (питание моста -) |
| A+ | — | Белый (сигнал +) |
| A- | — | Зеленый (сигнал -) |
Канал B (B+/B-) оставляем свободным. RATE — на GND (10 SPS) или VCC (80 SPS).
Библиотека и код
Установите библиотеку «HX711» (автор Bogdan Necula / Andreas Motl) через Менеджер библиотек Arduino IDE.
#include "HX711.h"
const int DT_PIN = 3;
const int SCK_PIN = 2;
HX711 scale;
void setup() {
Serial.begin(115200);
scale.begin(DT_PIN, SCK_PIN);
scale.set_scale(); // калибровка ниже
scale.tare(); // обнуление
Serial.println("Готово. Положите известный вес для калибровки.");
}
void loop() {
if (scale.is_ready()) {
float weight = scale.get_units(10); // усреднение 10 замеров
Serial.print("Вес: "); Serial.print(weight); Serial.println(" г");
}
delay(200);
}
Калибровка
- Запустите скетч, дождитесь «Готово».
- Положите известный вес (например, 100 г).
- В мониторе порта увидите «сырое» значение (или вызовите
scale.get_value()). - Вычислите scale_factor = (сырое_значение_с_весом - сырое_значение_пусто) / известный_вес_в_граммах.
- В коде:
scale.set_scale(scale_factor);— перезагрузите. - Проверьте разными весами. Тара (
tare()) сбрасывает нуль.
Проект 2: Цифровые весы на Raspberry Pi + HX711
Компоненты
- Raspberry Pi (любой с 40-пиновым GPIO: 3B/3B+/4/Zero W).
- HX711 (зеленый модуль с 6 핀ми: E+, E-, A+, A-, B+, B-).
- Тензодатчик, две пластины, болты/гайки, макетка/провода.
Подключение тензодатчика к зеленому HX711
| Провод датчика | HX711 Terminal |
|---|---|
| Red (E+) | E+ |
| Black (E-) | E- |
| White (S+) | A+ |
| Green (S-) | A- |
B+/B- — не подключены. Если на модуле S+/S- вместо A+/A- — то же самое.
Подключение HX711 к Raspberry Pi GPIO
| HX711 | Raspberry Pi (BCM) |
|---|---|
| VCC | 3.3V (Pin 1 или 17) |
| GND | GND (Pin 6, 9, 14, 20, 25, 30, 34, 39) |
| SCK | GPIO 6 (Pin 31) |
| DT | GPIO 5 (Pin 29) |
ПО (Python)
- Включите SPI/I2C в
raspi-config(Interface Options) — для других датчиков, но полезно. - Установите библиотеку:
pip3 install hx711(или клонируйтеhttps://github.com/gandalf15/HX711). - Скрипт калибровки/измерения (пример):
#!/usr/bin/env python3
import time
import sys
sys.path.append('/home/pi/HX711') # если клонировали вручную
from hx711 import HX711
hx = HX711(dout_pin=5, pd_sck_pin=6)
hx.set_reading_format("MSB", "MSB")
hx.set_reference_unit(1) # временно
hx.reset()
hx.tare()
print("Калибровка: положите известный вес и нажмите Enter")
input()
val = hx.get_weight(10)
known = float(input("Введите вес в граммах: "))
ref = val / known
print(f"Reference unit: {ref}")
hx.set_reference_unit(ref)
hx.tare()
print("Готово. Измерения каждые 2 сек (Ctrl+C для выхода):")
try:
while True:
w = hx.get_weight(5)
print(f"Вес: {w:.1f} г")
hx.power_down()
hx.power_up()
time.sleep(2)
except KeyboardInterrupt:
print("Выход")
Применения HX711
- Электронные весы (кухонные, торговые, лабораторные, промышленные).
- Умные весы (IoT, BLE/Wi-Fi, логирование веса).
- Контроль уровня сыпучих материалов (баки, силосы).
- Силовые измерения: нажим, разрыв, тяга (стенды).
- Умные лифты / двери (детекция перегрузки).
- DIY: боксерская груша с измерением силы удара, умный кофейный стол (вес чашки), Raspberry Pi кухонные весы.
Заключение
HX711 + тензодатчик — стандарт де-факто для измерения веса/силы в DIY и проме. Ключ к точности: механический монтаж (жесткие распорки, правильное направление силы), стабильное питание (3.3В от LDO, не от Arduino 5V через USB), калибровка известными весами, усреднение замеров. Библиотеки для Arduino/Python/ESP делают интеграцию тривиальной. Есть вопросы по фильтрации шумов, температурной дрейфу, многоточечной калибровке — пишите.
Промышленные технологии
- Методы входной и выходной связи усилителей: емкостная, прямая и трансформаторная
- Мощность в резистивных и реактивных цепях переменного тока
- Ввод-вывод в C: stdio.h, потоки stdin/stdout/stderr, функции getchar/putchar, gets/puts, scanf/printf
- Чертеж ритейлеров: оптимизация труда и операций в пост-COVID эре
- Really Smart Box: умная коробка для IoT-мониторинга запасов
- Понимание NC-обработки: определение, процесс и ключевые преимущества
- Освоение проектирования печатных плат для Интернета вещей: Полное руководство
- Параметры солнечного элемента и характеристики PV-панели: полное руководство
- Два D-триггера 74LS74: полная справочная информация и распиновка
- Сборка Arduino ProtoShield: пошаговое руководство